otis 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/otis/otis_object.rb +38 -1
- data/lib/otis/soap_client.rb +1 -1
- data/lib/otis/version.rb +1 -1
- data/spec/lib/otis/otis_object_spec.rb +25 -1
- data/spec/lib/otis/soap_client_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZGM4ZjdiZmM3YjEyZDYzZGJhODAwMWEyYzU0ODliNmVlNDI4Mjk1OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Mzc2M2JhZDE1MTFlYWVkOTJiNzA1ODZlZTYwZDc3MjQyYzNiZmQ0MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmYxNjFlZWZjNjUwZTE0OTI5ZmUyNDAwYzFhNmYzYTY3MDM5ODk3YWEyMDRi
|
10
|
+
ZWRmYmExNGU1ZTMyZmY2MDM3ZGUxMjhjODQ1MTNiZmRlNGM1ZWM1YTI0NmUw
|
11
|
+
NzFiN2QxNzRmNGY1ZmI3YjQxYmMxZmY3NjA1Yjk3Y2M1MWU3Njg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MGM5ZWU3YzljNmRiNDAxNTJkZTFkZjIzMDg2MGViZjFiY2Q4YjlhZTgwZjNk
|
14
|
+
MGY4NmJkN2YyOTMxNjBkYWZmMzZkYjJiMjQzODI5YWU3N2Q5NGNkMzRmMTg4
|
15
|
+
NmFiYzFhZDZiMDhiNmJmNTUzYzMyMzZkNmFjYTdmNDExYmRlOWQ=
|
data/lib/otis/otis_object.rb
CHANGED
@@ -20,10 +20,47 @@ module Otis
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
#
|
24
|
+
# This method allows a dynamic generation a list of node in a parent one.
|
25
|
+
# It differs slightly from Virtus mapping in a way that it guarantess that
|
26
|
+
# a return of a collection is always an array and never a nil object
|
27
|
+
#
|
23
28
|
def collection(opts ={})
|
24
29
|
collection = opts[:as].to_s
|
25
30
|
klass = opts[:of]
|
26
|
-
class_eval %(def #{collection}; @#{collection} ||= Array(@response[
|
31
|
+
class_eval %(def #{collection}; @#{collection} ||= Array(@response[:#{collection}]).map{|c| #{klass}.new(c)}; end)
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# When Savon receives a response with attributes in its tags, it creates
|
36
|
+
# keys that start with '@' sign, which breaks in the Virtus object
|
37
|
+
# transformation.
|
38
|
+
# This method allows the mapping of an attribute that would be originally
|
39
|
+
# ignored by Virtus. See the example below:
|
40
|
+
#
|
41
|
+
# <response duration="123">
|
42
|
+
# <tag>Foo</tag>
|
43
|
+
# </response>
|
44
|
+
#
|
45
|
+
# In order to create the right mapper, the following needs to be done:
|
46
|
+
#
|
47
|
+
# class YourObject < Otis::Model
|
48
|
+
# tag_attribute :duration
|
49
|
+
# attribute :tag
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# yourObject.tag # => "Foo"
|
53
|
+
# yourObject.duration #=> 123
|
54
|
+
#
|
55
|
+
#
|
56
|
+
def tag_attributes(*args)
|
57
|
+
args.each do |m|
|
58
|
+
class_eval %(
|
59
|
+
def #{m}
|
60
|
+
@response[:@#{m}]
|
61
|
+
end
|
62
|
+
)
|
63
|
+
end
|
27
64
|
end
|
28
65
|
|
29
66
|
private
|
data/lib/otis/soap_client.rb
CHANGED
data/lib/otis/version.rb
CHANGED
@@ -3,12 +3,15 @@ require 'spec_helper'
|
|
3
3
|
describe Otis::Object do
|
4
4
|
|
5
5
|
describe 'collection' do
|
6
|
-
class Thing
|
6
|
+
class Thing < Otis::Model
|
7
|
+
attribute :a
|
8
|
+
end
|
7
9
|
|
8
10
|
class TestClass
|
9
11
|
include Otis::Object
|
10
12
|
collection of: Thing, as: :things
|
11
13
|
end
|
14
|
+
|
12
15
|
let(:klass) { TestClass.new }
|
13
16
|
|
14
17
|
it 'creates the get' do
|
@@ -20,5 +23,26 @@ describe Otis::Object do
|
|
20
23
|
klass.things << Thing.new
|
21
24
|
expect(klass.things.count).to eq(2)
|
22
25
|
end
|
26
|
+
|
27
|
+
it 'transforms correctly the collection' do
|
28
|
+
klass = TestClass.new(:things => [{a: 'foo'}, {b: 'bar'}])
|
29
|
+
expect(klass.things.count).to eq(2)
|
30
|
+
expect(klass.things.first.a).to eq('foo')
|
31
|
+
end
|
23
32
|
end
|
33
|
+
|
34
|
+
describe 'tag attributes' do
|
35
|
+
class TestAttributeClass < Otis::Model
|
36
|
+
tag_attributes :foo, :bar
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'dinamic method creation' do
|
40
|
+
it 'reads from the hash removing @' do
|
41
|
+
t = TestAttributeClass.new(:@foo => 'f', :@bar => 'b')
|
42
|
+
t.foo.should == 'f'
|
43
|
+
t.bar.should == 'b'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
24
48
|
end
|
@@ -23,7 +23,7 @@ describe Otis::SoapClient do
|
|
23
23
|
before { client.stub_chain(:call, :body).and_return(response) }
|
24
24
|
|
25
25
|
it 'delegates the call the the client' do
|
26
|
-
client.should_receive(:call).with(:my_call,
|
26
|
+
client.should_receive(:call).with(:my_call, {:params => []})
|
27
27
|
MySoapClient.new(routes, double).my_call(params: [])
|
28
28
|
end
|
29
29
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: otis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thiago Bueno
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|