libis-tools 1.0.5-java
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 +7 -0
- data/.coveralls.yml +2 -0
- data/.gitignore +16 -0
- data/.rspec +2 -0
- data/.travis.yml +40 -0
- data/Gemfile +7 -0
- data/README.md +202 -0
- data/Rakefile +11 -0
- data/bin/libis_tool +5 -0
- data/lib/libis-tools.rb +1 -0
- data/lib/libis/tools.rb +25 -0
- data/lib/libis/tools/assert.rb +52 -0
- data/lib/libis/tools/checksum.rb +106 -0
- data/lib/libis/tools/cli/cli_helper.rb +189 -0
- data/lib/libis/tools/cli/reorg.rb +416 -0
- data/lib/libis/tools/command.rb +133 -0
- data/lib/libis/tools/command_line.rb +23 -0
- data/lib/libis/tools/config.rb +147 -0
- data/lib/libis/tools/config_file.rb +85 -0
- data/lib/libis/tools/csv.rb +38 -0
- data/lib/libis/tools/deep_struct.rb +71 -0
- data/lib/libis/tools/extend/array.rb +16 -0
- data/lib/libis/tools/extend/empty.rb +7 -0
- data/lib/libis/tools/extend/hash.rb +147 -0
- data/lib/libis/tools/extend/kernel.rb +25 -0
- data/lib/libis/tools/extend/ostruct.rb +3 -0
- data/lib/libis/tools/extend/roo.rb +91 -0
- data/lib/libis/tools/extend/string.rb +94 -0
- data/lib/libis/tools/extend/struct.rb +29 -0
- data/lib/libis/tools/extend/symbol.rb +8 -0
- data/lib/libis/tools/logger.rb +130 -0
- data/lib/libis/tools/mets_dnx.rb +61 -0
- data/lib/libis/tools/mets_file.rb +504 -0
- data/lib/libis/tools/mets_objects.rb +547 -0
- data/lib/libis/tools/parameter.rb +372 -0
- data/lib/libis/tools/spreadsheet.rb +196 -0
- data/lib/libis/tools/temp_file.rb +42 -0
- data/lib/libis/tools/thread_safe.rb +31 -0
- data/lib/libis/tools/version.rb +5 -0
- data/lib/libis/tools/xml_document.rb +583 -0
- data/libis-tools.gemspec +55 -0
- data/spec/assert_spec.rb +65 -0
- data/spec/checksum_spec.rb +68 -0
- data/spec/command_spec.rb +90 -0
- data/spec/config_file_spec.rb +83 -0
- data/spec/config_spec.rb +113 -0
- data/spec/csv_spec.rb +159 -0
- data/spec/data/test-headers.csv +2 -0
- data/spec/data/test-headers.tsv +2 -0
- data/spec/data/test-noheaders.csv +1 -0
- data/spec/data/test-noheaders.tsv +1 -0
- data/spec/data/test.data +9 -0
- data/spec/data/test.xlsx +0 -0
- data/spec/data/test.xml +8 -0
- data/spec/data/test.yml +2 -0
- data/spec/data/test_config.yml +15 -0
- data/spec/deep_struct_spec.rb +138 -0
- data/spec/logger_spec.rb +165 -0
- data/spec/mets_file_spec.rb +223 -0
- data/spec/parameter_container_spec.rb +152 -0
- data/spec/parameter_spec.rb +148 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/spreadsheet_spec.rb +1820 -0
- data/spec/temp_file_spec.rb +76 -0
- data/spec/test.xsd +20 -0
- data/spec/thread_safe_spec.rb +64 -0
- data/spec/xmldocument_spec.rb +421 -0
- data/test/test_helper.rb +7 -0
- data/test/webservices/test_ca_item_info.rb +59 -0
- data/test/webservices/test_ca_search.rb +35 -0
- metadata +437 -0
@@ -0,0 +1,223 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative 'spec_helper'
|
3
|
+
require 'rspec/matchers'
|
4
|
+
require 'equivalent-xml'
|
5
|
+
require 'libis/tools/mets_file'
|
6
|
+
require 'libis/tools/xml_document'
|
7
|
+
|
8
|
+
describe 'METS File' do
|
9
|
+
|
10
|
+
before(:all) do
|
11
|
+
::Libis::Tools::Config << {appname: 'LIBIS Default'}
|
12
|
+
end
|
13
|
+
|
14
|
+
subject(:mets_file) { ::Libis::Tools::MetsFile.new }
|
15
|
+
|
16
|
+
context 'without data' do
|
17
|
+
|
18
|
+
let(:skeleton) {
|
19
|
+
::Libis::Tools::XmlDocument.build do |xml|
|
20
|
+
# noinspection RubyResolve
|
21
|
+
xml[:mets].mets 'xmlns:mets' => 'http://www.loc.gov/METS/' do
|
22
|
+
xml[:mets].amdSec 'ID' => 'ie-amd'
|
23
|
+
xml[:mets].fileSec
|
24
|
+
end
|
25
|
+
end.document
|
26
|
+
}
|
27
|
+
|
28
|
+
it 'generates skeleton XML' do
|
29
|
+
expect(mets_file.xml_doc.root).to be_equivalent_to skeleton.root
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'with IE AMD' do
|
35
|
+
|
36
|
+
let(:dc_record) {
|
37
|
+
Libis::Tools::XmlDocument.parse <<-STR
|
38
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
39
|
+
<record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
40
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
41
|
+
xmlns:dcterms="http://purl.org/dc/terms/">
|
42
|
+
<dc:title>Title</dc:title>
|
43
|
+
<dc:author>Author</dc:author>
|
44
|
+
<dc:subject>Subject</dc:subject>
|
45
|
+
</record>
|
46
|
+
STR
|
47
|
+
}
|
48
|
+
|
49
|
+
let(:marc_record) {
|
50
|
+
Libis::Tools::XmlDocument.parse <<-STR
|
51
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
52
|
+
<record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
|
53
|
+
xmlns="http://www.loc.gov/MARC21/slim" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
54
|
+
<leader>abcdefghiljklmnopqrstuvwxyz</leader>
|
55
|
+
<controlfield tag="001">1234567890</controlfield>
|
56
|
+
<datafield tag="010" ind1="a" ind2="b">
|
57
|
+
<subfield code="a">abc</subfield>
|
58
|
+
<subfield code="b">xyz</subfield>
|
59
|
+
</datafield>
|
60
|
+
</record>
|
61
|
+
STR
|
62
|
+
}
|
63
|
+
|
64
|
+
let(:src_record) {
|
65
|
+
Libis::Tools::XmlDocument.parse <<-STR
|
66
|
+
<my_description xmlns="http://www.libis.be/description/">
|
67
|
+
<title>Title</title>
|
68
|
+
<importance>high</importance>
|
69
|
+
<location>here</location>
|
70
|
+
</my_description>
|
71
|
+
STR
|
72
|
+
}
|
73
|
+
|
74
|
+
let(:target) {
|
75
|
+
# noinspection RubyResolve
|
76
|
+
::Libis::Tools::XmlDocument.build do |xml|
|
77
|
+
# noinspection RubyResolve
|
78
|
+
xml[:mets].mets 'xmlns:mets' => 'http://www.loc.gov/METS/' do
|
79
|
+
# noinspection RubyResolve
|
80
|
+
xml[:mets].amdSec ID: 'ie-amd' do
|
81
|
+
# noinspection RubyResolve
|
82
|
+
xml[:mets].techMD ID: 'ie-amd-tech' do
|
83
|
+
# noinspection RubyResolve
|
84
|
+
xml[:mets].mdWrap MDTYPE: 'OTHER', OTHERMDTYPE: 'dnx' do
|
85
|
+
# noinspection RubyResolve
|
86
|
+
xml[:mets].xmlData do
|
87
|
+
xml.dnx xmlns: 'http://www.exlibrisgroup.com/dps/dnx' do
|
88
|
+
# noinspection RubyResolve
|
89
|
+
xml.section.objectCharacteristics! do
|
90
|
+
xml.record do
|
91
|
+
# noinspection RubyResolve
|
92
|
+
xml.key.groupID! 'group_id'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
# noinspection RubyResolve
|
96
|
+
xml.section.generalIECharacteristics! do
|
97
|
+
# noinspection RubyResolve
|
98
|
+
xml.record do
|
99
|
+
xml.key.status! 'status'
|
100
|
+
xml.key.IEEntityType! 'entity_type'
|
101
|
+
xml.key.UserDefinedA! 'user_a'
|
102
|
+
xml.key.UserDefinedB! 'user_b'
|
103
|
+
xml.key.UserDefinedC! 'user_c'
|
104
|
+
xml.key.submissionReason! 'submission_reason'
|
105
|
+
end
|
106
|
+
end
|
107
|
+
# noinspection RubyResolve
|
108
|
+
xml.section.retentionPolicy! do
|
109
|
+
# noinspection RubyResolve
|
110
|
+
xml.record do
|
111
|
+
xml.key.policyId! 'retention_id'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
# noinspection RubyResolve
|
115
|
+
xml.section.webHarvesting! do
|
116
|
+
# noinspection RubyResolve
|
117
|
+
xml.record do
|
118
|
+
xml.key.primarySeedURL! 'harvest_url'
|
119
|
+
xml.key.WCTIdentifier! 'harvest_id'
|
120
|
+
xml.key.targetName! 'harvest_target'
|
121
|
+
xml.key.group! 'harvest_group'
|
122
|
+
xml.key.harvestDate! 'harvest_date'
|
123
|
+
xml.key.harvestTime! 'harvest_time'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
# noinspection RubyResolve
|
131
|
+
xml[:mets].rightsMD ID: 'ie-amd-rights' do
|
132
|
+
# noinspection RubyResolve
|
133
|
+
xml[:mets].mdWrap MDTYPE: 'OTHER', OTHERMDTYPE: 'dnx' do
|
134
|
+
# noinspection RubyResolve
|
135
|
+
xml[:mets].xmlData do
|
136
|
+
xml.dnx xmlns: 'http://www.exlibrisgroup.com/dps/dnx' do
|
137
|
+
# noinspection RubyResolve
|
138
|
+
xml.section.accessRightsPolicy! do
|
139
|
+
# noinspection RubyResolve
|
140
|
+
xml.record do
|
141
|
+
xml.key.policyId! 'access_right'
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
# noinspection RubyResolve
|
149
|
+
xml[:mets].sourceMD ID: 'ie-amd-source-DC-1' do
|
150
|
+
# noinspection RubyResolve
|
151
|
+
xml[:mets].mdWrap MDTYPE: 'DC' do
|
152
|
+
# noinspection RubyResolve
|
153
|
+
xml[:mets].xmlData do
|
154
|
+
# xml.parent.namespace = xml.parent.namespace_definitions.first
|
155
|
+
xml.parent << dc_record.root.to_xml
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
# noinspection RubyResolve
|
160
|
+
xml[:mets].sourceMD ID: 'ie-amd-source-MARC-2' do
|
161
|
+
# noinspection RubyResolve
|
162
|
+
xml[:mets].mdWrap MDTYPE: 'MARC' do
|
163
|
+
# noinspection RubyResolve
|
164
|
+
xml[:mets].xmlData do
|
165
|
+
# xml.parent.namespace = xml.parent.namespace_definitions.first
|
166
|
+
xml.parent << marc_record.root.to_xml
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
# noinspection RubyResolve
|
171
|
+
xml[:mets].sourceMD ID: 'ie-amd-source-OTHER-3' do
|
172
|
+
# noinspection RubyResolve
|
173
|
+
xml[:mets].mdWrap MDTYPE: 'OTHER' do
|
174
|
+
# noinspection RubyResolve
|
175
|
+
xml[:mets].xmlData do
|
176
|
+
# xml.namespace = xml.parent.namespace_definitions.first
|
177
|
+
xml.parent << src_record.root.to_xml
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
xml[:mets].fileSec
|
183
|
+
end
|
184
|
+
end.document
|
185
|
+
}
|
186
|
+
|
187
|
+
it 'fills in IE-AMD section' do
|
188
|
+
mets_file.amd_info = {
|
189
|
+
group_id: 'group_id',
|
190
|
+
status: 'status',
|
191
|
+
entity_type: 'entity_type',
|
192
|
+
user_a: 'user_a',
|
193
|
+
user_b: 'user_b',
|
194
|
+
user_c: 'user_c',
|
195
|
+
submission_reason: 'submission_reason',
|
196
|
+
retention_id: 'retention_id',
|
197
|
+
harvest_url: 'harvest_url',
|
198
|
+
harvest_id: 'harvest_id',
|
199
|
+
harvest_target: 'harvest_target',
|
200
|
+
harvest_group: 'harvest_group',
|
201
|
+
harvest_date: 'harvest_date',
|
202
|
+
harvest_time: 'harvest_time',
|
203
|
+
access_right: 'access_right',
|
204
|
+
source_metadata: [
|
205
|
+
{
|
206
|
+
type: 'DC',
|
207
|
+
data: dc_record.root.to_xml
|
208
|
+
}, {
|
209
|
+
type: 'Marc',
|
210
|
+
data: marc_record.root.to_xml
|
211
|
+
}, {
|
212
|
+
type: 'other',
|
213
|
+
data: src_record.root.to_xml
|
214
|
+
}
|
215
|
+
]
|
216
|
+
}
|
217
|
+
|
218
|
+
expect(mets_file.xml_doc.root).to be_equivalent_to target.root
|
219
|
+
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative 'spec_helper'
|
3
|
+
require 'libis/tools/parameter'
|
4
|
+
|
5
|
+
describe 'ParameterContainer' do
|
6
|
+
|
7
|
+
class TestContainer
|
8
|
+
include ::Libis::Tools::ParameterContainer
|
9
|
+
|
10
|
+
parameter check: true, description: 'check parameter'
|
11
|
+
parameter count: 0, description: 'count parameter'
|
12
|
+
parameter price: 1.0, description: 'price parameter'
|
13
|
+
parameter name: 'nobody', description: 'name parameter'
|
14
|
+
parameter calendar: Date.new(2014, 01, 01)
|
15
|
+
parameter clock: Time.parse('10:10')
|
16
|
+
parameter timestamp: DateTime.new(2014, 01, 01, 10, 10)
|
17
|
+
parameter with_options: true, options: {a: 1, b: 2}, c: 3
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
class DerivedContainer < TestContainer
|
22
|
+
parameter name: 'somebody', description: 'derived name parameter', frozen: true
|
23
|
+
parameter check: 'no'
|
24
|
+
parameter new_derived_param: false
|
25
|
+
end
|
26
|
+
|
27
|
+
class DerivedDerivedContainer < DerivedContainer
|
28
|
+
parameter price: 2.0, description: 'derived derived price parameter'
|
29
|
+
end
|
30
|
+
|
31
|
+
class DerivedDerivedDerivedContainer < DerivedDerivedContainer
|
32
|
+
parameter price: 3.0, description: 'derived derived derived price parameter'
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:test_container) { TestContainer.new }
|
36
|
+
let(:derived_container) { DerivedContainer.new }
|
37
|
+
let(:derived_derived_container) { DerivedDerivedContainer.new }
|
38
|
+
let(:derived_derived_derived_container) { DerivedDerivedDerivedContainer.new }
|
39
|
+
|
40
|
+
it 'class should return parameter if only name is given' do
|
41
|
+
[:check, :count, :price, :name, :calendar, :clock, :timestamp].each do |v|
|
42
|
+
expect(TestContainer.parameter(v)).to be_a ::Libis::Tools::Parameter
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should have default parameters' do
|
47
|
+
expect(test_container.parameter(:check)).to be_truthy
|
48
|
+
expect(test_container.parameter(:count)).to eq 0
|
49
|
+
expect(test_container.parameter(:price)).to eq 1.0
|
50
|
+
expect(test_container.parameter(:name)).to eq 'nobody'
|
51
|
+
expect(test_container.parameter(:calendar).year).to eq 2014
|
52
|
+
expect(test_container.parameter(:calendar).month).to eq 1
|
53
|
+
expect(test_container.parameter(:calendar).day).to eq 1
|
54
|
+
expect(test_container.parameter(:clock).hour).to eq 10
|
55
|
+
expect(test_container.parameter(:clock).min).to eq 10
|
56
|
+
expect(test_container.parameter(:clock).sec).to eq 0
|
57
|
+
expect(test_container.parameter(:timestamp).year).to eq 2014
|
58
|
+
expect(test_container.parameter(:timestamp).month).to eq 1
|
59
|
+
expect(test_container.parameter(:timestamp).day).to eq 1
|
60
|
+
expect(test_container.parameter(:timestamp).hour).to eq 10
|
61
|
+
expect(test_container.parameter(:timestamp).min).to eq 10
|
62
|
+
expect(test_container.parameter(:timestamp).sec).to eq 0
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should allow to set values' do
|
66
|
+
test_container.parameter(:check, false)
|
67
|
+
expect(test_container.parameter(:check)).to be_falsey
|
68
|
+
|
69
|
+
test_container.parameter(:count, 99)
|
70
|
+
expect(test_container.parameter(:count)).to eq 99
|
71
|
+
|
72
|
+
test_container.parameter(:price, 99.99)
|
73
|
+
expect(test_container.parameter(:price)).to eq 99.99
|
74
|
+
|
75
|
+
test_container.parameter(:name, 'everybody')
|
76
|
+
expect(test_container.parameter(:name)).to eq 'everybody'
|
77
|
+
|
78
|
+
test_container.parameter(:calendar, Date.new(2015, 02, 03))
|
79
|
+
expect(test_container.parameter(:calendar).year).to eq 2015
|
80
|
+
expect(test_container.parameter(:calendar).month).to eq 2
|
81
|
+
expect(test_container.parameter(:calendar).day).to eq 3
|
82
|
+
|
83
|
+
test_container.parameter(:clock, Time.parse('14:40:23'))
|
84
|
+
expect(test_container.parameter(:clock).hour).to eq 14
|
85
|
+
expect(test_container.parameter(:clock).min).to eq 40
|
86
|
+
expect(test_container.parameter(:clock).sec).to eq 23
|
87
|
+
|
88
|
+
test_container.parameter(:timestamp, DateTime.new(2015, 02, 03, 14, 40, 23))
|
89
|
+
expect(test_container.parameter(:timestamp).year).to eq 2015
|
90
|
+
expect(test_container.parameter(:timestamp).month).to eq 2
|
91
|
+
expect(test_container.parameter(:timestamp).day).to eq 3
|
92
|
+
expect(test_container.parameter(:timestamp).hour).to eq 14
|
93
|
+
expect(test_container.parameter(:timestamp).min).to eq 40
|
94
|
+
expect(test_container.parameter(:timestamp).sec).to eq 23
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should be able to define parameter with options' do
|
98
|
+
expect(test_container.class.parameter(:with_options)[:options]).to eq a: 1, b: 2, c: 3
|
99
|
+
expect(test_container.class.parameter(:with_options)[:options][:a]).to be 1
|
100
|
+
expect(test_container.class.parameter(:with_options)[:a]).to be 1
|
101
|
+
expect(test_container.class.parameter(:with_options)[:options][:c]).to be 3
|
102
|
+
expect(test_container.class.parameter(:with_options)[:c]).to be 3
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'derived class should inherit parameters of the parent class' do
|
106
|
+
expect(derived_container.parameter(:price)).to eq 1.0
|
107
|
+
expect(derived_container.class.parameter(:price)[:description]).to eq 'price parameter'
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'derived class should override parameter values and propertiesfrom parent class' do
|
111
|
+
expect(derived_container.parameter(:name)).to eq 'somebody'
|
112
|
+
expect(derived_container.parameter(:check)).to eq 'no'
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'overrides in the derived classes should not change values in the parent classes' do
|
116
|
+
expect(test_container.parameter(:check)).to eq true
|
117
|
+
expect(test_container.parameter(:price)).to eq 1.0
|
118
|
+
expect(test_container.class.parameter(:price)[:description]).to eq 'price parameter'
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'derivation should be supported over multiple levels' do
|
122
|
+
expect(derived_container.parameter(:price)).to eq 1.0
|
123
|
+
expect(derived_derived_container.parameter(:price)).to eq 2.0
|
124
|
+
expect(derived_derived_derived_container.parameter(:price)).to eq 3.0
|
125
|
+
expect(derived_container.class.parameter(:price)[:description]).to eq 'price parameter'
|
126
|
+
expect(derived_derived_container.class.parameter(:price)[:description]).to eq 'derived derived price parameter'
|
127
|
+
expect(derived_derived_derived_container.class.parameter(:price)[:description]).to eq 'derived derived derived price parameter'
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'frozen parameters should be read-only' do
|
131
|
+
expect {
|
132
|
+
derived_container.parameter(:name, 'anybody')
|
133
|
+
}.to raise_error(::Libis::Tools::ParameterFrozenError)
|
134
|
+
expect(derived_container.parameter(:name)).to eq 'somebody'
|
135
|
+
expect {
|
136
|
+
derived_container[:name] = 'anybody'
|
137
|
+
}.not_to raise_error
|
138
|
+
expect(derived_container[:name]).to eq 'somebody'
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'frozen state should not affect parameter in parent class' do
|
142
|
+
expect {
|
143
|
+
test_container.parameter(:name, 'anybody')
|
144
|
+
}.not_to raise_error
|
145
|
+
expect(test_container.parameter(:name)).to eq 'anybody'
|
146
|
+
expect {
|
147
|
+
test_container[:name] = 'everybody'
|
148
|
+
}.not_to raise_error
|
149
|
+
expect(test_container[:name]).to eq 'everybody'
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require_relative 'spec_helper'
|
3
|
+
require 'libis/tools/parameter'
|
4
|
+
|
5
|
+
describe 'Parameter' do
|
6
|
+
|
7
|
+
before :context do
|
8
|
+
@parameter_types = %w'bool string int float datetime'
|
9
|
+
|
10
|
+
@bool_parameter = ::Libis::Tools::Parameter.new('BoolParam', true)
|
11
|
+
@string_parameter = ::Libis::Tools::Parameter.new('StringParam', 'default string')
|
12
|
+
@int_parameter = ::Libis::Tools::Parameter.new('IntParam', 5)
|
13
|
+
@float_parameter = ::Libis::Tools::Parameter.new('FloatParam', 1.0)
|
14
|
+
@datetime_parameter = ::Libis::Tools::Parameter.new('DateTimeParam', DateTime.now)
|
15
|
+
|
16
|
+
@constrained_bool_parameter = ::Libis::Tools::Parameter.new('BoolParam', true, nil, nil, true)
|
17
|
+
@constrained_string_parameter = ::Libis::Tools::Parameter.new('StringParam', 'default string', nil, nil, /^ABC.*XYZ$/i)
|
18
|
+
@constrained_int_parameter = ::Libis::Tools::Parameter.new('IntParam', 5, nil, nil, [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37])
|
19
|
+
@constrained_float_parameter = ::Libis::Tools::Parameter.new('FloatParam', 0.0, nil, nil, 1.0...3.1415927)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should detect datatype from default value' do
|
23
|
+
@parameter_types.each do |dtype|
|
24
|
+
expect(eval("@#{dtype}_parameter").send(:guess_datatype)).to eq dtype
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should return default value' do
|
29
|
+
@parameter_types.each do |dtype|
|
30
|
+
expect(eval("@#{dtype}_parameter").parse).to eq eval("@#{dtype}_parameter").default
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should test if boolean value is valid' do
|
35
|
+
[false, true, nil, 'true', 'false', 'T', 'F', 'y', 'n', 1, 0].each do |v|
|
36
|
+
# noinspection RubyResolve
|
37
|
+
expect(@bool_parameter).to be_valid_value(v)
|
38
|
+
end
|
39
|
+
|
40
|
+
[5, 0.1, 'abc'].each do |v|
|
41
|
+
# noinspection RubyResolve
|
42
|
+
expect(@bool_parameter).not_to be_valid_value(v)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should test if string value is valid' do
|
47
|
+
['abc', true, false, nil, 1, 1.0, Object.new].each do |v|
|
48
|
+
# noinspection RubyResolve
|
49
|
+
expect(@string_parameter).to be_valid_value(v)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should test if integer value is valid' do
|
54
|
+
[0, 5, -6, 3.1415926, '3', nil, Rational('1/3')].each do |v|
|
55
|
+
# noinspection RubyResolve
|
56
|
+
expect(@int_parameter).to be_valid_value(v)
|
57
|
+
end
|
58
|
+
|
59
|
+
['abc', '3.1415926', '1 meter', false, true, Object.new].each do |v|
|
60
|
+
# noinspection RubyResolve
|
61
|
+
expect(@int_parameter).not_to be_valid_value(v)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should test if float value is valid' do
|
66
|
+
[1.1, Rational('1/3'), 3.1415926, '3.1415926', nil].each do |v|
|
67
|
+
# noinspection RubyResolve
|
68
|
+
expect(@float_parameter).to be_valid_value(v)
|
69
|
+
end
|
70
|
+
|
71
|
+
['abc', '1.0.0', false, true, Object.new].each do |v|
|
72
|
+
# noinspection RubyResolve
|
73
|
+
expect(@float_parameter).not_to be_valid_value(v)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should test if datetime value is valid' do
|
78
|
+
[Time.now, Date.new, '10:10', '2014/01/01', '2014/01/01 10:10:10.000001', nil].each do |v|
|
79
|
+
# noinspection RubyResolve
|
80
|
+
expect(@datetime_parameter).to be_valid_value(v)
|
81
|
+
end
|
82
|
+
|
83
|
+
['abc', 5, false].each do |v|
|
84
|
+
# noinspection RubyResolve
|
85
|
+
expect(@datetime_parameter).not_to be_valid_value(v)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'should accept and convert value for boolean parameter' do
|
90
|
+
['true', 'True', 'TRUE','tRuE', 't', 'T', 'y', 'Y', '1', 1].each do |v|
|
91
|
+
expect(@bool_parameter.parse(v)).to be_truthy
|
92
|
+
end
|
93
|
+
|
94
|
+
['false', 'False', 'FALSE','fAlSe', 'f', 'F', 'n', 'N', '0', 0].each do |v|
|
95
|
+
expect(@bool_parameter.parse(v)).to be_falsey
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# noinspection RubyResolve
|
100
|
+
it 'should check values against constraint' do
|
101
|
+
expect(@constrained_bool_parameter).to be_valid_value(true)
|
102
|
+
expect(@constrained_bool_parameter).to be_valid_value('y')
|
103
|
+
|
104
|
+
expect(@constrained_bool_parameter).not_to be_valid_value(false)
|
105
|
+
expect(@constrained_bool_parameter).not_to be_valid_value('n')
|
106
|
+
|
107
|
+
%w'ABCXYZ ABC123XYZ abcxyz AbC__++__xYz'.each do |v|
|
108
|
+
# noinspection RubyResolve
|
109
|
+
expect(@constrained_string_parameter).to be_valid_value(v)
|
110
|
+
end
|
111
|
+
|
112
|
+
%w'ABC XYZ ABC123'.each do |v|
|
113
|
+
# noinspection RubyResolve
|
114
|
+
expect(@constrained_string_parameter).not_to be_valid_value(v)
|
115
|
+
end
|
116
|
+
|
117
|
+
[1, 7, 11, nil].each do |v|
|
118
|
+
# noinspection RubyResolve
|
119
|
+
expect(@constrained_int_parameter).to be_valid_value(v)
|
120
|
+
end
|
121
|
+
|
122
|
+
[0, 4, 9, 43].each do |v|
|
123
|
+
# noinspection RubyResolve
|
124
|
+
expect(@constrained_int_parameter).not_to be_valid_value(v)
|
125
|
+
end
|
126
|
+
|
127
|
+
[1.0, 3.1415, 2.718281828459].each do |v|
|
128
|
+
# noinspection RubyResolve
|
129
|
+
expect(@constrained_float_parameter).to be_valid_value(v)
|
130
|
+
end
|
131
|
+
|
132
|
+
[nil, 0.5, -2.5].each do |v|
|
133
|
+
# noinspection RubyResolve
|
134
|
+
expect(@constrained_float_parameter).not_to be_valid_value(v)
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'should allow to set and get options' do
|
140
|
+
|
141
|
+
@bool_parameter[:my_value] = :dummy_value
|
142
|
+
|
143
|
+
expect(@bool_parameter[:my_value]).to be :dummy_value
|
144
|
+
expect(@bool_parameter[:options][:my_value]).to be :dummy_value
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|