bismas 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a7bfa4d757177bec894da5ec52a0e5c19aa9d9e
4
- data.tar.gz: fd631175f071d9b1815e30d14c634878824eaeca
3
+ metadata.gz: 533b760c35ba8c4d29776069ba3777b33f393769
4
+ data.tar.gz: e432c79eaa46cdc5f6a2f6d8dc83c63d89062ade
5
5
  SHA512:
6
- metadata.gz: 5afed0589b2e33679976c397e032610e25fb7bc9b997fb4ede71ea53c2d81162cfefe2a20d16bc3e9d8f423419c87eeb8d97fff628bfa937340ada17ab727c4c
7
- data.tar.gz: 84e252197825b23ed413abbe78eaebf6675148db8ca1c7c64e9bcc29acbbc11082c1616a1067682a765f76ec362c86c39ddbe1ca29e4225d07517c6446265c27
6
+ metadata.gz: 3c8394bd9f4b7884affa87a4db9aa74ef7d6259c1c72fda722f3d720b70c83afc8831b3d6181fe1a9f0f2c56a801eefcf0e75ba35f40256090f2f530eec68206
7
+ data.tar.gz: 8ede1a58a6ff0575d756449c70beeaa1ccafcbcf9a8ede32b35e72171b8d24e4a32dfc718df5d4f52d91dea17e65c91ff182755bf637ae8b411a97e3f52da54d
data/ChangeLog CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  = Revision history for bismas
4
4
 
5
+ == 0.4.0 [2016-02-02]
6
+
7
+ * +bismas2xml+: Include input file's modification time.
8
+ * +bismas2xml+: Learned options +mapping+, +execute+ and +execute-mapped+.
9
+ * +bismas-filter+: Accept code file in addition to string for +execute+ and
10
+ +execute-mapped+ options.
11
+
5
12
  == 0.3.0 [2015-12-11]
6
13
 
7
14
  * Added +bismas2xml+ executable.
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to bismas version 0.3.0.
5
+ This documentation refers to bismas version 0.4.0.
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -25,7 +25,7 @@ Travis CI:: https://travis-ci.org/blackwinter/bismas
25
25
 
26
26
  == LICENSE AND COPYRIGHT
27
27
 
28
- Copyright (C) 2015 Jens Wille
28
+ Copyright (C) 2015-2016 Jens Wille
29
29
 
30
30
  bismas is free software: you can redistribute it and/or modify it
31
31
  under the terms of the GNU Affero General Public License as published by
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # bismas -- A Ruby client for BISMAS databases #
5
5
  # #
6
- # Copyright (C) 2015 Jens Wille #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -26,6 +26,8 @@
26
26
 
27
27
  module Bismas
28
28
 
29
+ extend self
30
+
29
31
  # Default file encoding
30
32
  DEFAULT_ENCODING = 'CP850'
31
33
 
@@ -47,103 +49,99 @@ module Bismas
47
49
  # See parameter +FUELLZEICHEN+ in BISMAS <tt>*.CFG</tt>
48
50
  DEFAULT_PADDING_LENGTH = 20
49
51
 
