active_interaction 0.9.0 → 0.9.1

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -1
  3. data/README.md +4 -4
  4. data/lib/active_interaction.rb +2 -0
  5. data/lib/active_interaction/base.rb +26 -14
  6. data/lib/active_interaction/errors.rb +7 -10
  7. data/lib/active_interaction/filter.rb +10 -10
  8. data/lib/active_interaction/filters.rb +2 -0
  9. data/lib/active_interaction/filters/abstract_date_time_filter.rb +4 -2
  10. data/lib/active_interaction/filters/abstract_numeric_filter.rb +3 -1
  11. data/lib/active_interaction/filters/array_filter.rb +5 -3
  12. data/lib/active_interaction/filters/boolean_filter.rb +2 -0
  13. data/lib/active_interaction/filters/date_filter.rb +2 -0
  14. data/lib/active_interaction/filters/date_time_filter.rb +2 -0
  15. data/lib/active_interaction/filters/file_filter.rb +2 -0
  16. data/lib/active_interaction/filters/float_filter.rb +2 -0
  17. data/lib/active_interaction/filters/hash_filter.rb +7 -6
  18. data/lib/active_interaction/filters/integer_filter.rb +2 -0
  19. data/lib/active_interaction/filters/model_filter.rb +2 -0
  20. data/lib/active_interaction/filters/string_filter.rb +2 -0
  21. data/lib/active_interaction/filters/symbol_filter.rb +2 -0
  22. data/lib/active_interaction/filters/time_filter.rb +2 -0
  23. data/lib/active_interaction/modules/active_model.rb +2 -0
  24. data/lib/active_interaction/modules/core.rb +4 -1
  25. data/lib/active_interaction/modules/method_missing.rb +2 -0
  26. data/lib/active_interaction/modules/overload_hash.rb +2 -0
  27. data/lib/active_interaction/modules/validation.rb +10 -5
  28. data/lib/active_interaction/version.rb +4 -1
  29. data/spec/active_interaction/base_spec.rb +60 -35
  30. data/spec/active_interaction/errors_spec.rb +48 -14
  31. data/spec/active_interaction/filter_spec.rb +4 -2
  32. data/spec/active_interaction/filters/array_filter_spec.rb +13 -6
  33. data/spec/active_interaction/filters/boolean_filter_spec.rb +2 -0
  34. data/spec/active_interaction/filters/date_filter_spec.rb +6 -4
  35. data/spec/active_interaction/filters/date_time_filter_spec.rb +6 -4
  36. data/spec/active_interaction/filters/file_filter_spec.rb +2 -0
  37. data/spec/active_interaction/filters/float_filter_spec.rb +4 -2
  38. data/spec/active_interaction/filters/hash_filter_spec.rb +16 -4
  39. data/spec/active_interaction/filters/integer_filter_spec.rb +4 -2
  40. data/spec/active_interaction/filters/model_filter_spec.rb +4 -2
  41. data/spec/active_interaction/filters/string_filter_spec.rb +2 -0
  42. data/spec/active_interaction/filters/symbol_filter_spec.rb +2 -0
  43. data/spec/active_interaction/filters/time_filter_spec.rb +6 -4
  44. data/spec/active_interaction/filters_spec.rb +2 -0
  45. data/spec/active_interaction/i18n_spec.rb +9 -9
  46. data/spec/active_interaction/integration/array_interaction_spec.rb +10 -8
  47. data/spec/active_interaction/integration/boolean_interaction_spec.rb +2 -0
  48. data/spec/active_interaction/integration/date_interaction_spec.rb +2 -0
  49. data/spec/active_interaction/integration/date_time_interaction_spec.rb +2 -0
  50. data/spec/active_interaction/integration/file_interaction_spec.rb +2 -0
  51. data/spec/active_interaction/integration/float_interaction_spec.rb +2 -0
  52. data/spec/active_interaction/integration/hash_interaction_spec.rb +10 -8
  53. data/spec/active_interaction/integration/integer_interaction_spec.rb +2 -0
  54. data/spec/active_interaction/integration/model_interaction_spec.rb +3 -1
  55. data/spec/active_interaction/integration/string_interaction_spec.rb +2 -0
  56. data/spec/active_interaction/integration/symbol_interaction_spec.rb +2 -0
  57. data/spec/active_interaction/integration/time_interaction_spec.rb +9 -7
  58. data/spec/active_interaction/modules/active_model_spec.rb +2 -0
  59. data/spec/active_interaction/modules/core_spec.rb +12 -7
  60. data/spec/active_interaction/modules/method_missing_spec.rb +12 -10
  61. data/spec/active_interaction/modules/overload_hash_spec.rb +7 -5
  62. data/spec/active_interaction/modules/validation_spec.rb +5 -2
  63. data/spec/spec_helper.rb +4 -0
  64. data/spec/support/filters.rb +18 -16
  65. data/spec/support/interactions.rb +13 -11
  66. metadata +20 -6
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::BooleanFilter, :filter do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::DateFilter, :filter do
@@ -43,18 +45,18 @@ describe ActiveInteraction::DateFilter, :filter do
43
45
  let(:value) { 'invalid' }
