52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/menilite/router.rb', line 52
def routes(settings)
classes = @classes
router = self
Sinatra.new do
enable :sessions
classes.each do |klass|
case
when klass.subclass_of?(Menilite::Model)
klass.init
resource_name = klass.name
get "/#{resource_name}" do
PrivilegeService.init
router.before_action_handlers(klass, 'index').each {|h| self.instance_eval(&h[:proc]) }
order = params.delete('order')&.split(?,)
data = klass.fetch(filter: params, order: order)
json data.map(&:to_h)
end
get "/#{resource_name}/:id" do
PrivilegeService.init
router.before_action_handlers(klass, 'get').each {|h| self.instance_eval(&h[:proc]) }
json klass[params[:id]].to_h
end
post "/#{resource_name}" do
PrivilegeService.init
router.before_action_handlers(klass, 'post').each {|h| self.instance_eval(&h[:proc]) }
data = JSON.parse(request.body.read)
results = data.map do |model|
instance = klass.new model.map{|key, value| [key.to_sym, value] }.to_h
instance.save
instance
end
json results.map(&:to_h)
end
klass.action_info.each do |name, action|
path = action.options[:on_create] || action.options[:class] ? "/#{resource_name}/#{action.name}" : "/#{resource_name}/#{action.name}/:id"
post path do
PrivilegeService.init
router.before_action_handlers(klass, action.name).each {|h| self.instance_eval(&h[:proc]) }
data = JSON.parse(request.body.read)
result = if action.options[:on_create]
klass.new(data["model"]).send(action.name, *data["args"])
elsif action.options[:class]
klass.send(action.name, *data["args"])
else
klass[params[:id]].send(action.name, *data["args"])
end
json result
end
end
when klass.subclass_of?(Menilite::Controller)
klass.action_info.each do |name, action|
path = klass.respond_to?(:namespace) ? "/#{klass.namespace}/#{action.name}" : "/#{action.name}"
post path do
PrivilegeService.init
router.before_action_handlers(klass, action.name).each {|h| self.instance_eval(&h[:proc]) }
data = JSON.parse(request.body.read)
controller = klass.new(session, settings)
result = controller.send(action.name, *data["args"])
json result
end
end
end
end
end
end
|