cascade-rb 0.2.3 → 0.3.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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +1 -1
  3. data/.rubocop.yml +11 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +3 -1
  6. data/README.md +2 -25
  7. data/Rakefile +7 -4
  8. data/cascade.gemspec +22 -21
  9. data/lib/cascade.rb +6 -7
  10. data/lib/cascade/columns_matching.rb +14 -13
  11. data/lib/cascade/complex_fields.rb +5 -3
  12. data/lib/cascade/complex_fields/array_processor.rb +2 -0
  13. data/lib/cascade/complex_fields/boolean.rb +3 -1
  14. data/lib/cascade/complex_fields/currency.rb +8 -4
  15. data/lib/cascade/concerns/statistics_collectible.rb +3 -1
  16. data/lib/cascade/data_parser.rb +4 -2
  17. data/lib/cascade/error_handler.rb +4 -7
  18. data/lib/cascade/exceptions.rb +5 -3
  19. data/lib/cascade/exceptions/unknown_presenter_type.rb +2 -0
  20. data/lib/cascade/exceptions/unsupported_component.rb +3 -1
  21. data/lib/cascade/exceptions/wrong_mapping_format.rb +2 -0
  22. data/lib/cascade/helpers/hash.rb +2 -0
  23. data/lib/cascade/registry.rb +6 -3
  24. data/lib/cascade/row_processor.rb +23 -22
  25. data/lib/cascade/statistics.rb +4 -2
  26. data/lib/cascade/statistics_stores.rb +5 -3
  27. data/lib/cascade/statistics_stores/abstract_store.rb +2 -0
  28. data/lib/cascade/statistics_stores/array_store.rb +2 -0
  29. data/lib/cascade/statistics_stores/counter_store.rb +2 -0
  30. data/lib/cascade/version.rb +3 -1
  31. data/spec/integration_spec.rb +70 -0
  32. data/spec/lib/columns_matching_spec.rb +18 -26
  33. data/spec/lib/complex_fields/array_processor_spec.rb +6 -4
  34. data/spec/lib/complex_fields/boolean_spec.rb +8 -6
  35. data/spec/lib/complex_fields/currency_spec.rb +11 -9
  36. data/spec/lib/concerns/statistics_collectible_spec.rb +6 -4
  37. data/spec/lib/data_parser_spec.rb +14 -11
  38. data/spec/lib/error_handler_spec.rb +21 -15
  39. data/spec/lib/exceptions/unknown_presenter_type_spec.rb +5 -3
  40. data/spec/lib/exceptions/unsupported_component_spec.rb +10 -8
  41. data/spec/lib/exceptions/wrong_mapping_format_spec.rb +5 -3
  42. data/spec/lib/helpers/hash_spec.rb +7 -5
  43. data/spec/lib/registry_spec.rb +9 -8
  44. data/spec/lib/row_processor_spec.rb +33 -33
  45. data/spec/lib/statistics_spec.rb +14 -12
  46. data/spec/lib/statistics_stores/abstract_store_spec.rb +7 -5
  47. data/spec/lib/statistics_stores/array_store_spec.rb +8 -6
  48. data/spec/lib/statistics_stores/counter_store_spec.rb +8 -6
  49. data/spec/spec_helper.rb +16 -15
  50. metadata +28 -28
  51. data/.ruby-style.yml +0 -1063
  52. data/lib/cascade/helpers/configuration.rb +0 -32
  53. data/spec/lib/helpers/configuration_spec.rb +0 -36
@@ -1,9 +1,11 @@
1
- require "spec_helper"
2
- require "cascade/exceptions/wrong_mapping_format"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/exceptions/wrong_mapping_format'
3
5
 
4
6
  describe Cascade::WrongMappingFormat do
5
7
  subject { Cascade::WrongMappingFormat.new }
6
- it "exception raisable" do
8
+ it 'exception raisable' do
7
9
  assert_respond_to subject, :exception
8
10
  end
