hash_dot 2.1.0 → 2.2.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: 448ec5a8658964de35063d5e4f34e7861af5a54d
4
- data.tar.gz: a8152f865eff089a49741467ac14735277f96c00
3
+ metadata.gz: e41159a2e0f3156c53e8c66f6b769ba59c4740e3
4
+ data.tar.gz: eb171a61ccfdbb299de59d2856eb0e8607226db2
5
5
  SHA512:
6
- metadata.gz: f7e57678d5d330b4948c731d500aa0ac91437836fe6f4e94c82e07401804cb41431099e4029946743a4bdc32ea54c55b51c0d3d4125d500e567680fa1176b08a
7
- data.tar.gz: b7975158555229cf1a00525c2ff15c2c6dad1eea7ffc4c8113e9812c5dc1d086a787e5d0a70e0a0ceaabce3a4fd612130231cc10c01156d7dca36ff09b482ce4
6
+ metadata.gz: dc9222cf1cd7d977883d98b3b4613a571468d3820aaecec553771cd903fbdd59ab68b582f512d00229d29caa51a8583502696ee73112b94691e0ee419ae4ca88
7
+ data.tar.gz: 530dbd4dcefa3610347bbaaee131d1e62d88802512477647af55e8116115e0ffb216a0708357f3cf4dcb99f87435f40a81ff4d1e238c566c0d673c4d7ebc06c3
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/adsteel/hash_dot.svg?branch=master)](https://travis-ci.org/adsteel/hash_dot)
2
+
1
3
  # HashDot
2
4
 
3
5
  HashDot allows you to get and set your Ruby hash properties with a dot syntax.
@@ -27,6 +29,20 @@ Hash.use_dot_syntax = true
27
29
  {name: 'Pat'}.name #=> 'Pat'
28
30
  ```
29
31
 
32
+ By default HashDot raises a `NoMethodError` when accessing a non-existent key with the dot syntax. The value of `Hash#default` can be used instead, either globally or per-instance, via:
33
+
34
+ ```ruby
35
+ # globally
36
+ Hash.use_dot_syntax = true
37
+ Hash.hash_dot_use_default = true
38
+ {}.a #=> 'default'
39
+
40
+ # per instance
41
+ h = Hash.new('default').to_dot(use_default: true)
42
+ h.a #=> 'default'
43
+ {}.to_dot.a #=> NoMethodError
44
+ ```
45
+
30
46
 
31
47
  ## Installation
32
48
 
data/hash_dot.gemspec CHANGED
@@ -32,5 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "rspec"
33
33
  spec.add_development_dependency "json"
34
34
  spec.add_development_dependency "pry"
35
- spec.add_development_dependency "rubocop", "~> 0.37.2"
35
+ spec.add_development_dependency "rubocop", "~> 0.51"
36
36
  end
data/lib/hash.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  class Hash
2
2
  class << self
3
3
  attr_accessor :use_dot_syntax
4
+ attr_accessor :hash_dot_use_default
4
5
  end
5
6
 
6
7
  attr_accessor :use_dot_syntax
8
+ attr_accessor :hash_dot_use_default
7
9
 
8
- def to_dot
9
- dotify_hash(self)
10
+ def to_dot(use_default: false)
11
+ dotify_hash(self, use_default: use_default)
10
12
 
11
13
  self
12
14
  end
@@ -18,9 +20,10 @@ class Hash
18
20
 
19
21
  if setter?(method)
20
22
  self[prop] = args.first
21
- else
22
- super(method, args) && return unless key?(prop)
23
+ elsif key?(prop) || use_default?
23
24
  self[prop]
25
+ else
26
+ super(method, args)
24
27
  end
25
28
  end
26
29
 
@@ -33,16 +36,21 @@ class Hash
33
36
 
34
37
  private
35
38
 
36
- def dotify_hash(hash)
39
+ def dotify_hash(hash, use_default: false)
37
40
  hash.use_dot_syntax = true
41
+ hash.hash_dot_use_default = use_default
38
42
 
39
- hash.keys.each { |key| dotify_hash(hash[key]) if hash[key].is_a?(Hash) }
43
+ hash.keys.each { |key| dotify_hash(hash[key], use_default: use_default) if hash[key].is_a?(Hash) }
40
44
  end
41
45
 
42
46
  def to_dot?
43
47
  use_dot_syntax || self.class.use_dot_syntax
44
48
  end
45
49
 
50
+ def use_default?
51
+ hash_dot_use_default || self.class.hash_dot_use_default
52
+ end
53
+
46
54
  def setter?(method)
47
55
  method.last == "="
48
56
  end
@@ -1,3 +1,3 @@
1
1
  module HashDot
2
- VERSION = "2.1.0".freeze
2
+ VERSION = "2.2.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_dot
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Steel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-06 00:00:00.000000000 Z
11
+ date: 2017-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.37.2
89
+ version: '0.51'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.37.2
96
+ version: '0.51'
97
97
  description: HashDot allows you to call hash properties with a dot the same way you
98
98
  would call, say, ActiveRecord relationships and attributes. More traversable and
99
99
  often faster than OpenStruct.
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  version: '0'
141
141
  requirements: []
142
142
  rubyforge_project:
143
- rubygems_version: 2.6.8
143
+ rubygems_version: 2.5.2
144
144
  signing_key:
145
145
  specification_version: 4
146
146
  summary: Use dot syntax with Ruby hashes.