ree_lib 1.0.39 → 1.0.41

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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -1
  3. data/lib/ree_lib/.vscode-ree/templates/spec_template.rb +1 -1
  4. data/lib/ree_lib/Packages.schema.json +4 -0
  5. data/lib/ree_lib/packages/.vscode-ree/templates/spec_template.rb +1 -1
  6. data/lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb +28 -70
  7. data/lib/ree_lib/packages/ree_actions/package/ree_actions.rb +1 -2
  8. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb +34 -65
  9. data/lib/ree_lib/packages/ree_array/spec/ree_array/functions/group_by_spec.rb +1 -1
  10. data/lib/ree_lib/packages/ree_array/spec/ree_array/functions/index_by_spec.rb +1 -1
  11. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_array.rb +57 -0
  12. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_jsonb.rb +73 -0
  13. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/build_sqlite_connection_spec.rb +1 -1
  14. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_many_spec.rb +2 -2
  15. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/one_to_one_spec.rb +2 -2
  16. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/persist_assoc_spec.rb +2 -2
  17. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_array_spec.rb +72 -0
  18. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_jsonb_spec.rb +94 -0
  19. data/lib/ree_lib/packages/ree_datetime/spec/ree_datetime/functions/in_default_time_zone_spec.rb +1 -1
  20. data/lib/ree_lib/packages/ree_dto/spec/ree_dto/entity_dsl_spec.rb +1 -1
  21. data/lib/ree_lib/packages/ree_hash/spec/ree_hash/functions/transform_values_spec.rb +1 -1
  22. data/lib/ree_lib/packages/ree_json/spec/ree_json/functions/from_json_spec.rb +1 -1
  23. data/lib/ree_lib/packages/ree_json/spec/ree_json/functions/to_json_spec.rb +1 -1
  24. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/appender_spec.rb +1 -1
  25. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/file_appender_spec.rb +3 -3
  26. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/rollbar_appender_spec.rb +1 -1
  27. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/stdout_appender_spec.rb +1 -1
  28. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/beans/logger_spec.rb +2 -2
  29. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/formatters/colorized_formatter_spec.rb +10 -7
  30. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/formatters/default_formatter_spec.rb +1 -1
  31. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/formatters/formatter_spec.rb +1 -1
  32. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/multi_logger_spec.rb +1 -1
  33. data/lib/ree_lib/packages/ree_migrator/spec/ree_migrator/functions/apply_migration_spec.rb +1 -1
  34. data/lib/ree_lib/packages/ree_migrator/spec/ree_migrator/functions/apply_migrations_spec.rb +1 -1
  35. data/lib/ree_lib/packages/ree_migrator/spec/ree_migrator/functions/migrate_db_spec.rb +1 -1
  36. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/deep_dup_spec.rb +2 -2
  37. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/deep_freeze_spec.rb +1 -1
  38. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/dump_as_json_spec.rb +1 -1
  39. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/is_blank_spec.rb +1 -1
  40. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/not_blank_spec.rb +1 -1
  41. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_hash_spec.rb +1 -1
  42. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_obj_spec.rb +8 -8
  43. data/lib/ree_lib/packages/ree_roda/Package.schema.json +14 -7
  44. data/lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_routes.rb +231 -0
  45. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/{build_action_errors.rb → build_route_errors.rb} +5 -5
  46. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_routing_tree.rb +144 -0
  47. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_routes.rb +54 -0
  48. data/lib/ree_lib/packages/ree_roda/package/ree_roda.rb +2 -2
  49. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/{build_action_errors.schema.json → build_route_errors.schema.json} +5 -5
  50. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/build_routing_tree.schema.json +28 -0
  51. data/lib/ree_lib/packages/ree_roda/schemas/ree_roda/services/{build_swagger_from_actions.schema.json → build_swagger_from_routes.schema.json} +7 -7
  52. data/lib/ree_lib/packages/ree_roda/spec/ree_roda/app_spec.rb +141 -7
  53. data/lib/ree_lib/packages/ree_roda/spec/ree_roda/services/build_routing_tree_spec.rb +261 -0
  54. data/lib/ree_lib/packages/ree_routes/.gitignore +0 -0
  55. data/lib/ree_lib/packages/ree_routes/.rspec +2 -0
  56. data/lib/ree_lib/packages/ree_routes/Package.schema.json +20 -0
  57. data/lib/ree_lib/packages/ree_routes/bin/console +5 -0
  58. data/lib/ree_lib/packages/ree_routes/package/ree_routes/dsl.rb +102 -0
  59. data/lib/ree_lib/packages/ree_routes/package/ree_routes/route.rb +10 -0
  60. data/lib/ree_lib/packages/{ree_actions/package/ree_actions/action_builder.rb → ree_routes/package/ree_routes/route_builder.rb} +15 -15
  61. data/lib/ree_lib/packages/ree_routes/package/ree_routes.rb +9 -0
  62. data/lib/ree_lib/packages/ree_routes/spec/package_schema_spec.rb +14 -0
  63. data/lib/ree_lib/packages/ree_routes/spec/ree_routes/dsl_spec.rb +93 -0
  64. data/lib/ree_lib/packages/ree_routes/spec/spec_helper.rb +3 -0
  65. data/lib/ree_lib/packages/ree_text/spec/ree_text/functions/safe_join_spec.rb +1 -1
  66. data/lib/ree_lib/packages/ree_text/spec/ree_text/functions/to_sentence_spec.rb +1 -1
  67. data/lib/ree_lib/packages/ree_validator/spec/ree_validator/functions/validate_password_spec.rb +1 -1
  68. data/lib/ree_lib/version.rb +1 -1
  69. metadata +39 -11
  70. data/lib/ree_lib/packages/ree_actions/package/ree_actions/action.rb +0 -10
  71. data/lib/ree_lib/packages/ree_actions/package/ree_actions/action_dsl.rb +0 -60
  72. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/action_dsl_spec.rb +0 -62
  73. data/lib/ree_lib/packages/ree_roda/package/ree_roda/plugins/ree_actions.rb +0 -150
  74. data/lib/ree_lib/packages/ree_roda/package/ree_roda/services/build_swagger_from_actions.rb +0 -55
