camel_snake_keys 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 3.0.1
data/.travis.yml CHANGED
@@ -1,19 +1,18 @@
1
1
  language: ruby
2
2
  before_install:
3
- - gem install bundler
3
+ - gem install bundler -v 1.17.3
4
+ - gem install rspec
4
5
  install: bundle install --jobs=1 --retry=1
5
6
  script:
6
7
  - bundle install
7
8
  - bundle exec rspec
8
9
 
9
10
  rvm:
10
- - 2.3.0
11
- - 2.2
12
- - 2.1
13
- - 2.0.0
14
- # - jruby-9.1.0.0
15
- - ruby-head
16
- # - jruby-head
11
+ - 2.3.1
12
+ # - 2.4.0
13
+ # - 2.5.0
14
+ # - ruby-head
15
+ # - jruby-head
17
16
 
18
17
  matrix:
19
18
  allow_failures:
@@ -21,16 +20,11 @@ matrix:
21
20
  - rvm: jruby-head
22
21
 
23
22
  env:
24
- matrix:
25
- - RAILS=3.2.22
26
- - RAILS=4.1.13
27
- - RAILS=4.2.7.1
28
- - RAILS=master
29
23
  global:
30
- # - JRUBY_OPTS="-J-Xmx1024m --debug"
24
+ - JRUBY_OPTS="-J-Xmx1024m --debug"
31
25
 
32
26
  notifications:
33
- email:
27
+ email:
34
28
  recipients:
35
29
  - buermann@gmail.com
36
30
  on_success: change
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ 0.0.7 2/08/2022
2
+ ==============
3
+
4
+ Support Ruby 3+
5
+
1
6
  0.0.6 4/07/2020
2
7
  ==============
3
8
 
data/Gemfile CHANGED
@@ -1,6 +1,7 @@
1
1
  source 'https://rubygems.org'
2
- gem 'activesupport', '~> 4.2'
3
- gem 'coveralls', require: false
2
+ gem 'activesupport'
3
+ gem 'coveralls'
4
4
  gem 'hashie'
5
5
  gem 'rake'
6
6
  gem 'rspec'
7
+ gem 'rspec-core'
data/README.md CHANGED
@@ -2,18 +2,15 @@
2
2
 
3
3
  [![Gem Version][GV img]][Gem Version]
4
4
  [![Build Status][BS img]][Build Status]
5
- [![Dependency Status][DS img]][Dependency Status]
6
5
  [![Coverage Status][CS img]][Coverage Status]
7
6
 
8
7
  [Gem Version]: https://rubygems.org/gems/camel_snake_keys
9
8
  [Build Status]: https://travis-ci.org/buermann/camel_snake_keys
10
9
  [travis pull requests]: https://travis-ci.org/buermann/camel_snake_keys/pull_requests
11
- [Dependency Status]: https://gemnasium.com/buermann/camel_snake_keys
12
10
  [Coverage Status]: https://coveralls.io/r/buermann/camel_snake_keys
13
11
 
14
12
  [GV img]: https://badge.fury.io/rb/camel_snake_keys.png
15
13
  [BS img]: https://travis-ci.org/buermann/camel_snake_keys.png
16
- [DS img]: https://gemnasium.com/buermann/camel_snake_keys.png
17
14
  [CS img]: https://coveralls.io/repos/buermann/camel_snake_keys/badge.png?branch=master
18
15
 
19
16
 
data/Rakefile CHANGED
@@ -15,4 +15,3 @@ RDoc::Task.new(:rdoc) do |rdoc|
15
15
  end
16
16
 
17
17
  Bundler::GemHelper.install_tasks
18
-
data/camel_snake.gemspec CHANGED
@@ -1,25 +1,25 @@
1
- $:.push File.expand_path("../lib", __FILE__)
1
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
2
2
 
3
3
  # Maintain your gem's version:
4
- require "version"
4
+ require 'version'
5
5
 
6
6
  # Describe your gem and declare its dependencies:
7
7
  Gem::Specification.new do |s|
8
- s.name = "camel_snake_keys"
8
+ s.name = 'camel_snake_keys'
9
9
  s.version = CamelSnakeKeys::VERSION
10
- s.authors = ["Josh Buermann"]
11
- s.email = ["buermann@gmail.com"]
12
- s.homepage = "https://github.com/buermann/camel_snake_keys"
13
- s.summary = "Convert nested data structure hash keys between camel and snake case."
14
- s.description = ""
15
- s.license = "MIT"
10
+ s.authors = ['Josh Buermann']
11
+ s.email = ['buermann@gmail.com']
12
+ s.homepage = 'https://github.com/buermann/camel_snake_keys'
13
+ s.summary = 'Convert nested data structure hash keys between camel and snake case.'
14
+ s.description = ''
15
+ s.license = 'MIT'
16
16
 
17
17
  s.files = `git ls-files`.split("\n").sort
18
18
  s.test_files = `git ls-files -- spec/*`.split("\n")
19
19
 
20
- s.required_ruby_version = '~> 2.0'
21
- s.add_dependency "activesupport"
20
+ s.required_ruby_version = '> 2.0'
21
+ s.add_dependency 'activesupport'
22
22
 
23
- s.add_development_dependency "rspec-rails", '>= 3.0'
24
- s.add_development_dependency "activesupport", '~> 4.2'
23
+ s.add_development_dependency 'rspec'
24
+ s.add_development_dependency 'activesupport'
25
25
  end
@@ -1,8 +1,8 @@
1
- require 'active_support/core_ext/hash'
2
- require 'active_support/core_ext/string/inflections'
1
+ require 'active_support'
2
+ require 'active_support/core_ext'
3
3
 
4
4
  module CamelSnakeKeys
5
- [Hash,Array].each do |klass|
5
+ [Hash, Array].each do |klass|
6
6
  refine klass do
7
7
  def with_camel_keys(indifference=false)
8
8
  CamelSnakeKeys.camel_keys(self, indifference)
@@ -15,50 +15,52 @@ module CamelSnakeKeys
15
15
  end
16
16
 
17
17
  class << self
18
- def if_underscore(v)
19
- if v.is_a? Symbol
20
- v.to_s.underscore.to_sym
21
- elsif v.is_a? String
22
- v.underscore
18
+ def if_underscore(obj)
19
+ case obj
20
+ when Symbol
21
+ obj.to_s.underscore.to_sym
22
+ when String
23
+ obj.underscore
23
24
  else
24
- v
25
+ obj
25
26
  end
26
27
  end
27
28
 
28
- def if_camelize(v)
29
- if v.is_a? Symbol
30
- v.to_s.camelize(:lower).to_sym
31
- elsif v.is_a? String
32
- v.camelize(:lower)
29
+ def if_camelize(obj)
30
+ case obj
31
+ when Symbol
32
+ obj.to_s.camelize(:lower).to_sym
33
+ when String
34
+ obj.camelize(:lower)
33
35
  else
34
- v
36
+ obj
35
37
  end
36
38
  end
37
39
 
38
40
  def snake_keys(data, indifference=false)
39
- if data.kind_of? Array
41
+ case data
42
+ when Array
40
43
  data.map { |v| snake_keys(v, indifference) }
41
- elsif data.kind_of? Hash
42
- hash = Hash[data.sort_by {|k,_v| k =~ /_/ ? 0 : 1 }.map {|k, v| [if_underscore(k), snake_keys(v, indifference)] }]
44
+ when Hash
45
+ hash = data.sort_by {|k, _v| k =~ /_/ ? 0 : 1 }.map {|k, v| [if_underscore(k), snake_keys(v, indifference)] }.to_h
43
46
  hash = hash.with_indifferent_access if indifference
44
- data.class == Hash ? hash : data.class.new(hash)
47
+ data.instance_of?(Hash) ? hash : data.class.new(hash)
45
48
  else
46
49
  data
47
50
  end
48
51
  end
49
52
 
50
53
  def camel_keys(data, indifference=false)
51
- if data.kind_of? Array
54
+ case data
55
+ when Array
52
56
  data.map { |v| camel_keys(v, indifference) }
53
- elsif data.kind_of? Hash
54
- hash = Hash[data.sort_by {|k,_v| k =~ /_/ ? 1 : 0 }.map {|k, v| [if_camelize(k), camel_keys(v, indifference)] }]
57
+ when Hash
58
+ hash = data.sort_by {|k, _v| k =~ /_/ ? 1 : 0 }.map {|k, v| [if_camelize(k), camel_keys(v, indifference)] }.to_h
55
59
  hash = hash.with_indifferent_access if indifference
56
- data.class == Hash ? hash : data.class.new(hash)
60
+ data.instance_of?(Hash) ? hash : data.class.new(hash)
57
61
  else
58
62
  data
59
63
  end
60
64
  end
61
65
  end
62
66
  end
63
-
64
-
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module CamelSnakeKeys
2
- VERSION = "0.0.6".freeze
2
+ VERSION = '0.0.7'.freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -35,14 +35,14 @@ RSpec.describe Enumerable do
35
35
  hash.should eq camelized
36
36
  end
37
37
 
38
- it "should preserve symbol keys" do
38
+ it "should preserve symbol keys" do
39
39
  camelized.with_snake_keys[:foo_bar].should_not be_nil
40
40
  camelized.with_snake_keys['foo_bar'].should be_nil
41
41
  snaked.with_camel_keys[:fooBar].should be_present
42
42
  snaked.with_camel_keys['fooBar'].should be_nil
43
43
  end
44
44
 
45
- it "should preserve string keys" do
45
+ it "should preserve string keys" do
46
46
  camelized.with_snake_keys['dark_matter'].should be_present
47
47
  camelized.with_snake_keys[:dark_matter].should be_nil