44
46
 
45
47
  it 'raises an error' do
46
- expect {
48
+ expect do
47
49
  filter.cast(value)
48
- }.to raise_error ActiveInteraction::InvalidValueError
50
+ end.to raise_error ActiveInteraction::InvalidValueError
49
51
  end
50
52
 
51
53
  context 'with format' do
52
54
  include_context 'with format'
53
55
 
54
56
  it 'raises an error' do
55
- expect {
57
+ expect do
56
58
  filter.cast(value)
57
- }.to raise_error ActiveInteraction::InvalidValueError
59
+ end.to raise_error ActiveInteraction::InvalidValueError
58
60
  end
59
61
  end
60
62
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::DateTimeFilter, :filter do
@@ -43,18 +45,18 @@ describe ActiveInteraction::DateTimeFilter, :filter do
43
45
  let(:value) { 'invalid' }
44
46
 
45
47
  it 'raises an error' do
46
- expect {
48
+ expect do
47
49
  filter.cast(value)
48
- }.to raise_error ActiveInteraction::InvalidValueError
50
+ end.to raise_error ActiveInteraction::InvalidValueError
49
51
  end
50
52
 
51
53
  context 'with format' do
52
54
  include_context 'with format'
53
55
 
54
56
  it 'raises an error' do
55
- expect {
57
+ expect do
56
58
  filter.cast(value)
57
- }.to raise_error ActiveInteraction::InvalidValueError
59
+ end.to raise_error ActiveInteraction::InvalidValueError
58
60
  end
59
61
  end
60
62
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::FileFilter, :filter do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::FloatFilter, :filter do
@@ -33,9 +35,9 @@ describe ActiveInteraction::FloatFilter, :filter do
33
35
  let(:value) { 'invalid' }
34
36
 
35
37
  it 'raises an error' do
36
- expect {
38
+ expect do
37
39
  filter.cast(value)
38
- }.to raise_error ActiveInteraction::InvalidValueError
40
+ end.to raise_error ActiveInteraction::InvalidValueError
39
41
  end
40
42
  end
41
43
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::HashFilter, :filter do
@@ -5,7 +7,7 @@ describe ActiveInteraction::HashFilter, :filter do
5
7
  it_behaves_like 'a filter'
6
8
 
7
9
  context 'with a nested nameless filter' do
8
- let(:block) { Proc.new { hash } }
10
+ let(:block) { proc { hash } }
9
11
 
10
12
  it 'raises an error' do
11
13
  expect { filter }.to raise_error ActiveInteraction::InvalidFilterError
@@ -30,7 +32,7 @@ describe ActiveInteraction::HashFilter, :filter do
30
32
  end
31
33
 
32
34
  context 'with a nested filter' do
33
- let(:block) { Proc.new { hash :a } }
35
+ let(:block) { proc { hash :a } }
34
36
 
35
37
  context 'with a Hash' do
36
38
  let(:value) { { a: {} } }
@@ -38,6 +40,16 @@ describe ActiveInteraction::HashFilter, :filter do
38
40
  it 'returns the Hash' do
39
41
  expect(filter.cast(value)).to eq value
40
42
  end
43
+
44
+ context 'with String keys' do
45
+ before do
46
+ value.stringify_keys!
47
+ end
48
+
49
+ it 'does not raise an error' do
50
+ expect { filter.cast(value) }.to_not raise_error
51
+ end
52
+ end
41
53
  end
