rackr 0.0.41 → 0.0.44

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
  SHA256:
3
- metadata.gz: 8c92b9939e63fb6f89dde70e441527279567e58ee6a9a2a490d195b093e083e0
4
- data.tar.gz: c9f0f1ab708b742d319de83e314b2f37dbe6ab0eafa85496cb3ff2ac8f333466
3
+ metadata.gz: 3e5867f9d9dab3c8331510c345df1c57e8fb00628493796b7f6b031646b0d7e3
4
+ data.tar.gz: 2a390c59f7d5a0405522f4448d94db6f9d0e8c0bee775543d017aec010844af8
5
5
  SHA512:
6
- metadata.gz: b637fb24fc243de2461370122a0228e6228537f62ce658fbaddeb12a9d30974795d33adf48029a380e4ed26fadcc8c05f4b60a6f59e855c32452af2bcf23ac3a
7
- data.tar.gz: c3e7397002bf65a165459ebcae8cc5d5976843b009f88d20e6596fa0787408ff18391de071e2d538323f92cd505478fdba37e4536e0cecb4abf48550859b70a9
6
+ metadata.gz: 8739b713136d2c97394ce64a3e45b385c5df7c4481796575d38f43411974f5e9168e2730e1f955b0608a0c3c045f95154137386a6c66107bcfaf447f335de656
7
+ data.tar.gz: c13efed3e12031b84129ce74351e710be2a6b36a49a31db2392060a88ef58631821fa4b1be9af7bf27a4e49a8e90edbb38bb5d0265a4a6fc72e3904b11f8c6ce
data/lib/rackr/action.rb CHANGED
@@ -116,7 +116,7 @@ class Rackr
116
116
  db: nil,
117
117
  response_instance: false
118
118
  )
119
- base_path = config.dig(:views, :path) || "views"
119
+ base_path = config.dig(:views, :path) || 'views'
120
120
 
121
121
  file_or_nil = lambda do |path|
122
122
  ::File.read(path)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Rackr
2
4
  module Callback
3
5
  def self.included(base)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Rackr
2
4
  class Router
3
5
  module Errors
@@ -25,13 +27,15 @@ class Rackr
25
27
  def check_as(as, path)
26
28
  return if as.is_a?(String) || as.is_a?(Symbol) || as.nil?
27
29
 
28
- raise(InvalidNamedRouteError, "as: argument in routes and branches must be a `string` or a `symbol`, got: '#{as}' for '#{path}'")
30
+ raise(InvalidNamedRouteError,
31
+ "as: argument in routes and branches must be a `string` or a `symbol`, got: '#{as}' for '#{path}'")
29
32
  end
30
33
 
31
34
  def check_callbacks(callbacks, path)
32
35
  check = lambda { |callback|
33
36
  unless callback.nil? || callback.respond_to?(:call) || (callback.respond_to?(:new) && callback.instance_methods.include?(:call))
34
- raise(InvalidCallbackError, "Callbacks must respond to a `call` method or be a class with a `call` instance method, got: '#{callback.inspect}' for '#{path}'")
37
+ raise(InvalidCallbackError,
38
+ "Callbacks must respond to a `call` method or be a class with a `call` instance method, got: '#{callback.inspect}' for '#{path}'")
35
39
  end
36
40
  }
37
41
 
@@ -43,7 +47,8 @@ class Rackr
43
47
  return
44
48
  end
45
49
 
46
- raise(InvalidEndpointError, "Endpoints must respond to a `call` method or be a class with a `call` instance method, got: '#{endpoint.inspect}' for '#{path}'")
50
+ raise(InvalidEndpointError,
51
+ "Endpoints must respond to a `call` method or be a class with a `call` instance method, got: '#{endpoint.inspect}' for '#{path}'")
47
52
  end
48
53
  end
49
54
  end
@@ -3,9 +3,15 @@
3
3
  class Rackr
4
4
  class Router
5
5
  class Route
