bismas 0.4.0 → 0.5.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 +4 -4
- data/ChangeLog +7 -0
- data/README +1 -1
- data/Rakefile +1 -1
- data/lib/bismas.rb +25 -1
- data/lib/bismas/cli.rb +49 -0
- data/lib/bismas/cli/filter.rb +4 -27
- data/lib/bismas/cli/xml.rb +17 -16
- data/lib/bismas/filter.rb +7 -12
- data/lib/bismas/version.rb +1 -1
- data/lib/bismas/xml.rb +21 -18
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ae215ed4b1adaed8471ecaf319041ae06770705
|
4
|
+
data.tar.gz: d4e5afa18a2477746e3992ac4196dd0748be119f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74b319b187ee8d4588ff4c0e56f2587bcbf492090191bd20d3081db375c102de4256c0f6b9509228f19b0a367537c993245440b7120a88d79d8828c099654a69
|
7
|
+
data.tar.gz: a103746577801923d8536bdc30fd02c370c1c5a70b1c6db50a96b0e9df8f10cec5075ee4efbc021739b46c2e36f0fb85537d4b8e6b3d75916182c6c985ae8386
|
data/ChangeLog
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
= Revision history for bismas
|
4
4
|
|
5
|
+
== 0.5.0 [2016-06-06]
|
6
|
+
|
7
|
+
* +bismas2xml+: Learned type +solr+.
|
8
|
+
* +bismas2xml+: Learned option +output-encoding+.
|
9
|
+
* +bismas2xml+, +bismas-filter+: Learned options +execute-before+ and
|
10
|
+
+execute-after+.
|
11
|
+
|
5
12
|
== 0.4.0 [2016-02-02]
|
6
13
|
|
7
14
|
* +bismas2xml+: Include input file's modification time.
|
data/README
CHANGED
data/Rakefile
CHANGED
data/lib/bismas.rb
CHANGED
@@ -74,9 +74,27 @@ module Bismas
|
|
74
74
|
XML.run(options, &block)
|
75
75
|
end
|
76
76
|
|
77
|
+
def input_options(options, category_length = options[:category_length])
|
78
|
+
{
|
79
|
+
encoding: options[:input_encoding],
|
80
|
+
key: options[:input_key],
|
81
|
+
strict: options[:strict],
|
82
|
+
silent: options[:silent],
|
83
|
+
legacy: options[:legacy],
|
84
|
+
category_length: category_length
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
def execute_options(options, keys = nil, &block)
|
89
|
+
execute(options.values_at(*keys ||
|
90
|
+
%i[execute_before execute execute_mapped execute_after]), &block)
|
91
|
+
end
|
92
|
+
|
77
93
|
def execute(execute, &block)
|
78
94
|
block ||= method(:abort)
|
79
95
|
|
96
|
+
outer_binding = nil
|
97
|
+
|
80
98
|
execute.map { |value|
|
81
99
|
value = Array(value).map { |code| case code
|
82
100
|
when /\.rb\z/i then File.readable?(code) ?
|
@@ -85,7 +103,13 @@ module Bismas
|
|
85
103
|
else block["Invalid code: #{code.inspect}"]
|
86
104
|
end }
|
87
105
|
|
88
|
-
lambda { |bind|
|
106
|
+
lambda { |bind|
|
107
|
+
!outer_binding ? outer_binding = bind :
|
108
|
+
(outer_binding.local_variables - bind.local_variables).each { |v|
|
109
|
+
bind.local_variable_set(v, outer_binding.local_variable_get(v)) }
|
110
|
+
|
111
|
+
value.each { |code| eval(code, bind) }
|
112
|
+
}
|
89
113
|
}
|
90
114
|
end
|
91
115
|
|
data/lib/bismas/cli.rb
CHANGED
@@ -43,6 +43,55 @@ module Bismas
|
|
43
43
|
Bismas.require_gem(*args, &method(:abort))
|
44
44
|
end
|
45
45
|
|
46
|
+
def unsupported_type(type, types = self.class::TYPES)
|
47
|
+
quit "Unsupported type: #{type}. Must be one of: #{types.join(', ')}."
|
48
|
+
end
|
49
|
+
|
50
|
+
def input_options(opts)
|
51
|
+
opts.separator
|
52
|
+
opts.separator 'Input options:'
|
53
|
+
|
54
|
+
opts.option(:input_encoding__ENCODING, :N, "Input encoding [Default: #{DEFAULT_ENCODING}]")
|
55
|
+
|
56
|
+
opts.separator
|
57
|
+
|
58
|
+
opts.option(:input_key__KEY, :K, 'ID key of input file')
|
59
|
+
|
60
|
+
opts.separator
|
61
|
+
|
62
|
+
opts.switch(:strict, :S, 'Turn parse warnings into errors')
|
63
|
+
|
64
|
+
opts.switch(:silent, :T, 'Silence parse warnings')
|
65
|
+
|
66
|
+
opts.separator
|
67
|
+
|
68
|
+
opts.switch(:legacy, :L, 'Use the legacy parser')
|
69
|
+
end
|
70
|
+
|
71
|
+
def type_option(opts, types = self.class::TYPES)
|
72
|
+
opts.option(:type__TYPE, "Output file type (#{types.join(', ')}) [Default: #{types.first}]")
|
73
|
+
end
|
74
|
+
|
75
|
+
def execute_options(opts)
|
76
|
+
opts.option(:execute__FILE_OR_CODE, 'Code to execute for each _record_ before mapping') { |e|
|
77
|
+
(options[:execute] ||= []) << e
|
78
|
+
}
|
79
|
+
|
80
|
+
opts.option(:execute_mapped__FILE_OR_CODE, :E, 'Code to execute for each _record_ after mapping') { |e|
|
81
|
+
(options[:execute_mapped] ||= []) << e
|
82
|
+
}
|
83
|
+
|
84
|
+
opts.separator
|
85
|
+
|
86
|
+
opts.option(:execute_before__FILE_OR_CODE, :B, 'Code to execute before processing records') { |e|
|
87
|
+
(options[:execute_before] ||= []) << e
|
88
|
+
}
|
89
|
+
|
90
|
+
opts.option(:execute_after__FILE_OR_CODE, :A, 'Code to execute after processing records') { |e|
|
91
|
+
(options[:execute_after] ||= []) << e
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
46
95
|
end
|
47
96
|
|
48
97
|
end
|
data/lib/bismas/cli/filter.rb
CHANGED
@@ -50,7 +50,7 @@ module Bismas
|
|
50
50
|
options[:output_encoding] ||= Midos::DEFAULT_ENCODING
|
51
51
|
Midos::Writer
|
52
52
|
else
|
53
|
-
|
53
|
+
unsupported_type(type)
|
54
54
|
end
|
55
55
|
|
56
56
|
Bismas.filter(klass, options, &method(:quit))
|
@@ -65,29 +65,12 @@ module Bismas
|
|
65
65
|
|
66
66
|
opts.option(:output__FILE, 'Path to output file [Default: STDOUT]')
|
67
67
|
|
68
|
-
opts
|
69
|
-
opts.separator 'Input options:'
|
70
|
-
|
71
|
-
opts.option(:input_encoding__ENCODING, :N, "Input encoding [Default: #{DEFAULT_ENCODING}]")
|
72
|
-
|
73
|
-
opts.separator
|
74
|
-
|
75
|
-
opts.option(:input_key__KEY, :K, 'ID key of input file')
|
76
|
-
|
77
|
-
opts.separator
|
78
|
-
|
79
|
-
opts.switch(:strict, :S, 'Turn parse warnings into errors')
|
80
|
-
|
81
|
-
opts.switch(:silent, :T, 'Silence parse warnings')
|
82
|
-
|
83
|
-
opts.separator
|
84
|
-
|
85
|
-
opts.switch(:legacy, :L, 'Use the legacy parser')
|
68
|
+
input_options(opts)
|
86
69
|
|
87
70
|
opts.separator
|
88
71
|
opts.separator 'Output options:'
|
89
72
|
|
90
|
-
opts
|
73
|
+
type_option(opts)
|
91
74
|
|
92
75
|
opts.separator
|
93
76
|
|
@@ -108,13 +91,7 @@ module Bismas
|
|
108
91
|
|
109
92
|
opts.separator
|
110
93
|
|
111
|
-
opts
|
112
|
-
(options[:execute] ||= []) << e
|
113
|
-
}
|
114
|
-
|
115
|
-
opts.option(:execute_mapped__FILE_OR_CODE, :E, 'Code to execute for each _record_ after mapping') { |e|
|
116
|
-
(options[:execute_mapped] ||= []) << e
|
117
|
-
}
|
94
|
+
execute_options(opts)
|
118
95
|
|
119
96
|
opts.separator
|
120
97
|
|
data/lib/bismas/cli/xml.rb
CHANGED
@@ -30,10 +30,20 @@ module Bismas
|
|
30
30
|
|
31
31
|
class XML < self
|
32
32
|
|
33
|
+
TYPES = %w[bismas solr]
|
34
|
+
|
35
|
+
def self.defaults
|
36
|
+
super.merge(type: TYPES.first)
|
37
|
+
end
|
38
|
+
|
33
39
|
def run(arguments)
|
34
40
|
quit unless arguments.empty?
|
35
41
|
|
36
|
-
|
42
|
+
if TYPES.include?(type = options[:type])
|
43
|
+
Bismas.to_xml(options, &method(:quit))
|
44
|
+
else
|
45
|
+
unsupported_type(type)
|
46
|
+
end
|
37
47
|
end
|
38
48
|
|
39
49
|
private
|
@@ -47,33 +57,24 @@ module Bismas
|
|
47
57
|
|
48
58
|
opts.option(:schema__FILE, 'Path to schema file [Required]')
|
49
59
|
|
50
|
-
opts
|
51
|
-
|
52
|
-
opts.option(:encoding__ENCODING, :N, "Input encoding [Default: #{DEFAULT_ENCODING}]")
|
60
|
+
input_options(opts)
|
53
61
|
|
54
62
|
opts.separator
|
63
|
+
opts.separator 'Output options:'
|
55
64
|
|
56
|
-
opts
|
65
|
+
type_option(opts)
|
57
66
|
|
58
67
|
opts.separator
|
59
68
|
|
60
|
-
opts.option(:
|
69
|
+
opts.option(:output_encoding__ENCODING, :n, 'Output encoding')
|
61
70
|
|
62
71
|
opts.separator
|
63
72
|
|
64
|
-
opts.option(:
|
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
|
-
}
|
73
|
+
opts.option(:mapping__FILE_OR_YAML, 'Path to mapping file or YAML string')
|
71
74
|
|
72
75
|
opts.separator
|
73
76
|
|
74
|
-
opts
|
75
|
-
|
76
|
-
opts.switch(:silent, :T, 'Silence parse warnings')
|
77
|
+
execute_options(opts)
|
77
78
|
end
|
78
79
|
|
79
80
|
end
|
data/lib/bismas/filter.rb
CHANGED
@@ -33,12 +33,12 @@ module Bismas
|
|
33
33
|
extend Bismas
|
34
34
|
|
35
35
|
def run(klass, options, &block)
|
36
|
-
execute =
|
36
|
+
execute = execute_options(options, &block)
|
37
37
|
mapping = mapping(options[:mapping], &block)
|
38
38
|
|
39
39
|
key_format = options[:key_format]
|
40
40
|
|
41
|
-
writer_options = {
|
41
|
+
reader_options, writer_options = input_options(options), {
|
42
42
|
encoding: encoding = options[:output_encoding],
|
43
43
|
key: options[:output_key],
|
44
44
|
sort: options[:sort],
|
@@ -46,24 +46,19 @@ module Bismas
|
|
46
46
|
category_length: options[:category_length]
|
47
47
|
}
|
48
48
|
|
49
|
-
|
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
|
-
}
|
49
|
+
execute[0][bind1 = binding]
|
57
50
|
|
58
51
|
klass.open(options[:output], writer_options) { |writer|
|
59
52
|
Reader.parse_file(options[:input], reader_options) { |id, record|
|
60
|
-
execute[
|
53
|
+
execute[1][bind2 = binding]
|
61
54
|
record = mapping.apply(encode(record, encoding))
|
62
55
|
|
63
|
-
execute[
|
56
|
+
execute[2][bind2]
|
64
57
|
writer[key_format % id] = record
|
65
58
|
}
|
66
59
|
}
|
60
|
+
|
61
|
+
execute[3][bind1]
|
67
62
|
end
|
68
63
|
|
69
64
|
end
|
data/lib/bismas/version.rb
CHANGED
data/lib/bismas/xml.rb
CHANGED
@@ -44,41 +44,42 @@ module Bismas
|
|
44
44
|
|
45
45
|
schema = Schema.parse_file(schema_file)
|
46
46
|
|
47
|
-
execute =
|
47
|
+
execute = execute_options(options, &block)
|
48
48
|
mapping = mapping(options[:mapping], &block)
|
49
49
|
|
50
|
+
records_element, record_element = case options[:type].to_s
|
51
|
+
when 'solr' then %w[add doc]
|
52
|
+
else %w[records record]
|
53
|
+
end
|
54
|
+
|
50
55
|
records_attributes = {
|
51
56
|
name: schema.name,
|
52
57
|
description: schema.title,
|
53
58
|
mtime: File.mtime(options[:input]).xmlschema
|
54
59
|
}
|
55
60
|
|
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
|
-
}
|
61
|
+
reader_options = input_options(options, schema.category_length)
|
63
62
|
|
64
|
-
schema = mapping.apply(schema)
|
63
|
+
schema, encoding = mapping.apply(schema), options[:output_encoding]
|
64
|
+
|
65
|
+
execute[0][bind1 = binding]
|
65
66
|
|
66
67
|
File.open_file(options[:output], {}, 'wb') { |f|
|
67
68
|
xml = Builder::XmlMarkup.new(indent: 2, target: f)
|
69
|
+
xml.instance_eval("@encoding = #{encoding.inspect}") if encoding
|
68
70
|
xml.instruct!
|
69
71
|
|
70
|
-
xml.
|
72
|
+
xml.method_missing(records_element, records_attributes) {
|
71
73
|
Reader.parse_file(options[:input], reader_options) { |id, record|
|
72
|
-
xml.
|
73
|
-
execute[
|
74
|
-
record = mapping.apply(record)
|
74
|
+
xml.method_missing(record_element, id: id) {
|
75
|
+
execute[1][bind2 = binding]
|
76
|
+
record = mapping.apply(encode(record, encoding))
|
75
77
|
|
76
|
-
execute[
|
78
|
+
execute[2][bind2]
|
77
79
|
record.sort_by { |key,| key }.each { |key, values|
|
78
|
-
field_attributes = {
|
79
|
-
|
80
|
-
|
81
|
-
}
|
80
|
+
field_attributes = { name: key }
|
81
|
+
desc = Array(schema[key]).join('/')
|
82
|
+
field_attributes[:description] = desc unless desc.empty?
|
82
83
|
|
83
84
|
Array(values).each { |value| xml.field(value, field_attributes) }
|
84
85
|
}
|
@@ -86,6 +87,8 @@ module Bismas
|
|
86
87
|
}
|
87
88
|
}
|
88
89
|
}
|
90
|
+
|
91
|
+
execute[3][bind1]
|
89
92
|
end
|
90
93
|
|
91
94
|
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.
|
4
|
+
version: 0.5.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: 2016-
|
11
|
+
date: 2016-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cyclops
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hen
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
version: '0.8'
|
48
48
|
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 0.8.
|
50
|
+
version: 0.8.5
|
51
51
|
type: :development
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
version: '0.8'
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 0.8.
|
60
|
+
version: 0.8.5
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rake
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,16 +131,16 @@ licenses:
|
|
131
131
|
metadata: {}
|
132
132
|
post_install_message: |2+
|
133
133
|
|
134
|
-
bismas-0.
|
134
|
+
bismas-0.5.0 [2016-06-06]:
|
135
135
|
|
136
|
-
* +bismas2xml+:
|
137
|
-
* +bismas2xml+: Learned
|
138
|
-
* +bismas-filter+:
|
139
|
-
+execute-
|
136
|
+
* +bismas2xml+: Learned type +solr+.
|
137
|
+
* +bismas2xml+: Learned option +output-encoding+.
|
138
|
+
* +bismas2xml+, +bismas-filter+: Learned options +execute-before+ and
|
139
|
+
+execute-after+.
|
140
140
|
|
141
141
|
rdoc_options:
|
142
142
|
- "--title"
|
143
|
-
- bismas Application documentation (v0.
|
143
|
+
- bismas Application documentation (v0.5.0)
|
144
144
|
- "--charset"
|
145
145
|
- UTF-8
|
146
146
|
- "--line-numbers"
|
@@ -161,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
161
|
version: '0'
|
162
162
|
requirements: []
|
163
163
|
rubyforge_project:
|
164
|
-
rubygems_version: 2.
|
164
|
+
rubygems_version: 2.6.4
|
165
165
|
signing_key:
|
166
166
|
specification_version: 4
|
167
167
|
summary: A Ruby client for BISMAS databases.
|