48
48
  snaked.with_camel_keys['darkMatter'].should be_present
@@ -65,7 +65,7 @@ RSpec.describe Enumerable do
65
65
 
66
66
  end
67
67
 
68
- context "hashes with indifferent access" do
68
+ context "hashes with indifferent access" do
69
69
  let(:snaked) { {1.2=>1, 1=>1.2, nil=>2, :foo_bar=>1, "dark_matter"=>[{:dark_energy=>"aBc", "baz_qux"=>"Frob."}]}.with_indifferent_access }
70
70
  let(:camelized) { { 1.2=>1, 1=>1.2, nil=>2, :fooBar=>1, "darkMatter"=>[{:darkEnergy=>"aBc", "bazQux"=>"Frob."}]}.with_indifferent_access }
71
71
 
@@ -95,7 +95,7 @@ RSpec.describe Enumerable do
95
95
 
96
96
  end
97
97
 
98
- context "mashes" do
98
+ context "mashes" do
99
99
  let(:snaked) { Hashie::Mash.new({1.2=>1, 1=>1.2, nil=>2, :foo_bar=>1, "dark_matter"=>[{:dark_energy=>"aBc", "baz_qux"=>"Frob."}]}) }
100
100
  let(:camelized) { Hashie::Mash.new({ 1.2=>1, 1=>1.2, nil=>2, :fooBar=>1, "darkMatter"=>[{:darkEnergy=>"aBc", "bazQux"=>"Frob."}]}) }
101
101
 
@@ -112,7 +112,7 @@ RSpec.describe Enumerable do
112
112
  hash.should eq camelized
113
113
  hash["foo_bar"].should eq hash[:foo_bar]
114
114
  end
115
-
115
+
116
116
  it "should snake case keys of hashes with redundant indifference" do
117
117
  hash = camelized.with_snake_keys(true)
118
118
  hash.class.should eq Hashie::Mash
@@ -126,7 +126,7 @@ RSpec.describe Enumerable do
126
126
  hash.should eq camelized
127
127
  hash["foo_bar"].should eq hash[:foo_bar]
128
128
  end
129
-
129
+
130
130
  end
131
131
 
132
132
  context "hash merge conflicts should be resolved predictably" do
@@ -148,4 +148,31 @@ RSpec.describe Enumerable do
148
148
  hash.with_camel_keys.should eq result
149
149
  end
150
150
  end
151
+
152
+ context "it should pass indifference down deeply nested structures" do
153
+ it "camelizing an array of hashes" do
154
+ camelized = [ a: { b: [{c: :d}] } ].with_camel_keys(true)
155
+ camelized.first[:a].is_a?(HashWithIndifferentAccess).should be_truthy
156
+ camelized.first[:a][:b].first.is_a?(HashWithIndifferentAccess).should be_truthy
157
+ end
158
+
159
+ it "cazemlizing a hashes of arrays" do
160
+ camelized = { a: [{b: {c: :d}}]}.with_camel_keys(true)
161
+ camelized.is_a?(HashWithIndifferentAccess).should be_truthy
162
+ camelized[:a].first[:b].is_a?(HashWithIndifferentAccess).should be_truthy
163
+ end
164
+
165
+ it "snaking an array of hashes" do
166
+ snaked = [ a: { b: [{c: :d}] } ].with_snake_keys(true)
167
+ snaked.first[:a].is_a?(HashWithIndifferentAccess).should be_truthy
168
+ snaked.first[:a][:b].first.is_a?(HashWithIndifferentAccess).should be_truthy
169
+ end
170
+
171
+ it "snaking a hashes of arrays" do
172
+ snaked = { a: [{b: {c: :d}}]}.with_snake_keys(true)
173
+ snaked.is_a?(HashWithIndifferentAccess).should be_truthy
174
+ snaked[:a].first[:b].is_a?(HashWithIndifferentAccess).should be_truthy
175
+ end
176
+
177
+ end
151
178
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: camel_snake_keys
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Buermann
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-07 00:00:00.000000000 Z
11
+ date: 2022-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -25,33 +25,33 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec-rails
28
+ name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '3.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '4.2'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '4.2'
54
+ version: '0'
55
55
  description: ''
56
56
  email:
57
57
  - buermann@gmail.com
@@ -77,13 +77,13 @@ homepage: https://github.com/buermann/camel_snake_keys
77
77
  licenses:
78
78
  - MIT
79
79
  metadata: {}
80
- post_install_message:
80
+ post_install_message:
81
81
  rdoc_options: []
82
82
  require_paths:
83
83
  - lib
84
84
  required_ruby_version: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ">"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '2.0'
89
89
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -92,8 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
95
- rubygems_version: 3.1.2
96
- signing_key:
95
+ rubygems_version: 3.2.15
96
+ signing_key:
97
97
  specification_version: 4
98
98
  summary: Convert nested data structure hash keys between camel and snake case.
99
99
  test_files: