hashie 2.1.2 → 4.1.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 +7 -0
- data/CHANGELOG.md +524 -59
- data/CONTRIBUTING.md +24 -7
- data/README.md +781 -90
- data/Rakefile +19 -2
- data/UPGRADING.md +245 -0
- data/hashie.gemspec +21 -13
- data/lib/hashie.rb +60 -21
- data/lib/hashie/array.rb +21 -0
- data/lib/hashie/clash.rb +24 -12
- data/lib/hashie/dash.rb +96 -33
- data/lib/hashie/extensions/active_support/core_ext/hash.rb +14 -0
- data/lib/hashie/extensions/array/pretty_inspect.rb +19 -0
- data/lib/hashie/extensions/coercion.rb +124 -18
- data/lib/hashie/extensions/dash/coercion.rb +25 -0
- data/lib/hashie/extensions/dash/indifferent_access.rb +56 -0
- data/lib/hashie/extensions/dash/property_translation.rb +191 -0
- data/lib/hashie/extensions/deep_fetch.rb +7 -5
- data/lib/hashie/extensions/deep_find.rb +69 -0
- data/lib/hashie/extensions/deep_locate.rb +113 -0
- data/lib/hashie/extensions/deep_merge.rb +35 -12
- data/lib/hashie/extensions/ignore_undeclared.rb +11 -5
- data/lib/hashie/extensions/indifferent_access.rb +28 -16
- data/lib/hashie/extensions/key_conflict_warning.rb +55 -0
- data/lib/hashie/extensions/key_conversion.rb +0 -82
- data/lib/hashie/extensions/mash/define_accessors.rb +90 -0
- data/lib/hashie/extensions/mash/keep_original_keys.rb +53 -0
- data/lib/hashie/extensions/mash/permissive_respond_to.rb +61 -0
- data/lib/hashie/extensions/mash/safe_assignment.rb +18 -0
- data/lib/hashie/extensions/mash/symbolize_keys.rb +38 -0
- data/lib/hashie/extensions/method_access.rb +154 -11
- data/lib/hashie/extensions/parsers/yaml_erb_parser.rb +48 -0
- data/lib/hashie/extensions/pretty_inspect.rb +19 -0
- data/lib/hashie/extensions/ruby_version.rb +60 -0
- data/lib/hashie/extensions/ruby_version_check.rb +21 -0
- data/lib/hashie/extensions/strict_key_access.rb +77 -0
- data/lib/hashie/extensions/stringify_keys.rb +71 -0
- data/lib/hashie/extensions/symbolize_keys.rb +71 -0
- data/lib/hashie/hash.rb +27 -8
- data/lib/hashie/logger.rb +18 -0
- data/lib/hashie/mash.rb +235 -57
- data/lib/hashie/railtie.rb +21 -0
- data/lib/hashie/rash.rb +40 -16
- data/lib/hashie/trash.rb +2 -88
- data/lib/hashie/utils.rb +44 -0
- data/lib/hashie/version.rb +1 -1
- metadata +42 -81
- data/.gitignore +0 -9
- data/.rspec +0 -2
- data/.rubocop.yml +0 -36
- data/.travis.yml +0 -15
- data/Gemfile +0 -11
- data/Guardfile +0 -5
- data/lib/hashie/hash_extensions.rb +0 -47
- data/spec/hashie/clash_spec.rb +0 -48
- data/spec/hashie/dash_spec.rb +0 -338
- data/spec/hashie/extensions/coercion_spec.rb +0 -156
- data/spec/hashie/extensions/deep_fetch_spec.rb +0 -70
- data/spec/hashie/extensions/deep_merge_spec.rb +0 -22
- data/spec/hashie/extensions/ignore_undeclared_spec.rb +0 -23
- data/spec/hashie/extensions/indifferent_access_spec.rb +0 -152
- data/spec/hashie/extensions/key_conversion_spec.rb +0 -103
- data/spec/hashie/extensions/merge_initializer_spec.rb +0 -23
- data/spec/hashie/extensions/method_access_spec.rb +0 -121
- data/spec/hashie/hash_spec.rb +0 -66
- data/spec/hashie/mash_spec.rb +0 -467
- data/spec/hashie/rash_spec.rb +0 -44
- data/spec/hashie/trash_spec.rb +0 -193
- data/spec/hashie/version_spec.rb +0 -7
- data/spec/spec.opts +0 -3
- data/spec/spec_helper.rb +0 -8
data/spec/hashie/rash_spec.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hashie::Rash do
|
4
|
-
subject do
|
5
|
-
Hashie::Rash.new(
|
6
|
-
/hello/ => 'hello',
|
7
|
-
/world/ => 'world',
|
8
|
-
'other' => 'whee',
|
9
|
-
true => false,
|
10
|
-
1 => 'awesome',
|
11
|
-
1..1000 => 'rangey',
|
12
|
-
/(bcd)/ => proc { |m| m[1] }
|
13
|
-
# /.+/ => "EVERYTHING"
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'finds strings' do
|
18
|
-
expect(subject['other']).to eq 'whee'
|
19
|
-
expect(subject['well hello there']).to eq 'hello'
|
20
|
-
expect(subject['the world is round']).to eq 'world'
|
21
|
-
expect(subject.all('hello world').sort).to eq %w(hello world)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'finds regexps' do
|
25
|
-
expect(subject[/other/]).to eq 'whee'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'finds other objects' do
|
29
|
-
expect(subject[true]).to eq false
|
30
|
-
expect(subject[1]).to eq 'awesome'
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'finds numbers from ranges' do
|
34
|
-
expect(subject[250]).to eq 'rangey'
|
35
|
-
expect(subject[999]).to eq 'rangey'
|
36
|
-
expect(subject[1000]).to eq 'rangey'
|
37
|
-
expect(subject[1001]).to be_nil
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'evaluates proc values' do
|
41
|
-
expect(subject['abcdef']).to eq 'bcd'
|
42
|
-
expect(subject['ffffff']).to be_nil
|
43
|
-
end
|
44
|
-
end
|
data/spec/hashie/trash_spec.rb
DELETED
@@ -1,193 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Hashie::Trash do
|
4
|
-
class TrashTest < Hashie::Trash
|
5
|
-
property :first_name, from: :firstName
|
6
|
-
end
|
7
|
-
|
8
|
-
let(:trash) { TrashTest.new }
|
9
|
-
|
10
|
-
describe 'translating properties' do
|
11
|
-
it 'adds the property to the list' do
|
12
|
-
expect(TrashTest.properties).to include(:first_name)
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'creates a method for reading the property' do
|
16
|
-
expect(trash).to respond_to(:first_name)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'creates a method for writing the property' do
|
20
|
-
expect(trash).to respond_to(:first_name=)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'creates a method for writing the translated property' do
|
24
|
-
expect(trash).to respond_to(:firstName=)
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'does not create a method for reading the translated property' do
|
28
|
-
expect(trash).not_to respond_to(:firstName)
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'maintains translations hash mapping from the original to the translated name' do
|
32
|
-
expect(TrashTest.translations[:firstName]).to eq :first_name
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'maintains inverse translations hash mapping from the translated to the original name' do
|
36
|
-
expect(TrashTest.inverse_translations[:first_name]).to eq :firstName
|
37
|
-
end
|
38
|
-
|
39
|
-
it '#permitted_input_keys contain the :from key of properties with translations' do
|
40
|
-
expect(TrashTest.permitted_input_keys).to include :firstName
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe 'standard properties' do
|
45
|
-
class TrashTestPermitted < Hashie::Trash
|
46
|
-
property :id
|
47
|
-
end
|
48
|
-
|
49
|
-
it '#permitted_input_keys contain names of properties without translations' do
|
50
|
-
expect(TrashTestPermitted.permitted_input_keys).to include :id
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe 'writing to properties' do
|
55
|
-
it 'does not write to a non-existent property using []=' do
|
56
|
-
expect { trash['abc'] = 123 }.to raise_error(NoMethodError)
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'writes to an existing property using []=' do
|
60
|
-
expect { trash['first_name'] = 'Bob' }.not_to raise_error
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'writes to a translated property using []=' do
|
64
|
-
expect { trash['firstName'] = 'Bob' }.not_to raise_error
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'reads/writes to an existing property using a method call' do
|
68
|
-
trash.first_name = 'Franklin'
|
69
|
-
expect(trash.first_name).to eq 'Franklin'
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'writes to an translated property using a method call' do
|
73
|
-
trash.firstName = 'Franklin'
|
74
|
-
expect(trash.first_name).to eq 'Franklin'
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'writes to a translated property using #replace' do
|
78
|
-
trash.replace(firstName: 'Franklin')
|
79
|
-
expect(trash.first_name).to eq 'Franklin'
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'writes to a non-translated property using #replace' do
|
83
|
-
trash.replace(first_name: 'Franklin')
|
84
|
-
expect(trash.first_name).to eq 'Franklin'
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe ' initializing with a Hash' do
|
89
|
-
it 'does not initialize non-existent properties' do
|
90
|
-
expect { TrashTest.new(bork: 'abc') }.to raise_error(NoMethodError)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'sets the desired properties' do
|
94
|
-
expect(TrashTest.new(first_name: 'Michael').first_name).to eq 'Michael'
|
95
|
-
end
|
96
|
-
|
97
|
-
context 'with both the translated property and the property' do
|
98
|
-
it 'sets the desired properties' do
|
99
|
-
expect(TrashTest.new(first_name: 'Michael', firstName: 'Maeve').first_name).to eq 'Michael'
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'sets the translated properties' do
|
104
|
-
expect(TrashTest.new(firstName: 'Michael').first_name).to eq 'Michael'
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe 'translating properties using a proc' do
|
109
|
-
class TrashLambdaTest < Hashie::Trash
|
110
|
-
property :first_name, from: :firstName, with: lambda { |value| value.reverse }
|
111
|
-
end
|
112
|
-
|
113
|
-
let(:lambda_trash) { TrashLambdaTest.new }
|
114
|
-
|
115
|
-
it 'translates the value given on initialization with the given lambda' do
|
116
|
-
expect(TrashLambdaTest.new(firstName: 'Michael').first_name).to eq 'Michael'.reverse
|
117
|
-
end
|
118
|
-
|
119
|
-
it 'does not translate the value if given with the right property' do
|
120
|
-
expect(TrashTest.new(first_name: 'Michael').first_name).to eq 'Michael'
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'translates the value given as property with the given lambda' do
|
124
|
-
lambda_trash.firstName = 'Michael'
|
125
|
-
expect(lambda_trash.first_name).to eq 'Michael'.reverse
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'does not translate the value given as right property' do
|
129
|
-
lambda_trash.first_name = 'Michael'
|
130
|
-
expect(lambda_trash.first_name).to eq 'Michael'
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
describe 'uses with or transform_with interchangeably' do
|
135
|
-
class TrashLambdaTestTransformWith < Hashie::Trash
|
136
|
-
property :first_name, from: :firstName, transform_with: lambda { |value| value.reverse }
|
137
|
-
end
|
138
|
-
|
139
|
-
let(:lambda_trash) { TrashLambdaTestTransformWith.new }
|
140
|
-
|
141
|
-
it 'translates the value given as property with the given lambda' do
|
142
|
-
lambda_trash.firstName = 'Michael'
|
143
|
-
expect(lambda_trash.first_name).to eq 'Michael'.reverse
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'does not translate the value given as right property' do
|
147
|
-
lambda_trash.first_name = 'Michael'
|
148
|
-
expect(lambda_trash.first_name).to eq 'Michael'
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
describe 'translating properties without from option using a proc' do
|
153
|
-
class TrashLambdaTestWithProperties < Hashie::Trash
|
154
|
-
property :first_name, transform_with: lambda { |value| value.reverse }
|
155
|
-
end
|
156
|
-
|
157
|
-
let(:lambda_trash) { TrashLambdaTestWithProperties.new }
|
158
|
-
|
159
|
-
it 'translates the value given as property with the given lambda' do
|
160
|
-
lambda_trash.first_name = 'Michael'
|
161
|
-
expect(lambda_trash.first_name).to eq 'Michael'.reverse
|
162
|
-
end
|
163
|
-
|
164
|
-
it 'transforms the value when given in constructor' do
|
165
|
-
expect(TrashLambdaTestWithProperties.new(first_name: 'Michael').first_name).to eq 'Michael'.reverse
|
166
|
-
end
|
167
|
-
|
168
|
-
context 'when :from option is given' do
|
169
|
-
class TrashLambdaTest3 < Hashie::Trash
|
170
|
-
property :first_name, from: :firstName, transform_with: lambda { |value| value.reverse }
|
171
|
-
end
|
172
|
-
|
173
|
-
it 'does not override the :from option in the constructor' do
|
174
|
-
expect(TrashLambdaTest3.new(first_name: 'Michael').first_name).to eq 'Michael'
|
175
|
-
end
|
176
|
-
|
177
|
-
it 'does not override the :from option when given as property' do
|
178
|
-
t = TrashLambdaTest3.new
|
179
|
-
t.first_name = 'Michael'
|
180
|
-
expect(t.first_name).to eq 'Michael'
|
181
|
-
end
|
182
|
-
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
it 'raises an error when :from have the same value as property' do
|
187
|
-
expect do
|
188
|
-
class WrongTrash < Hashie::Trash
|
189
|
-
property :first_name, from: :first_name
|
190
|
-
end
|
191
|
-
end.to raise_error(ArgumentError)
|
192
|
-
end
|
193
|
-
end
|
data/spec/hashie/version_spec.rb
DELETED
data/spec/spec.opts
DELETED