50
- class << self
51
-
52
- def chars(options = {})
53
- encoding = amend_encoding(options).split(':').last
54
-
55
- Hash[CHARS.map { |k, v| [k, begin
56
- v.encode(encoding)
57
- rescue Encoding::UndefinedConversionError
58
- v.dup.force_encoding(encoding)
59
- end] }]
60
- end
61
-
62
- def regex(options = {}, chars = chars(options))
63
- category_length = options[:category_length] || DEFAULT_CATEGORY_LENGTH
64
-
65
- Hash[REGEX.map { |k, v| [k, Regexp.new(v % chars)] }].update(category:
66
- /[^#{chars.values_at(*CATEGORY_CHAR_SKIP).join}]{#{category_length}}/)
67
- end
68
-
69
- def filter(klass, options, &block)
70
- execute = %i[execute execute_mapped].map { |key|
71
- value = Array(options[key]); lambda { |bind|
72
- value.each { |code| eval(code, bind) } } }
73
-
74
- mapping = mapping(options[:mapping], &block)
75
-
76
- key_format = options[:key_format]
77
-
78
- writer_options = {
79
- encoding: encoding = options[:output_encoding],
80
- key: options[:output_key],
81
- sort: options[:sort],
82
- padding_length: options[:padding_length],
83
- category_length: options[:category_length]
84
- }
85
-
86
- reader_options = {
87
- encoding: options[:input_encoding],
88
- key: options[:input_key],
89
- strict: options[:strict],
90
- silent: options[:silent],
91
- legacy: options[:legacy],
92
- category_length: options[:category_length]
93
- }
94
-
95
- klass.open(options[:output], writer_options) { |writer|
96
- Reader.parse_file(options[:input], reader_options) { |id, record|
97
- execute[0][bind = binding]
98
- record = mapping.apply(encode(record, encoding))
99
-
100
- execute[1][bind]
101
- writer[key_format % id] = record
102
- }
103
- }
104
- end
105
-
106
- def mapping(mapping, &block)
107
- block ||= method(:abort)
108
-
109
- Mapping[case mapping
110
- when nil, Hash then mapping
111
- when /\A\{.*\}\z/ then SafeYAML.load(mapping)
112
- when String then File.readable?(mapping) ?
113
- SafeYAML.load_file(mapping) : block["No such file: #{mapping}"]
114
- else block["Invalid mapping: #{mapping.inspect}"]
115
- end]
116
- end
117
-
118
- def encode(record, encoding)
119
- return record unless encoding
120
-
121
- fallback = Hash.new { |h, k| h[k] = '?' }
122
-
123
- record.each { |key, values|
124
- values.each { |value| value.encode!(encoding, fallback: fallback) }
125
-
126
- unless fallback.empty?
127
- chars = fallback.keys.map(&:inspect).join(', '); fallback.clear
128
- warn "Undefined characters at #{$.}:#{key}: #{chars}"
129
- end
130
- }
131
- end
132
-
133
- def amend_encoding(options, default_encoding = DEFAULT_ENCODING)
134
- encoding = (options[:encoding] || default_encoding).to_s
135
-
136
- options[:encoding] = encoding.start_with?(':') ?
137
- default_encoding.to_s + encoding : encoding
138
- end
52
+ def chars(options = {})
53
+ encoding = amend_encoding(options).split(':').last
54
+
55
+ Hash[CHARS.map { |k, v| [k, begin
56
+ v.encode(encoding)
57
+ rescue Encoding::UndefinedConversionError
58
+ v.dup.force_encoding(encoding)
59
+ end] }]
60
+ end
61
+
62
+ def regex(options = {}, chars = chars(options))
63
+ category_length = options[:category_length] || DEFAULT_CATEGORY_LENGTH
64
+
65
+ Hash[REGEX.map { |k, v| [k, Regexp.new(v % chars)] }].update(category:
66
+ /[^#{chars.values_at(*CATEGORY_CHAR_SKIP).join}]{#{category_length}}/)
67
+ end
68
+
69
+ def filter(klass, options, &block)
70
+ Filter.run(klass, options, &block)
71
+ end
72
+
73
+ def to_xml(options, &block)
74
+ XML.run(options, &block)
75
+ end
76
+
77
+ def execute(execute, &block)
78
+ block ||= method(:abort)
79
+
80
+ execute.map { |value|
81
+ value = Array(value).map { |code| case code
82
+ when /\.rb\z/i then File.readable?(code) ?
83
+ File.read(code) : block["No such file: #{code}"]
84
+ when String then code
85
+ else block["Invalid code: #{code.inspect}"]
86
+ end }
87
+
88
+ lambda { |bind| value.each { |code| eval(code, bind) } }
89
+ }
90
+ end
91
+
92
+ def mapping(mapping, &block)
93
+ block ||= method(:abort)
94
+
95
+ Mapping[case mapping
96
+ when nil, Hash then mapping
97
+ when /\A\{.*\}\z/ then safe_yaml.load(mapping)
98
+ when String then File.readable?(mapping) ?
99
+ safe_yaml.load_file(mapping) : block["No such file: #{mapping}"]
100
+ else block["Invalid mapping: #{mapping.inspect}"]
101
+ end]
102
+ end
103
+
104
+ def encode(record, encoding)
105
+ return record unless encoding
106
+
107
+ fallback = Hash.new { |h, k| h[k] = '?' }
108
+
109
+ record.each { |key, values|
110
+ values.each { |value| value.encode!(encoding, fallback: fallback) }
111
+
112
+ unless fallback.empty?
113
+ chars = fallback.keys.map(&:inspect).join(', '); fallback.clear
114
+ warn "Undefined characters at #{$.}:#{key}: #{chars}"
115
+ end
116
+ }
117
+ end
118
+
119
+ def amend_encoding(options, default_encoding = DEFAULT_ENCODING)
120
+ encoding = (options[:encoding] || default_encoding).to_s
121
+
122
+ options[:encoding] = encoding.start_with?(':') ?
123
+ default_encoding.to_s + encoding : encoding
124
+ end
125
+
126
+ def require_gem(gem, lib = gem, &block)
127
+ require lib
128
+ rescue LoadError => err
129
+ block ||= method(:abort)
130
+ block["Please install the `#{gem}' gem. (#{err})"]
131
+ end
139
132
 
133
+ def safe_yaml
134
+ require_gem 'safe_yaml', 'safe_yaml/load'
135
+ SafeYAML
140
136
  end
141
137
 
142
138
  end
143
139
 
140
+ require_relative 'bismas/xml'
144
141
  require_relative 'bismas/base'
145
142
  require_relative 'bismas/schema'
146
143
  require_relative 'bismas/reader'
147
144
  require_relative 'bismas/writer'
145
+ require_relative 'bismas/filter'
148
146
  require_relative 'bismas/mapping'
149
147
  require_relative 'bismas/version'
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # bismas -- A Ruby client for BISMAS databases #
5
5
  # #
6
- # Copyright (C) 2015 Jens Wille #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -39,10 +39,8 @@ module Bismas
39
39
  )
40
40
  end
41
41
 
42
- def require_gem(gem, lib = gem)
43
- require lib
44
- rescue LoadError => err
45
- abort "Please install the `#{gem}' gem. (#{err})"
42
+ def require_gem(*args)
43
+ Bismas.require_gem(*args, &method(:abort))
46
44
  end
47
45
 
48
46
  end
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # bismas -- A Ruby client for BISMAS databases #
5
5
  # #
6
- # Copyright (C) 2015 Jens Wille #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -59,6 +59,8 @@ module Bismas
59
59
  private
60
60
 
61
61
  def opts(opts)
62
+ opts.summary_width = 34
63
+
62
64
  opts.option(:input__FILE, 'Path to input file [Default: STDIN]')
63
65
 
64
66
  opts.option(:output__FILE, 'Path to output file [Default: STDOUT]')
@@ -106,12 +108,12 @@ module Bismas
106
108
 
107
109
  opts.separator
108
110
 
109
- opts.option(:execute__CODE, 'Code to execute for each _record_ before mapping') { |e|
110
- options[:execute] << e
111
+ opts.option(:execute__FILE_OR_CODE, 'Code to execute for each _record_ before mapping') { |e|
112
+ (options[:execute] ||= []) << e
111
113
  }
112
114
 
113
- opts.option(:execute_mapped__CODE, :E, 'Code to execute for each _record_ after mapping') { |e|
114
- options[:execute_mapped] << e
115
+ opts.option(:execute_mapped__FILE_OR_CODE, :E, 'Code to execute for each _record_ after mapping') { |e|
116
+ (options[:execute_mapped] ||= []) << e
115
117
  }
116
118
 
117
119
  opts.separator
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # bismas -- A Ruby client for BISMAS databases #
5
5
  # #
6
- # Copyright (C) 2015 Jens Wille #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -31,44 +31,16 @@ module Bismas
31
31
  class XML < self
32
32
 
33
33
  def run(arguments)
34
- require_gem 'builder'
35
-
36
34
  quit unless arguments.empty?
37
35
 
38
- quit 'Schema file is required' unless schema_file = options[:schema]
39
- quit "No such file: #{schema_file}" unless File.readable?(schema_file)
40
-
41
- schema = Schema.parse_file(schema_file)
42
-
43
- reader_options = {
44
- encoding: options[:encoding],
45
- key: options[:key],
46
- strict: options[:strict],
47
- silent: options[:silent],
48
- category_length: schema.category_length
49
- }
50
-
51
- File.open_file(options[:output], {}, 'wb') { |f|
52
- xml = Builder::XmlMarkup.new(indent: 2, target: f)
53
- xml.instruct!
54
-
55
- xml.records(name: schema.name, description: schema.title) {
56
- Reader.parse_file(options[:input], reader_options) { |id, record|
57
- xml.record(id: id) {
58
- record.sort_by { |key,| key }.each { |key, values|
59
- values.each { |value|
60
- xml.field(value, name: key, description: schema[key])
61
- }
62
- }
63
- }
64
- }
65
- }
66
- }
36
+ Bismas.to_xml(options, &method(:quit))
67
37
  end
68
38
 
69
39
  private
70
40
 
71
41
  def opts(opts)
42
+ opts.summary_width = 34
43
+
72
44
  opts.option(:input__FILE, 'Path to input file [Default: STDIN]')
73
45
 
74
46
  opts.option(:output__FILE, 'Path to output file [Default: STDOUT]')
@@ -85,6 +57,20 @@ module Bismas
85
57
 
86
58
  opts.separator
87
59
 
60
+ opts.option(:mapping__FILE_OR_YAML, 'Path to mapping file or YAML string')
61
+
62
+ opts.separator
63
+
64
+ opts.option(:execute__FILE_OR_CODE, 'Code to execute for each _record_ before mapping') { |e|
65
+ (options[:execute] ||= []) << e
66
+ }
67
+
68
+ opts.option(:execute_mapped__FILE_OR_CODE, :E, 'Code to execute for each _record_ after mapping') { |e|
69
+ (options[:execute_mapped] ||= []) << e
70
+ }
71
+
72
+ opts.separator
73
+
88
74
  opts.switch(:strict, :S, 'Turn parse warnings into errors')
89
75
 
90
76
  opts.switch(:silent, :T, 'Silence parse warnings')
@@ -0,0 +1,71 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # bismas -- A Ruby client for BISMAS databases #
5
+ # #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
+ # #
8
+ # Authors: #
9
+ # Jens Wille <jens.wille@gmail.com> #
10
+ # #
11
+ # bismas is free software; you can redistribute it and/or modify it #
12
+ # under the terms of the GNU Affero General Public License as published by #
13
+ # the Free Software Foundation; either version 3 of the License, or (at your #
14
+ # option) any later version. #
15
+ # #
16
+ # bismas is distributed in the hope that it will be useful, but #
17
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
18
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public #
19
+ # License for more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with bismas. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
25
+ #++
26
+
27
+ module Bismas
28
+
29
+ module Filter
30
+
31
+ extend self
32
+
33
+ extend Bismas
34
+
35
+ def run(klass, options, &block)
36
+ execute = execute(options.values_at(*%i[execute execute_mapped]), &block)
37
+ mapping = mapping(options[:mapping], &block)
38
+
39
+ key_format = options[:key_format]
40
+
41
+ writer_options = {
42
+ encoding: encoding = options[:output_encoding],
43
+ key: options[:output_key],
44
+ sort: options[:sort],
45
+ padding_length: options[:padding_length],
46
+ category_length: options[:category_length]
47
+ }
48
+
49
+ reader_options = {
50
+ encoding: options[:input_encoding],
51
+ key: options[:input_key],
52
+ strict: options[:strict],
53
+ silent: options[:silent],
54
+ legacy: options[:legacy],
55
+ category_length: options[:category_length]
56
+ }
57
+
58
+ klass.open(options[:output], writer_options) { |writer|
59
+ Reader.parse_file(options[:input], reader_options) { |id, record|
60
+ execute[0][bind = binding]
61
+ record = mapping.apply(encode(record, encoding))
62
+
63
+ execute[1][bind]
64
+ writer[key_format % id] = record
65
+ }
66
+ }
67
+ end
68
+
69
+ end
70
+
71
+ end
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # bismas -- A Ruby client for BISMAS databases #
5
5
  # #
6
- # Copyright (C) 2015 Jens Wille #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -53,7 +53,7 @@ module Bismas
53
53
 
54
54
  def apply(hash, new_hash = default_hash)
55
55
  hash.each { |key, value| map(key) { |new_key|
56
- new_hash[new_key].concat(value)
56
+ new_hash[new_key].concat(Array(value))
57
57
  } }
58
58
 
59
59
  new_hash
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # bismas -- A Ruby client for BISMAS databases #
5
5
  # #
6
- # Copyright (C) 2015 Jens Wille #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -24,10 +24,16 @@
24
24
  ###############################################################################
25
25
  #++
26
26
 
27
+ require 'forwardable'
28
+
27
29
  module Bismas
28
30
 
29
31
  class Schema
30
32
 
33
+ include Enumerable
34
+
35
+ extend Forwardable
36
+
31
37
  FIELD_RE = %r{\Afeld\s+=\s+(\d+)}i
32
38
 
33
39
  CATEGORY_RE = lambda { |category_length|
@@ -52,6 +58,10 @@ module Bismas
52
58
 
53
59
  attr_accessor :title, :name, :category_length
54
60
 
61
+ def_delegators :@categories, :[], :[]=, :each
62
+
63
+ def_delegator :@categories, :keys, :categories
64
+
55
65
  def parse(io)
56
66
  category_re = nil
57
67
 
@@ -72,18 +82,6 @@ module Bismas
72
82
  self
73
83
  end
74
84
 
75
- def categories
76
- @categories.keys
77
- end
78
-
79
- def [](key)
80
- @categories[key]
81
- end
82
-
83
- def []=(key, value)
84
- @categories[key] = value
85
- end
86
-
87
85
  end
88
86
 
89
87
  end
@@ -3,7 +3,7 @@ module Bismas
3
3
  module Version
4
4
 
5
5
  MAJOR = 0
6
- MINOR = 3
6
+ MINOR = 4
7
7
  TINY = 0
8
8
 
9
9
  class << self
@@ -0,0 +1,93 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # bismas -- A Ruby client for BISMAS databases #
5
+ # #
6
+ # Copyright (C) 2015-2016 Jens Wille #
7
+ # #
8
+ # Authors: #
9
+ # Jens Wille <jens.wille@gmail.com> #
10
+ # #
11
+ # bismas is free software; you can redistribute it and/or modify it #
12
+ # under the terms of the GNU Affero General Public License as published by #
13
+ # the Free Software Foundation; either version 3 of the License, or (at your #
14
+ # option) any later version. #
15
+ # #
16
+ # bismas is distributed in the hope that it will be useful, but #
17
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY #
18
+ # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public #
19
+ # License for more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with bismas. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
25
+ #++
26
+
27
+ require 'time'
28
+
29
+ module Bismas
30
+
31
+ module XML
32
+
33
+ extend self
34
+
35
+ extend Bismas
36
+
37
+ def run(options, &block)
38
+ block ||= method(:abort)
39
+
40
+ require_gem 'builder'
41
+
42
+ block['Schema file is required'] unless schema_file = options[:schema]
43
+ block["No such file: #{schema_file}"] unless File.readable?(schema_file)
44
+
45
+ schema = Schema.parse_file(schema_file)
46
+
47
+ execute = execute(options.values_at(*%i[execute execute_mapped]), &block)
48
+ mapping = mapping(options[:mapping], &block)
49
+
50
+ records_attributes = {
51
+ name: schema.name,
52
+ description: schema.title,
53
+ mtime: File.mtime(options[:input]).xmlschema
54
+ }
55
+
56
+ reader_options = {
57
+ encoding: options[:encoding],
58
+ key: options[:key],
59
+ strict: options[:strict],
60
+ silent: options[:silent],
61
+ category_length: schema.category_length
62
+ }
63
+
64
+ schema = mapping.apply(schema)
65
+
66
+ File.open_file(options[:output], {}, 'wb') { |f|
67
+ xml = Builder::XmlMarkup.new(indent: 2, target: f)
68
+ xml.instruct!
69
+
70
+ xml.records(records_attributes) {
71
+ Reader.parse_file(options[:input], reader_options) { |id, record|
72
+ xml.record(id: id) {
73
+ execute[0][bind = binding]
74
+ record = mapping.apply(record)
75
+
76
+ execute[1][bind]
77
+ record.sort_by { |key,| key }.each { |key, values|
78
+ field_attributes = {
79
+ name: key,
80
+ description: Array(schema[key]).join('/')
81
+ }
82
+
83
+ Array(values).each { |value| xml.field(value, field_attributes) }
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ end
90
+
91
+ end
92
+
93
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bismas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-11 00:00:00.000000000 Z
11
+ date: 2016-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cyclops
@@ -111,12 +111,14 @@ files:
111
111
  - lib/bismas/cli/chardiff.rb
112
112
  - lib/bismas/cli/filter.rb
113
113
  - lib/bismas/cli/xml.rb
114
+ - lib/bismas/filter.rb
114
115
  - lib/bismas/mapping.rb
115
116
  - lib/bismas/parser.rb
116
117
  - lib/bismas/reader.rb
117
118
  - lib/bismas/schema.rb
118
119
  - lib/bismas/version.rb
119
120
  - lib/bismas/writer.rb
121
+ - lib/bismas/xml.rb
120
122
  - spec/bismas/parser_spec.rb
121
123
  - spec/bismas/reader_spec.rb
122
124
  - spec/bismas/schema_spec.rb
@@ -129,19 +131,16 @@ licenses:
129
131
  metadata: {}
130
132
  post_install_message: |2+
131
133
 
132
- bismas-0.3.0 [2015-12-11]:
134
+ bismas-0.4.0 [2016-02-02]:
133
135
 
134
- * Added +bismas2xml+ executable.
135
- * Added +bismas-chardiff+ executable.
136
- * Renamed +bismas+ executable to +bismas-filter+.
137
- * Renamed Bismas::Categories to Bismas::Schema and extended scope.
138
- * Fixed Bismas.amend_encoding to use default encoding when encoding option is
139
- +nil+.
140
- * Changed Bismas::Writer to insert key field at beginning of record.
136
+ * +bismas2xml+: Include input file's modification time.
137
+ * +bismas2xml+: Learned options +mapping+, +execute+ and +execute-mapped+.
138
+ * +bismas-filter+: Accept code file in addition to string for +execute+ and
139
+ +execute-mapped+ options.
141
140
 
142
141
  rdoc_options:
143
142
  - "--title"
144
- - bismas Application documentation (v0.3.0)
143
+ - bismas Application documentation (v0.4.0)
145
144
  - "--charset"
146
145
  - UTF-8
147
146
  - "--line-numbers"