flame 1.0.6 → 1.1.0
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/lib/flame.rb +2 -2
- data/lib/flame/application.rb +2 -2
- data/lib/flame/controller.rb +1 -1
- data/lib/flame/dispatcher.rb +7 -3
- data/lib/flame/request.rb +8 -0
- data/lib/flame/route.rb +33 -40
- data/lib/flame/router.rb +23 -12
- data/lib/flame/validators.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9af50356cd5318c1e13712a1acb95b4ac713a5df
|
4
|
+
data.tar.gz: b6fc7c64f4e3f381448e9b4dff1079e8519ad79c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cdc29130ab8009c1309876e1e74e58a98b3e4709227b0cd3715abdf86f253bb19dada401c22d9fd46d249092155af3b792d2eb9b89e00709ce2789aa4ba2fec
|
7
|
+
data.tar.gz: b7555fa03d18d8a1fb9f43af2fb7a142dc44abd4bc67f8ef05d692b5bf9f7ec0811f7e2cc73541c88b3cc4cfe8a266a76a4d6efa7477aa67c38360d99a1a8f1a
|
data/lib/flame.rb
CHANGED
data/lib/flame/application.rb
CHANGED
data/lib/flame/controller.rb
CHANGED
data/lib/flame/dispatcher.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rack'
|
2
|
+
require_relative 'request'
|
2
3
|
|
3
4
|
module Flame
|
4
5
|
## Class initialize when Application.call(env) invoked
|
@@ -25,8 +26,12 @@ module Flame
|
|
25
26
|
@app.config
|
26
27
|
end
|
27
28
|
|
29
|
+
def router
|
30
|
+
@app.router
|
31
|
+
end
|
32
|
+
|
28
33
|
def request
|
29
|
-
@request ||=
|
34
|
+
@request ||= Flame::Request.new(@env)
|
30
35
|
end
|
31
36
|
|
32
37
|
def params
|
@@ -63,10 +68,9 @@ module Flame
|
|
63
68
|
|
64
69
|
def try_route
|
65
70
|
method = params['_method'] || request.request_method
|
66
|
-
path = request.path_info
|
67
71
|
route = @app.router.find_route(
|
68
72
|
method: method,
|
69
|
-
|
73
|
+
path_parts: request.path_parts
|
70
74
|
)
|
71
75
|
# p route
|
72
76
|
return nil unless route
|
data/lib/flame/route.rb
CHANGED
@@ -4,21 +4,15 @@ module Flame
|
|
4
4
|
attr_reader :attributes
|
5
5
|
|
6
6
|
def initialize(attrs = {})
|
7
|
-
@attributes = attrs
|
7
|
+
@attributes = attrs.merge(
|
8
|
+
path_parts: attrs[:path].to_s.split('/').reject(&:empty?)
|
9
|
+
)
|
8
10
|
end
|
9
11
|
|
10
12
|
def [](attribute)
|
11
13
|
@attributes[attribute]
|
12
14
|
end
|
13
15
|
|
14
|
-
## Arguments in order as parameters of method of controller
|
15
|
-
def arrange_arguments(args = {})
|
16
|
-
self[:controller].instance_method(self[:action]).parameters
|
17
|
-
.each_with_object([]) do |par, arr|
|
18
|
-
arr << args[par[1]] if par[0] == :req || args[par[1]]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
16
|
## Compare attributes for `Router.find_route`
|
23
17
|
def compare_attributes(attrs)
|
24
18
|
attrs.each do |name, value|
|
@@ -29,37 +23,41 @@ module Flame
|
|
29
23
|
|
30
24
|
## Assign arguments to path for `Controller.path_to`
|
31
25
|
def assign_arguments(args = {})
|
32
|
-
|
26
|
+
self[:path_parts]
|
33
27
|
.map { |path_part| assign_argument(path_part, args) }
|
34
28
|
.unshift('').join('/').gsub(%r{\/{2,}}, '/')
|
35
29
|
end
|
36
30
|
|
37
31
|
## Execute by Application.call
|
38
|
-
def execute(
|
39
|
-
ctrl = self[:controller].new(
|
40
|
-
|
41
|
-
|
42
|
-
ctrl.send(self[:action], *
|
32
|
+
def execute(dispatcher)
|
33
|
+
ctrl = self[:controller].new(dispatcher)
|
34
|
+
dispatcher.params.merge!(arguments(dispatcher.request.path_parts))
|
35
|
+
dispatcher.router.find_befores(self).each { |before| ctrl.send(before) }
|
36
|
+
ctrl.send(self[:action], *arranged_arguments)
|
43
37
|
end
|
44
38
|
|
45
39
|
private
|
46
40
|
|
47
|
-
##
|
48
|
-
def
|
49
|
-
|
41
|
+
## Extract arguments from request_parts for `execute`
|
42
|
+
def arguments(request_parts = nil)
|
43
|
+
unless request_parts.nil?
|
44
|
+
@args = {}
|
45
|
+
self[:path_parts].each_with_index do |path_part, i|
|
46
|
+
next unless path_part[0] == ':'
|
47
|
+
@args[
|
48
|
+
path_part[(path_part[1] == '?' ? 2 : 1)..-1].to_sym
|
49
|
+
] = URI.decode(request_parts[i])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
@args
|
50
53
|
end
|
51
54
|
|
52
|
-
##
|
53
|
-
def
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
args[
|
59
|
-
path_part[(path_part[1] == '?' ? 2 : 1)..-1].to_sym
|
60
|
-
] = URI.decode(request_parts[i])
|
61
|
-
end
|
62
|
-
args
|
55
|
+
## Arguments in order as parameters of method of controller
|
56
|
+
def arranged_arguments
|
57
|
+
self[:controller].instance_method(self[:action]).parameters
|
58
|
+
.each_with_object([]) do |par, arr|
|
59
|
+
arr << @args[par[1]] if par[0] == :req || @args[par[1]]
|
60
|
+
end
|
63
61
|
end
|
64
62
|
|
65
63
|
## Helpers for `compare_attributes`
|
@@ -67,8 +65,8 @@ module Flame
|
|
67
65
|
case name
|
68
66
|
when :method
|
69
67
|
compare_method(value)
|
70
|
-
when :
|
71
|
-
|
68
|
+
when :path_parts
|
69
|
+
compare_path_parts(value)
|
72
70
|
else
|
73
71
|
self[name] == value
|
74
72
|
end
|
@@ -78,18 +76,13 @@ module Flame
|
|
78
76
|
self[:method].upcase.to_sym == request_method.upcase.to_sym
|
79
77
|
end
|
80
78
|
|
81
|
-
def
|
82
|
-
path_parts = extract_path_parts
|
83
|
-
request_parts = extract_path_parts(request_path)
|
79
|
+
def compare_path_parts(request_parts)
|
84
80
|
# p route_path
|
85
|
-
req_path_parts = path_parts.select { |part| part[1] != '?' }
|
81
|
+
req_path_parts = self[:path_parts].select { |part| part[1] != '?' }
|
86
82
|
return false if request_parts.count < req_path_parts.count
|
87
|
-
compare_parts(request_parts, path_parts)
|
88
|
-
end
|
89
|
-
|
90
|
-
def compare_parts(request_parts, path_parts)
|
83
|
+
# compare_parts(request_parts, self[:path_parts])
|
91
84
|
request_parts.each_with_index do |request_part, i|
|
92
|
-
path_part = path_parts[i]
|
85
|
+
path_part = self[:path_parts][i]
|
93
86
|
# p request_part, path_part
|
94
87
|
break false unless path_part
|
95
88
|
next if path_part[0] == ':'
|
data/lib/flame/router.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
require_relative '
|
2
|
-
require_relative '
|
1
|
+
require_relative 'route'
|
2
|
+
require_relative 'validators'
|
3
3
|
|
4
4
|
module Flame
|
5
5
|
## Router class for routing
|
6
6
|
class Router
|
7
|
-
attr_accessor :routes
|
7
|
+
attr_accessor :routes, :befores
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@routes = []
|
11
|
+
@befores = {}
|
11
12
|
end
|
12
13
|
|
13
14
|
def add_controller(ctrl, path, block = nil)
|
@@ -15,9 +16,10 @@ module Flame
|
|
15
16
|
## TODO: Add `before` and `after` methods
|
16
17
|
|
17
18
|
## Add routes from controller to glob array
|
18
|
-
ctrl_routes = RouteRefine.new(ctrl, path, block)
|
19
|
-
ActionsValidator.new(ctrl_routes, ctrl).valid?
|
20
|
-
routes.concat(ctrl_routes)
|
19
|
+
ctrl_routes = RouteRefine.new(ctrl, path, block)
|
20
|
+
ActionsValidator.new(ctrl_routes.routes, ctrl).valid?
|
21
|
+
routes.concat(ctrl_routes.routes)
|
22
|
+
befores[ctrl] = ctrl_routes.befores
|
21
23
|
end
|
22
24
|
|
23
25
|
## Find route by any attributes
|
@@ -25,12 +27,18 @@ module Flame
|
|
25
27
|
routes.find { |route| route.compare_attributes(attrs) }
|
26
28
|
end
|
27
29
|
|
30
|
+
## Find before hook by Route
|
31
|
+
def find_befores(route)
|
32
|
+
(befores[route[:controller]][:*] || []) +
|
33
|
+
(befores[route[:controller]][route[:action]] || [])
|
34
|
+
end
|
35
|
+
|
28
36
|
private
|
29
37
|
|
30
38
|
## Helper module for routing refine
|
31
39
|
class RouteRefine
|
32
40
|
attr_accessor :rest_routes
|
33
|
-
attr_reader :routes
|
41
|
+
attr_reader :routes, :befores
|
34
42
|
|
35
43
|
def self.http_methods
|
36
44
|
[:GET, :POST, :PUT, :DELETE]
|
@@ -50,6 +58,7 @@ module Flame
|
|
50
58
|
@ctrl = ctrl
|
51
59
|
@path = path || default_controller_path
|
52
60
|
@routes = []
|
61
|
+
@befores = {}
|
53
62
|
block.nil? ? defaults : instance_exec(&block)
|
54
63
|
# p @routes
|
55
64
|
@routes.sort! { |a, b| b[:path] <=> a[:path] }
|
@@ -62,6 +71,11 @@ module Flame
|
|
62
71
|
end
|
63
72
|
end
|
64
73
|
|
74
|
+
def before(actions, action)
|
75
|
+
actions = [actions] unless actions.is_a?(Array)
|
76
|
+
actions.each { |a| (@befores[a] ||= []).push(action) }
|
77
|
+
end
|
78
|
+
|
65
79
|
def defaults
|
66
80
|
@ctrl.public_instance_methods(false).each do |action|
|
67
81
|
next if find_route_index(action: action)
|
@@ -84,11 +98,8 @@ module Flame
|
|
84
98
|
using GorillaPatch::StringExt
|
85
99
|
|
86
100
|
def default_controller_path
|
87
|
-
@ctrl.name.underscore
|
88
|
-
.
|
89
|
-
.take_while { |part| part != 'controller' }
|
90
|
-
.unshift(nil)
|
91
|
-
.join('/')
|
101
|
+
(@ctrl.name.underscore.split('_') - %w(controller ctrl))
|
102
|
+
.unshift(nil).join('/')
|
92
103
|
end
|
93
104
|
|
94
105
|
def make_path(path, action = nil, force_params = false)
|
data/lib/flame/validators.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Popov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/flame/dispatcher.rb
|
85
85
|
- lib/flame/errors.rb
|
86
86
|
- lib/flame/render.rb
|
87
|
+
- lib/flame/request.rb
|
87
88
|
- lib/flame/route.rb
|
88
89
|
- lib/flame/router.rb
|
89
90
|
- lib/flame/validators.rb
|