9
11
  end
@@ -1,16 +1,18 @@
1
- require "spec_helper"
2
- require "cascade/helpers/hash"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/helpers/hash'
3
5
 
4
6
  describe Hash do
5
- describe "#reverse_merge" do
7
+ describe '#reverse_merge' do
6
8
  using HashRefinements
7
9
 
8
10
  let(:another_hash) { { a: 1, b: 2 } }
9
11
  let(:example_hash) { { a: 4, c: 3 } }
10
12
 
11
- it "merge self into anothe hash" do
13
+ it 'merge self into anothe hash' do
12
14
  assert_equal example_hash.reverse_merge(another_hash),
13
- a: 4, b: 2, c: 3
15
+ a: 4, b: 2, c: 3
14
16
  end
15
17
  end
16
18
  end
@@ -1,26 +1,27 @@
1
- require "spec_helper"
2
- require "cascade/registry"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/registry'
3
5
 
4
6
  describe Cascade::Registry do
5
7
  def described_class
6
8
  Cascade::Registry
7
9
  end
8
10
 
9
- it "creates new instance of default row processor" do
10
- mock(Cascade::RowProcessor).new
11
- described_class.row_processor
11
+ it 'return default callable row processor' do
12
+ assert_respond_to described_class.row_processor, :call
12
13
  end
13
14
 
14
- it "creates new instance of default error handler" do
15
+ it 'creates new instance of default error handler' do
15
16
  mock(Cascade::ErrorHandler).new
16
17
  described_class.error_handler
17
18
  end
18
19
 
19
- it "return default callable data saver" do
20
+ it 'return default callable data saver' do
20
21
  assert_respond_to described_class.data_saver, :call
21
22
  end
22
23
 
23
- it "return default data provider" do
24
+ it 'return default data provider' do
24
25
  assert_raises(Cascade::UnsupportedComponent) do
25
26
  described_class.data_provider
26
27
  end
@@ -1,69 +1,69 @@
1
- require "spec_helper"
2
- require "cascade/row_processor"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/row_processor'
3
5
 
4
6
  describe Cascade::RowProcessor do
5
7
  def described_class
6
8
  Cascade::RowProcessor
7
9
  end
8
10
 
9
- it "allows to set settings" do
10
- assert_respond_to described_class, :use_default_presenter=
11
- assert_respond_to described_class, :deafult_presenter=
12
- end
13
-
14
- context "when parsing row" do
15
- let(:row) { [:a_value, :b_value, :c_value] }
16
- let(:keys) { [:a, :b, :c] }
11
+ context 'when parsing row' do
12
+ let(:row) { %i[a_value b_value c_value] }
13
+ let(:keys) { %i[a b c] }
17
14
  let(:columns_matching) { OpenStruct.new(supported_keys: keys) }
18
15
 
19
16
  before do
20
- keys.each_with_index do |key, index|
17
+ keys.each_with_index do |key, index|
21
18
  stub(columns_matching).index(key) { index }
22
19
  stub(columns_matching).column_type(key) { :string }
23
20
  end
24
21
  end
25
22
 
26
- it "collect row values with corresponding keys" do
23
+ it 'collect row values with corresponding keys' do
27
24
  processed_row = described_class.new(columns_matching:
28
25
  columns_matching).call(row)
29
- assert_equal(processed_row, a: "a_value", b: "b_value", c: "c_value")
26
+ assert_equal(processed_row, a: 'a_value', b: 'b_value', c: 'c_value')
30
27
  end
31
28
  end
32
29
 
33
- context "when presenting row values" do
34
- let(:row) { ["raw_value"] }
30
+ context 'when presenting row values' do
31
+ let(:row) { ['raw_value'] }
35
32
  let(:columns_matching) { OpenStruct.new(supported_keys: [:a]) }
36
- let(:value_presenter) { ->(_raw_value) { "parsed_value" } }
33
+ let(:value_presenter) { ->(_raw_value) { 'parsed_value' } }
37
34
 
