hash_delegate 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hash_delegate.rb +5 -11
- data/lib/hash_delegate/accessor.rb +23 -0
- data/lib/hash_delegate/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6dbd7fa8fecb61711e973ff971dcfbf32ac942e
|
4
|
+
data.tar.gz: a5189fa5b26216b0d861c754c42301da0329d958
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51474f798b647a0a8563c52f79c8c3d5372b553eae6f2438ae9cce4efa45cdc8a01a2ec4aa1956ff6a1e667e6570d15a316144746bb6a25d4e78e2d11b9495b3
|
7
|
+
data.tar.gz: dbf8cd410520eb3965576af1707b3a258a682f8964e6077d8bf47cd3a587e1c93309f4d540d622e903a1014b918d91e76146edab6379192281ef1c0cd3b6292e
|
data/lib/hash_delegate.rb
CHANGED
@@ -1,22 +1,16 @@
|
|
1
1
|
$:.push File.expand_path('../', __FILE__)
|
2
2
|
require "hash_delegate/version"
|
3
|
+
require "hash_delegate/accessor"
|
3
4
|
require "active_support/all"
|
4
5
|
|
5
6
|
module HashDelegate
|
6
7
|
def hash_delegate(*args)
|
7
8
|
options = args.extract_options!
|
8
|
-
|
9
|
-
args.each do |key|
|
10
|
-
define_method key do
|
11
|
-
data = self.send(options[:to]) || {}
|
12
|
-
data[key.to_s] || data[key.to_sym]
|
13
|
-
end
|
9
|
+
accessor = Accessor.new self
|
14
10
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
11
|
+
args.each do |key|
|
12
|
+
accessor.define_getter key, options[:to]
|
13
|
+
accessor.define_setter key, options[:to]
|
20
14
|
end
|
21
15
|
end
|
22
16
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module HashDelegate
|
2
|
+
class Accessor < Struct.new :klass
|
3
|
+
def define_getter(key, hash)
|
4
|
+
define_delegation key do
|
5
|
+
data = self.send(hash) || {}
|
6
|
+
data[key.to_s] || data[key.to_sym]
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def define_setter(key, hash)
|
11
|
+
define_delegation "#{key}=" do |value|
|
12
|
+
data = self.send(hash) || self.send("#{hash}=", {})
|
13
|
+
data[key.to_s] = value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def define_delegation(name, &block)
|
20
|
+
klass.class_eval { define_method name, &block }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_delegate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Eden
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- Rakefile
|
69
69
|
- hash_delegate.gemspec
|
70
70
|
- lib/hash_delegate.rb
|
71
|
+
- lib/hash_delegate/accessor.rb
|
71
72
|
- lib/hash_delegate/version.rb
|
72
73
|
- test/lib/hash_delegate_test.rb
|
73
74
|
- test/test_helper.rb
|