camel_snake_keys 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fd107c36f9563eb3887c4ab9b4805e2b6ee46796
4
- data.tar.gz: 9bf618e70270ac65ea28c2ac3346193ba082d526
3
+ metadata.gz: 60878589862b05c4c1b707c7840614c473b9ea52
4
+ data.tar.gz: fbf67796982570c635fad519603702847e0163ae
5
5
  SHA512:
6
- metadata.gz: b8fe1fa43f82a6792ef7e5ac39d3952cf8647d2d326c5939c5f8db64ed70d3c97aa3b9a8d3d122b87fc7f5fa982e5ffacb6ef04b842daaa064ae87f82b2dbd57
7
- data.tar.gz: 9598f2d06a0123881eff4afde3970a72fe1151409b3ed1c00f59cd04452f4a2b26a5c3eba6cd6c2532456bf9622e606bbeac3dde684b8d7b94ab74c756aa3406
6
+ metadata.gz: 3aca7eee031b8ad0592bbeb8e3dae912d797bef57a20605c31d5ee40b5231429194329f65ae91688d68ee0b62b692e72eddfad958a759abb8ff1a66bdd90c08d
7
+ data.tar.gz: d43e5649843a5a9a14b98185d9ebc8b6a0ff5b255236f3f5cc87728aace3e220df48214a03f9914739c670c4e6063d4f3272bdddd08447e35700da159f148cc9
@@ -0,0 +1,36 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem install bundler
4
+ install: bundle install --jobs=1 --retry=1
5
+ script:
6
+ - bundle install
7
+ - bundle exec rspec
8
+
9
+ rvm:
10
+ - 2.2
11
+ - 2.1
12
+ - 2.0.0
13
+ - jruby-9.0.4.0
14
+ - ruby-head
15
+ - jruby-head
16
+
17
+ matrix:
18
+ allow_failures:
19
+ - rvm: ruby-head
20
+ - rvm: jruby-head
21
+
22
+ env:
23
+ matrix:
24
+ - RAILS=3.2.22
25
+ - RAILS=4.1.13
26
+ - RAILS=4.2.5.1
27
+ - RAILS=master
28
+ global:
29
+ - JRUBY_OPTS="-J-Xmx1024m --debug"
30
+
31
+ notifications:
32
+ email:
33
+ recipients:
34
+ - buermann@gmail.com
35
+ on_success: change
36
+ on_failure: always
data/README.md CHANGED
@@ -1,20 +1,39 @@
1
1
  # camel_snake_keys
2
2
 
