yaoc 0.0.1 → 0.0.2

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: df536899f7147ce6f470564bab83b8d81db904d7
4
- data.tar.gz: 46dbdfd57424ae671873eafaf678ce5a590588c5
3
+ metadata.gz: aa280d846afba6ccd2f33412e0ff29851e644456
4
+ data.tar.gz: 9db2caf9165fafc3225b647d9a7fd504dc302a1b
5
5
  SHA512:
6
- metadata.gz: f111573c5f28bfc0c2e459d50c75c8dcbdc8b221c19f833ed9738a64e05caface3ef3c620a12370c55b0a97141376f63fb35fc9e42e90f9447399807d1ade6c7
7
- data.tar.gz: c33e319c2d3278aed77877fae3add31de7c0b1ddf49ea044db3a245ac9a6fa50e0831b6e689e7d5f4b8c271d9d4c6ef698f5cf9435fc3af7e581cc9f81447405
6
+ metadata.gz: 002631bd391b6fe657556f7c2c80c0289fb5ab26cb04e78c8593abc9b1e1288e80d2646ea8b63433d9ca20cb4bed2d4e7a477be0fe26dcce757b8363f5981f51
7
+ data.tar.gz: 08ef26547007bd532debdcbd39045de8d61e96adc59d9b812329d2b5e3b4ebeb408df5e3137cc0e76866d8667bb461d89c1b7c728c86da9f2a5a8ab949d2973a
data/README.md CHANGED
@@ -22,6 +22,8 @@ Uptodate doc's look into the specs.
22
22
 
23
23
  ```ruby
24
24
 
25
+ require 'yaoc'
26
+
25
27
  User = Struct.new(:id, :name) do
26
28
  def initialize(params={})
27
29
  super()
@@ -32,16 +34,38 @@ User = Struct.new(:id, :name) do
32
34
  end
33
35
  end
34
36
 
35
- mapper = Yaoc::ObjectMapper.new(User).tap do |mapper|
37
+ OldUser = Struct.new(:id, :fullname) do
38
+ def initialize(params={})
39
+ super()
40
+
41
+ params.each do |attr, value|
42
+ self.public_send("#{attr}=", value)
43
+ end if params
44
+ end
45
+ end
46
+
47
+ mapper = Yaoc::ObjectMapper.new(User, OldUser).tap do |mapper|
36
48
  mapper.add_mapping do
49
+ fetcher :public_send
37
50
  rule to: :name, from: :fullname
38
51
  rule to: :id
39
52
  end
40
53
  end
41
54
 
55
+ old_user = OldUser.new({id: 1, fullname: "myname" })
56
+ new_user = mapper.load(old_user)
57
+
58
+
59
+ puts old_user
60
+ puts new_user
61
+
62
+ new_user.name = "no name"
42
63
 
43
- user = mapper.load({id: 1, fullname: "myname" })
64
+ puts mapper.dump(new_user)
44
65
 
66
+ #<struct OldUser id=1, fullname="myname">
67
+ #<struct User id=1, name="myname">
68
+ #<struct OldUser id=1, fullname="no name">
45
69
 
46
70
  ```
47
71
 
@@ -1,31 +1,47 @@
1
1
  module Yaoc
2
2
 
3
3
  class ObjectMapper
4
- attr_accessor :result_class
4
+ attr_accessor :load_result_source, :dump_result_source,
5
+ :forward_commands, :backward_commads
5
6
 
6
- def initialize(result_class)
7
- self.result_class = result_class
7
+ def initialize(load_result_source, dump_result_source=->(attrs){ attrs})
8
+ self.load_result_source = load_result_source.respond_to?(:call) ? load_result_source : ->(attrs){load_result_source.new(attrs)}
9
+ self.dump_result_source = dump_result_source.respond_to?(:call) ? dump_result_source : ->(attrs){dump_result_source.new(attrs)}
10
+
11
+ self.forward_commands = []
12
+ self.backward_commads = []
8
13
  end
9
14
 
10
15
  def load(fetch_able)
11
- call = converter(fetch_able).call()
12
-
13
- result_class.new(call)
16
+ load_result_source.call(converter(fetch_able).call())
14
17
  end
15
18
 
16
19
  def dump(object)
17
- reverse_converter(object).call()
20
+ dump_result_source.call(reverse_converter(object).call())
18
21
  end
19
22
 
20
23
  def add_mapping(&block)
21
24
  instance_eval &block
25
+ apply_commands
22
26
  end
23
27
 
24
28
  protected
25
29
 
30
+ def apply_commands
31
+ reset_converters!
32
+
33
+ forward_commands.each &:call
34
+ backward_commads.each &:call
35
+ end
36
+
37
+ def reset_converters!
38
+ @reverse_converter_class = nil
39
+ @converter_class = nil
40
+ end
41
+
26
42
  def rule(to: nil, from: to, converter: nil, reverse_converter: nil)
