key_mapable 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
  SHA256:
3
- metadata.gz: c206c426ca310ad9ed08b6c2c68430f7df31d310e88a741fa0183093f1ec6496
4
- data.tar.gz: 77082bfa61c500b83187eb46bd360b120ba4a3e61e792e8dc26b029591bad28e
3
+ metadata.gz: 349b2af3cb3e4431949d5f510df02e70db98e4ac3dab87ed6642a3226f3fe7a4
4
+ data.tar.gz: a709edbbcea7c7b5b32dee5678390f5600cb50a01314c650eafc6ab4af050ece
5
5
  SHA512:
6
- metadata.gz: '096b7422f4e77ead9f5886db3a0a9a091409319f199b9c1b18cf4b1b3be1ffc776f8e10daa4cf78ca9f953a5953ec61b7c6f93a128e2d3c88cd767470be9cf13'
7
- data.tar.gz: c263a1fd58458d03388129dd49ab41a93613fa45a9cbd9caaf5df53983651a7b71432daa6a3099ee8b11642bae9449bba093682398b0367ac339ec0ca6960051
6
+ metadata.gz: a0a42df03cfafe9c98b8bee5f2eb7c3d2b0ad1d272c9bce7d29adf0237ca3ad8a22f365cba185fb6cfc69c4c76f8d8e35e85d8d9c59eb0404ef40fa2807c091d
7
+ data.tar.gz: e47ae0f0804bde498bf2c2cae9c9e408d2e98f32045eab4ef2ab71ee0b2ec1bced25c06944e07eb96637045aa8d442cf8b04cfaac0f4feaa18abb9fded85fcca
data/Gemfile.lock CHANGED
@@ -1,11 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- key_mapable (0.1.0)
4
+ key_mapable (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ byebug (10.0.2)
9
10
  diff-lcs (1.3)
10
11
  rake (10.5.0)
11
12
  rspec (3.8.0)
@@ -27,6 +28,7 @@ PLATFORMS
27
28
 
28
29
  DEPENDENCIES
29
30
  bundler (~> 1.16)
31
+ byebug
30
32
  key_mapable!
31
33
  rake (~> 10.0)
32
34
  rspec (~> 3.0)
data/README.md CHANGED
@@ -33,7 +33,7 @@ class MyClass
33
33
 
34
34
  # Map the value of `#maybe_value` to the key 'GuaranteedValue'.
35
35
  # Transform the value by calling `#to_s` first.
36
- key_map(:maybe_value, 'GuaranteedValue', &:to_s)
36
+ key_map(:maybe_value, 'GuaranteedValue') { transform(&:to_s) }
37
37
 
38
38
  # Map the key 'Name' to the value provided by the block.
39
39
  key_value('AConstant') { 'Foo' }
data/key_mapable.gemspec CHANGED
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "bundler", "~> 1.16"
33
33
  spec.add_development_dependency "rake", "~> 10.0"
34
34
  spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_development_dependency "byebug"
35
36
  end
data/lib/key_mapable.rb CHANGED
@@ -9,7 +9,7 @@ module KeyMapable
9
9
  value = public_send(subject)
10
10
  mapper = Mapper.new(value)
11
11
  mapper.instance_eval(&block)
12
- resolve.call(mapper.tree)
12
+ resolve.call(mapper.structure)
13
13
  end
14
14
  end
15
15
  end
@@ -2,45 +2,48 @@
2
2
 
3
3
  # Used internally by the KeyMapable concern.
4
4
  class KeyMapable::Mapper
5
- attr_reader :value, :tree
5
+ attr_reader :subject, :structure
6
6
 
7
- def initialize(value)
8
- @value = value
9
- @tree = {}
7
+ def initialize(subject)
8
+ @subject = subject
9
+ @structure = {}
10
+ end
11
+
12
+ def key_value(key)
13
+ @structure[key] = yield()
10
14
  end
11
15
 
12
16
  def key(name, &block)
13
- child_mapper = self.class.new(value)
17
+ child_mapper = self.class.new(subject)
14
18
  child_mapper.instance_eval(&block)
15
- @tree[name] = child_mapper.resolve
19
+ @structure[name] = child_mapper.resolve
16
20
  end
17
21
 
18
22
  def key_map(original_key, new_key, &block)
19
- original_value = value.public_send(original_key)
23
+ original_subject = subject.public_send(original_key)
20
24
  if block_given?
21
- child_mapper = self.class.new(original_value)
22
- @tree[new_key] = child_mapper.instance_eval do
23
- yield(original_value)
24
- end
25
+ child_mapper = self.class.new(original_subject)
26
+ child_mapper.instance_eval &block
27
+ @structure[new_key] = child_mapper.resolve
25
28
  else
26
- @tree[new_key] = original_value
29
+ @structure[new_key] = original_subject
27
30
  end
28
31
  end
29
32
 
30
- def key_value(key)
31
- @tree[key] = yield()
32
- end
33
-
34
33
  def array_key_map(original_key, new_key, &block)
35
- original_value = value.public_send(original_key)
36
- @tree[new_key] = original_value.map do |item|
34
+ original_subject = subject.public_send(original_key)
35
+ @structure[new_key] = original_subject.map do |item|
37
36
  child_mapper = self.class.new(item)
38
37
  child_mapper.instance_eval(&block)
39
38
  child_mapper.resolve
40
39
  end
41
40
  end
42
41
 
42
+ def transform
43
+ @structure = yield(@subject)
44
+ end
45
+
43
46
  def resolve
44
- @tree
47
+ @structure
45
48
  end
46
49
  end
@@ -1,3 +1,3 @@
1
1
  module KeyMapable
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: key_mapable
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
  - Emric
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description:
56
70
  email:
57
71
  - emric.mansson@gmail.com