38
35
  before do
39
36
  stub(columns_matching).index(:a) { 0 }
40
37
  stub(columns_matching).column_type(:a) { :presenter }
41
38
  end
42
39
 
43
- context "when curresponding presenter passed" do
44
- it "process field with specified presenter" do
45
- parsed_value = described_class.new(columns_matching: columns_matching,
46
- presenter: value_presenter).call(row)[:a]
47
- assert_equal "parsed_value", parsed_value
40
+ context 'when curresponding presenter passed' do
41
+ it 'process field with specified presenter' do
42
+ parsed_value = described_class.new(
43
+ columns_matching: columns_matching,
44
+ ext_presenters: { presenter: value_presenter }
45
+ ).call(row)[:a]
46
+ assert_equal 'parsed_value', parsed_value
48
47
  end
49
48
  end
50
49
 
51
- context "when curresponding presenter not passed" do
52
- it "process field with default presenter if use_default_presenter true" do
53
- described_class.stub(:use_default_presenter, true) do
54
- described_class.stub(:deafult_presenter, -> { value_presenter }) do
55
- parsed_value = described_class.new(columns_matching:
56
- columns_matching).call(row)[:a]
57
- assert_equal "parsed_value", parsed_value
50
+ context 'when curresponding presenter not passed' do
51
+ context 'when use_default_presenter is false' do
52
+ it 'process field and rise error' do
53
+ assert_raises(Cascade::UnknownPresenterType) do
54
+ described_class.new(columns_matching: columns_matching).call(row)
58
55
  end
59
56
  end
60
57
  end
61
58
 
62
- it "process field and rise error if use_default_presenter false" do
63
- described_class.stub(:use_default_presenter, false) do
64
- assert_raises(Cascade::UnknownPresenterType) do
65
- described_class.new(columns_matching: columns_matching).call(row)
66
- end
59
+ context 'when use_default_presenter is true' do
60
+ it 'process field with default presenter' do
61
+ parsed_value = described_class.new(
62
+ columns_matching: columns_matching,
63
+ use_default_presenter: true,
64
+ deafult_presenter: value_presenter
65
+ ).call(row)[:a]
66
+ assert_equal 'parsed_value', parsed_value
67
67
  end
68
68
  end
69
69
  end
@@ -1,37 +1,39 @@
1
- require "spec_helper"
2
- require "cascade/statistics"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/statistics'
3
5
 
4
6
  describe Cascade::Statistics do
5
7
  subject { Cascade::Statistics.instance }
6
8
 
7
- context "#register_action" do
8
- it "regsiter store for statistics with passed name, store type and value" do
9
+ context '#register_action' do
10
+ it 'regsiter store for statistics with passed name, store type and value' do
9
11
  subject.register_action(:record_parsed, :counter)
10
- assert_instance_of Cascade::StatisticsStores::CounterStore, subject.
11
- send(:store_repository)[:record_parsed]
12
+ assert_instance_of Cascade::StatisticsStores::CounterStore, subject
13
+ .send(:store_repository)[:record_parsed]
12
14
  end
13
15
 
14
- it "raise NotImplementedError for unknown stores" do
16
+ it 'raise NotImplementedError for unknown stores' do
15
17
  assert_raises NotImplementedError do
16
18
  subject.register_action(:some_action, :magic)
17
19
  end
18
20
  end
19
21
  end
20
22
 
21
- context "#register_action" do
22
- it "delegate update action to store with passed value" do
23
+ context '#register_action' do
24
+ it 'delegate update action to store with passed value' do
23
25
  mock(subject.send(:store_repository)[:record_parsed]).update(29)
24
26
  subject.update(:record_parsed, 29)
25
27
  end
26
28
 
27
- it "delegate update action to store with nil as default value" do
29
+ it 'delegate update action to store with nil as default value' do
28
30
  mock(subject.send(:store_repository)[:record_parsed]).update(nil)