27
- converter_class.map(to, from, converter)
28
- reverse_converter_class.map(from, to, reverse_converter)
43
+ forward_commands.push ->{ converter_class.map(to, from, converter) }
44
+ backward_commads.unshift ->{ reverse_converter_class.map(from, to, reverse_converter) }
29
45
  end
30
46
 
31
47
  def fetcher(new_fetcher)
data/lib/yaoc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yaoc
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -7,9 +7,9 @@ feature "Map objects", %q{
7
7
  } do
8
8
 
9
9
  given(:mapper){
10
- Yaoc::ObjectMapper.new(result_object_class).tap do |mapper|
10
+ Yaoc::ObjectMapper.new(load_result_object_class, dump_result_object_class).tap do |mapper|
11
11
  mapper.add_mapping do
12
- fetcher :[]
12
+ fetcher :public_send
13
13
  reverse_fetcher :public_send
14
14
  rule to: :name,
15
15
  converter: ->(source, result){ result.merge({name: "#{source[:name]} Hello World"}) },
@@ -20,7 +20,7 @@ feature "Map objects", %q{
20
20
  end
21
21
  }
22
22
 
23
- given(:result_object_class) {
23
+ given(:load_result_object_class) {
24
24
  Struct.new(:id, :name, :role) do
25
25
  include Equalizer.new(:id, :name, :role)
26
26
 
@@ -35,22 +35,41 @@ feature "Map objects", %q{
35
35
  end
36
36
  }
37
37
 
38
+ given(:dump_result_object_class) {
39
+ Struct.new(:id, :name, :fullrolename) do
40
+ include Equalizer.new(:id, :name, :fullrolename)
41
+
42
+ def initialize(params={})
43
+ super()
44
+
45
+ params.each do |attr, value|
46
+ self.public_send("#{attr}=", value)
47
+ end if params
48
+ end
49
+
50
+ end
51
+ }
52
+
38
53
  given(:input_hash){
39
- {id: 1, name: "paul", fullrolename: "admin"}
54
+ dump_result_object
55
+ }
56
+
57
+ given(:load_result_object){
58
+ load_result_object_class.new({id: 1, name: "paul", role: "admin"})
40
59
  }
41
60
 
42
- given(:result_object){
43
- result_object_class.new({id: 1, name: "paul", role: "admin"})
61
+ given(:dump_result_object){
62
+ dump_result_object_class.new({id: 1, name: "paul", fullrolename: "admin"})
44
63
  }
45
64
 
46
65
  scenario "creates an result object from an input_object" do
47
- result_object.name += " Hello World"
66
+ load_result_object.name += " Hello World"
48
67
 
49
- expect(mapper.load(input_hash)).to eq result_object
68
+ expect(mapper.load(input_hash)).to eq load_result_object
50
69
  end
51
70
 
52
- scenario "dumps an result object as hash" do
53
- expect(mapper.dump(result_object)).to eq input_hash
71
+ scenario "dumps an result object as result object" do
72
+ expect(mapper.dump(load_result_object)).to eq dump_result_object
54
73
  end
55
74
 
56
75
  end
@@ -86,20 +86,24 @@ describe Yaoc::ObjectMapper do
86
86
 
87
87
  converter.stub(call: data)
88
88
 
89
- expect(subject.result_class).to receive(:new).with(data)
89
+ expect(subject.load_result_source).to receive(:call).with(data)
90
90
 
91
91
  subject.load(data)
92
92
  end
93
93
  end
94
94
 
95
95
  describe "#dump" do
96
- it "dump the object as a hash" do
97
- obj = subject.result_class.new 1, "paul"
98
96
 
99
- expect(reverse_converter).to receive(:call)
97
+ it "dump the object as an wanted object" do
98
+ data = {id: 1}
99
+
100
+ reverse_converter.stub(call: data)
100
101
 
101
- subject.dump(obj)
102
+ expect(subject.dump_result_source).to receive(:call).with(data)
103
+
104
+ subject.dump(data)
102
105
  end
106
+
103
107
  end
104
108
 
105
109
  end
data/yaoc.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["dieter.spaeth@gmx.de"]
11
11
  spec.summary = %q{Yet another object converter}
12
12
  spec.description = %q{Yet another object converter}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/slowjack2k/yaoc"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dieter Späth
@@ -233,7 +233,7 @@ files:
233
233
  - spec/unit/lib/yaoc/strategies/to_array_mapping_spec.rb
234
234
  - spec/unit/lib/yaoc/strategies/to_hash_mapping_spec.rb
235
235
  - yaoc.gemspec
236
- homepage: ''
236
+ homepage: https://github.com/slowjack2k/yaoc
237
237
  licenses:
238
238
  - MIT
239
239
  metadata: {}