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 'StringInteraction' do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'SymbolInteraction' do
@@ -1,26 +1,28 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
- class TimeZone
5
+ TimeZone = Class.new do
4
6
  def self.at(*args)
5
7
  TimeWithZone.at(*args)
6
8
  end
7
9
  end
8
10
 
9
- class TimeWithZone
11
+ TimeWithZone = Class.new do
10
12
  def self.at(*args)
11
- self.new(Time.at(*args))
13
+ new(Time.at(*args))
12
14
  end
13
15
 
14
16
  def initialize(time)
15
17
  @time = time
16
18
  end
17
19
 
18
- def ==(time)
19
- @time == time
20
+ def ==(other)
21
+ @time == other
20
22
  end
21
23
  end
22
24
 
23
- class TimeInteraction < ActiveInteraction::Base
25
+ TimeInteraction = Class.new(TestInteraction) do
24
26
  time :a
25
27
 
26
28
  def execute
@@ -37,7 +39,7 @@ describe TimeInteraction do
37
39
 
38
40
  before do
39
41
  allow(Time).to receive(:zone).and_return(TimeZone)
40
- options.merge!(a: a)
42
+ inputs.merge!(a: a)
41
43
  end
42
44
 
43
45
  it 'returns the correct value' do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::ActiveModel do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::Core do
@@ -31,11 +33,14 @@ describe ActiveInteraction::Core do
31
33
  end
32
34
 
33
35
  shared_examples '#run!' do
34
- let(:options) { double }
36
+ let(:inputs) { double }
35
37
 
36
38
  it 'calls #run' do
37
- expect(instance).to receive(:run).once.with(options)
38
- instance.run!(options) rescue nil
39
+ begin
40
+ instance.run!(inputs)
41
+ rescue ActiveInteraction::InvalidInteractionError
42
+ expect(instance).to have_received(:run).once.with(inputs)
43
+ end
39
44
  end
40
45
  end
41
46
 
@@ -47,9 +52,9 @@ describe ActiveInteraction::Core do
47
52
  end
48
53
 
49
54
  it 'raises an error' do
50
- expect {
55
+ expect do
51
56
  instance.run!
52
- }.to raise_error ActiveInteraction::InvalidInteractionError
57
+ end.to raise_error ActiveInteraction::InvalidInteractionError
53
58
  end
54
59
  end
55
60
 
@@ -93,14 +98,14 @@ describe ActiveInteraction::Core do
93
98
  end
94
99
 
95
100
  it 'calls ActiveRecord::Base#transaction' do
96
- block = Proc.new {}
101
+ block = proc {}
97
102
  expect(ActiveRecord::Base).to receive(:transaction).once.with(no_args)
98
103
  instance.send(:transaction, &block)
99
104
  end
100
105
 
101
106
  it 'calls ActiveRecord::Base#transaction' do
102
107
  args = [:a, :b, :c]
103
- block = Proc.new {}
108
+ block = proc {}
104
109
  expect(ActiveRecord::Base).to receive(:transaction).once.with(*args)
105
110
  instance.send(:transaction, *args, &block)
106
111
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::MethodMissing do
@@ -9,9 +11,9 @@ describe ActiveInteraction::MethodMissing do
9
11
  let(:slug) { :slug }
10
12
 
11
13
  it 'calls super' do
12
- expect {
14
+ expect do
13
15
  instance.method_missing(slug)
14
- }.to raise_error NameError
16
+ end.to raise_error NameError
15
17
  end
16
18
  end
17
19
 
@@ -24,18 +26,18 @@ describe ActiveInteraction::MethodMissing do
24
26
  end
25
27
 
26
28
  it 'yields' do
27
- expect { |b|
29
+ expect do |b|
28
30
  instance.method_missing(slug, &b)
29
- }.to yield_with_args(filter, [], {})
31
+ end.to yield_with_args(filter, [], {})
30
32
  end
31
33
 
32
34
  context 'with names' do
33
35
  let(:names) { [:a, :b, :c] }
34
36
 
35
37
  it 'yields' do
36
- expect { |b|
38
+ expect do |b|
37
39
  instance.method_missing(:boolean, *names, &b)
38
- }.to yield_with_args(filter, names, {})
40
+ end.to yield_with_args(filter, names, {})
39
41
  end
40
42
  end
41
43
 
@@ -43,9 +45,9 @@ describe ActiveInteraction::MethodMissing do
43
45
  let(:options) { { a: nil, b: false, c: true } }
44
46
 
45
47
  it 'yields' do
46
- expect { |b|
48
+ expect do |b|
47
49
  instance.method_missing(:boolean, options, &b)
48
- }.to yield_with_args(filter, [], options)
50
+ end.to yield_with_args(filter, [], options)
49
51
  end
50
52
  end
51
53
 
@@ -54,9 +56,9 @@ describe ActiveInteraction::MethodMissing do
54
56
  let(:options) { { a: nil, b: false, c: true } }
55
57
 