29
31
  subject.update(:record_parsed, nil)
30
32
  end
31
33
  end
32
34
 
33
- context "#for" do
34
- it "retrives info from store object" do
35
+ context '#for' do
36
+ it 'retrives info from store object' do
35
37
  mock(subject.send(:store_repository)[:record_parsed]).store
36
38
  subject.for(:record_parsed)
37
39
  end
@@ -1,20 +1,22 @@
1
- require "spec_helper"
2
- require "cascade/statistics_stores/abstract_store"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/statistics_stores/abstract_store'
3
5
 
4
6
  describe Cascade::StatisticsStores::AbstractStore do
5
7
  def described_class
6
8
  Cascade::StatisticsStores::AbstractStore
7
9
  end
8
10
 
9
- context "on initialization" do
10
- it "will rise NotImplementedError for default value" do
11
+ context 'on initialization' do
12
+ it 'will rise NotImplementedError for default value' do
11
13
  assert_raises NotImplementedError do
12
14
  described_class.new
13
15
  end
14
16
  end
15
17
  end
16
18
 
17
- it "return NotImplementedError for abstract method update" do
19
+ it 'return NotImplementedError for abstract method update' do
18
20
  assert_raises NotImplementedError do
19
21
  described_class.new(1).update(:some_word)
20
22
  end
@@ -1,17 +1,19 @@
1
- require "spec_helper"
2
- require "cascade/statistics_stores/abstract_store"
3
- require "cascade/statistics_stores/array_store"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/statistics_stores/abstract_store'
5
+ require 'cascade/statistics_stores/array_store'
4
6
 
5
7
  describe Cascade::StatisticsStores::ArrayStore do
6
8
  subject { Cascade::StatisticsStores::ArrayStore.new }
7
9
 
8
- context "on initialization" do
9
- it "use empty array as default value" do
10
+ context 'on initialization' do
11
+ it 'use empty array as default value' do
10
12
  assert_equal subject.store, []
11
13
  end
12
14
  end
13
15
 
14
- it "add value to array on update" do
16
+ it 'add value to array on update' do
15
17
  mock(subject.store).<<(:some_value)
16
18
  subject.update(:some_value)
17
19
  end
@@ -1,17 +1,19 @@
1
- require "spec_helper"
2
- require "cascade/statistics_stores/abstract_store"
3
- require "cascade/statistics_stores/counter_store"
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'cascade/statistics_stores/abstract_store'
5
+ require 'cascade/statistics_stores/counter_store'
4
6
 
5
7
  describe Cascade::StatisticsStores::CounterStore do
6
8
  subject { Cascade::StatisticsStores::CounterStore.new }
7
9
 
8
- context "on initialization" do
9
- it "use empty array as default value" do
10
+ context 'on initialization' do
11
+ it 'use empty array as default value' do
10
12
  assert_equal subject.store, 0
11
13
  end
12
14
  end
13
15
 
14
- it "add value to array on update" do
16
+ it 'add value to array on update' do
15
17
  previous_value = subject.store
16
18
  subject.update
17
19
  assert_equal subject.store, previous_value + 1
@@ -1,23 +1,24 @@
1
- require "simplecov"
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
2
4
  SimpleCov.start do
3
- add_filter "spec/"
4
- add_filter "vendor/"
5
+ add_filter 'spec/'
6
+ add_filter 'vendor/'
5
7
  end
6
8
 
7
- require "minitest/autorun"
8
- require "minitest/pride"
9
- require "minitest/mock"
10
- require "minitest/hell"
11
- require "shoulda/matchers"
12
- require "rr"
13
-
14
- require "codeclimate-test-reporter"
15
- CodeClimate::TestReporter.start
9
+ require 'minitest/autorun'
10
+ require 'minitest/pride'
11
+ require 'minitest/mock'
12
+ require 'minitest/hell'
13
+ require 'shoulda/matchers'
14
+ require 'rr'
16
15
 
