tzispa 0.5.6 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 854b76c406ea8c9fa9742f2e4cd8daa7ec4fea16
4
- data.tar.gz: 604cb924b0d88785ac2c9f7808eecb594bda3534
3
+ metadata.gz: a3636dd9fdb2d87f20c713f22b24979f7581e90b
4
+ data.tar.gz: 56a337b9749c02ee44c343e6c4064e18b09207f0
5
5
  SHA512:
6
- metadata.gz: 5703eafce64f5b86c2de1e2dd7c9d8235a692a84ffd0fa2ac40c63c37a6de495c559b89f7ec46f29bfe1f7a31a69427d1a8c204551eaf6dc321019e45f8ffad1
7
- data.tar.gz: bd6804a30b18b86fa577ca6f2a70c8efe433124caeeaf86f76e43a9d26853bd24ffde5f4985813f9b49cf70793f8afc3ebf4973c114551af694ecb8daf1c5d7f
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
@@ -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 :hnd
20
+ attr_reader :handler
18
21
 
19
22
  def self.generate_handler(domain, name)
20
23
  @domain = domain
21
- @handler = name
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
- hnd_code = TzString.new
25
- f.puts hnd_code.indenter("require 'tzispa/api/handler'\n\n")
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 hnd_code.indenter("module #{ns}\n", level > 0 ? 2 : 0).to_s
31
+ f.puts handler_code.indenter("module #{ns}\n", level > 0 ? 2 : 0).to_s
29
32
  level += 1
30
33
  }
31
- f.puts hnd_code.indenter("\nclass #{handler_class_name} < Tzispa::Api::Handler\n\n", 2)
32
- f.puts hnd_code.indenter("end\n\n")
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 hnd_code.unindenter("end\n", 2)
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
- @handler, domain_name = context.router_params[:handler].split('.').reverse
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
- @hnd = handler_class.new(context)
46
- @predicate ? hnd.send(@verb, @predicate) : hnd.send(@verb)
47
- context.flash << hnd.message
48
- send hnd.response_verb if hnd.response_verb
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 hnd.data && !hnd.data.strip.empty?
54
- hnd.data.start_with?('#') ? "#{request.referer}#{hnd.data}" : hnd.data
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 << hnd.data
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 hnd.data.is_a?(::Hash)
69
- data = hnd.data
70
- data[:__result_status] = hnd.status
71
- data[:__result_message] = hnd.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(hnd.data)
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 << hnd.data
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 hnd.data[:path], hnd.data
90
+ send_file handler.data[:path], handler.data
88
91
  end
89
92
 
90
93
  def handler_class_name
91
- "#{TzString.camelize @handler}Handler"
94
+ "#{TzString.camelize @handler_name}Handler"
92
95
  end
93
96
 
94
97
  def handler_class_file
95
- "#{@domain.path}/api/#{@handler}.rb"
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/#{@handler}"
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'] = "#{hnd.status}"
116
+ response['X-API-STATE'] = "#{handler.status}"
114
117
  end
115
118
 
116
119
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tzispa
4
- VERSION = '0.5.6'
4
+ VERSION = '0.5.7'
5
5
  FRAMEWORK_NAME = 'Tzispa'
6
6
  GEM_NAME = 'tzispa'
7
7
  end
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.6
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-17 00:00:00.000000000 Z
11
+ date: 2016-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack