Skip to content

Commit 95dba8e

Browse files
author
ahanusa
committed
initial commit -> ServiceBase, CommandBase, DataProxy
0 parents  commit 95dba8e

10 files changed

+295
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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 numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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

command_base.rb

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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

data_proxy.rb

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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

execution_result.rb

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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

service_base.rb

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
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+

tests.rb

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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

validation_result.rb

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class ValidationResult
2+
attr_accessor :member, :error_messages
3+
4+
def initialize
5+
@error_messages = []
6+
end
7+
end

0 commit comments

Comments
 (0)