-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshift.rb
73 lines (63 loc) · 2.4 KB
/
shift.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
module Shift
class CommandFailed < StandardError
end
end
require_relative "built_in/service"
require_relative "filter/service"
require_relative "rule/service"
require_relative "shift_file/service"
require_relative "lane/service"
module Shift
class ShiftCore
def initialize(
built_in_service = BuiltInService.new,
filter_service = FilterService.new,
shift_file_service = ShiftFileService.new(self),
lane_service = LaneService.new
)
@built_in_service = built_in_service
@filter_service = filter_service
@rule_service = nil
@shift_file_service = shift_file_service
@lane_service = lane_service
@rule_service = RuleService.new
end
def execute_lane(lane_name, folder = Shift::ShiftFolder.new)
shift_file = @shift_file_service.read(folder)
@rule_service = RuleService.new(shift_file[:rules])
@lane_service.execute_lane(lane_name, shift_file)
end
def execute_lanes(folder = Shift::ShiftFolder.new)
shift_file = @shift_file_service.read(folder)
@rule_service = RuleService.new(shift_file[:rules])
@lane_service.execute_lanes(shift_file)
end
def respond_to_missing?(method_sym, private = false)
return (@built_in_service.can_be_executed?(method_sym.to_s) ||
@rule_service.can_be_executed?(method_sym.to_s) ||
@filter_service.can_be_executed?(method_sym.to_s))
end
def method_missing(method_sym, *arguments, &_block)
return super if respond_to_missing?(method_sym) == false
return @filter_service.filter(method_sym.to_s, arguments) if @filter_service.can_be_executed?(method_sym.to_s) == true
return execute_rule(method_sym.to_s, arguments) if @rule_service.can_be_executed?(method_sym.to_s) == true
return @built_in_service.execute(method_sym.to_s, arguments) if @built_in_service.can_be_executed?(method_sym.to_s) == true
return super
end
private
attr_accessor :built_in_service, :filter_service, :rule_service, :shift_file_service, :lane_service
def execute_rule(method_sym, arguments)
begin
return @rule_service.execute(method_sym, arguments)
rescue Shift::RuleWarning => warning
puts "⚠️ Warning: #{warning.message}"
rescue Shift::RuleError => error
puts "💥 Error: #{error.message}"
raise error
rescue => e
raise e
end
return nil
end
end
end