hash_ish 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8cdf984ee41b2b0e954c4f60ebc59a31061238a
4
- data.tar.gz: 0ff1cdea6e5b2e7a284902d319163609e882e86e
3
+ metadata.gz: a1a38439e44e7373d05911338c2afad7d500a620
4
+ data.tar.gz: a0c37c7081ea3476a1f1303662e7df1f10f97a06
5
5
  SHA512:
6
- metadata.gz: 1ed2106fde81b31c49bbfe7e4c6315a43ca267a8ef9233ce36334e99e42e731efe6f5b89edc26069b33c26395e5111c333baa8a45235c6adf62e39b541e629e4
7
- data.tar.gz: a0ac9a73f48fd590bd04598d36913720cbbc7115dca46721709b198646d247a523ab3c8b5c2240dbf0c51ba8cee1ea3665882527be02ed63a8e326ed00a4b664
6
+ metadata.gz: 0fb33597f69ca6613984817c57ebd767c2328bd5ed84145af73f941563b4790e19685c789bd11111a16572e7b5648f967f9d265f7d2976e6f7ea707fb2897400
7
+ data.tar.gz: 503bae71593be3bdf69fa272a6316e8df2db40b9dcd8bf4f5666fe15a804d3163048728018b5fb465cd66576a5201159d06f064ee6d3b08b8d148ac426d32bce
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .gem
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /Gemfile.lock
data/.rspec CHANGED
@@ -1,2 +1 @@
1
- --format documentation
2
1
  --color
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.3.0 (2015-07-22)
2
+
3
+ Features:
4
+ - Can now add default values
5
+ - HashIsh now returns instance of self
6
+
1
7
  ## 0.2.0 (2015-07-22)
2
8
 
3
9
  Features:
data/README.md CHANGED
@@ -12,30 +12,33 @@ Add it to your Gemfile or...
12
12
  gem install hash_ish
13
13
  ```
14
14
 
15
- ## Usage
15
+ ## Test
16
16
 
17
17
  ```
18
- require 'hash_ish'
19
-
20
- # insert hash into new hash_ish
21
- hash = { a { b: "c" } }
22
- hash_ish = HashIsh.new(hash)
23
-
24
- # access hash keys with method calls
25
- hash_ish.a.b # returns 'c'
18
+ bundle exec rspec
26
19
  ```
27
20
 
28
-
29
- ## Known issues
30
-
31
- - currently only supports hash keys that would be valid method names
21
+ ## Usage
32
22
 
33
23
  ```
34
- # this works
35
- HashIsh.new(foo: "bar").foo # bar
24
+ require 'hash_ish'
36
25
 