3
- Add recursive with_snake_keys and with_camel_keys to Enumerable without converting everything into a string.
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
+ [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
+
20
+ Add recursive with_snake_keys and with_camel_keys to Enumerable, preserve strings and symbols in hashes, and treat hash descendents like ActiveSupport::HashWithIndifferentAccess and Hashie::Mash agnostically.
4
21
 
5
22
  ## Documentation
6
23
 
7
- Add gem 'camel_snake_keys' to your gemfile or gem install camel_snake_keys.
24
+ Add `gem 'camel_snake_keys'` to your Gemfile or gem install camel_snake_keys.
8
25
 
9
26
  Enumerables will be monkey patched the following methods:
10
27
 
28
+ ```
11
29
  with_snake_keys(with_indifferent=false)
12
30
  with_camel_keys(with_indifferent=false)
31
+ ```
13
32
 
14
33
  If with_indifference is set to a true value hashes will be returned as ActiveSupport's HashWithIndifferentAccess.
15
34
 
16
35
  ```
17
- require './lib/camel_snake_keys'
36
+ require 'camel_snake_keys'
18
37
 
19
38
  {fooBar: "Frob"}.with_snake_keys
20
39
  => {:foo_bar=>"Frob"}
@@ -1,6 +1,5 @@
1
1
  require 'active_support/core_ext/hash'
2
2
  require 'active_support/core_ext/string/inflections'
3
- require 'hashie/mash'
4
3
 
5
4
  module CamelSnakeKeys
6
5
  class << self
@@ -28,7 +27,7 @@ module CamelSnakeKeys
28
27
  if data.kind_of? Array
29
28
  data.map { |v| snake_keys(v) }
30
29
  elsif data.kind_of? Hash
31
- hash = Hash[data.map {|k, v| [if_underscore(k), snake_keys(v)] }]
30
+ hash = Hash[data.sort_by {|k,v| k =~ /_/ ? 0 : 1 }.map {|k, v| [if_underscore(k), snake_keys(v)] }]
32
31
  hash = hash.with_indifferent_access if indifference
33
32
  data.class == Hash ? hash : data.class.new(hash)
34
33
  else
@@ -40,7 +39,7 @@ module CamelSnakeKeys
40
39
  if data.kind_of? Array
41
40
  data.map { |v| camel_keys(v) }
42
41
  elsif data.kind_of? Hash
43
- hash = Hash[data.map {|k, v| [if_camelize(k), camel_keys(v)] }]
42
+ hash = Hash[data.sort_by {|k,v| k =~ /_/ ? 1 : 0 }.map {|k, v| [if_camelize(k), camel_keys(v)] }]
44
43
  hash = hash.with_indifferent_access if indifference
45
44
  data.class == Hash ? hash : data.class.new(hash)
46
45
  else
@@ -1,5 +1,5 @@
1
1
  module CamelSnakeKeys
2
- VERSION = "0.0.3".freeze
2
+ VERSION = "0.0.4".freeze
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -1,4 +1,5 @@
1
1
  require 'test_helper'
2
+ require 'hashie/mash'
2
3
 
3
4
  RSpec.describe Enumerable do
4
5
 
@@ -13,6 +14,7 @@ RSpec.describe Enumerable do
13
14
  it "should camel case keys of hashes" do
14
15
  snaked.with_camel_keys.should eq camelized
15
16
  end
17
+
16
18
  end
17
19
 
18
20
  context "hashes" do
@@ -21,26 +23,40 @@ RSpec.describe Enumerable do
21
23
 
22
24
  it "should snake case keys of hashes" do
23
25
  hash = camelized.with_snake_keys
24
- hash.class.should == Hash
26
+ hash.class.should eq Hash
25
27
  hash.should eq snaked
26
28
  end
27
29
 
28
30
  it "should camel case keys of hashes" do
29
31
  hash = snaked.with_camel_keys
30
- hash.class.should == Hash
32
+ hash.class.should eq Hash
31
33
  hash.should eq camelized
32
34
  end
33
35
 
36
+ it "should preserve symbol keys" do
37
+ camelized.with_snake_keys[:foo_bar].should_not be_nil
38
+ camelized.with_snake_keys['foo_bar'].should be_nil
39
+ snaked.with_camel_keys[:fooBar].should be_present
40
+ snaked.with_camel_keys['fooBar'].should be_nil
41
+ end
42
+
43
+ it "should preserve string keys" do
44
+ camelized.with_snake_keys['dark_matter'].should be_present
45
+ camelized.with_snake_keys[:dark_matter].should be_nil
46
+ snaked.with_camel_keys['darkMatter'].should be_present
47
+ snaked.with_camel_keys[:darkMatter].should be_nil
48
+ end
49
+
34
50
  it "should snake case keys of hashes with indifference" do
35
51
  hash = camelized.with_snake_keys(true)
36
- hash.class.should == HashWithIndifferentAccess
52
+ hash.class.should eq HashWithIndifferentAccess
37
53
  hash.should eq snaked.with_indifferent_access
38
54
  hash[:foo_bar].should eq hash["foo_bar"]
39
55
  end
40
56
 
41
57
  it "should camel case keys of hashes with indifference" do
42
58
  hash = snaked.with_camel_keys(true)
43
- hash.class.should == HashWithIndifferentAccess
59
+ hash.class.should eq HashWithIndifferentAccess
44
60
  hash.should eq camelized.with_indifferent_access
45
61
  hash["fooBar"].should eq hash[:fooBar]
46
62
  end
@@ -53,25 +69,25 @@ RSpec.describe Enumerable do
53
69
 
54
70
  it "should snake case keys of hashes" do
55
71
  hash = camelized.with_snake_keys
56
- hash.class.should == HashWithIndifferentAccess
72
+ hash.class.should eq HashWithIndifferentAccess
57
73
  hash.should eq snaked
58
74
  end
59
75
 
60
76
  it "should camel case keys of hashes" do
61
77
  hash = snaked.with_camel_keys
62
- hash.class.should == HashWithIndifferentAccess
78
+ hash.class.should eq HashWithIndifferentAccess
63
79
  hash.should eq camelized
64
80
  end
65
81
 
66
82
  it "should snake case keys of hashes with indifference" do
67
83
  hash = camelized.with_snake_keys(true)
68
- hash.class.should == HashWithIndifferentAccess
84
+ hash.class.should eq HashWithIndifferentAccess
69
85
  hash.should eq snaked
70
86
  end
71
87
 
72
88
  it "should camel case keys of hashes with indifference" do
73
89
  hash = snaked.with_camel_keys(true)
74
- hash.class.should == HashWithIndifferentAccess
90
+ hash.class.should eq HashWithIndifferentAccess
75
91
  hash.should eq camelized
76
92
  end
77
93
 
@@ -83,32 +99,51 @@ RSpec.describe Enumerable do
83
99
 
84
100
  it "should snake case keys of hashes" do
85
101
  hash = camelized.with_snake_keys
86
- hash.class.should == Hashie::Mash
102
+ hash.class.should eq Hashie::Mash
87
103
  hash.should eq snaked
88
- hash["fooBar"].should == hash[:fooBar]
104
+ hash["fooBar"].should eq hash[:fooBar]
89
105
  end
90
106
 
91
107
  it "should camel case keys of hashes" do
92
108
  hash = snaked.with_camel_keys
93
- hash.class.should == Hashie::Mash
109
+ hash.class.should eq Hashie::Mash
94
110
  hash.should eq camelized
95
- hash["foo_bar"].should == hash[:foo_bar]
111
+ hash["foo_bar"].should eq hash[:foo_bar]
96
112
  end
97
113
 
98
114
  it "should snake case keys of hashes with redundant indifference" do
99
115
  hash = camelized.with_snake_keys(true)
100
- hash.class.should == Hashie::Mash
116
+ hash.class.should eq Hashie::Mash
101
117
  hash.should eq snaked
102
- hash["foo_bar"].should == hash[:foo_bar]
118
+ hash["foo_bar"].should eq hash[:foo_bar]
103
119
  end
104
120
 
105
121
  it "should camel case keys of hashes with redundant indifference" do
106
122
  hash = snaked.with_camel_keys(true)
107
- hash.class.should == Hashie::Mash
123
+ hash.class.should eq Hashie::Mash
108
124
  hash.should eq camelized
109
- hash["foo_bar"].should == hash[:foo_bar]
125
+ hash["foo_bar"].should eq hash[:foo_bar]
110
126
  end
111
127
 
112
128
  end
113
129
 
130
+ context "hash merge conflicts should be resolved predictably" do
131
+ it "should give camel case key values priority when snake casing" do
132
+ hash = { foo_bar: 1, fooBar: 2 }
133
+ result = { foo_bar: 2 }
134
+ hash.with_snake_keys.should eq result
135
+
136
+ hash = { fooBar: 2, foo_bar: 1 }
137
+ hash.with_snake_keys.should eq result
138
+ end
139
+
140
+ it "should give snake case key values priority when camel casing" do
141
+ hash = { foo_bar: 1, fooBar: 2 }
142
+ result = { fooBar: 1 }
143
+ hash.with_camel_keys.should eq result
144
+
145
+ hash = { fooBar: 2, foo_bar: 1 }
146
+ hash.with_camel_keys.should eq result
147
+ end
148
+ end
114
149
  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.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Buermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-12 00:00:00.000000000 Z
11
+ date: 2016-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -48,6 +48,7 @@ files:
48
48
  - ".coveralls.yml"
49
49
  - ".gitignore"
50
50
  - ".rubocop.yml"
51
+ - ".travis.yml"
51
52
  - CHANGELOG.md
52
53
  - Gemfile
53
54
  - README.md
@@ -77,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
78
  version: '0'
78
79
  requirements: []
79
80
  rubyforge_project:
80
- rubygems_version: 2.4.5
81
+ rubygems_version: 2.5.1
81
82
  signing_key:
82
83
  specification_version: 4
83
84
  summary: Convert nested data structure hash keys between camel and snake case.