6
- attr_reader :endpoint, :splitted_path, :has_params, :has_befores, :befores
7
-
8
- def initialize(path, endpoint, befores = [])
6
+ attr_reader :endpoint,
7
+ :splitted_path,
8
+ :has_params,
9
+ :has_befores,
10
+ :befores,
11
+ :has_afters,
12
+ :afters
13
+
14
+ def initialize(path, endpoint, befores: [], afters: [])
9
15
  @path = path
10
16
  @splitted_path = @path.split('/')
11
17
  @endpoint = endpoint
@@ -13,6 +19,8 @@ class Rackr
13
19
  @has_params = @params != []
14
20
  @befores = befores
15
21
  @has_befores = befores != []
22
+ @afters = afters
23
+ @has_afters = afters != []
16
24
  end
17
25
 
18
26
  def match?(env)
data/lib/rackr/router.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'router/errors'
2
4
  require_relative 'router/route'
3
5
  require_relative 'router/build_request'
@@ -7,7 +9,7 @@ class Rackr
7
9
  attr_writer :not_found
8
10
  attr_reader :route, :config
9
11
 
10
- def initialize(config = {})
12
+ def initialize(config = {}, before: [], after: [])
11
13
  @routes = {}
12
14
  %w[GET POST DELETE PUT TRACE OPTIONS PATCH].each do |method|
13
15
  @routes[method] = { __instances: [] }
@@ -18,8 +20,10 @@ class Rackr
18
20
  end
19
21
  @config = config
20
22
  @branches = []
21
- @befores = []
23
+ @befores = ensure_array(before)
22
24
  @branches_befores = {}
25
+ @afters = ensure_array(after)
26
+ @branches_afters = {}
23
27
  @nameds_as = []
24
28
  @branches_named_as = {}
25
29
  @error = proc { |_req, e| raise e }
@@ -43,19 +47,33 @@ class Rackr
43
47
  before_result = call_endpoint(befores[i], rack_request)
44
48
  return before_result unless before_result.is_a?(Rack::Request)
45
49
 
50
+ rack_request = before_result
51
+
52
+ i += 1
53
+ end
54
+
55
+ endpoint_result = call_endpoint(route_instance.endpoint, before_result || rack_request)
56
+
57
+ afters = route_instance.afters
58
+ i = 0
59
+ while i < afters.size
60
+ call_endpoint(afters[i], endpoint_result)
46
61
  i += 1
47
62
  end
48
63
 
49
- call_endpoint(route_instance.endpoint, before_result || rack_request)
64
+ endpoint_result
65
+ rescue Rackr::NotFound
66
+ render_not_found(request_builder.call)
50
67
  rescue Exception => e
51
68
  @error.call(request_builder.call, e)
52
69
  end
53
70
 
54
- def add(method, path, endpoint, as = nil, route_befores = [])
71
+ def add(method, path, endpoint, as: nil, route_befores: [], route_afters: [])
55
72
  Errors.check_path(path)
56
73
  Errors.check_endpoint(endpoint, path)
57
74
  Errors.check_as(as, path)
58
75
  Errors.check_callbacks(route_befores, path)
76
+ Errors.check_callbacks(route_afters, path)
59
77
 
60
78
  method = :get if method == :head
61
79
 
@@ -63,11 +81,14 @@ class Rackr
63
81
  add_named_route(path_with_branches, as)
64
82
 
65
83
  route_instance =
66
- Route.new(path_with_branches, endpoint, @befores + ensure_array(route_befores))
84
+ Route.new(
85
+ path_with_branches,
86
+ endpoint,
87
+ befores: @befores + ensure_array(route_befores),
88
+ afters: @afters + ensure_array(route_afters)
89
+ )
67
90
 
68
- if @branches.size >= 1
69
- return push_to_branch(method.to_s.upcase, route_instance)
70
- end
91
+ return push_to_branch(method.to_s.upcase, route_instance) if @branches.size >= 1
71
92
 
72
93
  @routes[method.to_s.upcase][:__instances].push(route_instance)
73
94
  end
@@ -84,10 +105,11 @@ class Rackr
84
105
  @error = endpoint
85
106
  end
86
107
 
87
- def append_branch(name, branch_befores = [], as = nil)
108
+ def append_branch(name, branch_befores: [], branch_afters: [], as: nil)
88
109
  Errors.check_branch_name(name)