17
- class Minitest::Test
18
- parallelize_me!
16
+ module Minitest
17
+ class Test
18
+ parallelize_me!
19
+ end
19
20
  end
20
21
 
21
22
  module Kernel
22
- alias_method :context, :describe
23
+ alias context describe
23
24
  end
metadata CHANGED
@@ -1,31 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cascade-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.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: 2016-12-06 00:00:00.000000000 Z
11
+ date: 2019-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: yard
28
+ name: codeclimate-test-reporter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest
56
+ name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rr
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,21 +81,21 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: shoulda-matchers
84
+ name: rr
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 2.8.0
89
+ version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 2.8.0
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: simplecov
98
+ name: rubocop
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -109,21 +109,21 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: pry
112
+ name: shoulda-matchers
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 2.8.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: 2.8.0
125
125
  - !ruby/object:Gem::Dependency
126
- name: rubocop
126
+ name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: codeclimate-test-reporter
140
+ name: yard
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -159,7 +159,8 @@ extra_rdoc_files: []
159
159
  files:
160
160
  - ".gitignore"
161
161
  - ".hound.yml"
162
- - ".ruby-style.yml"
162
+ - ".rubocop.yml"
163
+ - ".travis.yml"
163
164
  - Gemfile
164
165
  - README.md
165
166
  - Rakefile
@@ -177,7 +178,6 @@ files:
177
178
  - lib/cascade/exceptions/unknown_presenter_type.rb
178
179
  - lib/cascade/exceptions/unsupported_component.rb
179
180
  - lib/cascade/exceptions/wrong_mapping_format.rb
180
- - lib/cascade/helpers/configuration.rb
181
181
  - lib/cascade/helpers/hash.rb
182
182
  - lib/cascade/registry.rb
183
183
  - lib/cascade/row_processor.rb
@@ -187,6 +187,7 @@ files:
187
187
  - lib/cascade/statistics_stores/array_store.rb
188
188
  - lib/cascade/statistics_stores/counter_store.rb
189
189
  - lib/cascade/version.rb
190
+ - spec/integration_spec.rb
190
191
  - spec/lib/columns_matching_spec.rb
191
192
  - spec/lib/complex_fields/array_processor_spec.rb
192
193
  - spec/lib/complex_fields/boolean_spec.rb
@@ -197,7 +198,6 @@ files:
197
198
  - spec/lib/exceptions/unknown_presenter_type_spec.rb
198
199
  - spec/lib/exceptions/unsupported_component_spec.rb
199
200
  - spec/lib/exceptions/wrong_mapping_format_spec.rb
200
- - spec/lib/helpers/configuration_spec.rb
201
201
  - spec/lib/helpers/hash_spec.rb
202
202
  - spec/lib/registry_spec.rb
203
203
  - spec/lib/row_processor_spec.rb
@@ -226,11 +226,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  version: '0'
227
227
  requirements: []
228
228
  rubyforge_project:
229
- rubygems_version: 2.4.5
229
+ rubygems_version: 2.5.2.3
230
230
  signing_key:
231
231
  specification_version: 4
232
232
  summary: Ruby data parser gem.
233
233
  test_files:
234
+ - spec/integration_spec.rb
234
235
  - spec/lib/columns_matching_spec.rb
235
236
  - spec/lib/complex_fields/array_processor_spec.rb
236
237
  - spec/lib/complex_fields/boolean_spec.rb
@@ -241,7 +242,6 @@ test_files:
241
242
  - spec/lib/exceptions/unknown_presenter_type_spec.rb
242
243
  - spec/lib/exceptions/unsupported_component_spec.rb
243
244
  - spec/lib/exceptions/wrong_mapping_format_spec.rb
244
- - spec/lib/helpers/configuration_spec.rb
245
245
  - spec/lib/helpers/hash_spec.rb
246
246
  - spec/lib/registry_spec.rb
247
247
  - spec/lib/row_processor_spec.rb