ree_lib 1.0.41 → 1.0.42

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: 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