89
110
  Errors.check_as(as, @branches.join('/'))
90
111
  Errors.check_callbacks(branch_befores, name)
112
+ Errors.check_callbacks(branch_afters, name)
91
113
 
92
114
  @branches.push(name)
93
115
 
@@ -95,26 +117,31 @@ class Rackr
95
117
  @befores.concat(branch_befores)
96
118
  @branches_befores[name] = branch_befores
97
119
 
120
+ branch_afters = ensure_array(branch_afters)
121
+ @afters.concat(branch_afters)
122
+ @branches_afters[name] = branch_afters
123
+
98
124
  @nameds_as.push(as)
99
125
  @branches_named_as[name] = as
100
126
  end
101
127
 
102
128
  def clear_last_branch
103
129
  @befores -= @branches_befores[@branches.last]
130
+ @afters -= @branches_afters[@branches.last]
104
131
  @nameds_as -= [@branches_named_as[@branches.last]]
105
132
  @branches = @branches.first(@branches.size - 1)
106
133
  end
107
134
 
108
135
  private
109
136
 
110
- def call_endpoint(endpoint, rack_request)
111
- return endpoint.call(rack_request) if endpoint.respond_to?(:call)
137
+ def call_endpoint(endpoint, content)
138
+ return endpoint.call(content) if endpoint.respond_to?(:call)
112
139
 
113
- if endpoint.include?(Rackr::Action)
114
- return endpoint.new(route: @route, config: @config).call(rack_request)
140
+ if endpoint.include?(Rackr::Action) || endpoint.include?(Rackr::Callback)
141
+ return endpoint.new(route: @route, config: @config).call(content)
115
142
  end
116
143
 
117
- endpoint.new.call(rack_request)
144
+ endpoint.new.call(content)
118
145
  end
119
146
 
120
147
  def ensure_array(list)
data/lib/rackr.rb CHANGED
@@ -5,10 +5,12 @@ require_relative 'rackr/action'
5
5
  require_relative 'rackr/callback'
6
6
 
7
7
  class Rackr
8
+ class NotFound < StandardError; end
9
+
8
10
  include Action
9
11
 
10
- def initialize(config = {})
11
- @router = Router.new(config)
12
+ def initialize(config = {}, before: [], after: [])
13
+ @router = Router.new(config, before: before, after: after)
12
14
  end
13
15
 
14
16
  def call(&block)
@@ -29,8 +31,13 @@ class Rackr
29
31
  @router.config[:db]
30
32
  end
31
33
 
32
- def r(name, before: [], as: nil, &block)
33
- @router.append_branch(name, before, as)
34
+ def r(name, before: [], after: [], as: nil, &block)
35
+ @router.append_branch(
36
+ name,
37
+ branch_befores: before,
38
+ branch_afters: after,
39
+ as: as
40
+ )
34
41
  instance_eval(&block)
35
42
 
36
43
  @router.clear_last_branch
@@ -53,11 +60,25 @@ class Rackr
53
60
  end
54
61
 
55
62
  %w[GET POST DELETE PUT TRACE OPTIONS PATCH].each do |http_method|
56
- define_method(http_method.downcase.to_sym) do |path = '', endpoint = -> {}, as: nil, before: nil, &block|
63
+ define_method(http_method.downcase.to_sym) do |path = '', endpoint = -> {}, as: nil, before: nil, after: nil, &block|
57
64
  if block.respond_to?(:call)
58
- @router.add(http_method, path, block, as, before)
65
+ @router.add(
66
+ http_method,
67
+ path,
68
+ block,
69
+ as: as,
70
+ route_befores: before,
71
+ route_afters: after
72
+ )
59
73
  else
60
- @router.add(http_method, path, endpoint, as, before)
74
+ @router.add(
75
+ http_method,
76
+ path,
77
+ endpoint,
78
+ as: as,
79
+ route_befores: before,
80
+ route_afters: after
81
+ )
61
82
  end
62
83
  end
63
84
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rackr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.41
4
+ version: 0.0.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrique F. Teixeira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-09 00:00:00.000000000 Z
11
+ date: 2023-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: erubi