k-replace 0.0.1 → 0.1.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: 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