k-replace 0.0.1 → 0.1.0

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: be53de3136495b35742d74b3ae2a87e5039054a4
4
- data.tar.gz: b26266c8f24b1b0a8ae971f4e9a687d1eb0315bc
3
+ metadata.gz: 3e36c2c18ba839e496441de87a14c007789b08d2
4
+ data.tar.gz: 702f6a182bef8de54cfe82ab35830aef7d5eeb64
5
5
  SHA512:
6
- metadata.gz: a5bd026619e733ffda85eff7fd8d1cde55da845084daae6ce13d4f305205e50f0f38ca48313a4365c412fff8950dc9b636b988c003dd1bbaaef2ccf8573bfa52
7
- data.tar.gz: 0c57d88be9f1decc05465126d8138c42817970d35c96fee1867dcc39d23b9646388af9964271752125f0c2d202b3dff24a748a44357f3acf454a2b2809f6211d
6
+ metadata.gz: ba3636be52d3e74a79cf2049a0d2c8a3de1d081be98a1c805c572997d637fb12005b2763ddb7b783a3ca8678dbeb747c5f830ebd76efbf029bc62f15f4fadef0
7
+ data.tar.gz: a3d8bd75d38b7657558764111a44877575e5a50d25ee273b9c5a76727961ad0c6fb18fb12631a2a05bcb4baebac9dc0964f674dd9690fc9f9c658064fb1f2879
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # Changelog
2
+
3
+ ## v0.1.0
4
+ - Add support to replace a key to nested object property
5
+
6
+ ## v0.0.1
7
+ - First stable version
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # K-Replace
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/k-replace.svg)](https://badge.fury.io/rb/k-replace)
@@ -1,5 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  # frozen_string_literal: true
3
+ require 'pry'
3
4
  module K
4
5
  module Replace
5
6
  class Statement
@@ -24,11 +25,18 @@ module K
24
25
  replaced = ''
25
26
  find_all(key) do |match|
26
27
  chained = chain_property(match)
27
- chained.each{|k, v| replaced = objs[k].send(v)}
28
+ chained.each{|k, v| replaced = resolve_property(k, v, objs[k])}
28
29
  end
29
30
  replaced
30
31
  end
31
32
  end
33
+
34
+ private
35
+
36
+ def resolve_property(ch_key, ch_value, obj)
37
+ return resolve_property ch_value.keys[0], ch_value[ch_value.keys[0]], obj.send(ch_value.keys[0].to_s) if ch_value.is_a?(Hash)
38
+ obj.send(ch_value)
39
+ end
32
40
  end
33
41
  end
34
42
  end
@@ -4,8 +4,8 @@ module K
4
4
  module Replace
5
5
  module VERSION
6
6
  MAJOR = 0
7
- MINOR = 0
8
- PATCH = 1
7
+ MINOR = 1
8
+ PATCH = 0
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH].compact.join('.')
11
11
 
@@ -31,6 +31,28 @@ class ChangesTest < Minitest::Test
31
31
  assert_equal replaced, 'I\'m John Doe and I\'m 18 years old.'
32
32
  end
33
33
 
34
+ def test_replace_key_to_nested_object_property
35
+ statement = K::Replace::Statement.new 'I\'m ##__User.name__## and I live in ##__User.address.street__##'
36
+ @user.name = 'John Doe'
37
+ @user.address = Address.new('Telegraph Av, 123')
38
+
39
+ replaced = statement.replace @user
40
+
41
+ assert_equal replaced, 'I\'m John Doe and I live in Telegraph Av, 123'
42
+ end
43
+
44
+ def test_replace_key_to_deep_nested_object_property
45
+ statement = K::Replace::Statement.new 'I\'m ##__User.name__## and I live in ##__User.address.street__## - ##__User.address.city.name__##'
46
+ @user.name = 'John Doe'
47
+ @address = Address.new('Telegraph Av, 123')
48
+ @address.city = City.new('Miami')
49
+ @user.address = @address
50
+
51
+ replaced = statement.replace @user
52
+
53
+ assert_equal replaced, 'I\'m John Doe and I live in Telegraph Av, 123 - Miami'
54
+ end
55
+
34
56
  class User
35
57
  attr_accessor :name, :age, :address
36
58
 
@@ -40,10 +62,18 @@ class ChangesTest < Minitest::Test
40
62
  end
41
63
 
42
64
  class Address
43
- attr_accessor :street
65
+ attr_accessor :street, :city
44
66
 
45
67
  def initialize(street = nil)
46
68
  @street = street
47
69
  end
48
70
  end
71
+
72
+ class City
73
+ attr_accessor :name
74
+
75
+ def initialize(name)
76
+ @name = name
77
+ end
78
+ end
49
79
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k-replace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reinaldo Oliveira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-29 00:00:00.000000000 Z
11
+ date: 2017-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -60,10 +60,11 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - ".gitignore"
63
+ - CHANGELOG.md
63
64
  - Gemfile
64
65
  - Gemfile.lock
65
66
  - LICENSE
66
- - README
67
+ - README.md
67
68
  - Rakefile
68
69
  - k-replace.gemspec
69
70
  - lib/k-replace.rb
data/README DELETED
File without changes