active_interaction 1.2.0 → 1.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -1
- data/lib/active_interaction.rb +3 -1
- data/lib/active_interaction/backports.rb +28 -0
- data/lib/active_interaction/filters/hash_filter.rb +1 -7
- data/lib/active_interaction/filters/model_filter.rb +11 -2
- data/lib/active_interaction/grouped_input.rb +0 -11
- data/lib/active_interaction/version.rb +1 -1
- data/spec/active_interaction/filters/model_filter_spec.rb +34 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b77e2393588e6b32887a4a38847e14b8f347191
|
4
|
+
data.tar.gz: ef3b09ab34ef2b7937a457f5cab2648f0cb7e8cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5af88c5f9d4b7da0b6e6adc2039d393e0b2fdbac83268b28a8015dce6cf926ec59465201e298e90ce6f4a8f6cd77d5d3641bd787eaaaf0cd2e314646237f66c3
|
7
|
+
data.tar.gz: ebdfcf778480fa4874e04551d07cb2495df8845238d1b79868c0905c77e309f5c9130892c888c241786cf6d7d78b3b914d5bdf374ef513fb78b1e3c8dcd2fdba
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
# [Master][]
|
2
2
|
|
3
|
+
# [1.2.1][] (2014-05-02)
|
4
|
+
|
5
|
+
- Fix a bug that marked model inputs as invalid even if they returned true for
|
6
|
+
`object.is_a?(klass)`.
|
7
|
+
|
3
8
|
# [1.2.0][] (2014-04-30)
|
4
9
|
|
10
|
+
- Add support for Rails-style date and time parameters like `date(1i)`.
|
5
11
|
- Add a decimal filter.
|
6
12
|
- Add support for disabling and modifying transactions through the
|
7
13
|
`transaction` helper method.
|
@@ -193,7 +199,8 @@
|
|
193
199
|
|
194
200
|
- Initial release.
|
195
201
|
|
196
|
-
[master]: https://github.com/orgsync/active_interaction/compare/v1.2.
|
202
|
+
[master]: https://github.com/orgsync/active_interaction/compare/v1.2.1...master
|
203
|
+
[1.2.1]: https://github.com/orgsync/active_interaction/compare/v1.2.0...v1.2.1
|
197
204
|
[1.2.0]: https://github.com/orgsync/active_interaction/compare/v1.1.7...v1.2.0
|
198
205
|
[1.1.7]: https://github.com/orgsync/active_interaction/compare/v1.1.6...v1.1.7
|
199
206
|
[1.1.6]: https://github.com/orgsync/active_interaction/compare/v1.1.5...v1.1.6
|
data/lib/active_interaction.rb
CHANGED
@@ -37,6 +37,8 @@ require 'active_interaction/filters/time_filter'
|
|
37
37
|
|
38
38
|
require 'active_interaction/base'
|
39
39
|
|
40
|
+
require 'active_interaction/backports'
|
41
|
+
|
40
42
|
I18n.load_path << File.expand_path(
|
41
43
|
File.join(%w[active_interaction locale en.yml]), File.dirname(__FILE__))
|
42
44
|
|
@@ -47,5 +49,5 @@ I18n.load_path << File.expand_path(
|
|
47
49
|
#
|
48
50
|
# @since 1.0.0
|
49
51
|
#
|
50
|
-
# @version 1.2.
|
52
|
+
# @version 1.2.1
|
51
53
|
module ActiveInteraction end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# rubocop:disable Documentation
|
4
|
+
module ActiveInteraction
|
5
|
+
class GroupedInput
|
6
|
+
# Required for Ruby <= 1.9.3.
|
7
|
+
def [](name)
|
8
|
+
send(name)
|
9
|
+
end unless method_defined?(:[])
|
10
|
+
|
11
|
+
# Required for Ruby <= 1.9.3.
|
12
|
+
def []=(name, value)
|
13
|
+
send("#{name}=", value)
|
14
|
+
end unless method_defined?(:[]=)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# @private
|
19
|
+
class Hash
|
20
|
+
# Required for Rails <= 4.0.2.
|
21
|
+
def transform_keys
|
22
|
+
result = {}
|
23
|
+
each_key do |key|
|
24
|
+
result[yield(key)] = self[key]
|
25
|
+
end
|
26
|
+
result
|
27
|
+
end unless method_defined?(:transform_keys)
|
28
|
+
end
|
@@ -73,14 +73,8 @@ module ActiveInteraction
|
|
73
73
|
options.fetch(:strip, true)
|
74
74
|
end
|
75
75
|
|
76
|
-
# Switch to `transform_keys` once we support only Rails 4.0.2+
|
77
76
|
def stringify_the_symbol_keys(hash)
|
78
|
-
|
79
|
-
hash.each_key do |key|
|
80
|
-
new_key = key.is_a?(Symbol) ? key.to_s : key
|
81
|
-
new_hash[new_key] = hash[key]
|
82
|
-
end
|
83
|
-
new_hash
|
77
|
+
hash.transform_keys { |key| key.is_a?(Symbol) ? key.to_s : key }
|
84
78
|
end
|
85
79
|
end
|
86
80
|
end
|
@@ -19,8 +19,9 @@ module ActiveInteraction
|
|
19
19
|
# @private
|
20
20
|
class ModelFilter < Filter
|
21
21
|
def cast(value, reconstantize = true)
|
22
|
-
|
23
|
-
|
22
|
+
@klass ||= klass
|
23
|
+
|
24
|
+
if matches?(value)
|
24
25
|
value
|
25
26
|
else
|
26
27
|
return super(value) unless reconstantize
|
@@ -41,5 +42,13 @@ module ActiveInteraction
|
|
41
42
|
rescue NameError
|
42
43
|
raise InvalidClassError, klass_name.inspect
|
43
44
|
end
|
45
|
+
|
46
|
+
# @param value [Object]
|
47
|
+
#
|
48
|
+
# @return [Boolean]
|
49
|
+
def matches?(value)
|
50
|
+
@klass === value || # rubocop:disable CaseEquality
|
51
|
+
value.is_a?(@klass)
|
52
|
+
end
|
44
53
|
end
|
45
54
|
end
|
@@ -9,16 +9,5 @@ module ActiveInteraction
|
|
9
9
|
#
|
10
10
|
# @private
|
11
11
|
class GroupedInput < OpenStruct
|
12
|
-
unless method_defined?(:[])
|
13
|
-
def [](name)
|
14
|
-
send(name)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
unless method_defined?(:[]=)
|
19
|
-
def []=(name, value)
|
20
|
-
send("#{name}=", value)
|
21
|
-
end
|
22
|
-
end
|
23
12
|
end
|
24
13
|
end
|
@@ -62,6 +62,40 @@ describe ActiveInteraction::ModelFilter, :filter do
|
|
62
62
|
expect { filter }.to_not raise_error
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
context 'with bidirectional class comparisons' do
|
67
|
+
let(:case_equality) { false }
|
68
|
+
let(:class_equality) { false }
|
69
|
+
|
70
|
+
before do
|
71
|
+
allow(Model).to receive(:===).and_return(case_equality)
|
72
|
+
allow(value).to receive(:is_a?).and_return(class_equality)
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'without case or class equality' do
|
76
|
+
it 'raises an error' do
|
77
|
+
expect do
|
78
|
+
result
|
79
|
+
end.to raise_error ActiveInteraction::InvalidValueError
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'with case equality' do
|
84
|
+
let(:case_equality) { true }
|
85
|
+
|
86
|
+
it 'returns the instance' do
|
87
|
+
expect(result).to eql value
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'with class equality' do
|
92
|
+
let(:class_equality) { true }
|
93
|
+
|
94
|
+
it 'returns the instance' do
|
95
|
+
expect(result).to eql value
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
65
99
|
end
|
66
100
|
|
67
101
|
context 'with class as a superclass' do
|
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: 1.2.
|
4
|
+
version: 1.2.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: 2014-
|
12
|
+
date: 2014-05-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- LICENSE.txt
|
156
156
|
- README.md
|
157
157
|
- lib/active_interaction.rb
|
158
|
+
- lib/active_interaction/backports.rb
|
158
159
|
- lib/active_interaction/base.rb
|
159
160
|
- lib/active_interaction/concerns/active_modelable.rb
|
160
161
|
- lib/active_interaction/concerns/hashable.rb
|