<< Masa.20101109-setup-eshop | 2010 | Masa.20101105-create-patinfo-ebook >>
Files necessary to run a converter example (from yaml data to epub file)
Test 1. Converter script (converter_for_firefox.rb)
#!/usr/bin/env ruby19
$: << File.expand_path('../lib', File.dirname(__FILE__))
require 'ebps'
require 'ebps/util/mail'
def identify_module namespace, name
module_name = name.gsub /(^|_)./ do |match| match.upcase.delete '_' end
namespace.const_get module_name
end
begin
log = []
# Read modules
import_from = EBPS.config.import_from
export_to = EBPS.config.export_to
require "ebps/conversion/#{import_from}"
require "ebps/conversion/#{export_to}"
importer = identify_module EBPS::Conversion, import_from
exporter = identify_module EBPS::Conversion, export_to
# Import process
model = []
source_path = EBPS.config.source
inputs = ""
if File.ftype(source_path) == 'directory'
inputs << "Input files for conversion:"
Dir.foreach(source_path) do |name|
path = File.join source_path, name
if File.ftype(path) == 'file'
inputs << "\n" << path
File.open(path) do |fh|
model.concat importer.import(fh, path)
end
end
end
else
inputs << "Input file for conversion: " << source_path
source = File.open(source_path)
model = importer.import source, source_path
end
log.push inputs
# Export process
target = EBPS.config.target
exporter.export model, target
log.push sprintf("The Ebook %s was generated and stored in %s",
File.basename(target), File.dirname(target))
rescue StandardError => err
log.push err
ensure
EBPS::Util::Mail.notify log
end
2. Configuration file (config.yml)
--- smtp_server: smtp_server smtp_user: username@domain smtp_pass: 'password' report_to: - email_address source: ./data.yml target: ./sample.epub import_from: import_module_sample export_to: epub language: de title: Firmenliste Schweiz
3. Data file (data.yml)
--- !ywesee,2010/CompanyInfo
oid: 123456789
descriptions: !ywesee,2010/SimpleLanguage::Descriptions
de: !ywesee,2010/CompanyInfo2010
name: ywesee GmbH
short_description: !ywesee,2010/Text::Chapter
heading: ywesee - intellectual capital connected
sections: []
general_information: !ywesee,2010/Text::Chapter
heading: About ywesee GmbH
sections:
- !ywesee,2010/Text::Section
subheading: ""
paragraphs:
- !ywesee,2010/Text::Paragraph
formats:
- !ywesee,2010/Text::Format
values:
- :italic
start: 0
end: 9
- !ywesee,2010/Text::Format
values: []
start: 10
end: -1
text: "ywesee GmbH is an OpenSource Software company with a bias for OpenStandards and a dedicated focus on the HealthCare industry."
preformatted: false
- !ywesee,2010/Text::Paragraph
formats:
- !ywesee,2010/Text::Format
values:
- :italic
start: 0
end: 11
- !ywesee,2010/Text::Format
values: []
start: 12
end: -1
text: "Web site: http://www.ywesee.com"
preformatted: false
address_form: !ywesee,2010/Text::Chapter
heading: Kontakt zu ywesee
sections:
- !ywesee,2010/Text::Section
subheading: "Address"
paragraphs:
- !ywesee,2010/Text::Paragraph
formats:
- !ywesee,2010/Text::Format
values: []
start: 0
end: -1
text: "Winterthurerstrasse 52, 8006 Zürich, Schweiz."
preformatted: false
4. Import module (import_module_sample.rb)
require 'ebps/text/document'
require 'yaml'
module EBPS
YAML.add_domain_type 'ywesee,2010', 'CompanyInfo' do |type, val|
if descr = val.delete('descriptions')
doc = descr[EBPS.config.language]
doc.metadata.update val
doc
end
end
YAML.add_domain_type 'ywesee,2010', 'CompanyInfo2010' do |type, val|
chapters = %w{short_description general_information address_form}
Conversion::ImportModuleSample.assemble_document chapters, val
end
YAML.add_domain_type 'ywesee,2010', 'Text::Chapter' do |type, val|
chp = Text::Chapter.new
chp.heading << val['heading']
Conversion::ImportModuleSample.encode chp.heading
chp.paragraphs.concat val['sections'].flatten.compact
chp
end
YAML.add_domain_type 'ywesee,2010', 'Text::Section' do |type, val|
paragraphs = []
if (txt = val['subheading']) && !txt.empty?
sh = Text::Subheading.new
sh << txt
Conversion::ImportModuleSample.encode sh.text
paragraphs << sh
end
paragraphs.concat val['paragraphs']
paragraphs
end
YAML.add_domain_type 'ywesee,2010', 'Text::Paragraph' do |type, val|
par = Text::Paragraph.new
par << val['text']
Conversion::ImportModuleSample.encode par.text
par.formats.replace val['formats']
if val['preformatted']
par.formats.each do |fmt|
fmt.values << 'pre'
end
end
par
end
YAML.add_domain_type 'ywesee,2010', 'Text::Format' do |type, val|
fmt = Text::Format.new
fmt.values = val['values']
fmt.start = val['start']
fmt.end = val['end']
fmt
end
YAML.add_domain_type 'ywesee,2010', 'SimpleLanguage::Descriptions' do |type, val|
val
end
module Conversion
module ImportModuleSample
def self.import string_or_io, path=nil
collection = {}
YAML.each_document string_or_io do |doc|
if doc
collection.store Digest::MD5.hexdigest(doc.to_s), doc
end
end
## apparently we have some nil-values here (?)
collection.values.compact
end
def self.assemble_document chapters, yaml_value
doc = Text::Document.new
doc.title = Conversion::ImportModuleSample.encode(yaml_value['name'])
chapters.each do |name|
if chapter = yaml_value[name]
doc.add_chapter chapter
end
end
doc
end
def self.encode txt
txt.force_encoding 'UTF-8'
txt
end
end
end
end
5. Export module (lib/ebps/convertion/epub.rb)
Run
masa@masa ~/ywesee/ebps/example $ ruby1.9 ./converter_for_firefox.rb config="./config.yml"
Result

