hashie 3.6.0 → 5.0.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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +271 -207
  3. data/CONTRIBUTING.md +13 -6
  4. data/LICENSE +1 -1
  5. data/README.md +245 -54
  6. data/UPGRADING.md +121 -7
  7. data/hashie.gemspec +13 -7
  8. data/lib/hashie/dash.rb +18 -17
  9. data/lib/hashie/extensions/active_support/core_ext/hash.rb +14 -0
  10. data/lib/hashie/extensions/coercion.rb +23 -16
  11. data/lib/hashie/extensions/dash/indifferent_access.rb +29 -1
  12. data/lib/hashie/extensions/dash/predefined_values.rb +88 -0
  13. data/lib/hashie/extensions/dash/property_translation.rb +12 -4
  14. data/lib/hashie/extensions/deep_fetch.rb +4 -2
  15. data/lib/hashie/extensions/deep_find.rb +12 -3
  16. data/lib/hashie/extensions/deep_locate.rb +22 -7
  17. data/lib/hashie/extensions/deep_merge.rb +18 -1
  18. data/lib/hashie/extensions/ignore_undeclared.rb +4 -5
  19. data/lib/hashie/extensions/indifferent_access.rb +37 -6
  20. data/lib/hashie/extensions/key_conflict_warning.rb +55 -0
  21. data/lib/hashie/extensions/mash/define_accessors.rb +90 -0
  22. data/lib/hashie/extensions/mash/keep_original_keys.rb +2 -1
  23. data/lib/hashie/extensions/mash/permissive_respond_to.rb +61 -0
  24. data/lib/hashie/extensions/mash/safe_assignment.rb +3 -1
  25. data/lib/hashie/extensions/mash/symbolize_keys.rb +5 -5
  26. data/lib/hashie/extensions/method_access.rb +5 -2
  27. data/lib/hashie/extensions/parsers/yaml_erb_parser.rb +26 -4
  28. data/lib/hashie/extensions/ruby_version_check.rb +5 -1
  29. data/lib/hashie/extensions/strict_key_access.rb +8 -4
  30. data/lib/hashie/extensions/symbolize_keys.rb +12 -1
  31. data/lib/hashie/hash.rb +16 -9
  32. data/lib/hashie/mash.rb +130 -64
  33. data/lib/hashie/railtie.rb +7 -0
  34. data/lib/hashie/rash.rb +1 -1
  35. data/lib/hashie/utils.rb +28 -0
  36. data/lib/hashie/version.rb +1 -1
  37. data/lib/hashie.rb +22 -19
  38. metadata +23 -133
  39. data/spec/hashie/array_spec.rb +0 -29
  40. data/spec/hashie/clash_spec.rb +0 -70
  41. data/spec/hashie/dash_spec.rb +0 -598
  42. data/spec/hashie/extensions/autoload_spec.rb +0 -24
  43. data/spec/hashie/extensions/coercion_spec.rb +0 -639
  44. data/spec/hashie/extensions/dash/coercion_spec.rb +0 -13
  45. data/spec/hashie/extensions/dash/indifferent_access_spec.rb +0 -84
  46. data/spec/hashie/extensions/deep_fetch_spec.rb +0 -97
  47. data/spec/hashie/extensions/deep_find_spec.rb +0 -138
  48. data/spec/hashie/extensions/deep_locate_spec.rb +0 -137
  49. data/spec/hashie/extensions/deep_merge_spec.rb +0 -70
  50. data/spec/hashie/extensions/ignore_undeclared_spec.rb +0 -47
  51. data/spec/hashie/extensions/indifferent_access_spec.rb +0 -295
  52. data/spec/hashie/extensions/indifferent_access_with_rails_hwia_spec.rb +0 -208
  53. data/spec/hashie/extensions/key_conversion_spec.rb +0 -12
  54. data/spec/hashie/extensions/mash/keep_original_keys_spec.rb +0 -46
  55. data/spec/hashie/extensions/mash/safe_assignment_spec.rb +0 -50
  56. data/spec/hashie/extensions/mash/symbolize_keys_spec.rb +0 -39
  57. data/spec/hashie/extensions/merge_initializer_spec.rb +0 -23
  58. data/spec/hashie/extensions/method_access_spec.rb +0 -226
  59. data/spec/hashie/extensions/strict_key_access_spec.rb +0 -110
  60. data/spec/hashie/extensions/stringify_keys_spec.rb +0 -124
  61. data/spec/hashie/extensions/symbolize_keys_spec.rb +0 -129
  62. data/spec/hashie/hash_spec.rb +0 -84
  63. data/spec/hashie/mash_spec.rb +0 -771
  64. data/spec/hashie/parsers/yaml_erb_parser_spec.rb +0 -46
  65. data/spec/hashie/rash_spec.rb +0 -83
  66. data/spec/hashie/trash_spec.rb +0 -328
  67. data/spec/hashie/utils_spec.rb +0 -25
  68. data/spec/hashie/version_spec.rb +0 -7
  69. data/spec/hashie_spec.rb +0 -13
  70. data/spec/integration/elasticsearch/integration_spec.rb +0 -40
  71. data/spec/integration/omniauth/app.rb +0 -11
  72. data/spec/integration/omniauth/integration_spec.rb +0 -38
  73. data/spec/integration/omniauth-oauth2/app.rb +0 -52
  74. data/spec/integration/omniauth-oauth2/integration_spec.rb +0 -26
  75. data/spec/integration/omniauth-oauth2/some_site.rb +0 -38
  76. data/spec/integration/rails/app.rb +0 -47
  77. data/spec/integration/rails/integration_spec.rb +0 -26
  78. data/spec/integration/rails-without-dependency/integration_spec.rb +0 -15
  79. data/spec/spec_helper.rb +0 -23
  80. data/spec/support/integration_specs.rb +0 -36
  81. data/spec/support/logger.rb +0 -24
  82. data/spec/support/module_context.rb +0 -11
  83. data/spec/support/ruby_version_check.rb +0 -6
