rddd 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/remoting/app/Gemfile +1 -1
- data/examples/remoting/app/Gemfile.lock +1 -1
- data/examples/remoting/remote/Gemfile +1 -1
- data/examples/remoting/remote/Gemfile.lock +1 -1
- data/examples/remoting/remote/app.rb +1 -1
- data/lib/rddd/configuration.rb +3 -3
- data/lib/rddd/services/remote_service.rb +11 -11
- data/lib/rddd/services/service_factory.rb +4 -4
- data/lib/rddd/services/transports/factory.rb +22 -0
- data/lib/rddd/services/transports/http_json.rb +17 -0
- data/lib/rddd/version.rb +1 -1
- data/spec/integration_spec.rb +1 -1
- data/spec/lib/services/remote_service_spec.rb +18 -14
- data/spec/lib/services/service_factory_spec.rb +8 -8
- data/spec/lib/services/transports/http_json_spec.rb +42 -0
- metadata +6 -2
@@ -9,7 +9,7 @@ require 'rddd/services/service_bus'
|
|
9
9
|
require 'services/list_service'
|
10
10
|
|
11
11
|
Rddd.configure do |config|
|
12
|
-
config.
|
12
|
+
config.service_factory_strategy = lambda do |name|
|
13
13
|
class_name = "#{name.to_s.camel_case}Service"
|
14
14
|
puts class_name
|
15
15
|
Object.const_get(class_name.to_sym)
|
data/lib/rddd/configuration.rb
CHANGED
@@ -8,9 +8,9 @@ module Rddd
|
|
8
8
|
class Configuration
|
9
9
|
include Singleton
|
10
10
|
|
11
|
-
attr_accessor :
|
12
|
-
:repository_creator,
|
13
|
-
:caching_strategy,
|
11
|
+
attr_accessor :service_factory_strategy,
|
12
|
+
:repository_creator,
|
13
|
+
:caching_strategy,
|
14
14
|
:remote_services
|
15
15
|
end
|
16
16
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'curl'
|
3
3
|
require 'rddd/services/service'
|
4
|
+
require 'rddd/services/transports/factory'
|
4
5
|
|
5
6
|
module Rddd
|
6
7
|
module Services
|
@@ -37,24 +38,23 @@ module Rddd
|
|
37
38
|
# for any change in your client or services code base.
|
38
39
|
#
|
39
40
|
class RemoteService < Service
|
40
|
-
def initialize(
|
41
|
+
def initialize(transport, service_name, attributes)
|
41
42
|
super(attributes)
|
42
43
|
|
43
|
-
@
|
44
|
+
@transport = transport
|
45
|
+
@service_name = service_name
|
44
46
|
end
|
45
47
|
|
46
48
|
def execute
|
47
|
-
|
48
|
-
http.headers['Content-Type'] = 'application/json'
|
49
|
-
end.body_str)
|
49
|
+
@transport.call(@service_name, @attributes)
|
50
50
|
end
|
51
51
|
|
52
|
-
def self.build(namespace, service_name, attributes)
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
def self.build(namespace, service_name, attributes = {})
|
53
|
+
RemoteService.new(
|
54
|
+
Transports::Factory.build(namespace),
|
55
|
+
service_name,
|
56
|
+
attributes
|
57
|
+
)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -3,17 +3,17 @@ require 'rddd/configuration'
|
|
3
3
|
module Rddd
|
4
4
|
module Services
|
5
5
|
class ServiceFactory
|
6
|
-
|
6
|
+
StrategyNotGiven = Class.new(RuntimeError)
|
7
7
|
|
8
8
|
InvalidService = Class.new(RuntimeError)
|
9
9
|
|
10
10
|
def self.build(name, attributes)
|
11
|
-
|
11
|
+
strategy = Configuration.instance.service_factory_strategy
|
12
12
|
|
13
|
-
raise
|
13
|
+
raise StrategyNotGiven unless strategy
|
14
14
|
|
15
15
|
begin
|
16
|
-
|
16
|
+
strategy.call(name).new(attributes)
|
17
17
|
rescue
|
18
18
|
raise Rddd::Services::ServiceFactory::InvalidService
|
19
19
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'curl'
|
3
|
+
require 'rddd/services/service'
|
4
|
+
require 'rddd/services/transports/http_json'
|
5
|
+
|
6
|
+
module Rddd
|
7
|
+
module Services
|
8
|
+
module Transports
|
9
|
+
class Factory
|
10
|
+
def self.build(namespace)
|
11
|
+
remote = Configuration.instance.remote_services.find do |remote|
|
12
|
+
remote[:namespace] == namespace
|
13
|
+
end
|
14
|
+
|
15
|
+
Transports::HttpJson.new(
|
16
|
+
:endpoint => remote[:endpoint]
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Rddd
|
2
|
+
module Services
|
3
|
+
module Transports
|
4
|
+
class HttpJson
|
5
|
+
def initialize(attributes)
|
6
|
+
@endpoint = attributes[:endpoint]
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(service_name, attributes)
|
10
|
+
JSON.parse(Curl.post("#{@endpoint}#{service_name}", JSON.unparse(attributes)) do |http|
|
11
|
+
http.headers['Content-Type'] = 'application/json'
|
12
|
+
end.body_str)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/rddd/version.rb
CHANGED
data/spec/integration_spec.rb
CHANGED
@@ -43,7 +43,7 @@ describe 'CreateProject' do
|
|
43
43
|
Rddd.configure do |config|
|
44
44
|
config.repository_creator = repository_creator
|
45
45
|
|
46
|
-
config.
|
46
|
+
config.service_factory_strategy = lambda do |name|
|
47
47
|
class_name = "#{name.to_s.camel_case}Service"
|
48
48
|
Object.const_get(class_name.to_sym)
|
49
49
|
end
|
@@ -6,32 +6,36 @@ module Rddd
|
|
6
6
|
describe RemoteService do
|
7
7
|
let(:attributes) { {:foo => 'bar'} }
|
8
8
|
|
9
|
-
let(:
|
9
|
+
let(:endpoint) { 'http://remote.dev/' }
|
10
10
|
|
11
|
-
|
12
|
-
subject { RemoteService.new(url, attributes) }
|
11
|
+
let(:namespace) { 'namespace' }
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
let(:service_name) { :service_name }
|
14
|
+
|
15
|
+
before do
|
16
|
+
Configuration.instance.remote_services = [
|
17
|
+
{:namespace => namespace, :endpoint => endpoint}
|
18
|
+
]
|
19
|
+
end
|
18
20
|
|
19
21
|
describe '#valid?' do
|
20
|
-
subject { RemoteService.
|
22
|
+
subject { RemoteService.build(namespace, service_name).valid? }
|
21
23
|
|
22
24
|
it { should be_true }
|
23
25
|
end
|
24
26
|
|
25
27
|
describe '#execute' do
|
26
|
-
subject { RemoteService.
|
28
|
+
subject { RemoteService.build(namespace, service_name, attributes).execute }
|
27
29
|
|
28
|
-
let(:
|
30
|
+
let(:result) { {"foo" => "bar"} }
|
29
31
|
|
30
|
-
|
31
|
-
Curl.expects(:post).with(url, JSON.unparse(attributes)).yields(curl).returns(curl)
|
32
|
-
curl.headers.expects(:[]=).with('Content-Type', 'application/json')
|
32
|
+
let(:transport) { stub('transport') }
|
33
33
|
|
34
|
-
|
34
|
+
it 'should raise not implemented' do
|
35
|
+
Transports::HttpJson.expects(:new).with(:endpoint => endpoint).returns(transport)
|
36
|
+
transport.expects(:call).with(service_name, attributes).returns(result)
|
37
|
+
|
38
|
+
subject.should == result
|
35
39
|
end
|
36
40
|
end
|
37
41
|
end
|
@@ -6,7 +6,7 @@ module Rddd
|
|
6
6
|
describe ServiceFactory do
|
7
7
|
let(:attributes) { stub('attributes') }
|
8
8
|
|
9
|
-
let(:
|
9
|
+
let(:service_factory_strategy) do
|
10
10
|
lambda do |name|
|
11
11
|
class_name = "#{name.to_s.camel_case}Service"
|
12
12
|
Services.const_get(class_name.to_sym)
|
@@ -22,13 +22,13 @@ module Rddd
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe '.build' do
|
25
|
-
context 'configuration
|
25
|
+
context 'configuration service_factory_strategy given' do
|
26
26
|
before do
|
27
|
-
Rddd.configure { |config| config.
|
27
|
+
Rddd.configure { |config| config.service_factory_strategy = service_factory_strategy }
|
28
28
|
end
|
29
29
|
|
30
30
|
after do
|
31
|
-
Rddd.configure { |config| config.
|
31
|
+
Rddd.configure { |config| config.service_factory_strategy = nil }
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'should call the appropriate service' do
|
@@ -40,19 +40,19 @@ module Rddd
|
|
40
40
|
|
41
41
|
context 'not existing service' do
|
42
42
|
before do
|
43
|
-
Rddd.configure { |config| config.
|
43
|
+
Rddd.configure { |config| config.service_factory_strategy = service_factory_strategy }
|
44
44
|
end
|
45
45
|
|
46
46
|
after do
|
47
|
-
Rddd.configure { |config| config.
|
47
|
+
Rddd.configure { |config| config.service_factory_strategy = nil }
|
48
48
|
end
|
49
49
|
|
50
50
|
it { expect { ServiceFactory.build(:foo, attributes) }.to raise_exception ServiceFactory::InvalidService }
|
51
51
|
end
|
52
52
|
|
53
|
-
context 'configuration
|
53
|
+
context 'configuration service_factory_strategy not given' do
|
54
54
|
it 'should raise exception' do
|
55
|
-
expect { Rddd::Services::ServiceFactory.build(:create_project, attributes) }.to raise_exception Rddd::Services::ServiceFactory::
|
55
|
+
expect { Rddd::Services::ServiceFactory.build(:create_project, attributes) }.to raise_exception Rddd::Services::ServiceFactory::StrategyNotGiven
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rddd/services/transports/http_json'
|
3
|
+
|
4
|
+
module Rddd
|
5
|
+
module Services
|
6
|
+
module Transports
|
7
|
+
describe HttpJson do
|
8
|
+
let(:transport_attributes) do
|
9
|
+
{
|
10
|
+
:endpoint => 'http://remote.dev/'
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:transport) { HttpJson.new(transport_attributes) }
|
15
|
+
|
16
|
+
describe '#call' do
|
17
|
+
subject { transport.call(service_name, attributes) }
|
18
|
+
|
19
|
+
let(:service_name) { :service_name }
|
20
|
+
|
21
|
+
let(:attributes) { {'foo' => 'bar'} }
|
22
|
+
|
23
|
+
let(:result) { {'foo' => 'bar'} }
|
24
|
+
|
25
|
+
let(:curl) { stub('curl', :body_str => '{"foo": "bar"}', :headers => [])}
|
26
|
+
|
27
|
+
before do
|
28
|
+
Curl.expects(:post) \
|
29
|
+
.with('http://remote.dev/service_name', JSON.unparse(attributes)) \
|
30
|
+
.yields(curl) \
|
31
|
+
.returns(curl)
|
32
|
+
|
33
|
+
curl.headers.expects(:[]=).with('Content-Type', 'application/json')
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
it { should == result }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rddd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: curb
|
@@ -74,6 +74,8 @@ files:
|
|
74
74
|
- lib/rddd/services/service.rb
|
75
75
|
- lib/rddd/services/service_bus.rb
|
76
76
|
- lib/rddd/services/service_factory.rb
|
77
|
+
- lib/rddd/services/transports/factory.rb
|
78
|
+
- lib/rddd/services/transports/http_json.rb
|
77
79
|
- lib/rddd/version.rb
|
78
80
|
- rddd.gemspec
|
79
81
|
- spec/integration_spec.rb
|
@@ -90,6 +92,7 @@ files:
|
|
90
92
|
- spec/lib/services/service_bus_spec.rb
|
91
93
|
- spec/lib/services/service_factory_spec.rb
|
92
94
|
- spec/lib/services/service_spec.rb
|
95
|
+
- spec/lib/services/transports/http_json_spec.rb
|
93
96
|
- spec/spec_helper.rb
|
94
97
|
homepage: http://blog.ngneers.com
|
95
98
|
licenses: []
|
@@ -132,5 +135,6 @@ test_files:
|
|
132
135
|
- spec/lib/services/service_bus_spec.rb
|
133
136
|
- spec/lib/services/service_factory_spec.rb
|
134
137
|
- spec/lib/services/service_spec.rb
|
138
|
+
- spec/lib/services/transports/http_json_spec.rb
|
135
139
|
- spec/spec_helper.rb
|
136
140
|
has_rdoc:
|