rddd 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ class String
2
+ def camel_case
3
+ return self if self !~ /_/ && self =~ /[A-Z]+.*/
4
+ self.split('_').map{|token| token.capitalize}.join
5
+ end
6
+ end
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.services_namespace = Rddd::Services
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, &block)
4
- (class << self; self; end).instance_eval do
5
- define_method name do |*args|
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
@@ -8,10 +8,10 @@ module Rddd
8
8
  class Configuration
9
9
  include Singleton
10
10
 
11
- attr_writer :services_namespace, :repositories_namespace
11
+ attr_writer :service_creator, :repositories_namespace
12
12
 
13
- def services_namespace
14
- @services_namespace || Object
13
+ def service_creator
14
+ @service_creator
15
15
  end
16
16
 
17
17
  def repositories_namespace
@@ -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
- class_name = "#{camel_case(name.to_s)}Service"
7
- ns = Configuration.instance.services_namespace
8
+ creator = Configuration.instance.service_creator
8
9
 
9
- ns.const_get(class_name.to_sym).new(attributes)
10
- end
10
+ raise ServiceCreatorNotGiven unless creator
11
11
 
12
- def self.camel_case(string)
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
@@ -1,3 +1,3 @@
1
1
  module Rddd
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -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
- it do
23
- Rddd::Services::CreateProjectService.expects(:new).with(attributes)
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
- Rddd::ServiceFactory.build(:create_project, attributes)
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
- hash: 3713544621248369165
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
- hash: 2002549777813010636
75
- segments:
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
- hash: 2002549777813010636
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. Its framework agnostic, although some framework specific extensions might come later to make it easier to start.
94
- test_files:
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