Commit
Emails
References
Install and test log
masa@masa ~/ywesee/bbmb $ sudo ruby setup.rb
Passwort:
- - CONFIGURE - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/usr/lib64/ruby/1.8/yaml/rubytypes.rb:147:in `is_binary_data?': undefined method `>' for nil:NilClass (NoMethodError)
from /usr/lib64/ruby/1.8/yaml/rubytypes.rb:166:in `to_yaml'
from /usr/lib64/ruby/1.8/yaml.rb:391:in `call'
from /usr/lib64/ruby/1.8/yaml.rb:391:in `emit'
from /usr/lib64/ruby/1.8/yaml.rb:391:in `quick_emit'
from /usr/lib64/ruby/1.8/yaml/rubytypes.rb:165:in `to_yaml'
from /usr/lib64/ruby/1.8/yaml/rubytypes.rb:41:in `node_export'
from /usr/lib64/ruby/1.8/yaml/rubytypes.rb:41:in `add'
from /usr/lib64/ruby/1.8/yaml/rubytypes.rb:41:in `to_yaml'
... 12 levels...
from setup.rb:1245:in `__send__'
from setup.rb:1245:in `run'
from setup.rb:1193:in `run'
from setup.rb:1345
Notes
masa@masa ~/ywesee/bbmb $ sudo ruby1.9 setup.rb
- - CONFIGURE - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Configuration saved.
- - INSTALL - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* bin -> /usr/bin
* lib -> /usr/lib64/ruby/site_ruby/1.9.1
masa@masa ~/ywesee/bbmb $ ls
bin InstalledFiles lib LICENSE SetupConfig setup.rb test
masa@masa ~/ywesee/bbmb $ ruby1.9 test/suite.rb
test/suite.rb:10:in `require': no such file to load -- test/model/test_customer.rb (LoadError)
from test/suite.rb:10:in `block in <main>'
from /usr/lib64/ruby/1.9.1/find.rb:41:in `block in find'
from /usr/lib64/ruby/1.9.1/find.rb:40:in `catch'
from /usr/lib64/ruby/1.9.1/find.rb:40:in `find'
from test/suite.rb:8:in `<main>'
Notes
masa@masa ~/ywesee/xmlconv $ sudo ruby1.9 setup.rb
- - CONFIGURE - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Configuration saved.
- - INSTALL - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* bin -> /usr/bin
* lib -> /usr/lib64/ruby/site_ruby/1.9.1
* data -> /usr/share
masa@masa ~/ywesee/xmlconv $ ruby1.9 test/suite.rb
/home/masa/ywesee/xmlconv/test/mock.rb:19:in `require': no such file to load -- runit/error (LoadError)
from /home/masa/ywesee/xmlconv/test/mock.rb:19:in `<top (required)>'
from /home/masa/ywesee/xmlconv/test/test_i2/document.rb:9:in `require'
from /home/masa/ywesee/xmlconv/test/test_i2/document.rb:9:in `<top (required)>'
from test/suite.rb:12:in `require'
from test/suite.rb:12:in `block (2 levels) in <main>'
from test/suite.rb:10:in `foreach'
from test/suite.rb:10:in `block in <main>'
from test/suite.rb:7:in `foreach'
from test/suite.rb:7:in `<main>'
Notes
masa@masa ~/ywesee/xmlconv $ cd ../xmlconv2/
masa@masa ~/ywesee/xmlconv2 $ sudo ruby1.9 setup.rb
- - CONFIGURE - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Configuration saved.
- - INSTALL - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* bin -> /usr/bin
* data -> /usr/share
masa@masa ~/ywesee/xmlconv2 $ ruby1.9 test/suite.rb
/home/masa/ywesee/xmlconv2/test/mock.rb:19:in `require': no such file to load -- runit/error (LoadError)
from /home/masa/ywesee/xmlconv2/test/mock.rb:19:in `<top (required)>'
from /home/masa/ywesee/xmlconv2/test/test_conversion/bdd_geh.rb:11:in `require'
from /home/masa/ywesee/xmlconv2/test/test_conversion/bdd_geh.rb:11:in `<top (required)>'
from test/suite.rb:12:in `require'
from test/suite.rb:12:in `block (2 levels) in <main>'
from test/suite.rb:10:in `foreach'
from test/suite.rb:10:in `block in <main>'
from test/suite.rb:7:in `foreach'
from test/suite.rb:7:in `<main>'
Notes
Log
masa@masa ~/ywesee/bbmb $ ruby1.9 bin/bbmbd
bin/bbmbd:3: warning: variable $KCODE is no longer effective; ignored
/usr/lib64/ruby/site_ruby/1.9.1/bbmb/html/util/known_user.rb:4:in `require': no such file to load -- sbsm/user (LoadError)
from /usr/lib64/ruby/site_ruby/1.9.1/bbmb/html/util/known_user.rb:4:in `<top (required)>'
from /usr/lib64/ruby/site_ruby/1.9.1/bbmb/util/server.rb:5:in `require'
from /usr/lib64/ruby/site_ruby/1.9.1/bbmb/util/server.rb:5:in `<top (required)>'
from bin/bbmbd:10:in `require'
from bin/bbmbd:10:in `<main>'
Install sbsm
masa@masa ~/ywesee/ruby19/sbsm $ sudo ruby1.9 setup.rb - - CONFIGURE - - - - - - - - - - - - - - - - - - - - - - - - - - - - Configuration saved. - - INSTALL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * lib -> /usr/lib64/ruby/site_ruby/1.9.1 * data -> /usr/share
Run bbmbd again
masa@masa ~/ywesee/ruby19/bbmb $ ruby1.9 bin/bbmbd bin/bbmbd:3: warning: variable $KCODE is no longer effective; ignored /usr/lib64/ruby/gems/1.9.1/gems/character-encodings-0.4.1/lib/encoding/character/utf-8.rb:5:in `require': no such file to load -- encoding/character/utf-8/utf8 (LoadError)
Install character-encodings => failed
masa@masa ~/ywesee/ruby19/bbmb $ sudo ruby1.9 /usr/bin/gem install character-encodings
Building native extensions. This could take a while...
ERROR: Error installing character-encodings:
ERROR: Failed to build gem native extension.
/usr/bin/ruby1.9 extconf.rb
extconf.rb:4: invalid multibyte char (US-ASCII)
extconf.rb:4: invalid multibyte char (US-ASCII)
extconf.rb:4: syntax error, unexpected $end, expecting keyword_end
checking_for "‘#{opt}’ option to compiler" do
^
Gem files will remain installed in /usr/lib64/ruby/gems/1.9.1/gems/character-encodings-0.4.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.9.1/gems/character-encodings-0.4.1/ext/encoding/character/utf-8/gem_make.out
masa@masa ~/ywesee/bbmb $ bin/bbmbd
/usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- json/objects (LoadError)
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /home/masa/ywesee/bbmb/lib/bbmb/html/view/json.rb:5
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /home/masa/ywesee/bbmb/lib/bbmb/html/state/json.rb:4
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /home/masa/ywesee/bbmb/lib/bbmb/html/state/current_order.rb:6
... 11 levels...
from /home/masa/ywesee/bbmb/lib/bbmb/util/server.rb:6
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from bin/bbmbd:10
Check libraries
masa@masa ~/ywesee/bbmb $ gem search json *** LOCAL GEMS *** json (1.4.3) json_pure (1.4.3)
Install ruby-json
masa@masa ~/ywesee/bbmb $ sudo gem install ruby-json
Successfully installed ruby-json-1.1.2
1 gem installed
Installing ri documentation for ruby-json-1.1.2...
ERROR: While executing gem ... (NoMethodError)
undefined method `>' for nil:NilClass
Run again
masa@masa ~/ywesee/bbmb $ gem search json
*** LOCAL GEMS ***
json (1.4.3)
json_pure (1.4.3)
ruby-json (1.1.2)
masa@masa ~/ywesee/bbmb $ bin/bbmbd
/usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- bbmb/util/csv_importer (LoadError)
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from bin/bbmbd:16
from bin/bbmbd:15:in `each'
from bin/bbmbd:15
Check csv_importer
masa@masa ~/ywesee/bbmb/lib/bbmb/util $ ls invoicer.rb mail.rb multilingual.rb numbers.rb password_generator.rb polling_manager.rb server.rb target_dir.rb transfer_dat.rb updater.rb
Notes
Copy csv_importer.rb and run
masa@masa ~/ywesee/bbmb $ cp ~/ywesee/sandoz.bbmb.ch/lib/bbmb/util/csv_importer.rb lib/bbmb/util/
masa@masa ~/ywesee/bbmb $ bin/bbmbd
/usr/lib64/ruby/site_ruby/1.8/DBD/Pg/Pg.rb:118:in `initialize': FATAL: database "bbmb" does not exist (DBI::OperationalError)
from /usr/lib64/ruby/site_ruby/1.8/DBD/Pg/Pg.rb:62:in `new'
from /usr/lib64/ruby/site_ruby/1.8/DBD/Pg/Pg.rb:62:in `connect'
from /usr/lib64/ruby/site_ruby/1.8/dbi.rb:448:in `connect'
from /usr/lib64/ruby/site_ruby/1.8/dbi.rb:221:in `connect'
from /usr/lib64/ruby/site_ruby/1.8/odba/connection_pool.rb:60:in `_connect'
from /usr/lib64/ruby/site_ruby/1.8/odba/connection_pool.rb:59:in `times'
from /usr/lib64/ruby/site_ruby/1.8/odba/connection_pool.rb:59:in `_connect'
from /usr/lib64/ruby/site_ruby/1.8/odba/connection_pool.rb:56:in `connect'
from /usr/lib64/ruby/site_ruby/1.8/odba/connection_pool.rb:56:in `synchronize'
from /usr/lib64/ruby/site_ruby/1.8/odba/connection_pool.rb:56:in `connect'
from /usr/lib64/ruby/site_ruby/1.8/odba/connection_pool.rb:19:in `initialize'
from /home/masa/ywesee/bbmb/lib/bbmb/persistence/odba.rb:38:in `new'
from /home/masa/ywesee/bbmb/lib/bbmb/persistence/odba.rb:38
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from bin/bbmbd:18
Notes
masa@masa ~/ywesee/bbmb $ createuser sandxx -P Geben Sie das Passwort der neuen Rolle ein: Geben Sie es noch einmal ein: Soll die neue Rolle ein Superuser sein? (j/n) j masa@masa ~/ywesee/bbmb $ sudo -u postgres createdb -E UTF8 -T template0 sandxx_bbmb masa@masa ~/ywesee/bbmb $ cd src/ masa@masa ~/ywesee/bbmb/src $ scp xxx@$WHITIE:/var/.../postgresql_database-sandxx_bbmb-backup.gz . masa@masa ~/ywesee/bbmb/src $ zcat postgresql_database-sandxx_bbmb-backup.gz | psql -U sandxx sandxx_bbmb
Change default configuration parameters
lib/bbmb/config.rb
...
# 'db_name' => 'bbmb',
# 'db_user' => 'bbmb',
# 'db_auth' => 'bbmb',
'db_name' => 'sandxx_bbmb',
'db_user' => 'sandxx',
'db_auth' => 'sandxx',
...
# 'mail_order_to' => 'orders.test@bbmb.ch',
'mail_order_to' => 'mhatakeyama@ywesee.com',
...
#'smtp_server' => 'mail.bbmb.ch',
'smtp_server' => 'smtp.gmail.com',
#'smtp_user' => nil,
'smtp_user' => 'mhatakeyama@ywesee.com',
...
Test run
masa@masa ~/ywesee/bbmb $ bin/bbmbd ERROR: relation "object" already exists ERROR: relation "prefetchable_index" already exists ERROR: relation "extent_index" already exists ERROR: relation "object_connection" already exists ERROR: relation "target_id_index" already exists ERROR: relation "collection" already exists ERROR: relation "target_id_bbmb_model_product_pcode" already exists ERROR: relation "target_id_bbmb_model_customer_customer_id" already exists ERROR: relation "target_id_bbmb_model_product_description" already exists ERROR: relation "target_id_bbmb_model_product_article_number" already exists ERROR: relation "target_id_bbmb_model_product_catalogue1" already exists ERROR: relation "target_id_bbmb_model_product_catalogue2" already exists ERROR: relation "target_id_bbmb_model_customer_ean13" already exists ERROR: relation "target_id_bbmb_model_product_ean13" already exists ERROR: relation "target_id_bbmb_model_customer_email" already exists /usr/lib64/ruby/site_ruby/1.8/rubygems/custom_require.rb:31: command not found: cg-object-id I, [2010-11-08T16:37:55.968987 #1459] INFO -- start: starting bbmb-server on druby://localhost:12000
Notes
Next