hash-pipe 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2726ae03f2f526feb6a99d7e9d58dcd6da86568b
4
+ data.tar.gz: b2983bb6aa9033805a3468cb8f858a837980a839
5
+ SHA512:
6
+ metadata.gz: 8354bf2a610ee5edb9a2b05a08480efdf534566a02b77f2400935fd3d3969de5f8a02dddb1315c4e41f0b1135eb6455b80fde1b7ae54987c6f178350d2350dbe
7
+ data.tar.gz: 26ce6d96912a5139be19398c27540a3b2042710f691e4a8c9b3f467a946b5e5d77f1d946a4fecaf66b6cb31e0aab18ccc40471a41b89bf4998a433f3fb3fa4e9
@@ -0,0 +1,2 @@
1
+ .bundle/
2
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.1
6
+ - 2.1.0
7
+ script: bundle exec rspec spec
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,46 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hash-pipe (0.0.1)
5
+ activesupport (~> 4.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (4.0.3)
11
+ i18n (~> 0.6, >= 0.6.4)
12
+ minitest (~> 4.2)
13
+ multi_json (~> 1.3)
14
+ thread_safe (~> 0.1)
15
+ tzinfo (~> 0.3.37)
16
+ atomic (1.1.15)
17
+ coderay (1.1.0)
18
+ diff-lcs (1.2.5)
19
+ i18n (0.6.9)
20
+ method_source (0.8.2)
21
+ minitest (4.7.5)
22
+ multi_json (1.8.4)
23
+ pry (0.9.12.6)
24
+ coderay (~> 1.0)
25
+ method_source (~> 0.8)
26
+ slop (~> 3.4)
27
+ rspec (2.14.1)
28
+ rspec-core (~> 2.14.0)
29
+ rspec-expectations (~> 2.14.0)
30
+ rspec-mocks (~> 2.14.0)
31
+ rspec-core (2.14.7)
32
+ rspec-expectations (2.14.4)
33
+ diff-lcs (>= 1.1.3, < 2.0)
34
+ rspec-mocks (2.14.4)
35
+ slop (3.4.7)
36
+ thread_safe (0.2.0)
37
+ atomic (>= 1.1.7, < 2)
38
+ tzinfo (0.3.38)
39
+
40
+ PLATFORMS
41
+ ruby
42
+
43
+ DEPENDENCIES
44
+ hash-pipe!
45
+ pry (~> 0.9)
46
+ rspec (~> 2.14)
@@ -0,0 +1,2 @@
1
+ Hash Pipe
2
+ ==========
@@ -0,0 +1,20 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "hash-pipe"
5
+ s.version = "0.0.1"
6
+ s.authors = ["Damien Timewell"]
7
+ s.email = ["mail@damientimewell.com"]
8
+ s.licenses = ['MIT']
9
+ s.homepage = "https://github.com/idlefingers/hash-pipe"
10
+ s.summary = "A small collection of useful hash extensions"
11
+ s.description = ""
12
+
13
+ s.add_dependency 'activesupport', '~> 4.0'
14
+
15
+ s.add_development_dependency "rspec", '~> 2.14'
16
+ s.add_development_dependency "pry", '~> 0.9'
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- spec/*`.split("\n")
20
+ end
@@ -0,0 +1,4 @@
1
+ require 'active_support/core_ext'
2
+
3
+ require 'hash_pipe/key_conversion'
4
+ require 'hash_pipe/value_checks'
@@ -0,0 +1,20 @@
1
+ Hash.class_eval do
2
+
3
+ def self.convert_keys(hash, method = :underscore)
4
+ if hash.is_a?(Array)
5
+ hash.collect {|h| convert_keys(h, method) }
6
+ else
7
+ hash_array = hash.collect do |key,value|
8
+ value = value.is_a?(Hash) ? convert_keys(value, method) : value
9
+ [ key.to_s.send(method), value ]
10
+ end
11
+
12
+ Hash[hash_array]
13
+ end
14
+ end
15
+
16
+ def convert_keys(method = :underscore)
17
+ Hash.convert_keys self, method
18
+ end
19
+
20
+ end
@@ -0,0 +1,17 @@
1
+ Hash.class_eval do
2
+
3
+ def no_blank_values
4
+ self.reject { |k,v| v.blank? }
5
+ end
6
+
7
+ def except(*keys)
8
+ keys.collect! &:to_s
9
+ self.reject {|k,v| keys.include? k.to_s }
10
+ end
11
+
12
+ def only(*keys)
13
+ keys.collect! &:to_s
14
+ self.select {|k,v| keys.include? k.to_s }
15
+ end
16
+
17
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'key_conversion' do
4
+
5
+ it 'should convert keys to lowercase by default' do
6
+ { 'HELLO' => 'world' }.convert_keys.should eq 'hello' => 'world'
7
+ end
8
+
9
+ it 'should convert the key to a string if it is a symbol' do
10
+ { hello: "world" }.convert_keys.should eq 'hello' => 'world'
11
+ end
12
+
13
+ it 'should accept any method you can call on a string to convert the key' do
14
+ { hello: "world" }.convert_keys(:upcase).should eq 'HELLO' => 'world'
15
+ end
16
+
17
+ it 'should convert nested hashes with the same logic' do
18
+ { 'HELLO' => { 'MR' => 'world' } }.convert_keys.should eq 'hello' => {'mr' => 'world'}
19
+ end
20
+
21
+ it 'should be both an instance and class method' do
22
+ Hash.new.should respond_to(:convert_keys)
23
+ Hash.should respond_to(:convert_keys)
24
+ end
25
+
26
+ it 'should convert an array of hashes with the same logic' do
27
+ Hash.convert_keys([{ 'HELLO' => 'world' }, { 'FOO' => 'bar' }]).should eq [{ 'hello' => 'world' }, { 'foo' => 'bar' }]
28
+ end
29
+
30
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'value checks' do
4
+ let(:hash) { {foo: "bar", baz: "box", zap: nil} }
5
+
6
+ describe 'no_blank_values' do
7
+ it 'should return the hash without any nil values' do
8
+ hash.no_blank_values.should_not have_key(:zap)
9
+ end
10
+ end
11
+
12
+ describe "except" do
13
+ it 'should return the hash except keys listed' do
14
+ hash.except(:baz).should_not have_key(:baz)
15
+ end
16
+ end
17
+
18
+ describe "only" do
19
+ it 'should return a hash containing only the keys listed' do
20
+ hash.only(:baz).should have_key(:baz)
21
+ hash.only(:baz).should_not have_key(:foo)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'pry'
4
+ require 'hash-pipe'
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hash-pipe
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Damien Timewell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.14'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.14'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
55
+ description: ''
56
+ email:
57
+ - mail@damientimewell.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - .gitignore
63
+ - .rspec
64
+ - .travis.yml
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - README.md
68
+ - hash-pipe.gemspec
69
+ - lib/hash-pipe.rb
70
+ - lib/hash_pipe/key_conversion.rb
71
+ - lib/hash_pipe/value_checks.rb
72
+ - spec/hash-pipe/key_conversion_spec.rb
73
+ - spec/hash-pipe/value_checks_spec.rb
74
+ - spec/spec_helper.rb
75
+ homepage: https://github.com/idlefingers/hash-pipe
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.2.2
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: A small collection of useful hash extensions
99
+ test_files:
100
+ - spec/hash-pipe/key_conversion_spec.rb
101
+ - spec/hash-pipe/value_checks_spec.rb
102
+ - spec/spec_helper.rb
103
+ has_rdoc: