camel_snake_keys 0.0.6 → 1.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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +79 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +13 -1173
- data/.ruby-version +1 -1
- data/CHANGELOG.md +27 -6
- data/Gemfile +9 -2
- data/README.md +2 -16
- data/Rakefile +2 -1
- data/camel_snake.gemspec +19 -15
- data/lib/camel_snake_keys.rb +49 -35
- data/lib/version.rb +4 -1
- data/spec/lib/camel_snake_keys_spec.rb +126 -49
- metadata +48 -21
- data/.travis.yml +0 -37
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.3.0
|
data/CHANGELOG.md
CHANGED
@@ -1,19 +1,40 @@
|
|
1
|
-
0.0
|
2
|
-
|
1
|
+
1.0.0 01/31/2024
|
2
|
+
================
|
3
|
+
|
4
|
+
Don't let integer hash keys raise your enemies up. Test against Ruby 3.3.0.
|
5
|
+
|
6
|
+
0.1.0 10/14/2022
|
7
|
+
================
|
8
|
+
|
9
|
+
ActiveSupport::Inflector's camelize and underscore methods convert "::" to "/" and "/" to "::", which might be useful in Rails' internals, but in the context of a Grape API it corrupts the swagger docs' "paths" objects.
|
10
|
+
|
11
|
+
Implement our own camel and snake case methods that leave "::" and "/" unmolested, rather than relying on ActiveSupport, in which case we'll drop that dependency altogether by removing the (trivially re-implemented) indifferent access functionality.
|
12
|
+
|
13
|
+
We are not re-implmenting ActiveSupport's acronym inflections. Yet.
|
14
|
+
|
15
|
+
Replace travis etc. with github actions.
|
16
|
+
|
17
|
+
0.0.7 02/08/2022
|
18
|
+
================
|
19
|
+
|
20
|
+
Support Ruby 3+
|
21
|
+
|
22
|
+
0.0.6 04/07/2020
|
23
|
+
===============
|
3
24
|
|
4
25
|
### Bug fix
|
5
26
|
|
6
27
|
Pass the indifferent access flag down the recursion.
|
7
28
|
|
8
|
-
0.0.3
|
9
|
-
|
29
|
+
0.0.3 05/11/2016
|
30
|
+
================
|
10
31
|
|
11
32
|
### Features
|
12
33
|
|
13
34
|
Preserve any descendent of Hash that accepts a Hash in its initialize method, as with ActiveSupport::HashWithIndifferentAccess and Hashie::Mash
|
14
35
|
|
15
|
-
0.0.2
|
16
|
-
|
36
|
+
0.0.2 05/11/2016
|
37
|
+
================
|
17
38
|
|
18
39
|
### Features
|
19
40
|
|
data/Gemfile
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem '
|
4
|
+
gemspec
|
5
|
+
gem 'activesupport'
|
6
|
+
gem 'brakeman'
|
7
|
+
gem 'byebug'
|
8
|
+
gem 'coveralls'
|
4
9
|
gem 'hashie'
|
5
10
|
gem 'rake'
|
6
11
|
gem 'rspec'
|
12
|
+
gem 'rspec-core'
|
13
|
+
gem 'rubocop'
|
data/README.md
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
# camel_snake_keys
|
2
2
|
|
3
3
|
[![Gem Version][GV img]][Gem Version]
|
4
|
-
[![Build Status][BS img]][Build Status]
|
5
|
-
[![Dependency Status][DS img]][Dependency Status]
|
6
|
-
[![Coverage Status][CS img]][Coverage Status]
|
7
|
-
|
8
4
|
[Gem Version]: https://rubygems.org/gems/camel_snake_keys
|
9
|
-
[Build Status]: https://travis-ci.org/buermann/camel_snake_keys
|
10
|
-
[travis pull requests]: https://travis-ci.org/buermann/camel_snake_keys/pull_requests
|
11
|
-
[Dependency Status]: https://gemnasium.com/buermann/camel_snake_keys
|
12
|
-
[Coverage Status]: https://coveralls.io/r/buermann/camel_snake_keys
|
13
|
-
|
14
|
-
[GV img]: https://badge.fury.io/rb/camel_snake_keys.png
|
15
|
-
[BS img]: https://travis-ci.org/buermann/camel_snake_keys.png
|
16
|
-
[DS img]: https://gemnasium.com/buermann/camel_snake_keys.png
|
17
|
-
[CS img]: https://coveralls.io/repos/buermann/camel_snake_keys/badge.png?branch=master
|
18
|
-
|
19
5
|
|
20
6
|
Add recursive with_snake_keys and with_camel_keys refinements to Array and Hash. Preserve strings and symbols and treat hash descendents such as ActiveSupport::HashWithIndifferentAccess and Hashie::Mash agnostically.
|
21
7
|
|
22
8
|
## Documentation
|
23
9
|
|
24
|
-
Add `gem 'camel_snake_keys'` to your Gemfile or gem install camel_snake_keys.
|
10
|
+
Add `gem 'camel_snake_keys'` to your Gemfile or "gem install camel_snake_keys".
|
25
11
|
|
26
|
-
|
12
|
+
Where you want to add `with_snake_keys` and `with_camel_keys` to your objects invoke `using CamelSnakeKeys`, or invoke the class methods, `CamelSnakeKeys.camel_keys(object)` and `CamelSnakeKeys.snake_keys(object)`.
|
27
13
|
|
28
14
|
```
|
29
15
|
require 'camel_snake_keys'
|
data/Rakefile
CHANGED
data/camel_snake.gemspec
CHANGED
@@ -1,25 +1,29 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
2
4
|
|
3
5
|
# Maintain your gem's version:
|
4
|
-
require
|
6
|
+
require 'version'
|
5
7
|
|
6
8
|
# Describe your gem and declare its dependencies:
|
7
9
|
Gem::Specification.new do |s|
|
8
|
-
s.name =
|
10
|
+
s.name = 'camel_snake_keys'
|
9
11
|
s.version = CamelSnakeKeys::VERSION
|
10
|
-
s.authors = [
|
11
|
-
s.email = [
|
12
|
-
s.homepage =
|
13
|
-
s.summary =
|
14
|
-
s.description =
|
15
|
-
s.license =
|
12
|
+
s.authors = ['Josh Buermann']
|
13
|
+
s.email = ['buermann@gmail.com']
|
14
|
+
s.homepage = 'https://github.com/buermann/camel_snake_keys'
|
15
|
+
s.summary = 'Convert nested data structure hash keys between camel and snake case.'
|
16
|
+
s.description = ''
|
17
|
+
s.license = 'MIT'
|
16
18
|
|
17
|
-
s.files
|
18
|
-
s.test_files = `git ls-files -- spec/*`.split("\n")
|
19
|
+
s.files = `git ls-files`.split("\n").sort
|
19
20
|
|
20
|
-
s.required_ruby_version = '
|
21
|
-
s.add_dependency
|
21
|
+
s.required_ruby_version = '> 2.3'
|
22
|
+
s.add_dependency 'activesupport'
|
22
23
|
|
23
|
-
s.add_development_dependency
|
24
|
-
s.add_development_dependency
|
24
|
+
s.add_development_dependency 'activesupport'
|
25
|
+
s.add_development_dependency 'brakeman'
|
26
|
+
s.add_development_dependency 'byebug'
|
27
|
+
s.add_development_dependency 'rspec'
|
28
|
+
s.metadata['rubygems_mfa_required'] = 'true'
|
25
29
|
end
|
data/lib/camel_snake_keys.rb
CHANGED
@@ -1,64 +1,78 @@
|
|
1
|
-
|
2
|
-
require 'active_support/core_ext/string/inflections'
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
3
|
+
# Convert the keys of hashes in nested structures to camel or snake case.
|
4
4
|
module CamelSnakeKeys
|
5
|
-
[Hash,Array].each do |klass|
|
5
|
+
[Hash, Array].each do |klass|
|
6
6
|
refine klass do
|
7
|
-
def with_camel_keys
|
8
|
-
CamelSnakeKeys.camel_keys(self
|
7
|
+
def with_camel_keys
|
8
|
+
CamelSnakeKeys.camel_keys(self)
|
9
9
|
end
|
10
10
|
|
11
|
-
def with_snake_keys
|
12
|
-
CamelSnakeKeys.snake_keys(self
|
11
|
+
def with_snake_keys
|
12
|
+
CamelSnakeKeys.snake_keys(self)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
class << self
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
def camelcase(obj)
|
19
|
+
string = +obj.to_s # unfreeze whatever it might be with a leading +
|
20
|
+
string.sub!(/^([A-Z])/) { $1.downcase }
|
21
|
+
string.gsub!(/_([a-z\d])/) { $1.capitalize }
|
22
|
+
string
|
23
|
+
end
|
24
|
+
|
25
|
+
def snakecase(obj)
|
26
|
+
string = +obj.to_s
|
27
|
+
string.gsub!(/([A-Z])/) { "_#{$1}" }
|
28
|
+
string.downcase!
|
29
|
+
string
|
30
|
+
end
|
31
|
+
|
32
|
+
def if_underscore(obj)
|
33
|
+
case obj
|
34
|
+
when Symbol
|
35
|
+
snakecase(obj.to_s).to_sym
|
36
|
+
when String
|
37
|
+
snakecase(obj)
|
23
38
|
else
|
24
|
-
|
39
|
+
obj
|
25
40
|
end
|
26
41
|
end
|
27
42
|
|
28
|
-
def if_camelize(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
43
|
+
def if_camelize(obj)
|
44
|
+
case obj
|
45
|
+
when Symbol
|
46
|
+
camelcase(obj.to_s).to_sym
|
47
|
+
when String
|
48
|
+
camelcase(obj)
|
33
49
|
else
|
34
|
-
|
50
|
+
obj
|
35
51
|
end
|
36
52
|
end
|
37
53
|
|
38
|
-
def snake_keys(data
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
hash =
|
44
|
-
data.
|
54
|
+
def snake_keys(data)
|
55
|
+
case data
|
56
|
+
when Array
|
57
|
+
data.map { |v| snake_keys(v) }
|
58
|
+
when Hash
|
59
|
+
hash = data.sort_by { |k, _v| k.to_s =~ /_/ ? 0 : 1 }.to_h { |k, v| [if_underscore(k), snake_keys(v)] }
|
60
|
+
data.instance_of?(Hash) ? hash : data.class.new(hash)
|
45
61
|
else
|
46
62
|
data
|
47
63
|
end
|
48
64
|
end
|
49
65
|
|
50
|
-
def camel_keys(data
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
hash =
|
56
|
-
data.
|
66
|
+
def camel_keys(data)
|
67
|
+
case data
|
68
|
+
when Array
|
69
|
+
data.map { |v| camel_keys(v) }
|
70
|
+
when Hash
|
71
|
+
hash = data.sort_by { |k, _v| k.to_s =~ /_/ ? 1 : 0 }.to_h { |k, v| [if_camelize(k), camel_keys(v)] }
|
72
|
+
data.instance_of?(Hash) ? hash : data.class.new(hash)
|
57
73
|
else
|
58
74
|
data
|
59
75
|
end
|
60
76
|
end
|
61
77
|
end
|
62
78
|
end
|
63
|
-
|
64
|
-
|
data/lib/version.rb
CHANGED
@@ -1,136 +1,186 @@
|
|
1
1
|
require 'test_helper'
|
2
|
+
require 'byebug'
|
2
3
|
require 'hashie/mash'
|
4
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
3
5
|
|
4
6
|
using CamelSnakeKeys
|
5
7
|
|
6
8
|
RSpec.describe Enumerable do
|
7
9
|
|
8
|
-
context
|
9
|
-
let(:
|
10
|
-
|
10
|
+
context 'camelize and underscore' do
|
11
|
+
let(:underscore_to_camel) {
|
12
|
+
{
|
13
|
+
"product" => "product",
|
14
|
+
"special_guest" => "specialGuest",
|
15
|
+
"application_controller" => "applicationController",
|
16
|
+
"area51_controller" => "area51Controller",
|
17
|
+
product: "product",
|
18
|
+
special_guest: "specialGuest",
|
19
|
+
application_controller: "applicationController",
|
20
|
+
area51_controller: "area51Controller",
|
21
|
+
"camel_snake/keys" => "camelSnake/keys",
|
22
|
+
"camel_snake::keys" => "camelSnake::keys"
|
23
|
+
}
|
24
|
+
}
|
25
|
+
it "converts strings and symbols to camel and snake case strings as expected" do
|
26
|
+
underscore_to_camel.each do |k,v|
|
27
|
+
CamelSnakeKeys.camelcase(k).should eq v.to_s
|
28
|
+
CamelSnakeKeys.snakecase(v).should eq k.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it "handles nils gracefully" do
|
33
|
+
CamelSnakeKeys.camelcase(nil).should eq ""
|
34
|
+
CamelSnakeKeys.snakecase(nil).should eq ""
|
35
|
+
end
|
36
|
+
end
|
11
37
|
|
12
|
-
|
38
|
+
context 'arrays' do
|
39
|
+
let(:snaked) do
|
40
|
+
[[{ true => false, 1 => 1.2, 1.2 => 1, nil => 2, :foo_bar => 1,
|
41
|
+
'dark_matter' => [{ :dark_energy => 'aBc', 'baz_qux' => 'Frob.' }] }]]
|
42
|
+
end
|
43
|
+
let(:camelized) do
|
44
|
+
[[{ true => false, 1 => 1.2, 1.2 => 1, nil => 2, :fooBar => 1,
|
45
|
+
'darkMatter' => [{ :darkEnergy => 'aBc', 'bazQux' => 'Frob.' }] }]]
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should snake case keys of hashes' do
|
13
49
|
camelized.with_snake_keys.should eq snaked
|
14
50
|
end
|
15
51
|
|
16
|
-
it
|
52
|
+
it 'should camel case keys of hashes' do
|
17
53
|
snaked.with_camel_keys.should eq camelized
|
18
54
|
end
|
19
|
-
|
20
55
|
end
|
21
56
|
|
22
|
-
context
|
23
|
-
let(:snaked)
|
24
|
-
|
57
|
+
context 'hashes' do
|
58
|
+
let(:snaked) do
|
59
|
+
{ false => true, 1 => 1.2, 1.2 => 1, nil => 2, :foo_bar => 1,
|
60
|
+
'dark_matter' => [{ :dark_energy => 'aBc', 'baz_qux' => 'Frob.' }] }
|
61
|
+
end
|
62
|
+
let(:camelized) do
|
63
|
+
{ false => true, 1 => 1.2, 1.2 => 1, nil => 2, :fooBar => 1,
|
64
|
+
'darkMatter' => [{ :darkEnergy => 'aBc', 'bazQux' => 'Frob.' }] }
|
65
|
+
end
|
25
66
|
|
26
|
-
it
|
67
|
+
it 'should snake case keys of hashes' do
|
27
68
|
hash = camelized.with_snake_keys
|
28
69
|
hash.class.should eq Hash
|
29
70
|
hash.should eq snaked
|
30
71
|
end
|
31
72
|
|
32
|
-
it
|
73
|
+
it 'should camel case keys of hashes' do
|
33
74
|
hash = snaked.with_camel_keys
|
34
75
|
hash.class.should eq Hash
|
35
76
|
hash.should eq camelized
|
36
77
|
end
|
37
78
|
|
38
|
-
it
|
79
|
+
it 'should preserve symbol keys' do
|
39
80
|
camelized.with_snake_keys[:foo_bar].should_not be_nil
|
40
81
|
camelized.with_snake_keys['foo_bar'].should be_nil
|
41
82
|
snaked.with_camel_keys[:fooBar].should be_present
|
42
83
|
snaked.with_camel_keys['fooBar'].should be_nil
|
43
84
|
end
|
44
85
|
|
45
|
-
it
|
86
|
+
it 'should preserve string keys' do
|
46
87
|
camelized.with_snake_keys['dark_matter'].should be_present
|
47
88
|
camelized.with_snake_keys[:dark_matter].should be_nil
|
48
89
|
snaked.with_camel_keys['darkMatter'].should be_present
|
49
90
|
snaked.with_camel_keys[:darkMatter].should be_nil
|
50
91
|
end
|
51
92
|
|
52
|
-
it
|
53
|
-
hash = camelized.with_snake_keys
|
93
|
+
it 'should snake case keys of hashes with indifference' do
|
94
|
+
hash = camelized.with_indifferent_access.with_snake_keys
|
54
95
|
hash.class.should eq HashWithIndifferentAccess
|
55
96
|
hash.should eq snaked.with_indifferent_access
|
56
|
-
hash[:foo_bar].should eq hash[
|
97
|
+
hash[:foo_bar].should eq hash['foo_bar']
|
57
98
|
end
|
58
99
|
|
59
|
-
it
|
60
|
-
hash = snaked.with_camel_keys
|
100
|
+
it 'should camel case keys of hashes with indifference' do
|
101
|
+
hash = snaked.with_indifferent_access.with_camel_keys
|
61
102
|
hash.class.should eq HashWithIndifferentAccess
|
62
103
|
hash.should eq camelized.with_indifferent_access
|
63
|
-
hash[
|
104
|
+
hash['fooBar'].should eq hash[:fooBar]
|
64
105
|
end
|
65
|
-
|
66
106
|
end
|
67
107
|
|
68
|
-
context
|
69
|
-
let(:snaked)
|
70
|
-
|
108
|
+
context 'hashes with indifferent access' do
|
109
|
+
let(:snaked) do
|
110
|
+
{ 1.2 => 1, 1 => 1.2, nil => 2, :foo_bar => 1,
|
111
|
+
'dark_matter' => [{ :dark_energy => 'aBc', 'baz_qux' => 'Frob.' }] }.with_indifferent_access
|
112
|
+
end
|
113
|
+
let(:camelized) do
|
114
|
+
{ 1.2 => 1, 1 => 1.2, nil => 2, :fooBar => 1,
|
115
|
+
'darkMatter' => [{ :darkEnergy => 'aBc', 'bazQux' => 'Frob.' }] }.with_indifferent_access
|
116
|
+
end
|
71
117
|
|
72
|
-
it
|
118
|
+
it 'should snake case keys of hashes' do
|
73
119
|
hash = camelized.with_snake_keys
|
74
120
|
hash.class.should eq HashWithIndifferentAccess
|
75
121
|
hash.should eq snaked
|
76
122
|
end
|
77
123
|
|
78
|
-
it
|
124
|
+
it 'should camel case keys of hashes' do
|
79
125
|
hash = snaked.with_camel_keys
|
80
126
|
hash.class.should eq HashWithIndifferentAccess
|
81
127
|
hash.should eq camelized
|
82
128
|
end
|
83
129
|
|
84
|
-
it
|
85
|
-
hash = camelized.with_snake_keys
|
130
|
+
it 'should snake case keys of hashes with indifference' do
|
131
|
+
hash = camelized.with_indifferent_access.with_snake_keys
|
86
132
|
hash.class.should eq HashWithIndifferentAccess
|
87
133
|
hash.should eq snaked
|
88
134
|
end
|
89
135
|
|
90
|
-
it
|
91
|
-
hash = snaked.with_camel_keys
|
136
|
+
it 'should camel case keys of hashes with indifference' do
|
137
|
+
hash = snaked.with_indifferent_access.with_camel_keys
|
92
138
|
hash.class.should eq HashWithIndifferentAccess
|
93
139
|
hash.should eq camelized
|
94
140
|
end
|
95
|
-
|
96
141
|
end
|
97
142
|
|
98
|
-
context
|
99
|
-
let(:snaked)
|
100
|
-
|
143
|
+
context 'mashes' do
|
144
|
+
let(:snaked) do
|
145
|
+
Hashie::Mash.new({ 1.2 => 1, 1 => 1.2, nil => 2, :foo_bar => 1,
|
146
|
+
'dark_matter' => [{ :dark_energy => 'aBc', 'baz_qux' => 'Frob.' }] })
|
147
|
+
end
|
148
|
+
let(:camelized) do
|
149
|
+
Hashie::Mash.new({ 1.2 => 1, 1 => 1.2, nil => 2, :fooBar => 1,
|
150
|
+
'darkMatter' => [{ :darkEnergy => 'aBc', 'bazQux' => 'Frob.' }] })
|
151
|
+
end
|
101
152
|
|
102
|
-
it
|
153
|
+
it 'should snake case keys of hashes' do
|
103
154
|
hash = camelized.with_snake_keys
|
104
155
|
hash.class.should eq Hashie::Mash
|
105
156
|
hash.should eq snaked
|
106
|
-
hash[
|
157
|
+
hash['fooBar'].should eq hash[:fooBar]
|
107
158
|
end
|
108
159
|
|
109
|
-
it
|
160
|
+
it 'should camel case keys of hashes' do
|
110
161
|
hash = snaked.with_camel_keys
|
111
162
|
hash.class.should eq Hashie::Mash
|
112
163
|
hash.should eq camelized
|
113
|
-
hash[
|
164
|
+
hash['foo_bar'].should eq hash[:foo_bar]
|
114
165
|
end
|
115
|
-
|
116
|
-
it
|
117
|
-
hash = camelized.with_snake_keys
|
166
|
+
|
167
|
+
it 'should snake case keys of hashes with redundant indifference' do
|
168
|
+
hash = Hashie::Mash.new(camelized.with_snake_keys.with_indifferent_access)
|
118
169
|
hash.class.should eq Hashie::Mash
|
119
170
|
hash.should eq snaked
|
120
|
-
hash[
|
171
|
+
hash['foo_bar'].should eq hash[:foo_bar]
|
121
172
|
end
|
122
173
|
|
123
|
-
it
|
124
|
-
hash = snaked.with_camel_keys
|
174
|
+
it 'should camel case keys of hashes with redundant indifference' do
|
175
|
+
hash = Hashie::Mash.new(snaked.with_camel_keys.with_indifferent_access)
|
125
176
|
hash.class.should eq Hashie::Mash
|
126
177
|
hash.should eq camelized
|
127
|
-
hash[
|
178
|
+
hash['foo_bar'].should eq hash[:foo_bar]
|
128
179
|
end
|
129
|
-
|
130
180
|
end
|
131
181
|
|
132
|
-
context
|
133
|
-
it
|
182
|
+
context 'hash merge conflicts should be resolved predictably' do
|
183
|
+
it 'should give camel case key values priority when snake casing' do
|
134
184
|
hash = { foo_bar: 1, fooBar: 2 }
|
135
185
|
result = { foo_bar: 2 }
|
136
186
|
hash.with_snake_keys.should eq result
|
@@ -139,13 +189,40 @@ RSpec.describe Enumerable do
|
|
139
189
|
hash.with_snake_keys.should eq result
|
140
190
|
end
|
141
191
|
|
142
|
-
it
|
143
|
-
hash = { foo_bar: 1, fooBar: 2 }
|
192
|
+
it 'should give snake case key values priority when camel casing' do
|
144
193
|
result = { fooBar: 1 }
|
194
|
+
|
195
|
+
hash = { foo_bar: 1, fooBar: 2 }
|
145
196
|
hash.with_camel_keys.should eq result
|
146
197
|
|
147
198
|
hash = { fooBar: 2, foo_bar: 1 }
|
148
199
|
hash.with_camel_keys.should eq result
|
149
200
|
end
|
150
201
|
end
|
202
|
+
|
203
|
+
context 'it should pass indifference down deeply nested structures' do
|
204
|
+
it 'camelizing an array of hashes' do
|
205
|
+
camelized = [a: { b: [{ c: :d }] }].with_camel_keys.map(&:with_indifferent_access)
|
206
|
+
camelized.first[:a].is_a?(HashWithIndifferentAccess).should be_truthy
|
207
|
+
camelized.first[:a][:b].first.is_a?(HashWithIndifferentAccess).should be_truthy
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'cazemlizing a hashes of arrays' do
|
211
|
+
camelized = { a: [{ b: { c: :d } }] }.with_camel_keys.with_indifferent_access
|
212
|
+
camelized.is_a?(HashWithIndifferentAccess).should be_truthy
|
213
|
+
camelized[:a].first[:b].is_a?(HashWithIndifferentAccess).should be_truthy
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'snaking an array of hashes' do
|
217
|
+
snaked = [a: { b: [{ c: :d }] }].with_snake_keys.map(&:with_indifferent_access)
|
218
|
+
snaked.first[:a].is_a?(HashWithIndifferentAccess).should be_truthy
|
219
|
+
snaked.first[:a][:b].first.is_a?(HashWithIndifferentAccess).should be_truthy
|
220
|
+
end
|
221
|
+
|
222
|
+
it 'snaking a hashes of arrays' do
|
223
|
+
snaked = { a: [{ b: { c: :d } }] }.with_snake_keys.with_indifferent_access
|
224
|
+
snaked.is_a?(HashWithIndifferentAccess).should be_truthy
|
225
|
+
snaked[:a].first[:b].is_a?(HashWithIndifferentAccess).should be_truthy
|
226
|
+
end
|
227
|
+
end
|
151
228
|
end
|