hashie 3.6.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/README.md +95 -7
  4. data/UPGRADING.md +78 -2
  5. data/hashie.gemspec +2 -1
  6. data/lib/hashie.rb +20 -19
  7. data/lib/hashie/dash.rb +2 -1
  8. data/lib/hashie/extensions/active_support/core_ext/hash.rb +14 -0
  9. data/lib/hashie/extensions/coercion.rb +23 -16
  10. data/lib/hashie/extensions/dash/indifferent_access.rb +20 -1
  11. data/lib/hashie/extensions/dash/property_translation.rb +5 -2
  12. data/lib/hashie/extensions/deep_fetch.rb +4 -2
  13. data/lib/hashie/extensions/deep_find.rb +12 -3
  14. data/lib/hashie/extensions/deep_locate.rb +22 -7
  15. data/lib/hashie/extensions/indifferent_access.rb +1 -3
  16. data/lib/hashie/extensions/key_conflict_warning.rb +55 -0
  17. data/lib/hashie/extensions/mash/define_accessors.rb +90 -0
  18. data/lib/hashie/extensions/mash/keep_original_keys.rb +2 -1
  19. data/lib/hashie/extensions/mash/safe_assignment.rb +3 -1
  20. data/lib/hashie/extensions/method_access.rb +5 -2
  21. data/lib/hashie/extensions/parsers/yaml_erb_parser.rb +9 -4
  22. data/lib/hashie/extensions/strict_key_access.rb +8 -4
  23. data/lib/hashie/hash.rb +16 -9
  24. data/lib/hashie/mash.rb +99 -43
  25. data/lib/hashie/railtie.rb +7 -0
  26. data/lib/hashie/rash.rb +1 -1
  27. data/lib/hashie/version.rb +1 -1
  28. data/spec/hashie/dash_spec.rb +18 -8
  29. data/spec/hashie/extensions/coercion_spec.rb +17 -8
  30. data/spec/hashie/extensions/deep_find_spec.rb +12 -6
  31. data/spec/hashie/extensions/deep_locate_spec.rb +2 -1
  32. data/spec/hashie/extensions/deep_merge_spec.rb +6 -2
  33. data/spec/hashie/extensions/ignore_undeclared_spec.rb +2 -1
  34. data/spec/hashie/extensions/mash/define_accessors_spec.rb +90 -0
  35. data/spec/hashie/extensions/method_access_spec.rb +8 -1
  36. data/spec/hashie/extensions/strict_key_access_spec.rb +9 -10
  37. data/spec/hashie/extensions/symbolize_keys_spec.rb +3 -1
  38. data/spec/hashie/hash_spec.rb +45 -6
  39. data/spec/hashie/mash_spec.rb +314 -8
  40. data/spec/hashie/trash_spec.rb +9 -3
  41. data/spec/integration/elasticsearch/integration_spec.rb +3 -2
  42. data/spec/integration/rails/app.rb +5 -12
  43. data/spec/integration/rails/integration_spec.rb +22 -1
  44. metadata +8 -4
@@ -188,7 +188,9 @@ describe Hashie::Trash do
188
188
  end
189
189
 
190
190
  it 'transforms the value when given in constructor' do
191
- expect(TrashLambdaTestWithProperties.new(first_name: 'Michael').first_name).to eq 'Michael'.reverse
191
+ expect(
192
+ TrashLambdaTestWithProperties.new(first_name: 'Michael').first_name
193
+ ).to eq 'Michael'.reverse
192
194
  end
193
195
 
194
196
  context 'when :from option is given' do
@@ -297,7 +299,9 @@ describe Hashie::Trash do
297
299
  property :copy_of_id, from: :id, required: true, message: 'must be set'
298
300
  end
299
301
 
300
- expect { with_required.new }.to raise_error(ArgumentError, "The property 'copy_of_id' must be set")
302
+ expect { with_required.new }.to raise_error(
303
+ ArgumentError, "The property 'copy_of_id' must be set"
304
+ )
301
305
  end
302
306
 
303
307
  it 'does not set properties that do not exist' do
@@ -308,7 +312,9 @@ describe Hashie::Trash do
308
312
  subject = from_non_property.new(value: 0)
309
313
 
310
314
  expect(subject).not_to respond_to(:value)
311
- expect { subject[:value] }.to raise_error(NoMethodError, "The property 'value' is not defined for .")
315
+ expect { subject[:value] }.to raise_error(
316
+ NoMethodError, "The property 'value' is not defined for ."
317
+ )
312
318
  expect(subject.to_h[:value]).to eq(nil)
313
319
  expect(subject.copy_of_value).to eq(0)
314
320
  end
@@ -23,7 +23,7 @@ RSpec.describe 'elaasticsearch-model' do
23
23
  object = MyModel.new
24
24
  stub_elasticsearch_client
25
25
 
26
- expect { object.__elasticsearch__.index_document }.to raise_error(NoMethodError)
26
+ expect { object.__elasticsearch__.index_document }.to raise_error(NameError)
27
27
  end
28
28
 
29
29
  it 'does not raise an error when the model has an id' do
@@ -35,6 +35,7 @@ RSpec.describe 'elaasticsearch-model' do
35
35
 
36
36
  def stub_elasticsearch_client
37
37
  response = double('Response', body: '{}')
38
- allow_any_instance_of(Elasticsearch::Transport::Client).to receive(:perform_request) { response }
38
+ allow_any_instance_of(Elasticsearch::Transport::Client).to\
39
+ receive(:perform_request) { response }
39
40
  end
40
41
  end
@@ -14,7 +14,7 @@ module RailsApp
14
14
  end
15
15
  end
16
16
 
17
- LAYOUT = <<-HTML.freeze
17
+ PAGE = <<-HTML.freeze
18
18
  <!DOCTYPE html>
19
19
  <html>
20
20
  <head>
@@ -22,24 +22,17 @@ LAYOUT = <<-HTML.freeze
22
22
  <%= csrf_meta_tags %>
23
23
  </head>
24
24
  <body>
25
- <%= yield %>
25
+ <h1>Hello, world!</h1>
26
26
  </body>
27
27
  </html>
28
28
  HTML
29
29
 
30
- INDEX = '<h1>Hello, world!</h1>'.freeze
31
-
32
30
  class ApplicationController < ActionController::Base
33
31
  include Rails.application.routes.url_helpers
34
32
 
35
- layout 'application'
36
-
37
- self.view_paths = [ActionView::FixtureResolver.new(
38
- 'layouts/application.html.erb' => LAYOUT,
39
- 'application/index.html.erb' => INDEX
40
- )]
41
-
42
- def index; end
33
+ def index
34
+ render inline: PAGE
35
+ end
43
36
  end
44
37
 
45
38
  Bundler.require(:default, Rails.env)
@@ -14,11 +14,32 @@ RSpec.describe 'rails', type: :request do
14
14
  $stdout = original_stdout
15
15
  end
16
16
 
17
- it 'does not log anything to STDOUT when initializing and sets the Hashie logger to the Rails logger' do
17
+ it 'does not log anything to STDOUT when initializing' do
18
18
  expect(stdout.string).to eq('')
19
+ end
20
+
21
+ it 'sets the Hashie logger to the Rails logger' do
19
22
  expect(Hashie.logger).to eq(Rails.logger)
20
23
  end
21
24
 
25
+ context '#except' do
26
+ subject { Hashie::Mash.new(x: 1, y: 2) }
27
+
28
+ it 'returns an instance of the class it was called on' do
29
+ class HashieKlass < Hashie::Mash; end
30
+ hashie_klass = HashieKlass.new(subject)
31
+ expect(hashie_klass.except('x')).to be_a HashieKlass
32
+ end
33
+
34
+ it 'works with string keys' do
35
+ expect(subject.except('x')).to eq Hashie::Mash.new(y: 2)
36
+ end
37
+
38
+ it 'works with symbol keys' do
39
+ expect(subject.except(:x)).to eq Hashie::Mash.new(y: 2)
40
+ end
41
+ end
42
+
22
43
  it 'works' do
23
44
  get '/'
24
45
  assert_select 'h1', 'Hello, world!'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashie
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-08-13 00:00:00.000000000 Z
12
+ date: 2019-10-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -73,6 +73,7 @@ files:
73
73
  - lib/hashie/array.rb
74
74
  - lib/hashie/clash.rb
75
75
  - lib/hashie/dash.rb
76
+ - lib/hashie/extensions/active_support/core_ext/hash.rb
76
77
  - lib/hashie/extensions/array/pretty_inspect.rb
77
78
  - lib/hashie/extensions/coercion.rb
78
79
  - lib/hashie/extensions/dash/coercion.rb
@@ -84,7 +85,9 @@ files:
84
85
  - lib/hashie/extensions/deep_merge.rb
85
86
  - lib/hashie/extensions/ignore_undeclared.rb
86
87
  - lib/hashie/extensions/indifferent_access.rb
88
+ - lib/hashie/extensions/key_conflict_warning.rb
87
89
  - lib/hashie/extensions/key_conversion.rb
90
+ - lib/hashie/extensions/mash/define_accessors.rb
88
91
  - lib/hashie/extensions/mash/keep_original_keys.rb
89
92
  - lib/hashie/extensions/mash/safe_assignment.rb
90
93
  - lib/hashie/extensions/mash/symbolize_keys.rb
@@ -120,6 +123,7 @@ files:
120
123
  - spec/hashie/extensions/indifferent_access_spec.rb
121
124
  - spec/hashie/extensions/indifferent_access_with_rails_hwia_spec.rb
122
125
  - spec/hashie/extensions/key_conversion_spec.rb
126
+ - spec/hashie/extensions/mash/define_accessors_spec.rb
123
127
  - spec/hashie/extensions/mash/keep_original_keys_spec.rb
124
128
  - spec/hashie/extensions/mash/safe_assignment_spec.rb
125
129
  - spec/hashie/extensions/mash/symbolize_keys_spec.rb
@@ -169,8 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
173
  - !ruby/object:Gem::Version
170
174
  version: '0'
171
175
  requirements: []
172
- rubyforge_project:
173
- rubygems_version: 2.7.6
176
+ rubygems_version: 3.0.4
174
177
  signing_key:
175
178
  specification_version: 4
176
179
  summary: Your friendly neighborhood hash library.
@@ -185,6 +188,7 @@ test_files:
185
188
  - spec/hashie/extensions/deep_locate_spec.rb
186
189
  - spec/hashie/extensions/coercion_spec.rb
187
190
  - spec/hashie/extensions/mash/safe_assignment_spec.rb
191
+ - spec/hashie/extensions/mash/define_accessors_spec.rb
188
192
  - spec/hashie/extensions/mash/symbolize_keys_spec.rb
189
193
  - spec/hashie/extensions/mash/keep_original_keys_spec.rb
190
194
  - spec/hashie/extensions/key_conversion_spec.rb