37
- # this blows up
38
- HashIsh.new(123 => 456)
26
+ # access hash keys with method calls
27
+ hash = { a { b: 'c' } }
28
+ hash_ish = HashIsh.new(hash)
29
+ hash_ish.a.b # returns 'c', via method chaining
30
+ hash_ish[:a][:b] # returns 'c', via hash square brackets
31
+ hash_ish.fetch(:a) # returns { b: 'c'}, via fetch
32
+ hash_ish[:d] # returns nil, just a like a Hash
33
+ hash_ish.d # raises NoMethodError, doesn't return nil
34
+
35
+ # set default values
36
+ hash = { a: nil, b: { c: false }, d: { e: 'lol' } }
37
+ defaults = { a: 123, b: { c: true }, d: { e: 'ಠ_ಠ' } }
38
+ hash_ish = HashIsh.new(hash, defaults)
39
+ hash_ish.a # returns 123, overrides falsey nil
40
+ hash_ish.b.c # returns true, overrides falsey false
41
+ hash_ish.d.e # returns 'lol', not overriden due to 'lol' being truthy
39
42
  ```
40
43
 
41
44
  ## License
@@ -0,0 +1,37 @@
1
+ class HashIsh
2
+ class AddDefaultValues
3
+ def add(kwargs, defaults)
4
+ hash = kwargs.dup
5
+
6
+ hash.tap do |hash|
7
+ add_defaults(hash, defaults)
8
+ end
9
+ end
10
+
11
+ def add_defaults(hash, defaults)
12
+ defaults.each do |key, value|
13
+ if is_a_hash?(value)
14
+ arg_hash = hash[key] || {}
15
+ hash[key] = AddDefaultValues.new.add(arg_hash, value)
16
+ else
17
+ hash[key] ||= value
18
+ end
19
+ end
20
+ end
21
+
22
+ def truthy?(hash, key)
23
+ !!hash[key]
24
+ end
25
+
26
+ def is_a_hash?(object)
27
+ object.is_a? Hash
28
+ end
29
+ end
30
+ end
31
+
32
+ # puts AddDefaultValues.new.add({}, { a: 1 }).inspect
33
+ # puts AddDefaultValues.new.add({a: 2}, { a: 1 }).inspect
34
+ # puts AddDefaultValues.new.add({a: 2}, { a: 1, b: 1 }).inspect
35
+ # puts AddDefaultValues.new.add({ a: { b: nil }}, { a: { b: 1 } }).inspect
36
+ # puts AddDefaultValues.new.add({ a: { b: 2 }}, { a: { b: 1 } }).inspect
37
+ # puts AddDefaultValues.new.add({ a: { b: false }, c: { d: true }}, { a: { b: 1 }, c: { d: 123} }).inspect
@@ -1,29 +1,29 @@
1
1
  class HashIsh
2
2
  class AddInstanceMethods
3
- def add(klass, kwargs)
3
+ def add(hash_ish, kwargs)
4
4
  kwargs.each do |key, value|
5
- define_method(klass, key, value)
5
+ define_method(hash_ish, key, value)
6
6
  end
7
7
  end
8
8
 
9
- def define_method(klass, name, value)
9
+ def define_method(hash_ish, name, value)
10
10
  return_value = method_value(value)
11
11
 
12
- klass.send(:define_method, name) do
12
+ hash_ish.send(:define_singleton_method, name) do
13
13
  return_value
14
14
  end
15
15
  end
16
16
 
17
- def hash?(object)
17
+ def is_a_hash?(object)
18
18
  object.is_a? Hash
19
19
  end
20
20
 
21
- def hash_ish(value)
22
- HashIsh.new(value)
21
+ def hash_ish(hash)
22
+ HashIsh.new(hash)
23
23
  end
24
24
 
25
25
  def method_value(value)
26
- hash?(value) ? hash_ish(value) : value
26
+ is_a_hash?(value) ? hash_ish(value) : value
27
27
  end
28
28
  end
29
29
  end
@@ -1,3 +1,3 @@
1
- class HashIsh
2
- VERSION = "0.2.0"
1
+ class HashIsh < Hash
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/hash_ish.rb CHANGED
@@ -1,23 +1,16 @@
1
1
  require 'hash_ish/version'
2
+ require 'hash_ish/add_default_values'
2
3
  require 'hash_ish/add_instance_methods'
3
4
 
4
- class HashIsh
5
- def self.new(kwargs = {})
6
- instance(
7
- decorate_klass(hash_sub_class, kwargs))
5
+ class HashIsh < Hash
6
+ def initialize(kwargs = {}, defaults = {})
7
+ default_kwargs = AddDefaultValues.new.add(kwargs, defaults)
8
+ decorate_self(self, default_kwargs)
8
9
  end
9
10
 
10
- def self.decorate_klass(klass, kwargs)
11
- klass.tap do |klass|
12
- AddInstanceMethods.new.add(klass, kwargs)
11
+ def decorate_self(hash_ish, kwargs)
12
+ hash_ish.tap do |hash_ish|
13
+ AddInstanceMethods.new.add(hash_ish, kwargs)
13
14
  end
14
15
  end
15
-
16
- def self.instance(klass)
17
- klass.new
18
- end
19
-
20
- def self.hash_sub_class
21
- Class.new(Hash)
22
- end
23
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_ish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Pope
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-12 00:00:00.000000000 Z
11
+ date: 2015-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,6 +72,7 @@ files:
72
72
  - bin/setup
73
73
  - hash_ish.gemspec
74
74
  - lib/hash_ish.rb
75
+ - lib/hash_ish/add_default_values.rb
75
76
  - lib/hash_ish/add_instance_methods.rb
76
77
  - lib/hash_ish/version.rb
77
78
  homepage: https://github.com/amorphid/hash_ish