42
54
  end
43
55
  end
@@ -59,9 +71,9 @@ describe ActiveInteraction::HashFilter, :filter do
59
71
  end
60
72
 
61
73
  it 'raises an error' do
62
- expect {
74
+ expect do
63
75
  filter.default
64
- }.to raise_error ActiveInteraction::InvalidDefaultError
76
+ end.to raise_error ActiveInteraction::InvalidDefaultError
65
77
  end
66
78
  end
67
79
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::IntegerFilter, :filter do
@@ -33,9 +35,9 @@ describe ActiveInteraction::IntegerFilter, :filter do
33
35
  let(:value) { 'invalid' }
34
36
 
35
37
  it 'raises an error' do
36
- expect {
38
+ expect do
37
39
  filter.cast(value)
38
- }.to raise_error ActiveInteraction::InvalidValueError
40
+ end.to raise_error ActiveInteraction::InvalidValueError
39
41
  end
40
42
  end
41
43
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  class Model; end
@@ -35,9 +37,9 @@ describe ActiveInteraction::ModelFilter, :filter do
35
37
  end
36
38
 
37
39
  it 'raises an error' do
38
- expect {
40
+ expect do
39
41
  filter.cast(value)
40
- }.to raise_error ActiveInteraction::InvalidClassError
42
+ end.to raise_error ActiveInteraction::InvalidClassError
41
43
  end
42
44
  end
43
45
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::StringFilter, :filter do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::SymbolFilter, :filter do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::TimeFilter, :filter do
@@ -43,18 +45,18 @@ describe ActiveInteraction::TimeFilter, :filter do
43
45
  let(:value) { 'invalid' }
44
46
 
45
47
  it 'raises an error' do
46
- expect {
48
+ expect do
47
49
  filter.cast(value)
48
- }.to raise_error ActiveInteraction::InvalidValueError
50
+ end.to raise_error ActiveInteraction::InvalidValueError
49
51
  end
50
52
 
51
53
  context 'with format' do
52
54
  include_context 'with format'
53
55
 
54
56
  it do
55
- expect {
57
+ expect do
56
58
  filter.cast(value)
57
- }.to raise_error ActiveInteraction::InvalidValueError
59
+ end.to raise_error ActiveInteraction::InvalidValueError
58
60
  end
59
61
  end
60
62
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::Filters do
@@ -1,11 +1,11 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
- class I18nInteraction < ActiveInteraction::Base
5
+ I18nInteraction = Class.new(TestInteraction) do
4
6
  hash :a do
5
7
  hash :x
6
8
  end
7
-
8
- def execute; end
9
9
  end
10
10
 
11
11
  describe I18nInteraction do
@@ -47,7 +47,7 @@ describe I18nInteraction do
47
47
  end
48
48
 
49
49
  it 'returns the translation' do
50
- options.merge!(a: Object.new)
50
+ inputs.merge!(a: Object.new)
51
51
  expect(outcome.errors[:a]).to eq [translation]
52
52
  end
53
53
  end
@@ -74,20 +74,20 @@ describe I18nInteraction do
74
74
  end
75
75
  end
76
76
 
77
- context 'english'.reverse do
77
+ context 'hsilgne' do
78
78
  include_examples 'translation'
79
79
 
80
80
  before do
