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.
@@ -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