56
58
  it 'yields' do
57
- expect { |b|
59
+ expect do |b|
58
60
  instance.method_missing(:boolean, *names, options, &b)
59
- }.to yield_with_args(filter, names, options)
61
+ end.to yield_with_args(filter, names, options)
60
62
  end
61
63
  end
62
64
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::OverloadHash do
@@ -21,18 +23,18 @@ describe ActiveInteraction::OverloadHash do
21
23
 
22
24
  it 'calls method_missing' do
23
25
  hash
24
- expect(subject).to have_received(:method_missing).once.
25
- with(:hash, *arguments)
26
+ expect(subject).to have_received(:method_missing).once
27
+ .with(:hash, *arguments)
26
28
  end
27
29
 
28
30
  context 'with a block' do
29
- let(:block) { Proc.new {} }
31
+ let(:block) { proc {} }
30
32
  let(:hash) { subject.hash(*arguments, &block) }
31
33
 
32
34
  it 'calls method_missing' do
33
35
  hash
34
- expect(subject).to have_received(:method_missing).once.
35
- with(:hash, *arguments)
36
+ expect(subject).to have_received(:method_missing).once
37
+ .with(:hash, *arguments)
36
38
  end
37
39
 
38
40
  it 'passes the block to method_missing' do
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe ActiveInteraction::Validation do
@@ -16,7 +18,7 @@ describe ActiveInteraction::Validation do
16
18
  end
17
19
 
18
20
  context 'filter.cast returns a value' do
19
- let(:inputs) { {name: 1} }
21
+ let(:inputs) { { name: 1 } }
20
22
 
21
23
  before do
22
24
  filter.stub(:cast).and_return(1)
@@ -37,7 +39,8 @@ describe ActiveInteraction::Validation do
37
39
  let(:filter) { ActiveInteraction::FloatFilter.new(:name, {}) }
38
40
 
39
41
  it 'returns an :invalid_nested error' do
40
- type = I18n.translate("#{ActiveInteraction::Base.i18n_scope}.types.#{filter.class.slug.to_s}")
42
+ type = I18n.translate(
43
+ "#{ActiveInteraction::Base.i18n_scope}.types.#{filter.class.slug}")
41
44
 
42
45
  expect(result).to eq [[filter.name, :invalid, nil, type: type]]
43
46
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  require 'coveralls'
2
4
  Coveralls.wear!
3
5
 
@@ -10,3 +12,5 @@ RSpec.configure do |config|
10
12
  config.run_all_when_everything_filtered = true
11
13
  config.filter_run_including :focus
12
14
  end
15
+
16
+ I18n.config.enforce_available_locales = true
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  shared_context 'filters' do
2
4
  let(:block) { nil }
3
5
  let(:name) { SecureRandom.hex.to_sym }
@@ -24,9 +26,9 @@ shared_examples_for 'a filter' do
24
26
  describe '.factory' do
25
27
  context 'with an invalid slug' do
26
28
  it 'raises an error' do
27
- expect {
29
+ expect do
28
30
  described_class.factory(:invalid)
29
- }.to raise_error ActiveInteraction::MissingFilterError
31
+ end.to raise_error ActiveInteraction::MissingFilterError
30
32
  end
31
33
  end
32
34
 
@@ -60,18 +62,18 @@ shared_examples_for 'a filter' do
60
62
  include_context 'required'
61
63
 
62
64
  it 'raises an error' do
63
- expect {
65
+ expect do
64
66
  filter.cast(value)
65
- }.to raise_error ActiveInteraction::MissingValueError
67
+ end.to raise_error ActiveInteraction::MissingValueError
66
68
  end
67
69
 
68
70
  context 'with an invalid default' do
69
71
  let(:value) { Object.new }
70
72
 
71
73
  it 'raises an error' do
72
- expect {
74
+ expect do
73
75
  filter.cast(value)
74
- }.to raise_error ActiveInteraction::InvalidValueError
76
+ end.to raise_error ActiveInteraction::InvalidValueError
75
77
  end
76
78
  end
77
79
  end
@@ -92,18 +94,18 @@ shared_examples_for 'a filter' do
92
94
  include_context 'required'
93
95
 
94
96
  it 'raises an error' do
95
- expect {
97
+ expect do
96
98
  filter.clean(value)
97
- }.to raise_error ActiveInteraction::MissingValueError
99
+ end.to raise_error ActiveInteraction::MissingValueError
98
100
  end
99
101
 
100
102
  context 'with an invalid value' do
101
103
  let(:value) { Object.new }
102
104
 
103
105
  it 'raises an error' do
104
- expect {
106
+ expect do
105
107
  filter.clean(value)
106
- }.to raise_error ActiveInteraction::InvalidValueError
108
+ end.to raise_error ActiveInteraction::InvalidValueError
107
109
  end
108
110
  end
109
111
  end
@@ -114,9 +116,9 @@ shared_examples_for 'a filter' do
114
116
  end
115
117
 
