tzispa 0.7.5 → 0.7.6

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: e3c9ec75a6f6b5e1a856c9efaf1a194018b4c681
4
- data.tar.gz: f0fb7fa9a508b73195bd771f5d28b65ef2351bf8
3
+ metadata.gz: 13911ddd5b938320efb3e6aa971d996be88581e5
4
+ data.tar.gz: a054ae603791f5a57a66b40a837ea5fd95b254cb
5
5
  SHA512:
6
- metadata.gz: 37c653c9b2283901357381d58ede86a80ab844e77cd0977bd5e7d52609788f81668fd3fa830782cebaa82fc53f2d2d6a3bc7f82f5b9c8b517ff2e7767927846b
7
- data.tar.gz: ac0e1ef05c586f958873a46bcf9b3c8630a8de6449e536daabae0291ad39d144d8275bc66cba6aebf67e641feb7206f04b62ce734eb91357fc10ac1099786f75
6
+ metadata.gz: 28359f1534f2799ab711386a2caab2641bb047b663a864de73c815851192e772e520acc3d71831c2cabe3143e4706b3fa4702975a9d8b7e147f85212b55c4135
7
+ data.tar.gz: 976f8d1b4b7e18af9887e3400d56320de2a45e300822b696846441dc7f2557f35eed6a56eb649722d02f711dcc91f88f6b7e611aa0004385ff073c48f6b6cd77
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@ Tzispa
2
2
 
3
3
  General purpose web framework
4
4
 
5
+ ## v0.7.6
6
+ - added custom error pages option in base controller
7
+ - disable custom error page in the api controller
8
+
5
9
  ## v0.7.5
6
10
  - bug fix in controller base response status code was not being set
7
11
 
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'forwardable'
4
- require 'json'
5
- require 'i18n'
6
4
  require 'tzispa/helpers/provider'
7
5
  require 'tzispa/helpers/sign_requirer'
8
6
  require 'tzispa/helpers/hooks/before'
9
7
  require 'tzispa/helpers/hooks/after'
10
- require 'tzispa/utils/string'
8
+ require_relative 'handler_error'
11
9
 
12
10
  module Tzispa
13
11
  module Api
@@ -23,6 +21,7 @@ module Tzispa
23
21
  class Handler
24
22
  extend Forwardable
25
23
 
24
+ include Tzispa::Api::HandlerError
26
25
  include Tzispa::Helpers::Provider
27
26
  include Tzispa::Helpers::SignRequirer
28
27
  include Tzispa::Helpers::Hooks::Before
@@ -34,30 +33,15 @@ module Tzispa
34
33
  def_delegators :@context, :request, :response, :app, :repository,
35
34
  :config, :logger, :unauthorized_but_logged, :login_redirect
36
35
 
37
- attr_writer :error
38
-
39
- HANDLER_OK = :ok
40
- HANDLER_MISSING_PARAMETER = :missing_parameter
41
-
42
36
  def initialize(context)
43
37
  @context = context
44
38
  @error = nil
45
39
  @status = nil
46
40
  end
47
41
 
48
- def error?
49
- @error && @error != HANDLER_OK
50
- end
51
-
52
- def error_status(error, status = nil)
53
- @error = error
54
- @status = status
55
- end
56
-
57
- def result(type:, data: nil, error: nil)
42
+ def result(type:, data: nil)
58
43
  @type = type
59
44
  @data = data
60
- @error = error if error
61
45
  end
62
46
 
63
47
  def result_json(data)
@@ -72,17 +56,12 @@ module Tzispa
72
56
  result type: :redirect, data: data
73
57
  end
74
58
 
75
- def not_found
76
- result type: :not_found
77
- end
78
-
79
- def message
80
- I18n.t(error_id, default: error.to_s) if error
81
- end
82
-
83
- def error_id
84
- "#{self.class.name.dottize}.#{error}" if error
59
+ def error_status(code, http_status = nil)
60
+ @error = code
61
+ @status = http_status
62
+ result_json error_message: message, error_code: code
85
63
  end
64
+ alias result_error error_status
86
65
 
87
66
  def run!(verb, predicate = nil)
88
67
  raise UnknownHandlerVerb.new(verb, self.class.name) unless provides? verb
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'i18n'
4
+ require 'tzispa/utils/string'
5
+
6
+ module Tzispa
7
+ module Api
8
+ module HandlerError
9
+
10
+ using Tzispa::Utils::TzString
11
+
12
+ HANDLER_OK = :ok
13
+
14
+ def error?
15
+ @error && @error != HANDLER_OK
16
+ end
17
+
18
+ def message
19
+ I18n.t(error_id, default: error.to_s) if error
20
+ end
21
+
22
+ def error_id
23
+ "#{self.class.name.dottize}.#{error}" if error
24
+ end
25
+
26
+ def http_bad_request(error = nil)
27
+ error_status error || :bad_requuest, 400
28
+ end
29
+
30
+ def http_unauthorized(error = nil)
31
+ error_status error || :unauthorized, 401
32
+ end
33
+
34
+ def http_forbidden(error = nil)
35
+ error_status error || :forbidden, 403
36
+ end
37
+
38
+ def http_not_found(error = nil)
39
+ error_status error || :not_found, 404
40
+ end
41
+
42
+ def http_not_aceptable(error = nil)
43
+ error_status error || :not_acceptable, 406
44
+ end
45
+
46
+ def http_conflict(error = nil)
47
+ error_status error || :conflict, 409
48
+ end
49
+
50
+ def http_gone(error = nil)
51
+ error_status error || :gone, 410
52
+ end
53
+
54
+ def http_token_required(error = nil)
55
+ error_status error || :token_required, 499
56
+ end
57
+
58
+ def http_server_error(error = nil)
59
+ error_status error || :internal_server_error, 500
60
+ end
61
+
62
+ def http_not_implemented(error = nil)
63
+ error_status error || :not_implemented, 501
64
+ end
65
+
66
+ def http_bad_gateway(error = nil)
67
+ error_status error || :bad_gateway, 502
68
+ end
69
+
70
+ def http_service_unavailable(error = nil)
71
+ error_status error || :service_unavailable, 503
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -17,6 +17,10 @@ module Tzispa
17
17
 
18
18
  include Tzispa::Helpers::Response
19
19
 
20
+ def initialize(app, callmethod = :dispatch!)
21
+ super(app, callmethod, false)
22
+ end
23
+
20
24
  def dispatch!
21
25
  verb = context.router_params[:verb]
22
26
  predicate = context.router_params[:predicate]
@@ -47,7 +51,7 @@ module Tzispa
47
51
  end
48
52
 
49
53
  def empty(handler)
50
- api_response nil, nil, handler.status, handler.error
54
+ api_response handler.status
51
55
  end
52
56
 
53
57
  def redirect(handler)
@@ -56,23 +60,18 @@ module Tzispa
56
60
  end
57
61
 
58
62
  def html(handler)
59
- content = handler.error? ? handler.message : handler.data
60
- api_response :htm, content, handler.status, handler.error
63
+ content = handler.data unless handler.error?
64
+ api_response handler.status, content, :htm
61
65
  end
62
66
 
63
67
  def json(handler)
64
- content = if handler.error?
65
- { error_message: handler.message,
66
- error_code: handler.error }.to_json
67
- else
68
- handler.data.is_a?(::String) ? JSON.parse(handler.data) : handler.data.to_json
69
- end
70
- api_response :json, content, handler.status, handler.error
68
+ content = handler.data.is_a?(::String) ? JSON.parse(handler.data) : handler.data.to_json
69
+ api_response handler.status, content, :json
71
70
  end
72
71
 
73
72
  def text(handler)
74
- content = handler.error? ? handler.message : handler.data
75
- api_response :text, content, handler.status, handler.error
73
+ content = handler.data unless handler.error?
74
+ api_response handler.status, content, :text
76
75
  end
77
76
 
78
77
  def download(handler)
@@ -83,11 +82,10 @@ module Tzispa
83
82
  context.flash << message if config.sessions&.enabled
84
83
  end
85
84
 
86
- def api_response(type = nil, content = nil, status = nil, error = nil)
85
+ def api_response(status, content = nil, type = nil)
87
86
  content_type(type) if type
88
87
  response.body = content if content
89
88
  response.status = status if status
90
- api_headers error
91
89
  end
92
90
 
93
91
  def request_method
@@ -113,16 +111,6 @@ module Tzispa
113
111
  .constantize
114
112
  end
115
113
  end
116
-
117
- private
118
-
119
- def api_headers(error = nil)
120
- handler = context.router_params[:handler]
121
- verb = context.router_params[:verb]
122
- predicate = context.router_params[:predicate]
123
- response['X-API'] = "#{handler}:#{verb}:#{predicate}"
124
- response['X-API-SR'] = error.to_s if error
125
- end
126
114
  end
127
115
 
128
116
  end
@@ -17,13 +17,14 @@ module Tzispa
17
17
  include Tzispa::Helpers::Hooks::Before
18
18
  include Tzispa::Helpers::Hooks::After
19
19
 
20
- attr_reader :context, :application, :callmethod
20
+ attr_reader :context, :application, :callmethod, :custom_error
21
21
  def_delegators :@context, :request, :response, :config,
22
22
  :login_redirect, :unauthorized_but_logged
23
23
 
24
- def initialize(app, callmethod = nil)
24
+ def initialize(app, callmethod = nil, custom_error = true)
25
25
  @callmethod = callmethod
26
26
  @application = app
27
+ @custom_error = custom_error
27
28
  end
28
29
 
29
30
  def call(env)
@@ -46,32 +47,32 @@ module Tzispa
46
47
  prepare_response(500, error: ex)
47
48
  end
48
49
 
49
- def prepare_response(status, content: nil, error: nil)
50
+ def prepare_response(status, error: nil)
50
51
  response.status = status if status.is_a?(Integer)
51
52
  if context.client_error?
52
53
  prepare_client_error(status, error)
53
54
  elsif context.server_error?
54
55
  prepare_server_error(status, error)
55
- elsif content
56
- response.body = content
57
56
  end
58
57
  end
59
58
 
60
59
  def prepare_client_error(status, error = nil)
61
60
  status.tap do |code|
62
61
  context.logger.info log_format(code, error.to_s) if error
63
- response.body = error_page(context.domain, status: code)
62
+ response.body = error_page(context.domain, status: code) if custom_error
64
63
  end
65
64
  end
66
65
 
67
66
  def prepare_server_error(status, error = nil)
68
67
  status.tap do |code|
69
68
  context.logger.error log_format(code, error_log(error)) if error
70
- response.body = if error && Tzispa::Environment.development?
71
- debug_info(error)
72
- else
73
- error_page(context.domain, status: code)
74
- end
69
+ if custom_error
70
+ response.body = if error && Tzispa::Environment.development?
71
+ debug_info(error)
72
+ else
73
+ error_page(context.domain, status: code)
74
+ end
75
+ end
75
76
  end
76
77
  end
77
78
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tzispa
4
- VERSION = '0.7.5'
4
+ VERSION = '0.7.6'
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.7.5
4
+ version: 0.7.6
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: 2017-06-02 00:00:00.000000000 Z
11
+ date: 2017-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -184,6 +184,7 @@ files:
184
184
  - bin/tzispa
185
185
  - lib/tzispa.rb
186
186
  - lib/tzispa/api/handler.rb
187
+ - lib/tzispa/api/handler_error.rb
187
188
  - lib/tzispa/app.rb
188
189
  - lib/tzispa/bin/tzispa
189
190
  - lib/tzispa/cli.rb