cascade-rb 0.1.5 → 0.2.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/README.md +4 -5
- data/cascade.gemspec +1 -4
- data/lib/cascade.rb +0 -1
- data/lib/cascade/columns_matching.rb +1 -0
- data/lib/cascade/complex_fields.rb +0 -1
- data/lib/cascade/data_parser.rb +7 -15
- data/lib/cascade/error_handler.rb +2 -2
- data/lib/cascade/exceptions.rb +1 -0
- data/lib/cascade/exceptions/unsupported_component.rb +9 -0
- data/lib/cascade/helpers/hash.rb +2 -2
- data/lib/cascade/registry.rb +24 -0
- data/lib/cascade/row_processor.rb +2 -1
- data/lib/cascade/version.rb +1 -1
- data/spec/lib/data_parser_spec.rb +3 -3
- data/spec/lib/error_handler_spec.rb +1 -1
- data/spec/lib/exceptions/unsupported_component_spec.rb +20 -0
- data/spec/lib/helpers/{hash.rb → hash_spec.rb} +4 -2
- data/spec/lib/registry_spec.rb +28 -0
- data/spec/spec_helper.rb +8 -1
- metadata +15 -44
- data/lib/cascade/cascade_csv.rb +0 -13
- data/lib/cascade/complex_fields/country_iso.rb +0 -12
- data/spec/lib/cascade_csv_spec.rb +0 -21
- data/spec/lib/complex_fields/country_iso_spec.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b321e02345f0116d9def142e1ef8ece2dda722e4
|
4
|
+
data.tar.gz: ae08c0071e7abf966764e3b2d8fc194428b28244
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b6d62c7ed816ab434ed9a245e8a278753e73bbf3b031b899946b7afe095eeb1276e9760fbe7c6ef1381a76a2c12a8c2a439b92aa24c328129c2e5a8b9d1bae8
|
7
|
+
data.tar.gz: 4604b3cd290fda7437b9e91dc4453d1e92800f4e8ea3f8cf5fef87973ccf42f235c60b598e247e34a7d9f5dbc3420dc88715ca3d4cbf65c60dc1fdbcf7f466b6
|
data/README.md
CHANGED
@@ -52,9 +52,9 @@ Cascade.configuration do
|
|
52
52
|
end
|
53
53
|
```
|
54
54
|
|
55
|
-
Provide
|
55
|
+
Provide iteratable object for parsing and run it!
|
56
56
|
```ruby
|
57
|
-
Cascade::DataParser.new("data_test.
|
57
|
+
Cascade::DataParser.new(data_provider: Csv.open("data_test.csv")).call
|
58
58
|
```
|
59
59
|
|
60
60
|
## Columns mapping
|
@@ -69,7 +69,6 @@ There are several alredy defined fields parsers (types):
|
|
69
69
|
|
70
70
|
- currency
|
71
71
|
- boolean
|
72
|
-
- country_iso
|
73
72
|
- string
|
74
73
|
|
75
74
|
Feel free to add new fields parsers and provide it through PR.
|
@@ -110,9 +109,9 @@ DATE_PARSER = -> (value) { Date.parse(value) }
|
|
110
109
|
```
|
111
110
|
Provide all this stuff into data parser
|
112
111
|
```ruby
|
113
|
-
Cascade::DataParser.new(
|
112
|
+
Cascade::DataParser.new(
|
113
|
+
data_provider: ParserJSON.new.open("data_test.csv"),
|
114
114
|
row_processor: Cascade::RowProcessor.new(date: DateParser.new),
|
115
|
-
data_provider: ParserJSON.new,
|
116
115
|
data_saver: PERSON_SAVER
|
117
116
|
).call
|
118
117
|
```
|
data/cascade.gemspec
CHANGED
@@ -18,15 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "iso_country_codes"
|
22
|
-
spec.add_dependency "awesome_print"
|
23
|
-
|
24
21
|
spec.add_development_dependency "bundler", "~> 1.6"
|
25
22
|
spec.add_development_dependency "yard"
|
26
23
|
spec.add_development_dependency "rake"
|
27
24
|
spec.add_development_dependency "minitest"
|
28
25
|
spec.add_development_dependency "rr"
|
29
|
-
spec.add_development_dependency "shoulda-matchers"
|
26
|
+
spec.add_development_dependency "shoulda-matchers", "2.8.0"
|
30
27
|
spec.add_development_dependency "simplecov"
|
31
28
|
spec.add_development_dependency "pry"
|
32
29
|
spec.add_development_dependency "rubocop"
|
data/lib/cascade.rb
CHANGED
data/lib/cascade/data_parser.rb
CHANGED
@@ -1,21 +1,13 @@
|
|
1
|
-
require "awesome_print"
|
2
|
-
|
3
1
|
require "cascade/columns_matching"
|
4
|
-
require "cascade/
|
5
|
-
require "cascade/row_processor"
|
6
|
-
require "cascade/error_handler"
|
7
|
-
require "cascade/helpers/hash"
|
2
|
+
require "cascade/registry"
|
8
3
|
|
9
4
|
module Cascade
|
10
5
|
class DataParser
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@row_processor = options.fetch(:row_processor) { RowProcessor.new }
|
17
|
-
@error_handler = options.fetch(:error_handler) { ErrorHandler.new }
|
18
|
-
@data_saver = options.fetch(:data_saver) { PUTS_DATA_SAVER }
|
6
|
+
def initialize(options = {})
|
7
|
+
@data_provider = options.fetch(:data_provider) { Registry.data_provider }
|
8
|
+
@row_processor = options.fetch(:row_processor) { Registry.row_processor }
|
9
|
+
@error_handler = options.fetch(:error_handler) { Registry.error_handler }
|
10
|
+
@data_saver = options.fetch(:data_saver) { Registry.data_saver }
|
19
11
|
end
|
20
12
|
|
21
13
|
# Starts parsing processing with opening file and iterating through each
|
@@ -23,7 +15,7 @@ module Cascade
|
|
23
15
|
# DataSaver
|
24
16
|
#
|
25
17
|
def call
|
26
|
-
@data_provider.
|
18
|
+
@data_provider.each do |row|
|
27
19
|
@error_handler.with_errors_handling(row) do
|
28
20
|
@data_saver.call @row_processor.call(row)
|
29
21
|
end
|
@@ -6,8 +6,8 @@ module Cascade
|
|
6
6
|
|
7
7
|
define_setting :raise_parse_errors, false
|
8
8
|
|
9
|
-
HANDLING_EXCEPTIONS = [
|
10
|
-
DEFAULT_ERROR_STORE =
|
9
|
+
HANDLING_EXCEPTIONS = [IndexError]
|
10
|
+
DEFAULT_ERROR_STORE = lambda do |row, reason|
|
11
11
|
@errors ||= []
|
12
12
|
@errors << [row, reason]
|
13
13
|
end
|
data/lib/cascade/exceptions.rb
CHANGED
data/lib/cascade/helpers/hash.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "cascade/error_handler"
|
2
|
+
require "cascade/row_processor"
|
3
|
+
|
4
|
+
module Cascade
|
5
|
+
module Registry
|
6
|
+
PUTS_DATA_SAVER = ->(*args) { p args }
|
7
|
+
|
8
|
+
def self.row_processor
|
9
|
+
RowProcessor.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.error_handler
|
13
|
+
ErrorHandler.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.data_saver
|
17
|
+
PUTS_DATA_SAVER
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.data_provider
|
21
|
+
raise Cascade::UnsupportedComponent
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require "cascade/complex_fields"
|
2
2
|
require "cascade/exceptions"
|
3
3
|
require "cascade/helpers/configuration"
|
4
|
+
require "cascade/helpers/hash"
|
4
5
|
|
5
6
|
module Cascade
|
6
7
|
class RowProcessor
|
7
8
|
extend Configuration
|
9
|
+
using HashRefinements
|
8
10
|
|
9
11
|
DEFAULT_PROCESSOR = ->(value) { value }
|
10
12
|
|
@@ -43,7 +45,6 @@ module Cascade
|
|
43
45
|
{
|
44
46
|
string: DEFAULT_PROCESSOR,
|
45
47
|
currency: ComplexFields::Currency.new,
|
46
|
-
country_iso: ComplexFields::CountryIso.new,
|
47
48
|
boolean: ComplexFields::Boolean.new,
|
48
49
|
}
|
49
50
|
end
|
data/lib/cascade/version.rb
CHANGED
@@ -7,7 +7,7 @@ describe Cascade::DataParser do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
class FakeDataProvider
|
10
|
-
def open(_)
|
10
|
+
def self.open(_)
|
11
11
|
[
|
12
12
|
["Sally Whittaker", "2018", "McCarren House", "312",
|
13
13
|
"3.75", "France", "+", "123.123"],
|
@@ -18,14 +18,14 @@ describe Cascade::DataParser do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
let(:filename) { "spec/examples/data_test.txt" }
|
21
|
-
let(:data_provider) { FakeDataProvider.
|
21
|
+
let(:data_provider) { FakeDataProvider.open(filename) }
|
22
22
|
|
23
23
|
before do
|
24
24
|
@processor_calls_count = 0
|
25
25
|
@data_saves_count = 0
|
26
26
|
row_processor = ->(_row) { @processor_calls_count += 1 }
|
27
27
|
data_saver = ->(*) { @data_saves_count += 1 }
|
28
|
-
@parser = described_class.new(
|
28
|
+
@parser = described_class.new(row_processor: row_processor,
|
29
29
|
data_saver: data_saver, data_provider: data_provider)
|
30
30
|
end
|
31
31
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "cascade/exceptions/unsupported_component"
|
3
|
+
|
4
|
+
describe Cascade::UnsupportedComponent do
|
5
|
+
subject { Cascade::UnsupportedComponent.new }
|
6
|
+
it "exception raisable" do
|
7
|
+
assert_respond_to subject, :exception
|
8
|
+
end
|
9
|
+
|
10
|
+
context "#message" do
|
11
|
+
it "uses passed message" do
|
12
|
+
subject = Cascade::UnsupportedComponent.new("custom_message")
|
13
|
+
assert_equal subject.message, "custom_message"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "uses default message if not passed" do
|
17
|
+
assert_equal subject.message, Cascade::UnsupportedComponent::MESSAGE
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -3,11 +3,13 @@ require "cascade/helpers/hash"
|
|
3
3
|
|
4
4
|
describe Hash do
|
5
5
|
describe "#reverse_merge" do
|
6
|
+
using HashRefinements
|
7
|
+
|
6
8
|
let(:another_hash) { { a: 1, b: 2 } }
|
7
|
-
let(:
|
9
|
+
let(:example_hash) { { a: 4, c: 3 } }
|
8
10
|
|
9
11
|
it "merge self into anothe hash" do
|
10
|
-
assert_equal
|
12
|
+
assert_equal example_hash.reverse_merge(another_hash),
|
11
13
|
a: 4, b: 2, c: 3
|
12
14
|
end
|
13
15
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "cascade/registry"
|
3
|
+
|
4
|
+
describe Cascade::Registry do
|
5
|
+
def described_class
|
6
|
+
Cascade::Registry
|
7
|
+
end
|
8
|
+
|
9
|
+
it "creates new instance of default row processor" do
|
10
|
+
mock(Cascade::RowProcessor).new
|
11
|
+
described_class.row_processor
|
12
|
+
end
|
13
|
+
|
14
|
+
it "creates new instance of default error handler" do
|
15
|
+
mock(Cascade::ErrorHandler).new
|
16
|
+
described_class.error_handler
|
17
|
+
end
|
18
|
+
|
19
|
+
it "return default callable data saver" do
|
20
|
+
assert_respond_to described_class.data_saver, :call
|
21
|
+
end
|
22
|
+
|
23
|
+
it "return default data provider" do
|
24
|
+
assert_raises(Cascade::UnsupportedComponent) do
|
25
|
+
described_class.data_provider
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,10 +7,17 @@ end
|
|
7
7
|
require "minitest/autorun"
|
8
8
|
require "minitest/pride"
|
9
9
|
require "minitest/mock"
|
10
|
+
require "minitest/hell"
|
10
11
|
require "shoulda/matchers"
|
11
12
|
require "rr"
|
12
13
|
|
13
14
|
require "codeclimate-test-reporter"
|
14
15
|
CodeClimate::TestReporter.start
|
15
16
|
|
16
|
-
|
17
|
+
class Minitest::Test
|
18
|
+
parallelize_me!
|
19
|
+
end
|
20
|
+
|
21
|
+
module Kernel
|
22
|
+
alias_method :context, :describe
|
23
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cascade-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignat Zakrevsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: iso_country_codes
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: awesome_print
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: bundler
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,16 +84,16 @@ dependencies:
|
|
112
84
|
name: shoulda-matchers
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
|
-
- -
|
87
|
+
- - '='
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
89
|
+
version: 2.8.0
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
|
-
- -
|
94
|
+
- - '='
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
96
|
+
version: 2.8.0
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
98
|
name: simplecov
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,20 +165,20 @@ files:
|
|
193
165
|
- Rakefile
|
194
166
|
- cascade.gemspec
|
195
167
|
- lib/cascade.rb
|
196
|
-
- lib/cascade/cascade_csv.rb
|
197
168
|
- lib/cascade/columns_matching.rb
|
198
169
|
- lib/cascade/complex_fields.rb
|
199
170
|
- lib/cascade/complex_fields/boolean.rb
|
200
|
-
- lib/cascade/complex_fields/country_iso.rb
|
201
171
|
- lib/cascade/complex_fields/currency.rb
|
202
172
|
- lib/cascade/concerns/statistics_collectible.rb
|
203
173
|
- lib/cascade/data_parser.rb
|
204
174
|
- lib/cascade/error_handler.rb
|
205
175
|
- lib/cascade/exceptions.rb
|
206
176
|
- lib/cascade/exceptions/unknown_presenter_type.rb
|
177
|
+
- lib/cascade/exceptions/unsupported_component.rb
|
207
178
|
- lib/cascade/exceptions/wrong_mapping_format.rb
|
208
179
|
- lib/cascade/helpers/configuration.rb
|
209
180
|
- lib/cascade/helpers/hash.rb
|
181
|
+
- lib/cascade/registry.rb
|
210
182
|
- lib/cascade/row_processor.rb
|
211
183
|
- lib/cascade/statistics.rb
|
212
184
|
- lib/cascade/statistics_stores.rb
|
@@ -214,18 +186,18 @@ files:
|
|
214
186
|
- lib/cascade/statistics_stores/array_store.rb
|
215
187
|
- lib/cascade/statistics_stores/counter_store.rb
|
216
188
|
- lib/cascade/version.rb
|
217
|
-
- spec/lib/cascade_csv_spec.rb
|
218
189
|
- spec/lib/columns_matching_spec.rb
|
219
190
|
- spec/lib/complex_fields/boolean_spec.rb
|
220
|
-
- spec/lib/complex_fields/country_iso_spec.rb
|
221
191
|
- spec/lib/complex_fields/currency_spec.rb
|
222
192
|
- spec/lib/concerns/statistics_collectible_spec.rb
|
223
193
|
- spec/lib/data_parser_spec.rb
|
224
194
|
- spec/lib/error_handler_spec.rb
|
225
195
|
- spec/lib/exceptions/unknown_presenter_type_spec.rb
|
196
|
+
- spec/lib/exceptions/unsupported_component_spec.rb
|
226
197
|
- spec/lib/exceptions/wrong_mapping_format_spec.rb
|
227
198
|
- spec/lib/helpers/configuration_spec.rb
|
228
|
-
- spec/lib/helpers/
|
199
|
+
- spec/lib/helpers/hash_spec.rb
|
200
|
+
- spec/lib/registry_spec.rb
|
229
201
|
- spec/lib/row_processor_spec.rb
|
230
202
|
- spec/lib/statistics_spec.rb
|
231
203
|
- spec/lib/statistics_stores/abstract_store_spec.rb
|
@@ -252,27 +224,26 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
224
|
version: '0'
|
253
225
|
requirements: []
|
254
226
|
rubyforge_project:
|
255
|
-
rubygems_version: 2.
|
227
|
+
rubygems_version: 2.4.5
|
256
228
|
signing_key:
|
257
229
|
specification_version: 4
|
258
230
|
summary: Ruby data parser gem.
|
259
231
|
test_files:
|
260
|
-
- spec/lib/cascade_csv_spec.rb
|
261
232
|
- spec/lib/columns_matching_spec.rb
|
262
233
|
- spec/lib/complex_fields/boolean_spec.rb
|
263
|
-
- spec/lib/complex_fields/country_iso_spec.rb
|
264
234
|
- spec/lib/complex_fields/currency_spec.rb
|
265
235
|
- spec/lib/concerns/statistics_collectible_spec.rb
|
266
236
|
- spec/lib/data_parser_spec.rb
|
267
237
|
- spec/lib/error_handler_spec.rb
|
268
238
|
- spec/lib/exceptions/unknown_presenter_type_spec.rb
|
239
|
+
- spec/lib/exceptions/unsupported_component_spec.rb
|
269
240
|
- spec/lib/exceptions/wrong_mapping_format_spec.rb
|
270
241
|
- spec/lib/helpers/configuration_spec.rb
|
271
|
-
- spec/lib/helpers/
|
242
|
+
- spec/lib/helpers/hash_spec.rb
|
243
|
+
- spec/lib/registry_spec.rb
|
272
244
|
- spec/lib/row_processor_spec.rb
|
273
245
|
- spec/lib/statistics_spec.rb
|
274
246
|
- spec/lib/statistics_stores/abstract_store_spec.rb
|
275
247
|
- spec/lib/statistics_stores/array_store_spec.rb
|
276
248
|
- spec/lib/statistics_stores/counter_store_spec.rb
|
277
249
|
- spec/spec_helper.rb
|
278
|
-
has_rdoc:
|
data/lib/cascade/cascade_csv.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require "csv"
|
2
|
-
|
3
|
-
module Cascade
|
4
|
-
class CascadeCsv
|
5
|
-
# Delegates oepn method to CSV with passed and alredy-defined params
|
6
|
-
# This method opens an IO object, and wraps that with CSV.
|
7
|
-
#
|
8
|
-
def self.open(*args)
|
9
|
-
options = if args.last.is_a? Hash then args.pop else Hash.new end
|
10
|
-
CSV.open(*args << options.reverse_merge(col_sep: "\t", quote_char: "\0"))
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "cascade/cascade_csv"
|
3
|
-
|
4
|
-
describe Cascade::CascadeCsv do
|
5
|
-
def described_class
|
6
|
-
Cascade::CascadeCsv
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:filename) { "filename.csv" }
|
10
|
-
|
11
|
-
it "pass default col_sep and quote_char if in not setted" do
|
12
|
-
mock(CSV).open(filename, col_sep: "\t", quote_char: "\0")
|
13
|
-
described_class.open(filename)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "pass specified col_sep and quote_char" do
|
17
|
-
mock(CSV).open(filename, col_sep: "custom_sep", quote_char: "custom_quote")
|
18
|
-
described_class.open(filename, col_sep: "custom_sep",
|
19
|
-
quote_char: "custom_quote")
|
20
|
-
end
|
21
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "cascade/complex_fields/country_iso"
|
3
|
-
|
4
|
-
describe Cascade::ComplexFields::CountryIso do
|
5
|
-
def described_class
|
6
|
-
Cascade::ComplexFields::CountryIso
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:subject) { described_class.new }
|
10
|
-
|
11
|
-
it "translate country name to alpha-2 code" do
|
12
|
-
assert_equal subject.call("France"), "FR"
|
13
|
-
end
|
14
|
-
|
15
|
-
it "raise error if there is no such country" do
|
16
|
-
assert_raises IsoCountryCodes::UnknownCodeError do
|
17
|
-
subject.call("some_blank_value")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
it "return nil if nil value passed" do
|
22
|
-
assert_nil subject.call(nil)
|
23
|
-
end
|
24
|
-
end
|