casted_hash 0.7.2 → 0.7.3

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: 70eb29b065f3d4a69aabf9338cb8805c1873444e
4
- data.tar.gz: f01d58fd7cbba6eaad7ff0ed9c472091e13386e8
3
+ metadata.gz: 7e0f2fb8b553d3505325d01febe43401189b0a7d
4
+ data.tar.gz: cbcfe7fb86cbbe6bb2befa53c6a6ac10436ed8a3
5
5
  SHA512:
6
- metadata.gz: e74b73ae86ecac1b17819be1ddb49976866bb8c01ccf1f3d9047516299e1b7124e4ee2d1bc4728f8b6507f791861badac84dd4edfea66ce3385368bba72cb380
7
- data.tar.gz: 25b22c49c76ca944481fc27d90dae823a70e14f9d6ca9be606728b3b286c1ce6310b585df4dcc0cd9f0cfa56ff35d374cc03b2bad777b21898ed807c7b55c336
6
+ metadata.gz: 29df172201f7b0ffc5549ca5440e9c68953c67fdf433d29b2bc0a5163e8ab54e7e67fd7960d8b3981290a3398612e3f48619a718611b913a3f46b85cb8fb0833
7
+ data.tar.gz: 823e6e0ce48c462c8b4aa89c107f56a9d188729bca21e1c5ad12deab508c8e44529b9e619390beb2cda40e8b3dbc24059fe5e331bcdaa1201c20569ac64ad4cb
data/.travis.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.5
4
- - 2.2.2
5
- before_install: gem install bundler -v 1.10.3
3
+ - 2.2
4
+ before_install: gem install bundler
6
5
  services:
7
6
  - redis-server
data/lib/casted_hash.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class CastedHash < Hash
2
- VERSION = "0.7.2"
2
+ VERSION = "0.7.3"
3
3
 
4
4
  def initialize(constructor = {}, cast_proc = nil)
5
5
  raise ArgumentError, "`cast_proc` required" unless cast_proc
@@ -23,6 +23,15 @@ class CastedHash < Hash
23
23
 
24
24
  alias_method :regular_reader, :[] unless method_defined?(:regular_reader)
25
25
 
26
+ def transform_keys
27
+ return enum_for(:transform_keys) unless block_given?
28
+ result = dup
29
+ each_key do |key|
30
+ result[yield(key)] = regular_reader(key)
31
+ end
32
+ result
33
+ end
34
+
26
35
  def [](key)
27
36
  cast! key
28
37
  end
@@ -150,26 +159,22 @@ protected
150
159
  @casted_keys.delete *keys.map(&:to_s)
151
160
  end
152
161
 
153
- def cast!(key, do_raise = true)
162
+ def cast!(key)
154
163
  key = convert_key(key)
155
164
  return unless key?(key)
165
+ return regular_reader(key) if casted?(key)
166
+ raise SystemStackError, "already casting #{key}" if casting?(key)
156
167
 
157
- value = regular_reader(key)
158
- return value if casted?(key)
168
+ casting! key
159
169
 
160
- if casting?(key)
161
- raise SystemStackError, "already casting #{key}" if do_raise
170
+ value = if @cast_proc.arity == 1
171
+ @cast_proc.call regular_reader(key)
172
+ elsif @cast_proc.arity == 2
173
+ @cast_proc.call self, regular_reader(key)
174
+ elsif @cast_proc.arity == 3
175
+ @cast_proc.call self, key, regular_reader(key)
162
176
  else
163
- casting! key
164
- value = if @cast_proc.arity == 1
165
- @cast_proc.call value
166
- elsif @cast_proc.arity == 2
167
- @cast_proc.call self, value
168
- elsif @cast_proc.arity == 3
169
- @cast_proc.call self, key, value
170
- else
171
- @cast_proc.call
172
- end
177
+ @cast_proc.call
173
178
  end
174
179
 
175
180
  value = regular_writer(key, value)
@@ -182,7 +187,7 @@ protected
182
187
  end
183
188
 
184
189
  def cast_all!
185
- keys.each{|key| cast!(key, false)}
190
+ keys.each{|key| cast! key}
186
191
  end
187
192
 
188
193
  def convert_key(key)
@@ -2,6 +2,23 @@ require 'helper'
2
2
 
3
3
  describe CastedHash do
4
4
 
5
+ it "is able to transform keys without implicit casting" do
6
+ hash = CastedHash.new({:foo => 1, :bar => 1}, lambda { |x| x + 1 })
7
+ new_hash = hash.transform_keys do |key|
8
+ key.to_s
9
+ end
10
+
11
+ assert_equal 2, hash[:bar]
12
+ assert hash.casted?(:bar)
13
+ assert !hash.casted?(:foo)
14
+
15
+ assert_equal 2, new_hash[:bar]
16
+ assert new_hash.casted?(:bar)
17
+ assert !new_hash.casted?(:foo)
18
+ assert_equal 2, new_hash[:foo]
19
+ assert new_hash.casted?(:foo)
20
+ end
21
+
5
22
  it "is able to define a cast method" do
6
23
  hash = CastedHash.new({:foo => 1}, lambda { |x| x.to_s })
7
24
 
@@ -15,11 +32,6 @@ describe CastedHash do
15
32
  assert_equal "3", hash[:bar]
16
33
  end
17
34
 
18
- it "can use casted_hash in cast method" do
19
- @hash = CastedHash.new({:a => 1}, lambda {|x| @hash.casted_hash; 2 })
20
- assert_equal 2, @hash[:a]
21
- end
22
-
23
35
  it "does not loop when refering to itself" do
24
36
  @hash = CastedHash.new({:a => 1}, lambda {|x| @hash[:a] + 1 })
25
37
  error = assert_raises(SystemStackError) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: casted_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephan Kaag
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-11 00:00:00.000000000 Z
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
102
  version: '0'
103
103
  requirements: []
104
104
  rubyforge_project:
105
- rubygems_version: 2.5.1
105
+ rubygems_version: 2.4.5.1
106
106
  signing_key:
107
107
  specification_version: 4
108
108
  summary: A casted hash