116
118
  it 'raises an error' do
117
- expect {
119
+ expect do
118
120
  filter.clean(value)
119
- }.to raise_error ActiveInteraction::InvalidDefaultError
121
+ end.to raise_error ActiveInteraction::InvalidDefaultError
120
122
  end
121
123
  end
122
124
  end
@@ -134,9 +136,9 @@ shared_examples_for 'a filter' do
134
136
  include_context 'required'
135
137
 
136
138
  it 'raises an error' do
137
- expect {
139
+ expect do
138
140
  filter.default
139
- }.to raise_error ActiveInteraction::NoDefaultError
141
+ end.to raise_error ActiveInteraction::NoDefaultError
140
142
  end
141
143
  end
142
144
 
@@ -146,9 +148,9 @@ shared_examples_for 'a filter' do
146
148
  end
147
149
 
148
150
  it 'raises an error' do
149
- expect {
151
+ expect do
150
152
  filter.default
151
- }.to raise_error ActiveInteraction::InvalidDefaultError
153
+ end.to raise_error ActiveInteraction::InvalidDefaultError
152
154
  end
153
155
  end
154
156
  end
@@ -1,4 +1,6 @@
1
- class TestInteraction < ActiveInteraction::Base
1
+ # coding: utf-8
2
+
3
+ TestInteraction = Class.new(ActiveInteraction::Base) do
2
4
  def self.name
3
5
  SecureRandom.hex
4
6
  end
@@ -8,8 +10,8 @@ class TestInteraction < ActiveInteraction::Base
8
10
  end
9
11
 
10
12
  shared_context 'interactions' do
11
- let(:options) { {} }
12
- let(:outcome) { described_class.run(options) }
13
+ let(:inputs) { {} }
14
+ let(:outcome) { described_class.run(inputs) }
13
15
  let(:result) { outcome.result }
14
16
  end
15
17
 
@@ -36,16 +38,16 @@ shared_examples_for 'an interaction' do |type, generator, filter_options = {}|
36
38
  end
37
39
  end
38
40
 
39
- context 'without required options' do
41
+ context 'without required inputs' do
40
42
  it 'is invalid' do
41
43
  expect(outcome).to be_invalid
42
44
  end
43
45
  end
44
46
 
45
- context 'with options[:required]' do
47
+ context 'with inputs[:required]' do
46
48
  let(:required) { generator.call }
47
49
 
48
- before { options.merge!(required: required) }
50
+ before { inputs.merge!(required: required) }
49
51
 
50
52
  it 'is valid' do
51
53
  expect(outcome).to be_valid
@@ -64,7 +66,7 @@ shared_examples_for 'an interaction' do |type, generator, filter_options = {}|
64
66
  end
65
67
 
66
68
  it 'does not return nil for :default when given nil' do
67
- options.merge!(default: nil)
69
+ inputs.merge!(default: nil)
68
70
  expect(result[:default]).to_not be_nil
69
71
  end
70
72
 
@@ -76,20 +78,20 @@ shared_examples_for 'an interaction' do |type, generator, filter_options = {}|
76
78
  expect(result[:defaults_2]).to_not be_nil
77
79
  end
78
80
 
79
- context 'with options[:optional]' do
81
+ context 'with inputs[:optional]' do
80
82
  let(:optional) { generator.call }
81
83
 
82
- before { options.merge!(optional: optional) }
84
+ before { inputs.merge!(optional: optional) }
83
85
 
84
86
  it 'returns the correct value for :optional' do
85
87
  expect(result[:optional]).to eq optional
86
88
  end
87
89
  end
88
90
 
89
- context 'with options[:default]' do
91
+ context 'with inputs[:default]' do
90
92
  let(:default) { generator.call }
91
93
 
92
- before { options.merge!(default: default) }
94
+ before { inputs.merge!(default: default) }
93
95
 
94
96
  it 'returns the correct value for :default' do
95
97
  expect(result[:default]).to eq default
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_interaction
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Lasseigne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-02 00:00:00.000000000 Z
12
+ date: 2013-12-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -51,28 +51,28 @@ dependencies:
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: '0.6'
54
+ version: '0.7'
55
55
  type: :development
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0.6'
61
+ version: '0.7'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: guard-rspec
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '4.2'
69
69
  type: :development
70
70
  prerelease: false
71
71
  version_requirements: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: '3.0'
75
+ version: '4.2'
76
76
  - !ruby/object:Gem::Dependency
77
77
  name: rake
78
78
  requirement: !ruby/object:Gem::Requirement
@@ -129,6 +129,20 @@ dependencies:
129
129
  - - ~>
130
130
  - !ruby/object:Gem::Version
131
131
  version: '2.14'
132
+ - !ruby/object:Gem::Dependency
133
+ name: rubocop
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: '0.15'
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: '0.15'
132
146
  - !ruby/object:Gem::Dependency
133
147
  name: yard
134
148
  requirement: !ruby/object:Gem::Requirement