tzispa 0.5.6 → 0.5.7
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/tzispa/api/handler.rb +28 -0
- data/lib/tzispa/controller/api.rb +30 -27
- data/lib/tzispa/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3636dd9fdb2d87f20c713f22b24979f7581e90b
|
4
|
+
data.tar.gz: 56a337b9749c02ee44c343e6c4064e18b09207f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c06aaad81f83e726c4e7bfbaabdb732ed6d17fac90c2e9daa939a7bcc6bccd25fab887ce6068a10bd3ac3ae2d3c09511c2d9874eca61ac2667534eed7e256f24
|
7
|
+
data.tar.gz: 30f16894884f47f20ee479365cd3a00e3d4b5ee92a48a1f4f0157bf62e53946cc5484d1d63c397bd11e4c52e158a29046ee5c58e6441bd9503cd6ba26a9e2fd3
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@ Tzispa
|
|
2
2
|
|
3
3
|
General purpose web framework
|
4
4
|
|
5
|
+
## v0.5.7
|
6
|
+
- add provides DSL method to specify allowe verbs in api handlers
|
7
|
+
- handler calling improvements in api the controller
|
8
|
+
|
5
9
|
## v0.5.6
|
6
10
|
- more application DSL usage improvements
|
7
11
|
- application builder passed in the run method
|
data/lib/tzispa/api/handler.rb
CHANGED
@@ -5,6 +5,14 @@ require 'json'
|
|
5
5
|
|
6
6
|
module Tzispa
|
7
7
|
module Api
|
8
|
+
|
9
|
+
class ApiException < StandardError; end
|
10
|
+
class UnknownHandlerVerb < ApiException
|
11
|
+
def initialize(s, name)
|
12
|
+
super("Unknown verb: '#{s}' called in api handler '#{name}'")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
8
16
|
class Handler
|
9
17
|
extend Forwardable
|
10
18
|
|
@@ -53,6 +61,26 @@ module Tzispa
|
|
53
61
|
end
|
54
62
|
end
|
55
63
|
|
64
|
+
def send(verb, predicate)
|
65
|
+
raise UnknownHandlerVerb.new(verb, self.class.name) unless self.class.provides? verb
|
66
|
+
args = predicate ? predicate.split('__') : nil
|
67
|
+
__send__ verb, *args
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.provides(*args)
|
71
|
+
(@provides ||= Array.new).tap { |prv|
|
72
|
+
args&.each { |s|
|
73
|
+
prv << s.to_sym
|
74
|
+
}
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.provides?(value)
|
79
|
+
value = value.to_sym
|
80
|
+
@provides&.include?(value) && public_method_defined?(value)
|
81
|
+
end
|
82
|
+
|
83
|
+
|
56
84
|
private
|
57
85
|
|
58
86
|
def result_messages(status)
|
@@ -10,48 +10,51 @@ require 'tzispa/utils/string'
|
|
10
10
|
|
11
11
|
module Tzispa
|
12
12
|
module Controller
|
13
|
+
|
14
|
+
class ControllerException < StandardError; end
|
15
|
+
|
13
16
|
class Api < Base
|
14
17
|
|
15
18
|
include Tzispa::Helpers::Response
|
16
19
|
|
17
|
-
attr_reader :
|
20
|
+
attr_reader :handler
|
18
21
|
|
19
22
|
def self.generate_handler(domain, name)
|
20
23
|
@domain = domain
|
21
|
-
@
|
24
|
+
@handler_name = name
|
22
25
|
raise "The handler '#{name}' already exist" if File.exist?(handler_class_file)
|
23
26
|
File.open(handler_class_file, "w") { |f|
|
24
|
-
|
25
|
-
f.puts
|
27
|
+
handler_code = TzString.new
|
28
|
+
f.puts handler_code.indenter("require 'tzispa/api/handler'\n\n")
|
26
29
|
level = 0
|
27
30
|
handler_namespace.split('::').each { |ns|
|
28
|
-
f.puts
|
31
|
+
f.puts handler_code.indenter("module #{ns}\n", level > 0 ? 2 : 0).to_s
|
29
32
|
level += 1
|
30
33
|
}
|
31
|
-
f.puts
|
32
|
-
f.puts
|
34
|
+
f.puts handler_code.indenter("\nclass #{handler_class_name} < Tzispa::Api::Handler\n\n", 2)
|
35
|
+
f.puts handler_code.indenter("end\n\n")
|
33
36
|
handler_namespace.split('::').each { |ns|
|
34
|
-
f.puts
|
37
|
+
f.puts handler_code.unindenter("end\n", 2)
|
35
38
|
}
|
36
39
|
}
|
37
40
|
end
|
38
41
|
|
39
42
|
|
40
43
|
def dispatch!
|
41
|
-
@
|
44
|
+
@handler_name, domain_name = context.router_params[:handler].split('.').reverse
|
42
45
|
@domain = domain_name.nil? ? context.app.domain : Tzispa::Domain.new(name: domain_name)
|
43
46
|
@verb = context.router_params[:verb]
|
44
47
|
@predicate = context.router_params[:predicate]
|
45
|
-
@
|
46
|
-
|
47
|
-
context.flash <<
|
48
|
-
send
|
48
|
+
@handler = handler_class.new(context)
|
49
|
+
handler.send @verb, @predicate
|
50
|
+
context.flash << handler.message
|
51
|
+
send handler.response_verb if handler.response_verb
|
49
52
|
response.finish
|
50
53
|
end
|
51
54
|
|
52
55
|
def redirect
|
53
|
-
url = if
|
54
|
-
|
56
|
+
url = if handler.data && !handler.data.strip.empty?
|
57
|
+
handler.data.start_with?('#') ? "#{request.referer}#{handler.data}" : handler.data
|
55
58
|
else
|
56
59
|
request.referer
|
57
60
|
end
|
@@ -59,18 +62,18 @@ module Tzispa
|
|
59
62
|
end
|
60
63
|
|
61
64
|
def html
|
62
|
-
response.body <<
|
65
|
+
response.body << handler.data
|
63
66
|
content_type :htm
|
64
67
|
set_action_headers
|
65
68
|
end
|
66
69
|
|
67
70
|
def json
|
68
|
-
if
|
69
|
-
data =
|
70
|
-
data[:__result_status] =
|
71
|
-
data[:__result_message] =
|
71
|
+
if handler.data.is_a?(::Hash)
|
72
|
+
data = handler.data
|
73
|
+
data[:__result_status] = handler.status
|
74
|
+
data[:__result_message] = handler.message
|
72
75
|
else
|
73
|
-
data = JSON.parse(
|
76
|
+
data = JSON.parse(handler.data)
|
74
77
|
end
|
75
78
|
response.body << data.to_json
|
76
79
|
content_type :json
|
@@ -78,21 +81,21 @@ module Tzispa
|
|
78
81
|
end
|
79
82
|
|
80
83
|
def text
|
81
|
-
response.body <<
|
84
|
+
response.body << handler.data
|
82
85
|
content_type :text
|
83
86
|
set_action_headers
|
84
87
|
end
|
85
88
|
|
86
89
|
def download
|
87
|
-
send_file
|
90
|
+
send_file handler.data[:path], handler.data
|
88
91
|
end
|
89
92
|
|
90
93
|
def handler_class_name
|
91
|
-
"#{TzString.camelize @
|
94
|
+
"#{TzString.camelize @handler_name}Handler"
|
92
95
|
end
|
93
96
|
|
94
97
|
def handler_class_file
|
95
|
-
"#{@domain.path}/api/#{@
|
98
|
+
"#{@domain.path}/api/#{@handler_name}.rb"
|
96
99
|
end
|
97
100
|
|
98
101
|
def handler_namespace
|
@@ -100,7 +103,7 @@ module Tzispa
|
|
100
103
|
end
|
101
104
|
|
102
105
|
def handler_class
|
103
|
-
@domain.require "api/#{@
|
106
|
+
@domain.require "api/#{@handler_name}"
|
104
107
|
TzString.constantize "#{handler_namespace}::#{handler_class_name}"
|
105
108
|
end
|
106
109
|
|
@@ -110,7 +113,7 @@ module Tzispa
|
|
110
113
|
|
111
114
|
def set_action_headers
|
112
115
|
response['X-API'] = "#{context.router_params[:sign]}:#{context.router_params[:handler]}:#{context.router_params[:verb]}:#{context.router_params[:predicate]}"
|
113
|
-
response['X-API-STATE'] = "#{
|
116
|
+
response['X-API-STATE'] = "#{handler.status}"
|
114
117
|
end
|
115
118
|
|
116
119
|
end
|
data/lib/tzispa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tzispa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Antonio Piñero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|