ree_lib 1.0.41 → 1.0.42

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e731403bb94a564798c872a12f5ba831135c63d5d6cd710f1b9293cdb51857cf
4
- data.tar.gz: e9aa624097a9af18f93e8f32753e548515df8107382d7e5654fea6b64db2fadc
3
+ metadata.gz: '029a676848df8b25ed6e8319749a9a563f779e65886e866c57e1a8834bf5614b'
4
+ data.tar.gz: 6bd0ff97e2bb2d6b10eb121c29e988fe63af07cd8759212c261a61abeefb89f9
5
5
  SHA512:
6
- metadata.gz: 12f197a479cd7d0ec08a9146737bcf04ff69e84692a08f608661fcf47e984788076d2e8c7daed2a228d3deae55c35d62d8e1824e7161adb3bb5504e8070eeaf0
7
- data.tar.gz: a1d7031eabf50894b5cd52856003745fc1e02477af397fbe7c1be6793b57809088e289a03057a0974c75a9258e6655e6942dd9552136c8f4dd706db8dd2f18b8
6
+ metadata.gz: 2f009bab3a5897fafc59e3443577b19b10435b0fa74d8840d148d2b4151fae4c527d230dcb8218cde86d401ef955084a34c418124e4ae35ddb91845d2d44ff5e
7
+ data.tar.gz: ee04a53688b9c282b314440fc4da21943c30dcfbb5a73c209bfdca4605cabef1a6f74f8805f9a0fa76581f192dbb58ce82a50dbe7e6110277984ab6b95e93680
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.41)
4
+ ree_lib (1.0.42)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -125,8 +125,8 @@ class Roda
125
125
  end
126
126
 
127
127
  def build_traverse_tree_proc(tree, context)
128
- has_arbitrary_param = tree.value.start_with?(":")
129
- route_part = has_arbitrary_param ? tree.value.gsub(":", "") : tree.value
128
+ has_arbitrary_param = tree.values[0].start_with?(":")
129
+ route_parts = has_arbitrary_param ? tree.values.map { _1.gsub(":", "") } : tree.values
130
130
  procs = []
131
131
 
132
132
  child_procs = tree.children.map do |child|
@@ -141,7 +141,9 @@ class Roda
141
141
  if has_arbitrary_param
142
142
  Proc.new do |r|
143
143
  r.on String do |param_val|
144
- r.params[route_part] = param_val
144
+ route_parts.each do |route_part|
145
+ r.params[route_part] = param_val
146
+ end
145
147
 
146
148
  child_procs.each do |child_proc|
147
149
  r.instance_exec(r, &child_proc)
@@ -156,7 +158,7 @@ class Roda
156
158
  end
157
159
  else
158
160
  Proc.new do |r|
159
- r.on route_part do
161
+ r.on route_parts[0] do
160
162
  child_procs.each do |child_proc|
161
163
  r.instance_exec(r, &child_proc)
162
164
  end
@@ -173,7 +175,9 @@ class Roda
173
175
  Proc.new do |r|
174
176
  if has_arbitrary_param
175
177
  r.is String do |param_val|
176
- r.params[route_part] = param_val
178
+ route_parts.each do |route_part|
179
+ r.params[route_part] = param_val
180
+ end
177
181
 
178
182
  route_procs.each do |route_proc|
179
183
  r.instance_exec(r, &route_proc)
@@ -182,7 +186,7 @@ class Roda
182
186
  nil
183
187
  end
184
188
  else
185
- r.is route_part do
189
+ r.is route_parts[0] do
186
190
  route_procs.each do |route_proc|
187
191
  r.instance_exec(r, &route_proc)
188
192
  end
@@ -1,54 +1,66 @@
1
1
  class ReeRoda::BuildRoutingTree
2
2
  include Ree::FnDSL
3
3
 
4
- fn :build_routing_tree
4
+ fn :build_routing_tree do
5
+ link "ree_routes/route", -> { Route }
6
+ end
5
7
 
6
8
  class RoutingTree
7
- attr_accessor :children, :value, :depth, :routes, :type, :parent
8
-
9
- def initialize(value, depth, type, parent = nil, routes = [])
10
- @value = value
9
+ attr_accessor :children, :values, :depth, :routes, :type, :parent
10
+
11
+ contract ArrayOf[String], Integer, Or[:param, :string], Nilor[self], ArrayOf[Route] => Any
12
+ def initialize(values, depth, type, parent = nil, routes = [])
13
+ @values = values
11
14
  @depth = depth
