rddd 0.1.4 → 0.1.5
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.
- 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
|