cymbal 0.0.2 → 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/.travis.yml +8 -4
- data/CHANGELOG.md +4 -0
- data/README.md +4 -0
- data/cymbal.gemspec +3 -3
- data/lib/cymbal.rb +9 -0
- data/spec/cymbal_spec.rb +33 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46af8544a2e5313854767692da1df0cf02265fe0
|
4
|
+
data.tar.gz: 13eada37ae64a98ac2c69df9efc1f3344ef34980
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 149c0583d11ce168b5f7e24a7f55dc946ae9b554b389f9773b07ccbd9f97be87235f914641d42d28c407ced90b14a22a7668dbfd60d301d404d6869343a7d273
|
7
|
+
data.tar.gz: 9068d1616785b54f53f961c542459f2675b05cc27e00255cc0ff069127af0dc4057838e2f828db0b0b7aea7f7c2ff12aee50649892fad305f19b2dc1c76bbec7
|
data/.travis.yml
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
language: ruby
|
2
|
+
sudo: false
|
2
3
|
cache: bundler
|
3
4
|
rvm:
|
4
|
-
- 2.
|
5
|
-
- 2.
|
6
|
-
-
|
5
|
+
- 2.2.0
|
6
|
+
- 2.1.5
|
7
|
+
- 2.0.0-p598
|
8
|
+
- 1.9.3-p551
|
7
9
|
notifications:
|
8
10
|
email: false
|
9
11
|
irc:
|
10
12
|
template:
|
11
|
-
|
13
|
+
- '%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}'
|
14
|
+
channels:
|
15
|
+
- irc.oftc.net#akerl
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -24,6 +24,10 @@ x = {
|
|
24
24
|
Cymbal.symbolize(x) # returns {:foo=>1, :bar=>{:cats=>6, :dogs=>"better"}}
|
25
25
|
```
|
26
26
|
|
27
|
+
The symbolize call will convert keys recursively and will handle an array of hashes.
|
28
|
+
|
29
|
+
If a hash includes keys that would collide (for example, :foo and 'foo'), an ArgumentError will be raised.
|
30
|
+
|
27
31
|
## Installation
|
28
32
|
|
29
33
|
gem install cymbal
|
data/cymbal.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'cymbal'
|
3
|
-
s.version = '0.0
|
3
|
+
s.version = '1.0.0'
|
4
4
|
s.date = Time.now.strftime("%Y-%m-%d")
|
5
5
|
|
6
6
|
s.summary = 'Converts hash keys from strings to symbols'
|
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.files = `git ls-files`.split
|
14
14
|
s.test_files = `git ls-files spec/*`.split
|
15
15
|
|
16
|
-
s.add_development_dependency 'rubocop', '~> 0.
|
17
|
-
s.add_development_dependency 'rake', '~> 10.
|
16
|
+
s.add_development_dependency 'rubocop', '~> 0.28.0'
|
17
|
+
s.add_development_dependency 'rake', '~> 10.4.0'
|
18
18
|
s.add_development_dependency 'coveralls', '~> 0.7.1'
|
19
19
|
s.add_development_dependency 'rspec', '~> 3.1.0'
|
20
20
|
s.add_development_dependency 'fuubar', '~> 2.0.0'
|
data/lib/cymbal.rb
CHANGED
@@ -11,11 +11,20 @@ module Cymbal
|
|
11
11
|
private
|
12
12
|
|
13
13
|
def symbolize_hash(hash)
|
14
|
+
check_collisions(hash.keys)
|
14
15
|
hash.each_with_object({}) { |(k, v), o| o[k.to_sym] = symbolize(v) }
|
15
16
|
end
|
16
17
|
|
17
18
|
def symbolize_array(array)
|
18
19
|
array.map { |item| symbolize(item) }
|
19
20
|
end
|
21
|
+
|
22
|
+
def check_collisions(keys)
|
23
|
+
symbols, other = keys.partition { |x| x.is_a? Symbol }
|
24
|
+
other.map!(&:to_sym)
|
25
|
+
overlap = other & symbols
|
26
|
+
return if overlap.empty?
|
27
|
+
fail ArgumentError, "Key collision in hash: #{overlap}"
|
28
|
+
end
|
20
29
|
end
|
21
30
|
end
|
data/spec/cymbal_spec.rb
CHANGED
@@ -1 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cymbal do
|
4
|
+
describe '#symbolize' do
|
5
|
+
let(:hash) do
|
6
|
+
{ 'foo' => 1, 'bar' => 2 }
|
7
|
+
end
|
8
|
+
let(:result) do
|
9
|
+
{ foo: 1, bar: 2 }
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'symbolizes hashes' do
|
13
|
+
expect(Cymbal.symbolize(hash)).to eql result
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'symbolizes hashes in arrays' do
|
17
|
+
array = Cymbal.symbolize((1..5).collect { hash.dup })
|
18
|
+
correct = (1..5).collect { Cymbal.symbolize(hash.dup) }
|
19
|
+
expect(array).to eql correct
|
20
|
+
expect(array.first.keys).to include(:foo, :bar)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'raises if there is a key conflict' do
|
24
|
+
bad_hash = { 'foo' => 2, :foo => 3 }
|
25
|
+
expect { Cymbal.symbolize(bad_hash) }.to raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'supports nested hashes' do
|
29
|
+
nested = Cymbal.symbolize('nest' => hash)
|
30
|
+
correct = { nest: Cymbal.symbolize(hash) }
|
31
|
+
expect(nested).to eql correct
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cymbal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.28.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.28.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 10.
|
33
|
+
version: 10.4.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: 10.
|
40
|
+
version: 10.4.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: coveralls
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- ".rspec"
|
91
91
|
- ".rubocop.yml"
|
92
92
|
- ".travis.yml"
|
93
|
+
- CHANGELOG.md
|
93
94
|
- Gemfile
|
94
95
|
- LICENSE
|
95
96
|
- README.md
|