81
- I18n.locale = 'english'.reverse
82
-
83
- I18n.backend.store_translations(I18n.locale, active_interaction: {
81
+ I18n.backend.store_translations('hsilgne', active_interaction: {
84
82
  errors: { messages: {
85
83
  invalid: "%{type} #{'invalid'.reverse}",
86
84
  invalid_nested: 'invalid_nested'.reverse,
87
85
  missing: 'missing'.reverse
88
86
  } },
89
- types: TYPES.reduce({}) { |a, e| a[e] = e.reverse; a }
87
+ types: TYPES.each_with_object({}) { |e, a| a[e] = e.reverse }
90
88
  })
89
+
90
+ I18n.locale = 'hsilgne'
91
91
  end
92
92
  end
93
93
  end
@@ -1,6 +1,8 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
- class ArrayInteraction < ActiveInteraction::Base
5
+ ArrayInteraction = Class.new(TestInteraction) do
4
6
  array :a do
5
7
  array
6
8
  end
@@ -9,7 +11,7 @@ class ArrayInteraction < ActiveInteraction::Base
9
11
  end
10
12
 
11
13
  def execute
12
- { a: a, b: b }
14
+ inputs
13
15
  end
14
16
  end
15
17
 
@@ -17,10 +19,10 @@ describe ArrayInteraction do
17
19
  include_context 'interactions'
18
20
  it_behaves_like 'an interaction', :array, -> { [] }
19
21
 
20
- context 'with options[:a]' do
22
+ context 'with inputs[:a]' do
21
23
  let(:a) { [[]] }
22
24
 
23
- before { options.merge!(a: a) }
25
+ before { inputs.merge!(a: a) }
24
26
 
25
27
  it 'returns the correct value for :a' do
26
28
  expect(result[:a]).to eq a
@@ -33,23 +35,23 @@ describe ArrayInteraction do
33
35
 
34
36
  context 'with an invalid default' do
35
37
  it 'raises an error' do
36
- expect {
38
+ expect do
37
39
  Class.new(ActiveInteraction::Base) do
38
40
  array :a, default: Object.new
39
41
  end
40
- }.to raise_error ActiveInteraction::InvalidDefaultError
42
+ end.to raise_error ActiveInteraction::InvalidDefaultError
41
43
  end
42
44
  end
43
45
 
44
46
  context 'with an invalid nested default' do
45
47
  it 'raises an error' do
46
- expect {
48
+ expect do
47
49
  Class.new(ActiveInteraction::Base) do
48
50
  array :a, default: [Object.new] do
49
51
  array
50
52
  end
51
53
  end
52
- }.to raise_error ActiveInteraction::InvalidDefaultError
54
+ end.to raise_error ActiveInteraction::InvalidDefaultError
53
55
  end
54
56
  end
55
57
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'BooleanInteraction' do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'DateInteraction' do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'DateTimeInteraction' do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'FileInteraction' do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'FloatInteraction' do
@@ -1,6 +1,8 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
- class HashInteraction < ActiveInteraction::Base
5
+ HashInteraction = Class.new(TestInteraction) do
4
6
  hash :a do
5
7
  hash :x
6
8
  end
@@ -9,7 +11,7 @@ class HashInteraction < ActiveInteraction::Base
9
11
  end
10
12
 
11
13
  def execute
12
- { a: a, b: b }
14
+ inputs
13
15
  end
14
16
  end
15
17
 
@@ -17,10 +19,10 @@ describe HashInteraction do
17
19
  include_context 'interactions'
18
20
  it_behaves_like 'an interaction', :hash, -> { {} }
19
21
 
20
- context 'with options[:a]' do
22
+ context 'with inputs[:a]' do
21
23
  let(:a) { { x: {} } }
22
24
 
23
- before { options.merge!(a: a) }
25
+ before { inputs.merge!(a: a) }
24
26
 
25
27
  it 'returns the correct value for :a' do
26
28
  expect(result[:a]).to eq a.symbolize_keys
@@ -33,23 +35,23 @@ describe HashInteraction do
33
35
 
34
36
  context 'with an invalid default' do
35
37
  it 'raises an error' do
36
- expect {
38
+ expect do
37
39
  Class.new(ActiveInteraction::Base) do
38
40
  hash :a, default: Object.new
39
41
  end
40
- }.to raise_error ActiveInteraction::InvalidDefaultError
42
+ end.to raise_error ActiveInteraction::InvalidDefaultError
41
43
  end
42
44
  end
43
45
 
44
46
  context 'with an invalid nested default' do
45
47
  it 'raises an error' do
46
- expect {
48
+ expect do
47
49
  Class.new(ActiveInteraction::Base) do
48
50
  hash :a, default: { x: Object.new } do
49
51
  hash :x
50
52
  end
51
53
  end
52
- }.to raise_error ActiveInteraction::InvalidDefaultError
54
+ end.to raise_error ActiveInteraction::InvalidDefaultError
53
55
  end
54
56
  end
55
57
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'IntegerInteraction' do
@@ -1,5 +1,7 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'ModelInteraction' do
4
- it_behaves_like 'an interaction', :model, -> { Proc.new {} }, class: Proc
6
+ it_behaves_like 'an interaction', :model, -> { proc {} }, class: Proc
5
7
  end