@@ -1,38 +0,0 @@
1
- require 'omniauth-oauth2'
2
-
3
- module OmniAuth
4
- module Strategies
5
- class SomeSite < OmniAuth::Strategies::OAuth2
6
- # Give your strategy a name.
7
- option :name, 'some_site'
8
-
9
- # This is where you pass the options you would pass when
10
- # initializing your consumer from the OAuth gem.
11
- option :client_options, site: 'https://api.somesite.com'
12
-
13
- # These are called after authentication has succeeded. If
14
- # possible, you should try to set the UID without making
15
- # additional calls (if the user id is returned with the token
16
- # or as a URI parameter). This may not be possible with all
17
- # providers.
18
- uid { raw_info['id'] }
19
-
20
- info do
21
- {
22
- name: raw_info['name'],
23
- email: raw_info['email']
24
- }
25
- end
26
-
27
- extra do
28
- {
29
- 'raw_info' => raw_info
30
- }
31
- end
32
-
33
- def raw_info
34
- @raw_info ||= access_token.get('/me').parsed
35
- end
36
- end
37
- end
38
- end
@@ -1,47 +0,0 @@
1
- require 'action_controller/railtie'
2
- require 'action_view/railtie'
3
- require 'action_view/testing/resolvers'
4
- require 'rails/test_unit/railtie'
5
-
6
- module RailsApp
7
- class Application < ::Rails::Application
8
- config.eager_load = false
9
- config.secret_key_base = 'hashieintegrationtest'
10
-
11
- routes.append do
12
- get '/' => 'application#index'
13
- end
14
- end
15
- end
16
-
17
- LAYOUT = <<-HTML.freeze
18
- <!DOCTYPE html>
19
- <html>
20
- <head>
21
- <title>TestApp</title>
22
- <%= csrf_meta_tags %>
23
- </head>
24
- <body>
25
- <%= yield %>
26
- </body>
27
- </html>
28
- HTML
29
-
30
- INDEX = '<h1>Hello, world!</h1>'.freeze
31
-
32
- class ApplicationController < ActionController::Base
33
- include Rails.application.routes.url_helpers
34
-
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
43
- end
44
-
45
- Bundler.require(:default, Rails.env)
46
-
47
- RailsApp::Application.initialize!
@@ -1,26 +0,0 @@
1
- ENV['RAILS_ENV'] = 'test'
2
-
3
- require 'rspec/core'
4
-
5
- RSpec.describe 'rails', type: :request do
6
- let(:stdout) { StringIO.new }
7
-
8
- around(:each) do |example|
9
- original_stdout = $stdout
10
- $stdout = stdout
11
- require_relative 'app'
12
- require 'rspec/rails'
13
- example.run
14
- $stdout = original_stdout
15
- end
16
-
17
- it 'does not log anything to STDOUT when initializing and sets the Hashie logger to the Rails logger' do
18
- expect(stdout.string).to eq('')
19
- expect(Hashie.logger).to eq(Rails.logger)
20
- end
21
-
22
- it 'works' do
23
- get '/'
24
- assert_select 'h1', 'Hello, world!'
25
- end
26
- end
@@ -1,15 +0,0 @@
1
- require 'rspec/core'
2
-
3
- RSpec.describe 'partial-rails' do
4
- context 'when Rails constant is present but the railties are not' do
5
- before(:all) do
6
- class Rails
7
- # A class about railways
8
- end
9
- end
10
-
11
- it 'does not raise an exception when we require hashie' do
12
- expect { require 'hashie' }.not_to raise_error
13
- end
14
- end
15
- end
data/spec/spec_helper.rb DELETED
@@ -1,23 +0,0 @@
1
- if ENV['CI']
2
- require 'simplecov'
3
- SimpleCov.start
4
- end
5
-
6
- require 'pry'
7
-
8
- require 'rspec'
9
- require 'hashie'
10
- require 'rspec/pending_for'
11
- require './spec/support/ruby_version_check'
12
- require './spec/support/logger'
13
-
14
- require 'active_support'
15
- require 'active_support/core_ext'
16
-
17
- RSpec.configure do |config|
18
- config.extend RubyVersionCheck
19
- config.expect_with :rspec do |expect|
20
- expect.syntax = :expect
21
- end
22
- config.warnings = true
23
- end
@@ -1,36 +0,0 @@
1
- # Generates the bundle command for running an integration test
2
- #
3
- # @param [String] integration the integration folder to run
4
- # @param [String] command the command to run
5
- # @return [String]
6
- def integration_command(integration, command)
7
- "#{integration_gemfile(integration)} #{command}"
8
- end
9
-
10
- # Generates the Gemfile for an integration
11
- #
12
- # @param [String] integration the integration test name
13
- # @return [String]
14
- def integration_gemfile(integration)
15
- "BUNDLE_GEMFILE=#{integration_path(integration)}/Gemfile"
16
- end
17
-
18
- # Generates the path to the integration
19
- #
20
- # @param [String] integration the integration test name
21
- # @return [String]
22
- def integration_path(integration)
23
- "spec/integration/#{integration}"
24
- end
25
-
26
- # Runs all integration specs in their own environment
27
- def run_all_integration_specs(handler: ->(_code) {}, logger: ->(_msg) {})
28
- Dir['spec/integration/*']
29
- .map { |directory| directory.split('/').last }
30
- .each do |integration|
31
- logger.call(%(Running "#{integration}" integration spec))
32
- system(integration_command(integration, 'bundle --quiet'))
33
- system(integration_command(integration, "bundle exec rspec #{integration_path(integration)}"))
34
- handler.call($CHILD_STATUS.exitstatus)
35
- end
36
- end
@@ -1,24 +0,0 @@
1
- # A shared context that allows you to check the output of Hashie's logger.
2
- #
3
- # @example
4
- # include_context 'with a logger'
5
- #
6
- # it 'logs info message' do
7
- # Hashie.logger.info 'What is happening in here?!'
8
- #
9
- # expect(logger_output).to match('What is happening in here?!')
10
- # end
11
- RSpec.shared_context 'with a logger' do
12
- # @private
13
- let(:log) { StringIO.new }
14
-
15
- # The output string from the logger
16
- let(:logger_output) { log.rewind && log.string }
17
-
18
- around(:each) do |example|
19
- original_logger = Hashie.logger
20
- Hashie.logger = Logger.new(log)
21
- example.run
22
- Hashie.logger = original_logger
23
- end
24
- end
@@ -1,11 +0,0 @@
1
- shared_context 'included hash module' do
2
- let!(:dummy_class) do
3
- klass = Class.new(::Hash)
4
- klass.send :include, described_class
5
- klass
6
- end
7
-
8
- subject do
9
- dummy_class.new
10
- end
11
- end
@@ -1,6 +0,0 @@
1
- module RubyVersionCheck
2
- def with_minimum_ruby(version)
3
- yield if Hashie::Extensions::RubyVersion.new(RUBY_VERSION) >=
4
- Hashie::Extensions::RubyVersion.new(version)
5
- end
6
- end