@@ -0,0 +1,261 @@
1
+ # frozen_string_literal = true
2
+
3
+ RSpec.describe :build_routing_tree do
4
+ link :build_routing_tree, from: :ree_roda
5
+ link :except, from: :ree_hash
6
+ link :is_blank, from: :ree_object
7
+ link :not_blank, from: :ree_object
8
+ link :to_hash, from: :ree_object
9
+
10
+ before :all do
11
+ Ree.enable_irb_mode
12
+
13
+ module ReeRodaTestTree
14
+ include Ree::PackageDSL
15
+
16
+ package
17
+ end
18
+
19
+ class ReeRodaTestTree::Cmd
20
+ include ReeActions::DSL
21
+
22
+ action :cmd
23
+
24
+ ActionCaster = build_mapper.use(:cast) do
25
+ integer :id
26
+ integer? :task_id
27
+ end
28
+
29
+ def call(access, attrs)
30
+ end
31
+ end
32
+
33
+ class ReeRodaTestTree::TestRoutes
34
+ include ReeRoutes::DSL
35
+
36
+ routes :test_routes do
37
+ default_warden_scope :identity
38
+ opts = { from: :ree_roda_test_tree }
39
+
40
+ get "api/actions/:id" do
41
+ summary "Some action"
42
+ warden_scope :visitor
43
+ sections "some_action"
44
+ action :cmd, **opts
45
+ end
46
+
47
+ post "api/actions" do
48
+ summary "Some action"
49
+ action :cmd, **opts
50
+ end
51
+
52
+ delete "api/actions/:id" do
53
+ summary "Some action"
54
+ action :cmd, **opts
55
+ end
56
+
57
+ get "api/actions/:id/types" do
58
+ summary "Some action"
59
+ action :cmd, **opts
60
+ end
61
+
62
+ post "api/actions/:id/types" do
63
+ summary "Some action"
64
+ action :cmd, **opts
65
+ end
66
+
67
+ get "api/tasks" do
68
+ summary "Some action"
69
+ action :cmd, **opts
70
+ end
71
+
72
+ get "api/tasks/:id" do
73
+ summary "Some action"
74
+ action :cmd, **opts
75
+ end
76
+
77
+ delete "api/tasks/:task_id" do
78
+ summary "Some action"
79
+ action :cmd, **opts
80
+ end
81
+
82
+ get "api/tasks/:id/types" do
83
+ summary "Some action"
84
+ action :cmd, **opts
85
+ end
86
+
87
+ get "api/users/:id" do
88
+ summary "Some action"
89
+ action :cmd, **opts
90
+ end
91
+
92
+ get "api/users/collection/:id" do
93
+ summary "Some action"
94
+ action :cmd, **opts
95
+ end
96
+
97
+ get "api/users/collection/:id/info" do
98
+ summary "Some action"
99
+ action :cmd, **opts
100
+ end
101
+
102
+ get "api/accounts" do
103
+ summary "Some action"
104
+ action :cmd, **opts
105
+ end
106
+ end
107
+ end
108
+
109
+ class TestTreeApp < ReeRoda::App
110
+ plugin :ree_routes
111
+
112
+ ree_routes ReeRodaTestTree::TestRoutes.new
113
+
114
+ route do |r|
115
+ r.get "health" do
116
+ "success"
117
+ end
118
+
119
+ r.ree_routes
120
+ end
121
+ end
122
+ end
123
+
124
+ after :all do
125
+ Ree.disable_irb_mode
126
+ end
127
+
128
+ let(:routes) { TestTreeApp.instance_variable_get(:@ree_routes) }
129
+
130
+ let(:hsh_tree) {
131
+ {
132
+ value: "api",
133
+ depth: 0,
134
+ parent: nil,
135
+ type: :string,
136
+ children: [
137
+ {
138
+ value: "actions",
139
+ depth: 1,
140
+ parent: "api",
141
+ type: :string,
142
+ children: [
143
+ {
144
+ value: ":id",
145
+ depth: 2,
146
+ parent: "actions",
147
+ type: :param,
148
+ children: [
149
+ {
150
+ value: "types",
151
+ depth: 3,
152
+ parent: ":id",
153
+ type: :string,
154
+ children: []
155
+ }
156
+ ]
157
+ }
158
+ ]
159
+ },
160
+ {
161
+ value: "tasks",
162
+ depth: 1,
163
+ parent: "api",
164
+ type: :string,
165
+ children: [
166
+ {
167
+ value: ":id",
168
+ depth: 2,
169
+ parent: "tasks",
170
+ type: :param,
171
+ children: [
172
+ {
173
+ value: "types",
174
+ depth: 3,
175
+ parent: ":id",
176
+ type: :string,
177
+ children: []
178
+ }
179
+ ]
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ value: "users",
185
+ depth: 1,
186
+ parent: "api",
187
+ type: :string,
188
+ children: [
189
+ {
190
+ value: "collection",
191
+ depth: 2,
192
+ parent: "users",
193
+ type: :string,
194
+ children: [
195
+ {
196
+ value: ":id",
197
+ depth: 3,
198
+ parent: "collection",
199
+ type: :param,
200
+ children: [
201
+ {
202
+ value: "info",
203
+ depth: 4,
204
+ parent: ":id",
205
+ type: :string,
206
+ children: []
207
+ }
208
+ ]
209
+ }
210
+ ]
211
+ },
212
+ {
213
+ value: ":id",
214
+ depth: 2,
215
+ parent: "users",
216
+ type: :param,
217
+ children: []
218
+ }
219
+ ]
220
+ },
221
+ {
222
+ value: "accounts",
223
+ depth: 1,
224
+ parent: "api",
225
+ type: :string,
226
+ children: []
227
+ }
228
+ ]
229
+ }
230
+ }
231
+
232
+ it {
233
+ tree = build_routing_tree(routes)
234
+
235
+ # check that all end nodes have routes
236
+ # and that not end nodes don't have route
237
+ id_nodes = [*tree.find_by_value(value: ":id", depth: 2), *tree.find_by_value(value: ":id", depth: 4)]
238
+ types_node = tree.find_by_value(value: "types", depth: 3)
239
+ actions_node = tree.find_by_value(value: "actions", depth: 1)
240
+ tasks_node = tree.find_by_value(value: "tasks", depth: 1)
241
+
242
+ def count_tree_routes(tree, count = 0)
243
+ count += tree.routes.count
244
+ if tree.children.length > 0
245
+ return tree.children.map do |children|
246
+ count_tree_routes(children, count)
247
+ end.sum
248
+ end
249
+ return count
250
+ end
251
+
252
+ expect(is_blank(tree.routes)).to eq(true)
253
+ expect(not_blank(actions_node.routes)).to eq(true)
254
+ expect(not_blank(tasks_node.routes)).to eq(true)
255
+ expect(id_nodes.all? { not_blank(_1.routes) }).to eq(true)
256
+ expect(count_tree_routes(tree)).to eq(13)
257
+
258
+ hsh = to_hash(tree)
259
+ expect(except(hsh, global_except: [:routes])).to eq(hsh_tree)
260
+ }
261
+ end
File without changes
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,20 @@
1
+ {
2
+ "schema_type": "package",
3
+ "schema_version": "1.1",
4
+ "name": "ree_routes",
5
+ "entry_path": "packages/ree_routes/package/ree_routes.rb",
6
+ "tags": [
7
+ "ree_routes"
8
+ ],
9
+ "depends_on": [
10
+ {
11
+ "name": "ree_mapper"
12
+ }
13
+ ],
14
+ "env_vars": [
15
+
16
+ ],
17
+ "objects": [
18
+
19
+ ]
20
+ }
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler/setup"
3
+ require "ree"
4
+
5
+ Ree.init(__dir__, irb: true)
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "route_builder"
4
+ require "uri"
5
+
6
+ module ReeRoutes
7
+ module DSL
8
+ def self.included(base)
9
+ base.extend(ClassMethods)
10
+ end
11
+
12
+ def self.extended(base)
13
+ base.extend(ClassMethods)
14
+ end
15
+
16
+ module FactoryMethod
17
+ def build
18
+ self.class.instance_variable_get(:@routes) || []
19
+ end
20
+ end
21
+
22
+ module ClassMethods
23
+ include Ree::Contracts::Core
24
+ include Ree::Contracts::ArgContracts
25
+
26
+ def routes(name, &proc)
27
+ raise ArgumentError.new("block is required") if !block_given?
28
+
29
+ @dsl = Ree::ObjectDsl.new(
30
+ Ree.container.packages_facade, name, self, :object
31
+ )
32
+
33
+ @dsl.singleton
34
+ @dsl.factory(:build)
35
+ @dsl.tags(["routes"])
36
+
37
+ instance_exec(&proc)
38
+
39
+ klass = @dsl.object.klass
40
+ klass.send(:include, FactoryMethod)
41
+
42
+
43
+ Ree.container.compile(@dsl.package, name)
44
+ end
45
+
46
+ def default_warden_scope(method_name)
47
+ @default_warden_scope = method_name
48
+ end
49
+
50
+ [:get, :post, :put, :delete, :patch, :head, :options].each do |request_method|
51
+ define_method request_method do |path, &proc|
52
+ define_route(request_method, path, &proc)
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ contract Symbol, String, Block => ReeRoutes::Route
59
+ def define_route(request_method, path, &proc)
60
+ raise ArgumentError.new("routes should be called") if !@dsl
61
+ raise ArgumentError.new("block is required") if !block_given?
62
+
63
+ @routes ||= []
64
+
65
+ builder = ReeRoutes::RouteBuilder.new
66
+ builder.instance_exec(&proc)
67
+
68
+ if @default_warden_scope && !builder.get_route.warden_scope
69
+ builder.warden_scope(@default_warden_scope)
70
+ end
71
+
72
+ uri = URI.parse(path) rescue nil
73
+
74
+ if uri.nil? || uri.path != path
75
+ raise ArgumentError.new("invalid path provided #{path}")
76
+ end
77
+
78
+ if uri.query && !uri.query.empty?
79
+ raise ArgumentError.new("route path should not include query params: #{path}")
80
+ end
81
+
82
+ builder.get_route.path = path
83
+ builder.get_route.request_method = request_method
84
+
85
+ if !builder.get_route.valid?
86
+ raise ArgumentError.new("action, summary and auth scope should be provided for #{builder.get_route.inspect}")
87
+ end
88
+
89
+ route = builder.get_route
90
+
91
+ @dsl.link(route.action.name, from: route.action.package_name)
92
+
93
+ if route.serializer
94
+ @dsl.link(route.serializer.name, from: route.serializer.package_name)
95
+ end
96
+
97
+ @routes << route
98
+ route
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ReeRoutes::Route
4
+ attr_accessor :summary, :request_method, :serializer, :respond_to,
5
+ :sections, :action, :route, :warden_scope, :path
6
+
7
+ def valid?
8
+ !action.nil? && !summary.nil? && !warden_scope.nil?
9
+ end
10
+ end
@@ -1,65 +1,65 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "action"
3
+ require_relative "route"
4
4
 
5
- class ReeActions::ActionBuilder
5
+ class ReeRoutes::RouteBuilder
6
6
  Redirect = Struct.new(:path, :code)
7
7
 
8
8
  def initialize
9
- @action = ReeActions::Action.new
10
- @action.respond_to = :json
9
+ @route = ReeRoutes::Route.new
10
+ @route.respond_to = :json
11
11
  end
12
12
 
13
13
  contract Symbol => Symbol
14
14
  def warden_scope(scope)
15
- @action.warden_scope = scope
15
+ @route.warden_scope = scope
16
16
  end
17
17
 
18
18
  contract Symbol => Symbol
19
19
  def respond_to(v)
20
- @action.respond_to = v
20
+ @route.respond_to = v
21
21
  end
22
22
 
23
- contract None => ReeActions::Action
24
- def get_action
25
- @action
23
+ contract None => ReeRoutes::Route
24
+ def get_route
25
+ @route
26
26
  end
27
27
 
28
28
  contract Block => nil
29
29
  def before(&proc)
30
- @action.before = proc
30
+ @route.before = proc
31
31
  nil
32
32
  end
33
33
 
34
34
  contract String => String
35
35
  def summary(str)
36
- @action.summary = str
36
+ @route.summary = str
37
37
  end
38
38
 
39
39
  contract Symbol, Symbol => nil
40
40
  def serializer(name, from:)
41
41
  object = Ree.container.packages_facade.get_object(from, name)
42
- @action.serializer = object
42
+ @route.serializer = object
43
43
  nil
44
44
  end
45
45
 
46
46
  contract SplatOf[String] => nil
47
47
  def sections(*names)
48
- @action.sections = names
48
+ @route.sections = names
49
49
  nil
50
50
  end
51
51
 
52
52
  contract Symbol, Symbol => nil
53
53
  def action(name, from:)
54
54
  object = Ree.container.packages_facade.get_object(from, name)
55
- @action.action = object
55
+ @route.action = object
56
56
  nil
57
57
  end
58
58
 
59
59
  contract String, Kwargs[code: Integer] => nil
60
60
  def redirect(path, code: 301)
61
61
  raise ArgumentError if ![301, 302, 303, 307, 308].include?(code)
62
- @action.redirect = Redirect.new(path, code)
62
+ @route.redirect = Redirect.new(path, code)
63
63
  nil
64
64
  end
65
65
  end
@@ -0,0 +1,9 @@
1
+ module ReeRoutes
2
+ include Ree::PackageDSL
3
+
4
+ package do
5
+ depends_on :ree_mapper
6
+ end
7
+ end
8
+
9
+ require_relative "ree_routes/dsl"
@@ -0,0 +1,14 @@
1
+ RSpec.describe "ReeRoutes" do
2
+ it "generates package schema" do
3
+ require 'fileutils'
4
+
5
+ packages_schema_path = Ree.locate_packages_schema(__dir__)
6
+ packages_schema_dir = Pathname.new(packages_schema_path).dirname.to_s
7
+
8
+ FileUtils.cd packages_schema_dir do
9
+ expect(
10
+ system("bundle exec ree gen.package_json ree_routes --silence")
11
+ ).to eq(true)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,93 @@
1
+ package_require("ree_routes/dsl")
2
+
3
+ RSpec.describe ReeRoutes::DSL, type: [:autoclean] do
4
+ before :all do
5
+ Ree.enable_irb_mode
6
+
7
+ module ReeRoutesTest
8
+ include Ree::PackageDSL
9
+
10
+ package
11
+ end
12
+
13
+ class ReeRoutesTest::EmptyRoutes
14
+ include ReeRoutes::DSL
15
+
16
+ routes :empty_routes do
17
+ end
18
+ end
19
+
20
+ class ReeRoutesTest::Cmd
21
+ include Ree::FnDSL
22
+
23
+ fn :cmd
24
+
25
+ def call
26
+ end
27
+ end
28
+
29
+ class ReeRoutesTest::Serializer
30
+ include ReeMapper::DSL
31
+
32
+ mapper :serializer
33
+
34
+ build_mapper.use(:serialize) do
35
+ integer :id
36
+ end
37
+ end
38
+
39
+ class ReeRoutesTest::Caster
40
+ include ReeMapper::DSL
41
+
42
+ mapper :caster
43
+
44
+ build_mapper.use(:cast) do
45
+ integer :id
46
+ end
47
+ end
48
+
49
+ class ReeRoutesTest::Routes
50
+ include ReeRoutes::DSL
51
+
52
+ routes :routes do
53
+ default_warden_scope :user
54
+
55
+ post "users" do
56
+ summary "Test route"
57
+ action :cmd, from: :ree_routes_test
58
+ serializer :serializer, from: :ree_routes_test
59
+ respond_to :json
60
+ end
61
+
62
+ get "files.csv" do
63
+ summary "Test route"
64
+ action :cmd, from: :ree_routes_test
65
+ respond_to :csv
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ after :all do
72
+ Ree.disable_irb_mode
73
+ end
74
+
75
+ it {
76
+ expect(ReeRoutesTest::EmptyRoutes.new).to eq([])
77
+ }
78
+
79
+ it {
80
+ routes = ReeRoutesTest::Routes.new
81
+
82
+ expect(routes.size).to eq(2)
83
+
84
+ post_route = routes.first
85
+ csv_route = routes.last
86
+
87
+ expect(post_route.serializer.name).to eq(:serializer)
88
+ expect(post_route.action.name).to eq(:cmd)
89
+ expect(post_route.respond_to).to eq(:json)
90
+
91
+ expect(csv_route.respond_to).to eq(:csv)
92
+ }
93
+ end
@@ -0,0 +1,3 @@
1
+ RSpec.configure do |config|
2
+ config.extend Ree::RSpecLinkDSL
3
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :safe_join do
4
4
  link :safe_join, from: :ree_text
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :to_sentence do
4
4
  link :to_sentence, from: :ree_text
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  package_require('ree_validator/functions/validate_password')
4
4
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.39"
4
+ VERSION = "1.0.41"
5
5
  end