File tree 10 files changed +295
-0
lines changed
10 files changed +295
-0
lines changed Original file line number Diff line number Diff line change
1
+ require_relative "../../data_proxy"
2
+
3
+ class ActiveRecordDataProxy < DataProxy
4
+ def get_all
5
+ raise "get_all must be implemented"
6
+ end
7
+
8
+ def get_by_id ( id )
9
+ raise "get_by_id must be implemented"
10
+ end
11
+
12
+ def insert ( state )
13
+ raise "insert must be implemented"
14
+ end
15
+
16
+ def update ( state )
17
+ raise "update must be implemented"
18
+ end
19
+
20
+ def delete ( id )
21
+ raise "delete must be implemented"
22
+ end
23
+ end
Original file line number Diff line number Diff line change
1
+ require_relative "active_record_data_proxy"
2
+
3
+ class CustomerDatabaseProxy < ActiveRecordDataProxy
4
+ def get_all
5
+ puts "GETTING all entities from database"
6
+ [ { :name => "Aaron" } , { :name => "Jack" } , { :name => "Terry" } ]
7
+ end
8
+
9
+ def get_by_id ( id )
10
+ puts "GETTING entity from database #{ id } "
11
+ { :name => "Aaron" }
12
+ end
13
+
14
+ def insert ( entity )
15
+ puts "INSERTING entity into database"
16
+ puts entity
17
+ puts "INSERTED entity"
18
+ entity
19
+ end
20
+
21
+ def update ( entity )
22
+ puts "UPDATING entity in database"
23
+ puts entity
24
+ puts "UPDATING entity"
25
+ entity
26
+ end
27
+
28
+ def delete ( id )
29
+ puts "DELETING entity in database"
30
+ puts id
31
+ puts "DELETING entity"
32
+ end
33
+ end
Original file line number Diff line number Diff line change
1
+ require_relative 'restful_service_proxy'
2
+
3
+ class CustomerRestfulProxy < RestfulServiceProxy
4
+ def get_all
5
+ puts "GETTING all entities via GET http://api/customers"
6
+ [ { :name => "Aaron" } , { :name => "Jack" } , { :name => "Terry" } ]
7
+ end
8
+
9
+ def get_by_id ( id )
10
+ puts "GETTING entity via GET http://api/customers/#{ id } "
11
+ { :name => "Aaron" }
12
+ end
13
+
14
+ def insert ( entity )
15
+ puts "INSERTING entity via POST http://api/customers"
16
+ puts entity
17
+ puts "INSERTED entity"
18
+ entity
19
+ end
20
+
21
+ def update ( entity )
22
+ puts "UPDATING entity via PUT http://api/customers/#{ entity [ :id ] } "
23
+ puts entity
24
+ puts "UPDATING entity"
25
+ entity
26
+ end
27
+
28
+ def delete ( id )
29
+ puts "DELETING entity via DELETE http://api/customers/#{ id } "
30
+ puts id
31
+ puts "DELETING entity"
32
+ end
33
+ end
Original file line number Diff line number Diff line change
1
+ require_relative "../../data_proxy"
2
+
3
+ class RestfulServiceProxy < DataProxy
4
+ def get_all
5
+ raise "get_all must be implemented"
6
+ end
7
+
8
+ def get_by_id ( id )
9
+ raise "get_by_id must be implemented"
10
+ end
11
+
12
+ def insert ( state )
13
+ raise "insert must be implemented"
14
+ end
15
+
16
+ def update ( state )
17
+ raise "update must be implemented"
18
+ end
19
+
20
+ def delete ( id )
21
+ raise "delete must be implemented"
22
+ end
23
+ end
Original file line number Diff line number Diff line change
1
+ require_relative "execution_result"
2
+
3
+ class CommandBase
4
+
5
+ def initialize ( execute_method , business_rules_method )
6
+ @execute_method = execute_method
7
+ @business_rules_method = business_rules_method
8
+ end
9
+
10
+ def can_execute?
11
+ !get_validation_errors . any?
12
+ end
13
+
14
+ def execute
15
+ errors = get_validation_errors
16
+ if errors . any?
17
+ return ExecutionResult . new ( false , nil , errors )
18
+ end
19
+
20
+ execution_result = @execute_method . call
21
+ return ExecutionResult . new ( true , execution_result , nil )
22
+ end
23
+
24
+ protected
25
+
26
+ def get_validation_errors
27
+ #raise "must implement get_validation_errors"
28
+ errors = @business_rules_method . call
29
+ end
30
+
31
+ end
Original file line number Diff line number Diff line change
1
+ class DataProxy
2
+ def get_all
3
+ raise "get_all must be implemented"
4
+ end
5
+
6
+ def get_by_id ( id )
7
+ raise "get_by_id must be implemented"
8
+ end
9
+
10
+ def insert ( state )
11
+ raise "insert must be implemented"
12
+ end
13
+
14
+ def update ( state )
15
+ raise "update must be implemented"
16
+ end
17
+
18
+ def delete ( id )
19
+ raise "delete must be implemented"
20
+ end
21
+ end
Original file line number Diff line number Diff line change
1
+ class ExecutionResult
2
+ attr_reader :success , :value , :errors
3
+
4
+ def initialize ( success , value , errors )
5
+ @success = success
6
+ @value = value
7
+ @errors = errors
8
+ end
9
+ end
Original file line number Diff line number Diff line change
1
+ require_relative "command_base"
2
+
3
+ class ServiceBase
4
+
5
+ def initialize ( data_proxy )
6
+ @data_proxy = data_proxy
7
+ end
8
+
9
+ def get_by_id_command ( id )
10
+ CommandBase . new ( get_by_id ( id ) , rules_for_get_by_id ( id ) )
11
+ end
12
+
13
+ def get_all_command
14
+ CommandBase . new ( get_all , rules_for_get_all )
15
+ end
16
+
17
+ def insert_command ( entity )
18
+ CommandBase . new ( insert ( entity ) , rules_for_insert ( entity ) )
19
+ end
20
+
21
+ def update_command ( entity )
22
+ CommandBase . new ( update ( entity ) , rules_for_update ( entity ) )
23
+ end
24
+
25
+ def delete_command ( id )
26
+ CommandBase . new ( delete ( id ) , rules_for_delete ( id ) )
27
+ end
28
+
29
+ protected
30
+
31
+ def get_by_id ( id )
32
+ return Proc . new do
33
+ @data_proxy . get_by_id ( id )
34
+ end
35
+ end
36
+
37
+ def rules_for_get_by_id ( id )
38
+ return Proc . new { [ ] }
39
+ end
40
+
41
+ def get_all
42
+ return Proc . new do
43
+ @data_proxy . get_all
44
+ end
45
+ end
46
+
47
+ def rules_for_get_all
48
+ return Proc . new { [ ] }
49
+ end
50
+
51
+ def insert ( entity )
52
+ return Proc . new do
53
+ @data_proxy . insert ( entity )
54
+ end
55
+ end
56
+
57
+ def rules_for_insert ( entity )
58
+ return Proc . new { [ ] }
59
+ end
60
+
61
+ def update ( entity )
62
+ return Proc . new do
63
+ @data_proxy . update ( entity )
64
+ end
65
+ end
66
+
67
+ def rules_for_update ( entity )
68
+ #return Proc.new do
69
+ ## return entity_must_contain_id_field_rule
70
+ #end
71
+ return Proc . new { [ ] }
72
+ end
73
+
74
+ def delete ( id )
75
+ return Proc . new do
76
+ @data_proxy . delete ( id )
77
+ end
78
+ end
79
+
80
+ def rules_for_delete ( id )
81
+ return Proc . new { [ ] }
82
+ end
83
+ end
84
+
85
+
Original file line number Diff line number Diff line change
1
+ require_relative "command_base"
2
+ require_relative "execution_result"
3
+ require_relative "service_base"
4
+ require_relative "DataProxies/DatabaseProxies/customer_database_proxy"
5
+ require_relative "DataProxies/RestfulServiceProxies/customer_restful_proxy"
6
+
7
+ class CustomerService < ServiceBase
8
+ def initialize ( data_proxy )
9
+ super ( data_proxy )
10
+ end
11
+ end
12
+
13
+ customer_data_proxy = CustomerRestfulProxy . new
14
+ #customer_data_proxy = CustomerDatabaseProxy.new
15
+
16
+ service = CustomerService . new ( customer_data_proxy )
17
+ result = service . insert_command ( { :name => "Aaron" } ) . execute
18
+ puts result . inspect
19
+
20
+ result = service . get_by_id_command ( 1 ) . execute
21
+ puts result . inspect
22
+
23
+ result = service . get_all_command . execute
24
+ puts result . inspect
25
+
26
+ result = service . update_command ( { :id => 1 , :name => "Aaron" } ) . execute
27
+ puts result . inspect
28
+
29
+ result = service . delete_command ( 1 ) . execute
30
+ puts result . inspect
Original file line number Diff line number Diff line change
1
+ class ValidationResult
2
+ attr_accessor :member , :error_messages
3
+
4
+ def initialize
5
+ @error_messages = [ ]
6
+ end
7
+ end
You can’t perform that action at this time.
0 commit comments