rddd 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/core_ext/string.rb +6 -0
- data/lib/rddd.rb +6 -1
- data/lib/rddd/aggregate_root_finders.rb +11 -5
- data/lib/rddd/configuration.rb +3 -3
- data/lib/rddd/service_factory.rb +5 -7
- data/lib/rddd/version.rb +1 -1
- data/spec/integration_spec.rb +7 -0
- data/spec/lib/service_factory_spec.rb +26 -7
- metadata +23 -39
data/lib/rddd.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rddd/version'
|
2
2
|
require 'rddd/configuration'
|
3
|
+
require 'core_ext/string'
|
3
4
|
|
4
5
|
module Rddd
|
5
6
|
#
|
@@ -8,7 +9,11 @@ module Rddd
|
|
8
9
|
# ## Usage
|
9
10
|
#
|
10
11
|
# Rddd.configure do |config|
|
11
|
-
# config.
|
12
|
+
# config.service_creator = lambda do |name|
|
13
|
+
# class_name = "#{name.to_s.camel_case}Service"
|
14
|
+
#
|
15
|
+
# Rddd::Services.const_get(class_name.to_sym)
|
16
|
+
# end
|
12
17
|
# end
|
13
18
|
#
|
14
19
|
def self.configure
|
@@ -1,15 +1,21 @@
|
|
1
1
|
module Rddd
|
2
2
|
module AggregateRootFinders
|
3
|
-
def finder(name
|
4
|
-
(
|
5
|
-
|
6
|
-
repository.send(name, *args)
|
7
|
-
end
|
3
|
+
def finder(name)
|
4
|
+
craete_static_method(name) do |*args|
|
5
|
+
repository.send(name, *args)
|
8
6
|
end
|
9
7
|
end
|
10
8
|
|
11
9
|
def repository
|
12
10
|
RepositoryFactory.build(self)
|
13
11
|
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def craete_static_method(name, &block)
|
16
|
+
(class << self; self; end).instance_eval do
|
17
|
+
define_method name, &block
|
18
|
+
end
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
data/lib/rddd/configuration.rb
CHANGED
@@ -8,10 +8,10 @@ module Rddd
|
|
8
8
|
class Configuration
|
9
9
|
include Singleton
|
10
10
|
|
11
|
-
attr_writer :
|
11
|
+
attr_writer :service_creator, :repositories_namespace
|
12
12
|
|
13
|
-
def
|
14
|
-
@
|
13
|
+
def service_creator
|
14
|
+
@service_creator
|
15
15
|
end
|
16
16
|
|
17
17
|
def repositories_namespace
|
data/lib/rddd/service_factory.rb
CHANGED
@@ -2,16 +2,14 @@ require 'rddd/configuration'
|
|
2
2
|
|
3
3
|
module Rddd
|
4
4
|
class ServiceFactory
|
5
|
+
ServiceCreatorNotGiven = Class.new(RuntimeError)
|
6
|
+
|
5
7
|
def self.build(name, attributes)
|
6
|
-
|
7
|
-
ns = Configuration.instance.services_namespace
|
8
|
+
creator = Configuration.instance.service_creator
|
8
9
|
|
9
|
-
|
10
|
-
end
|
10
|
+
raise ServiceCreatorNotGiven unless creator
|
11
11
|
|
12
|
-
|
13
|
-
return string if string !~ /_/ && string =~ /[A-Z]+.*/
|
14
|
-
string.split('_').map{|token| token.capitalize}.join
|
12
|
+
creator.call(name).new(attributes)
|
15
13
|
end
|
16
14
|
end
|
17
15
|
end
|
data/lib/rddd/version.rb
CHANGED
data/spec/integration_spec.rb
CHANGED
@@ -33,6 +33,13 @@ end
|
|
33
33
|
|
34
34
|
describe 'CreateProject' do
|
35
35
|
it 'should call project save' do
|
36
|
+
Rddd.configure do |config|
|
37
|
+
config.service_creator = lambda do |name|
|
38
|
+
class_name = "#{name.to_s.camel_case}Service"
|
39
|
+
Object.const_get(class_name.to_sym)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
36
43
|
ProjectRepository.any_instance.expects(:create)
|
37
44
|
|
38
45
|
ProjectsController.new.create(:id => 1, :name => 'Rddd')
|
@@ -4,25 +4,44 @@ require 'rddd/service_factory'
|
|
4
4
|
describe Rddd::ServiceFactory do
|
5
5
|
let(:attributes) { stub('attributes') }
|
6
6
|
|
7
|
+
let(:service_creator) do
|
8
|
+
lambda do |name|
|
9
|
+
class_name = "#{name.to_s.camel_case}Service"
|
10
|
+
Rddd::Services.const_get(class_name.to_sym)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
7
14
|
before do
|
8
15
|
Rddd.const_set(:Services, Module.new)
|
9
16
|
Rddd::Services.const_set(:CreateProjectService, Class.new)
|
10
|
-
|
11
|
-
Rddd.configure { |config| config.services_namespace = Rddd::Services }
|
12
17
|
end
|
13
18
|
|
14
19
|
after do
|
15
20
|
Rddd::Services.class_eval {remove_const(:CreateProjectService)}
|
16
21
|
Rddd.class_eval {remove_const(:Services)}
|
17
|
-
|
18
|
-
Rddd.configure { |config| config.services_namespace = Object }
|
19
22
|
end
|
20
23
|
|
21
24
|
describe '.build' do
|
22
|
-
|
23
|
-
|
25
|
+
context 'configuration service_creator given' do
|
26
|
+
before do
|
27
|
+
Rddd.configure { |config| config.service_creator = service_creator }
|
28
|
+
end
|
29
|
+
|
30
|
+
after do
|
31
|
+
Rddd.configure { |config| config.service_creator = nil }
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should call the appropriate service' do
|
35
|
+
Rddd::Services::CreateProjectService.expects(:new).with(attributes)
|
36
|
+
|
37
|
+
Rddd::ServiceFactory.build(:create_project, attributes)
|
38
|
+
end
|
39
|
+
end
|
24
40
|
|
25
|
-
|
41
|
+
context 'configuration service_creator not given' do
|
42
|
+
it 'should raise exception' do
|
43
|
+
expect { Rddd::ServiceFactory.build(:create_project, attributes) }.to raise_exception Rddd::ServiceFactory::ServiceCreatorNotGiven
|
44
|
+
end
|
26
45
|
end
|
27
46
|
end
|
28
47
|
end
|
metadata
CHANGED
@@ -1,33 +1,23 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rddd
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.5
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 4
|
10
|
-
version: 0.1.4
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Petr Janda
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2012-11-17 00:00:00 Z
|
12
|
+
date: 2012-12-16 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
20
|
-
|
21
14
|
description: Ruby DDD framework
|
22
|
-
email:
|
15
|
+
email:
|
23
16
|
- petrjanda@me.com
|
24
17
|
executables: []
|
25
|
-
|
26
18
|
extensions: []
|
27
|
-
|
28
19
|
extra_rdoc_files: []
|
29
|
-
|
30
|
-
files:
|
20
|
+
files:
|
31
21
|
- .gitignore
|
32
22
|
- .rspec
|
33
23
|
- .rvmrc
|
@@ -37,6 +27,7 @@ files:
|
|
37
27
|
- README.md
|
38
28
|
- Rakefile
|
39
29
|
- documentation/rddd.png
|
30
|
+
- lib/core_ext/string.rb
|
40
31
|
- lib/rddd.rb
|
41
32
|
- lib/rddd/aggregate_root.rb
|
42
33
|
- lib/rddd/aggregate_root_finders.rb
|
@@ -60,38 +51,31 @@ files:
|
|
60
51
|
- spec/spec_helper.rb
|
61
52
|
homepage: http://blog.ngneers.com
|
62
53
|
licenses: []
|
63
|
-
|
64
54
|
post_install_message:
|
65
55
|
rdoc_options: []
|
66
|
-
|
67
|
-
require_paths:
|
56
|
+
require_paths:
|
68
57
|
- lib
|
69
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
59
|
none: false
|
71
|
-
requirements:
|
72
|
-
- -
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
|
76
|
-
- 0
|
77
|
-
version: "0"
|
78
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
65
|
none: false
|
80
|
-
requirements:
|
81
|
-
- -
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
version: "0"
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
87
70
|
requirements: []
|
88
|
-
|
89
71
|
rubyforge_project:
|
90
72
|
rubygems_version: 1.8.24
|
91
73
|
signing_key:
|
92
74
|
specification_version: 3
|
93
|
-
summary: Intention of rddd is to provide basic skeleton for DDD ruby application.
|
94
|
-
|
75
|
+
summary: Intention of rddd is to provide basic skeleton for DDD ruby application.
|
76
|
+
Its framework agnostic, although some framework specific extensions might come later
|
77
|
+
to make it easier to start.
|
78
|
+
test_files:
|
95
79
|
- spec/integration_spec.rb
|
96
80
|
- spec/lib/aggregate_root_spec.rb
|
97
81
|
- spec/lib/entity_spec.rb
|