tzispa 0.5.0 → 0.5.1
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 +6 -0
- data/lib/tzispa/api/handler.rb +5 -0
- data/lib/tzispa/app.rb +8 -19
- data/lib/tzispa/context.rb +3 -6
- data/lib/tzispa/controller/base.rb +7 -4
- data/lib/tzispa/http/context.rb +3 -3
- data/lib/tzispa/http/response.rb +2 -2
- data/lib/tzispa/middleware.rb +15 -29
- data/lib/tzispa/routes.rb +7 -4
- data/lib/tzispa/version.rb +1 -1
- data/tzispa.gemspec +1 -2
- metadata +9 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 894d9aa7667fefcfa69c76eff750c199591e0ef9
|
4
|
+
data.tar.gz: dda3f0712b977878773d7a036b285d0dfb23c856
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e364cd1714699a89d1ab2a8fd7e9f2e7e05637b7d3ddf81c699f0e49ce25c69680c6d4cff1765ce915d9b4f6e02fa594bc616149a04da2f7b75b8555ea5da237
|
7
|
+
data.tar.gz: a2db16df3d8d02498227ac359d6c542104bbad2dcde768ce4f95dd8a19e9fe6d32e788a566a393e81022bd9bf522bd342f6dc3f440fc1692699b66fec287e08d
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@ Tzispa
|
|
2
2
|
|
3
3
|
General purpose web framework
|
4
4
|
|
5
|
+
## v0.5.1
|
6
|
+
- Add result_json facility in Api::Handler
|
7
|
+
- Rack update requirement to 2.0
|
8
|
+
- Fix http_router not poulating env with rack 2.0
|
9
|
+
- Code optimizations in middlaware management
|
10
|
+
|
5
11
|
## v0.5.0
|
6
12
|
- Add support for signed and unsigned api calls
|
7
13
|
|
data/lib/tzispa/api/handler.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'forwardable'
|
4
|
+
require 'json'
|
4
5
|
|
5
6
|
module Tzispa
|
6
7
|
module Api
|
@@ -34,6 +35,10 @@ module Tzispa
|
|
34
35
|
@detailed_error = detailed_error
|
35
36
|
end
|
36
37
|
|
38
|
+
def result_json(status=HANDLED_UNDEFINED, data=nil, detailed_error=nil)
|
39
|
+
result response_verb: :json, status: status, data: data.to_json, detailed_error: detailed_error
|
40
|
+
end
|
41
|
+
|
37
42
|
def message
|
38
43
|
if @status.nil?
|
39
44
|
nil
|
data/lib/tzispa/app.rb
CHANGED
@@ -7,7 +7,6 @@ require 'tzispa/domain'
|
|
7
7
|
require 'tzispa/routes'
|
8
8
|
require 'tzispa/config/appconfig'
|
9
9
|
require 'tzispa/middleware'
|
10
|
-
require 'tzispa/http/context'
|
11
10
|
require 'tzispa_data'
|
12
11
|
require "tzispa_rig"
|
13
12
|
|
@@ -22,12 +21,13 @@ module Tzispa
|
|
22
21
|
extend Forwardable
|
23
22
|
|
24
23
|
attr_reader :domain, :config, :middleware, :repository, :engine, :logger
|
24
|
+
attr_accessor :routes
|
25
|
+
|
25
26
|
def_delegator :@middleware, :use
|
26
27
|
def_delegator :@domain, :name
|
27
28
|
|
28
29
|
|
29
30
|
class << self
|
30
|
-
|
31
31
|
def inherited(base)
|
32
32
|
super
|
33
33
|
base.class_eval do
|
@@ -51,31 +51,21 @@ module Tzispa
|
|
51
51
|
|
52
52
|
def mount(path, builder)
|
53
53
|
self.new.tap { |app|
|
54
|
-
app.routes ||= Routes.new(path)
|
55
|
-
yield(app.routes)
|
56
|
-
|
54
|
+
app.routes ||= Routes.new(app, path)
|
55
|
+
yield(app.routes) if block_given?
|
56
|
+
builder.map path do
|
57
|
+
run app.middleware.builder
|
58
|
+
end
|
57
59
|
}
|
58
60
|
end
|
59
|
-
|
60
|
-
|
61
61
|
end
|
62
62
|
|
63
|
-
attr_accessor :routes
|
64
|
-
|
65
63
|
def initialize(domain_name)
|
66
64
|
@domain = Domain.new(domain_name)
|
67
65
|
@config = Config::AppConfig.new(@domain).load!
|
68
66
|
@middleware = Middleware.new self
|
69
67
|
end
|
70
68
|
|
71
|
-
def call(env)
|
72
|
-
middleware.call(env)
|
73
|
-
end
|
74
|
-
|
75
|
-
def router
|
76
|
-
routes&.router
|
77
|
-
end
|
78
|
-
|
79
69
|
def load!
|
80
70
|
Mutex.new.synchronize {
|
81
71
|
load_locales
|
@@ -86,10 +76,9 @@ module Tzispa
|
|
86
76
|
@domain.require_dir 'helpers'
|
87
77
|
@domain.require_dir 'api'
|
88
78
|
@domain.require_dir 'middleware'
|
89
|
-
@middleware.load!
|
90
79
|
@loaded = true
|
91
80
|
}
|
92
|
-
|
81
|
+
self
|
93
82
|
end
|
94
83
|
|
95
84
|
private
|
data/lib/tzispa/context.rb
CHANGED
@@ -7,18 +7,15 @@ module Tzispa
|
|
7
7
|
class Context
|
8
8
|
extend Forwardable
|
9
9
|
|
10
|
-
attr_reader :env
|
10
|
+
attr_reader :app, :env
|
11
11
|
def_delegators :app, :config, :logger, :domain, :repository
|
12
12
|
|
13
|
-
def initialize(environment)
|
13
|
+
def initialize(app, environment)
|
14
14
|
@env = environment
|
15
|
+
@app = app
|
15
16
|
I18n.locale = config.locales.default.to_sym if config.respond_to?(:locales)
|
16
17
|
end
|
17
18
|
|
18
|
-
def app
|
19
|
-
@app ||= env[Tzispa::ENV_TZISPA_APP]
|
20
|
-
end
|
21
|
-
|
22
19
|
end
|
23
20
|
|
24
21
|
end
|
@@ -12,15 +12,18 @@ module Tzispa
|
|
12
12
|
|
13
13
|
include Tzispa::Helpers::ErrorView
|
14
14
|
|
15
|
-
attr_reader :context
|
15
|
+
attr_reader :context, :application
|
16
16
|
def_delegators :@context, :request, :response, :config
|
17
17
|
|
18
|
-
def initialize(callmethod=nil)
|
18
|
+
def initialize(app, callmethod=nil)
|
19
19
|
@callmethod = callmethod
|
20
|
+
@application = app
|
20
21
|
end
|
21
22
|
|
22
|
-
def call(
|
23
|
-
@context =
|
23
|
+
def call(env)
|
24
|
+
@context = Tzispa::Http::Context.new(@application, env)
|
25
|
+
#env[Tzispa::ENV_TZISPA_CONTEXT] = @context
|
26
|
+
#@context = env[Tzispa::ENV_TZISPA_CONTEXT]
|
24
27
|
invoke @callmethod if @callmethod
|
25
28
|
response.finish
|
26
29
|
end
|
data/lib/tzispa/http/context.rb
CHANGED
@@ -24,15 +24,15 @@ module Tzispa
|
|
24
24
|
GLOBAL_MESSAGE_FLASH = :__global_message_flash
|
25
25
|
|
26
26
|
|
27
|
-
def initialize(environment)
|
28
|
-
super(environment)
|
27
|
+
def initialize(app, environment)
|
28
|
+
super(app, environment)
|
29
29
|
@request = Tzispa::Http::Request.new(environment)
|
30
30
|
@response = Tzispa::Http::Response.new
|
31
31
|
session[:id] ||= SecureRandom.uuid if app.config.sessions.enabled
|
32
32
|
end
|
33
33
|
|
34
34
|
def router_params
|
35
|
-
env['router.params']
|
35
|
+
env['router.params'] || Hash.new
|
36
36
|
end
|
37
37
|
|
38
38
|
def layout
|
data/lib/tzispa/http/response.rb
CHANGED
@@ -39,7 +39,7 @@ module Tzispa
|
|
39
39
|
if calculate_content_length?
|
40
40
|
# if some other code has already set Content-Length, don't muck with it
|
41
41
|
# currently, this would be the static file-handler
|
42
|
-
headers["Content-Length"] = body.inject(0) { |l, p| l +
|
42
|
+
headers["Content-Length"] = body.inject(0) { |l, p| l + p.bytesize }.to_s
|
43
43
|
end
|
44
44
|
headers['X-Powered-By'] = "#{Tzispa::FRAMEWORK_NAME}"
|
45
45
|
[status.to_i, headers, result]
|
@@ -60,6 +60,6 @@ module Tzispa
|
|
60
60
|
end
|
61
61
|
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
end
|
65
65
|
end
|
data/lib/tzispa/middleware.rb
CHANGED
@@ -1,37 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'tzispa/http/context'
|
4
|
+
|
3
5
|
module Tzispa
|
6
|
+
|
4
7
|
class Middleware
|
5
8
|
|
9
|
+
attr_reader :application, :stack
|
10
|
+
|
6
11
|
def initialize(app)
|
7
12
|
@stack = []
|
8
13
|
@application = app
|
9
14
|
end
|
10
15
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
def load_app(path, builder)
|
20
|
-
app = @application
|
21
|
-
builder.map path do
|
22
|
-
run app.load!
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def call(env)
|
27
|
-
begin
|
28
|
-
env[Tzispa::ENV_TZISPA_APP] = @application
|
29
|
-
env[Tzispa::ENV_TZISPA_CONTEXT] = Tzispa::Http::Context.new(env)
|
30
|
-
@builder.call(env)
|
31
|
-
rescue => ex
|
32
|
-
@application.logger.error "#{ex.message} (#{ex.class}):\n #{ex.backtrace&.join("\n\t")}"
|
33
|
-
env[Tzispa::ENV_TZISPA_CONTEXT].response.status = 500
|
34
|
-
env[Tzispa::ENV_TZISPA_CONTEXT].response.finish
|
16
|
+
def builder
|
17
|
+
mw = self
|
18
|
+
@builder ||= ::Rack::Builder.new do
|
19
|
+
#mw.load_default_stack
|
20
|
+
app = mw.application.load!
|
21
|
+
mw.stack.each { |m, args, block| use mw.load(m), *args, &block }
|
22
|
+
run app.routes.router
|
35
23
|
end
|
36
24
|
end
|
37
25
|
|
@@ -39,9 +27,7 @@ module Tzispa
|
|
39
27
|
@stack.unshift [middleware, args, blk]
|
40
28
|
end
|
41
29
|
|
42
|
-
|
43
|
-
|
44
|
-
def load_middleware(middleware)
|
30
|
+
def load(middleware)
|
45
31
|
case middleware
|
46
32
|
when String
|
47
33
|
Object.const_get(middleware)
|
@@ -52,8 +38,8 @@ module Tzispa
|
|
52
38
|
|
53
39
|
def load_default_stack
|
54
40
|
@default_stack_loaded ||= begin
|
55
|
-
|
56
|
-
|
41
|
+
app = application.load!
|
42
|
+
#use TzispaEnv, app
|
57
43
|
end
|
58
44
|
end
|
59
45
|
|
data/lib/tzispa/routes.rb
CHANGED
@@ -5,6 +5,7 @@ require 'http_router'
|
|
5
5
|
require 'tzispa/utils/string'
|
6
6
|
require 'tzispa/controller/http_error'
|
7
7
|
|
8
|
+
|
8
9
|
module Tzispa
|
9
10
|
|
10
11
|
class Routes
|
@@ -13,10 +14,11 @@ module Tzispa
|
|
13
14
|
|
14
15
|
attr_reader :router, :map_path
|
15
16
|
|
16
|
-
def initialize(
|
17
|
+
def initialize(app, root=nil)
|
17
18
|
@router = HttpRouter.new
|
19
|
+
@app = app
|
18
20
|
@router.default Tzispa::Controller::HttpError.new('error_404')
|
19
|
-
@map_path =
|
21
|
+
@map_path = root unless root=='/'
|
20
22
|
end
|
21
23
|
|
22
24
|
def path(path_id, params={})
|
@@ -35,12 +37,13 @@ module Tzispa
|
|
35
37
|
controller_module = CONTROLLERS_BASE
|
36
38
|
require "tzispa/controller/#{req_controller}"
|
37
39
|
end
|
38
|
-
@router.add(path, methods ? {request_method: methods} : nil
|
39
|
-
rule.to TzString.constantize("#{controller_module}::#{controller}").new(callmethod)
|
40
|
+
@router.add(path, methods ? {request_method: methods} : nil).tap { |rule|
|
41
|
+
rule.to TzString.constantize("#{controller_module}::#{controller}").new(@app, callmethod)
|
40
42
|
rule.name = route_id
|
41
43
|
}
|
42
44
|
end
|
43
45
|
|
46
|
+
|
44
47
|
def index(path, methods=nil, controller=nil)
|
45
48
|
add :index, path, methods, controller || 'layout:render!'
|
46
49
|
end
|
data/lib/tzispa/version.rb
CHANGED
data/tzispa.gemspec
CHANGED
@@ -15,8 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
s.required_ruby_version = '~> 2.3'
|
17
17
|
|
18
|
-
s.add_dependency 'rack', '~>
|
19
|
-
s.add_dependency 'puma', '~> 3.1'
|
18
|
+
s.add_dependency 'rack', '~> 2.0', '>= 2.0.1'
|
20
19
|
s.add_dependency 'i18n', '~> 0.7.0'
|
21
20
|
s.add_dependency 'http_router', '~> 0.11.2'
|
22
21
|
s.add_dependency 'moneta', '~> 0.8.0'
|
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.1
|
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-
|
11
|
+
date: 2016-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -16,28 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
19
|
+
version: '2.0'
|
20
|
+
- - ">="
|
25
21
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: puma
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '3.1'
|
22
|
+
version: 2.0.1
|
34
23
|
type: :runtime
|
35
24
|
prerelease: false
|
36
25
|
version_requirements: !ruby/object:Gem::Requirement
|
37
26
|
requirements:
|
38
27
|
- - "~>"
|
39
28
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
29
|
+
version: '2.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.1
|
41
33
|
- !ruby/object:Gem::Dependency
|
42
34
|
name: i18n
|
43
35
|
requirement: !ruby/object:Gem::Requirement
|