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 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