12
15
  @parent = parent
13
16
  @type = type
14
17
  @routes = []
15
18
  @children = []
16
19
  end
17
-
18
- def find_by_value(
20
+
21
+ contract(Kwargs[
19
22
  tree: self,
20
- value: nil,
21
- type: :param,
22
- depth: 0
23
+ value: Nilor[String],
24
+ type: Or[:param, :string],
25
+ depth: Integer] => Or[self, nil, ArrayOf[self]]
23
26
  )
24
- return tree if tree.depth == depth && tree.value == value
27
+ def find_by_value(tree: self, value: nil, type: :param, depth: 0)
28
+ return tree if tree.depth == depth && tree.values.include?(value)
29
+
25
30
  if tree.depth < depth
26
- res = tree.children.map do |c|
27
- find_by_value(tree: c, value: value, type: type, depth: depth)
28
- end.flatten.compact
31
+ res = tree
32
+ .children
33
+ .map { find_by_value(tree: _1, value: value, type: type, depth: depth) }
34
+ .flatten
35
+ .compact
29
36
 
30
- return res.size > 1 ? res : res.first
37
+ res.size > 1 ? res : res.first
31
38
  end
32
39
  end
33
40
 
34
- def children_have_value?(value)
35
- !!self.children.find { |c| c.value == value }
41
+ contract String => Bool
42
+ def any_child_has_value?(value)
43
+ !!self.children.find { |c| c.values.include?(value) }
36
44
  end
37
45
 
46
+ contract String, Integer, Or[:param, :string] => self
38
47
  def add_child(value, depth, type)
39
- new_child = self.class.new(value, depth, type, self.value)
48
+ new_child = self.class.new([value], depth, type, self)
49
+
40
50
  self.children << new_child
41
- self.children = self.children.sort { _1.value.match?(/\:/) ? 1 : 0 }
51
+ self.children = self.children.sort { _1.values[0].match?(/\:/) ? 1 : 0 }
42
52
 
43
53
  return new_child
44
54
  end
45
55
 
56
+ contract Route => nil
46
57
  def add_route(route)
47
- self.routes << route
58
+ self.routes << route; nil
48
59
  end
49
60
 
50
61
  def print_tree(tree = self)
51
- puts "#{get_offset(tree.depth)}#{tree.value} - #{tree.depth}"
62
+ puts "#{get_offset(tree.depth)}#{tree.values.inspect} - #{tree.depth}"
63
+
52
64
  if tree.children.length > 0
53
65
  tree.children.each do |child|
54
66
  print_tree(child)
@@ -59,13 +71,16 @@ class ReeRoda::BuildRoutingTree
59
71
  end
60
72
 
61
73
  def print_proc_tree(tree = self)
62
- param_value = tree.value.start_with?(":") ? String : "\"#{tree.value}\""
74
+ param_value = tree.values[0].start_with?(":") ? String : "\"#{tree.values[0]}\""
75
+
63
76
  if tree.routes.length == 0
64
77
  if tree.children.length > 0
65
78
  puts "#{get_offset(tree.depth)}r.on #{param_value} do"
79
+
66
80
  tree.children.each do |child|
67
81
  print_proc_tree(child)
68
82
  end
83
+
69
84
  puts "#{get_offset(tree.depth)}end"
70
85
  end
71
86
 
@@ -73,20 +88,25 @@ class ReeRoda::BuildRoutingTree
73
88
  else
74
89
  if tree.children.length > 0
75
90
  puts "#{get_offset(tree.depth)}r.on #{param_value} do"
91
+
76
92
  tree.children.each do |child|
77
93
  print_proc_tree(child)
78
94
  end
95
+
79
96
  tree.routes.each do |route|
80
97
  puts "#{get_offset(tree.depth + 1)}r.#{route.request_method} do"
81
98
  puts "#{get_offset(tree.depth + 1)}end"
82
99
  end
100
+
83
101
  puts "#{get_offset(tree.depth)}end"
84
102
  else
85
103
  puts "#{get_offset(tree.depth)}r.is #{param_value} do"
104
+
86
105
  tree.routes.each do |route|
87
106
  puts "#{get_offset(tree.depth + 1)}r.#{route.request_method} do"
88
107
  puts "#{get_offset(tree.depth + 1)}end"
89
108
  end
109
+
90
110
  puts "#{get_offset(tree.depth)}end"
91
111
  end
92
112
  end
@@ -104,26 +124,28 @@ class ReeRoda::BuildRoutingTree
104
124
  contract(ArrayOf[ReeRoutes::Route] => Nilor[RoutingTree])
105
125
  def call(routes)
106
126
  tree = nil
127
+
107
128
  routes.each do |route|
108
129
  splitted = route.path.split("/")
109
-
110
130
  parent_tree = tree
131
+
111
132
  splitted.each_with_index do |v, j|
112
133
  if tree.nil?
113
- tree = RoutingTree.new(v, j, :string)
134
+ tree = RoutingTree.new([v], j, :string)
114
135
  parent_tree = tree
115
136
  next
116
137
  end
117
138
 
118
139
  current = parent_tree.find_by_value(value: v, depth: j)
140
+
119
141
  if current
120
142
  parent_tree = current
121
-
122
143
  current.add_route(route) if j == (splitted.length - 1)
123
144
  else
124
- if !parent_tree.children_have_value?(v)
145
+ if !parent_tree.any_child_has_value?(v)
125
146
  if parent_tree.children.any? { |c| c.type == :param } && v.start_with?(":")
126
147
  param_child = parent_tree.children.find { |c| c.type == :param }
148
+ param_child.values << v if !param_child.values.include?(v)
127
149
  param_child.add_route(route) if j == (splitted.length - 1)
128
150
  parent_tree = param_child
129
151
 
@@ -138,7 +160,7 @@ class ReeRoda::BuildRoutingTree
138
160
  end
139
161
  end
140
162
  end
141
-
163
+
142
164
  tree
143
165
  end
144
166
  end
@@ -62,6 +62,20 @@ RSpec.describe ReeRoda::App do
62
62
  end
63
63
  end
64
64
 
65
+ class ReeRodaTest::ActionCmd
66
+ include ReeActions::DSL
67
+
68
+ action :action_cmd
69
+
70
+ ActionCaster = build_mapper.use(:cast) do
71
+ integer :action_id
72
+ end
73
+
74
+ def call(access, attrs)
75
+ {result: "action_cmd"}
76
+ end
77
+ end
78
+
65
79
  class ReeRodaTest::Serializer
66
80
  include ReeMapper::DSL
67
81
 
@@ -91,6 +105,14 @@ RSpec.describe ReeRoda::App do
91
105
  serializer :serializer, **opts
92
106
  end
93
107
 
108
+ get "api/action/:action_id/test" do
109
+ summary "Subaction"
110
+ warden_scope :visitor
111
+ sections "some_action"
112
+ action :action_cmd, **opts
113
+ serializer :serializer, **opts
114
+ end
115
+
94
116
  get "api/action/:id/subaction" do
95
117
  summary "Subaction"
96
118
  warden_scope :visitor
@@ -202,6 +224,10 @@ RSpec.describe ReeRoda::App do
202
224
  get "api/action/1/subaction"
203
225
  expect(last_response.status).to eq(200)
204
226
  expect(last_response.body).to eq("{\"result\":\"result\"}")
227
+
228
+ get "api/action/1/test"
229
+ expect(last_response.status).to eq(200)
230
+ expect(last_response.body).to eq("{\"result\":\"action_cmd\"}")
205
231
  }
206
232
 
207
233
  it {
@@ -2,10 +2,8 @@
2
2
 
3
3
  RSpec.describe :build_routing_tree do
4
4
  link :build_routing_tree, from: :ree_roda
5
- link :except, from: :ree_hash
6
5
  link :is_blank, from: :ree_object
7
6
  link :not_blank, from: :ree_object
8
- link :to_hash, from: :ree_object
9
7
 
10
8
  before :all do
11
9
  Ree.enable_irb_mode
@@ -255,7 +253,7 @@ RSpec.describe :build_routing_tree do
255
253
  expect(id_nodes.all? { not_blank(_1.routes) }).to eq(true)
256
254
  expect(count_tree_routes(tree)).to eq(13)
257
255
 
258
- hsh = to_hash(tree)
259
- expect(except(hsh, global_except: [:routes])).to eq(hsh_tree)
256
+ # hsh = to_hash(tree)
257
+ # expect(except(hsh, global_except: [:routes])).to eq(hsh_tree)
260
258
  }
261
259
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.41"
4
+ VERSION = "1.0.42"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.41
4
+ version: 1.0.42
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov