ree_lib 1.0.39 → 1.0.40

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 +53 -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 +64 -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
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  package_require('ree_dto/entity_dsl')
4
4
 
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :transform_values do
4
4
  link :transform_values, from: :ree_hash
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :from_json do
4
4
  link :from_json, from: :ree_json
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :to_json do
4
4
  link :to_json, from: :ree_json
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  package_require('ree_logger/appenders/appender')
4
4
 
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  package_require('ree_logger/appenders/file_appender')
4
4
 
@@ -20,7 +20,7 @@ RSpec.describe ReeLogger::FileAppender do
20
20
 
21
21
  before(:all) do
22
22
  tmp_file_log = ENV['LOG_FILE_PATH']
23
-
23
+
24
24
  if !is_blank(tmp_file_log)
25
25
  File.open(tmp_file_log, 'w') {|file| file.truncate(0) }
26
26
  end
@@ -28,7 +28,7 @@ RSpec.describe ReeLogger::FileAppender do
28
28
 
29
29
  after(:all) do
30
30
  tmp_file_log = ENV['LOG_FILE_PATH']
31
-
31
+
32
32
  if !is_blank(tmp_file_log)
33
33
  File.open(tmp_file_log, 'w') {|file| file.truncate(0) }
34
34
  end
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  package_require('ree_logger/appenders/rollbar_appender')
4
4
 
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  package_require('ree_logger/appenders/stdout_appender')
4
4
 
@@ -1,10 +1,10 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  package_require('ree_logger/beans/logger')
4
4
 
5
5
  RSpec.describe :logger do
6
- link :logger, from: :ree_logger
7
6
  link :is_blank, from: :ree_object
7
+ link :logger, from: :ree_logger
8
8
 
9
9
  before(:all) do
10
10
  tmp_file_log = ENV['LOG_FILE_PATH']
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  require 'timecop'
4
4
  package_require('ree_logger/formatters/colorized_formatter')
@@ -32,17 +32,20 @@ RSpec.describe ReeLogger::ColorizedFormatter do
32
32
  it { expect(formatter).to respond_to(:format) }
33
33
 
34
34
  it {
35
- expected = "[05/11/05 00:00:00] \e[36minfo:\e[0m Some message"
36
- expect(formatter.format(info_log_event, nil)).to eq(expected)
35
+ expect(formatter.format(info_log_event, nil))
36
+ .to eq("[05/11/05 00:00:00] \e[36minfo:\e[0m Some message")
37
+ .or eq("[05/11/05 00:00:00] info: Some message")
37
38
  }
38
39
 
39
40
  it {
40
- expected = "[SomeCoolApp] [05/11/05 00:00:00] \e[36minfo:\e[0m Some message"
41
- expect(formatter.format(info_log_event, "SomeCoolApp")).to eq(expected)
41
+ expect(formatter.format(info_log_event, "SomeCoolApp"))
42
+ .to eq("[SomeCoolApp] [05/11/05 00:00:00] \e[36minfo:\e[0m Some message")
43
+ .or eq("[SomeCoolApp] [05/11/05 00:00:00] info: Some message")
42
44
  }
43
45
 
44
46
  it {
45
- expected = "[05/11/05 00:00:00] \e[31merror:\e[0m Some error message\n\e[34mPARAMETERS:\e[0m {:some_error=>\"params\"}\n\e[31mEXCEPTION:\e[0m StandardError (Help me, I am error)\n"
46
- expect(formatter.format(error_log_event, nil)).to eq(expected)
47
+ expect(formatter.format(error_log_event, nil))
48
+ .to eq("[05/11/05 00:00:00] \e[31merror:\e[0m Some error message\n\e[34mPARAMETERS:\e[0m {:some_error=>\"params\"}\n\e[31mEXCEPTION:\e[0m StandardError (Help me, I am error)\n")
49
+ .or eq("[05/11/05 00:00:00] error: Some error message\nPARAMETERS: {:some_error=>\"params\"}\nEXCEPTION: StandardError (Help me, I am error)\n")
47
50
  }
48
51
  end
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  require 'timecop'
4
4
  package_require('ree_logger/formatters/default_formatter')
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  package_require('ree_logger/formatters/formatter')
4
4
 
@@ -1,4 +1,4 @@
1
- #frozen_string_literal = true
1
+ #frozen_string_literal: true
2
2
 
3
3
  require 'rollbar'
4
4
  package_require('ree_logger/multi_logger')
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :apply_migration do
4
4
  link :apply_migration, from: :ree_migrator
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  package_require('ree_migrator/functions/apply_migrations')
4
4
 
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :migrate_db do
4
4
  link :migrate_db, from: :ree_migrator
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :deep_dup do
4
4
  link :deep_dup, from: :ree_object
@@ -15,7 +15,7 @@ RSpec.describe :deep_dup do
15
15
  @hash = {id: 1, 'test' => 2}
16
16
  @hash.default = "default"
17
17
  @object = Object.new
18
- end
18
+ end
19
19
  end
20
20
  }
21
21
 
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :deep_freeze do
4
4
  link :deep_freeze, from: :ree_object
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :dump_as_json do
4
4
  link :dump_as_json, from: :ree_object
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :is_blank do
4
4
  link :is_blank, from: :ree_object
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :not_blank do
4
4
  link :not_blank, from: :ree_object
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :to_hash do
4
4
  link :to_hash, from: :ree_object
@@ -1,4 +1,4 @@
1
- # frozen_string_literal = true
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe :to_obj do
4
4
  link :to_obj, from: :ree_object
@@ -17,7 +17,7 @@ RSpec.describe :to_obj do
17
17
  @last_name = 'Doe'
18
18
  @pass = 'pass'
19
19
  end
20
- end
20
+ end
21
21
  end
22
22
  }
23
23
 
@@ -39,7 +39,7 @@ RSpec.describe :to_obj do
39
39
  context "Struct" do
40
40
  it {
41
41
  obj = to_obj(Struct.new(:id, :name).new(1, 'John'))
42
-
42
+
43
43
  expect(obj.name).to eq('John')
44
44
  expect(obj.id).to eq(1)
45
45
  }
@@ -72,7 +72,7 @@ RSpec.describe :to_obj do
72
72
  expect(obj.settings.class).to be_a(Object)
73
73
  expect(obj2.name).to eq("John")
74
74
  expect(obj2.settings.class).to be_a(Object)
75
- }
75
+ }
76
76
  end
77
77
 
78
78
  context "custom object" do
@@ -87,7 +87,7 @@ RSpec.describe :to_obj do
87
87
  obj = klass.new(1, object)
88
88
 
89
89
  result = to_obj(obj)
90
-
90
+
91
91
  expect(result.id).to eq(1)
92
92
  expect(result.object.list[0]).to eq(1)
93
93
  expect(result.object.list[1]).to eq('string')
@@ -113,7 +113,7 @@ RSpec.describe :to_obj do
113
113
 
114
114
  expect(obj.respond_to?(:name)).to be false
115
115
  expect(obj.respond_to?(:work)).to be true
116
- }
116
+ }
117
117
 
118
118
  it {
119
119
  obj = to_obj(klass.new, exclude: [:name, {settings: [:pass]}])
@@ -121,7 +121,7 @@ RSpec.describe :to_obj do
121
121
  expect(obj.respond_to?(:name)).to be false
122
122
  expect(obj.respond_to?(:work)).to be true
123
123
  expect(obj.settings.respond_to?(:pass)).to be false
124
- }
124
+ }
125
125
  end
126
126
 
127
127
  context "global exclude option" do
@@ -133,7 +133,7 @@ RSpec.describe :to_obj do
133
133
  expect(obj.settings.respond_to?(:name)).to be false
134
134
  expect(obj.array[3].last_name).to eq('Doe')
135
135
  expect(obj.array[3].respond_to?(:name)).to be false
136
- }
136
+ }
137
137
  end
138
138
 
139
139
  context "include option" do
@@ -7,9 +7,6 @@
7
7
  "ree_roda"
8
8
  ],
9
9
  "depends_on": [
10
- {
11
- "name": "ree_actions"
12
- },
13
10
  {
14
11
  "name": "ree_errors"
15
12
  },
@@ -25,6 +22,9 @@
25
22
  {
26
23
  "name": "ree_object"
27
24
  },
25
+ {
26
+ "name": "ree_routes"
27
+ },
28
28
  {
29
29
  "name": "ree_swagger"
30
30
  }
@@ -34,15 +34,22 @@
34
34
  ],
35
35
  "objects": [
36
36
  {
37
- "name": "build_action_errors",
38
- "schema": "packages/ree_roda/schemas/ree_roda/services/build_action_errors.schema.json",
37
+ "name": "build_route_errors",
38
+ "schema": "packages/ree_roda/schemas/ree_roda/services/build_route_errors.schema.json",
39
+ "tags": [
40
+ "fn"
41
+ ]
42
+ },
43
+ {
44
+ "name": "build_routing_tree",
45
+ "schema": "packages/ree_roda/schemas/ree_roda/services/build_routing_tree.schema.json",
39
46
  "tags": [
40
47
  "fn"
41
48
  ]
42
49
  },
43
50
  {
44
- "name": "build_swagger_from_actions",
45
- "schema": "packages/ree_roda/schemas/ree_roda/services/build_swagger_from_actions.schema.json",
51
+ "name": "build_swagger_from_routes",
52
+ "schema": "packages/ree_roda/schemas/ree_roda/services/build_swagger_from_routes.schema.json",
46
53
  "tags": [
47
54
  "fn"
48
55
  ]
@@ -0,0 +1,231 @@
1
+ class Roda
2
+ module RodaPlugins
3
+ module ReeRoutes
4
+ def self.load_dependencies(app, opts = {})
5
+ package_require("ree_roda/services/build_routing_tree")
6
+ package_require("ree_roda/services/build_swagger_from_routes")
7
+ package_require("ree_json/functions/to_json")
8
+ package_require("ree_hash/functions/transform_values")
9
+ package_require("ree_object/functions/not_blank")
10
+
11
+ app.plugin :all_verbs
12
+ end
13
+
14
+ def self.configure(app, opts = {})
15
+ app.opts[:ree_routes_before] = opts[:before] if opts[:before]
16
+ end
17
+
18
+ module ClassMethods
19
+ def ree_routes(routes, swagger_title: "", swagger_description: "",
20
+ swagger_version: "", swagger_url: "", api_url: "")
21
+ @ree_routes ||= []
22
+ @ree_routes += routes
23
+
24
+ opts[:ree_routes_swagger_title] = swagger_title
25
+ opts[:ree_routes_swagger_description] = swagger_description
26
+ opts[:ree_routes_swagger_version] = swagger_version
27
+ opts[:ree_routes_swagger_url] = swagger_url
28
+ opts[:ree_routes_api_url] = api_url
29
+
30
+ opts[:ree_routes_swagger] = ReeRoda::BuildSwaggerFromRoutes.new.call(
31
+ @ree_routes,
32
+ opts[:ree_routes_swagger_title],
33
+ opts[:ree_routes_swagger_description],
34
+ opts[:ree_routes_swagger_version],
35
+ opts[:ree_routes_api_url]
36
+ )
37
+
38
+ build_routes_proc
39
+ nil
40
+ end
41
+
42
+ private
43
+
44
+ def build_routes_proc
45
+ list = []
46
+ context = self
47
+
48
+ return list if @ree_routes.nil? || @ree_routes.empty?
49
+
50
+ if context.opts[:ree_routes_swagger_url]
51
+ list << Proc.new do |r|
52
+ r.get context.opts[:ree_routes_swagger_url] do
53
+ r.json do
54
+ response.status = 200
55
+ ReeJson::ToJson.new.call(context.opts[:ree_routes_swagger])
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ routing_tree = ReeRoda::BuildRoutingTree.new.call(@ree_routes)
62
+ route_tree_proc = build_traverse_tree_proc(routing_tree, context)
63
+
64
+ list << Proc.new do |r|
65
+ r.instance_exec(r, &route_tree_proc)
66
+ end
67
+
68
+ opts[:ree_routes_proc] = list
69
+ end
70
+
71
+ def route_proc(route, context)
72
+ Proc.new do |r|
73
+ r.send(route.request_method) do
74
+ r.send(route.respond_to) do
75
+ r.env["warden"].authenticate!(scope: route.warden_scope)
76
+
77
+ if context.opts[:ree_routes_before]
78
+ r.instance_exec(@_request, route.warden_scope, &r.scope.opts[:ree_routes_before])
79
+ end
80
+
81
+ # TODO: implement me when migration to roda DSL happens
82
+ # if route.before; end
83
+
84
+ params = r.params
85
+
86
+ if r.body
87
+ body = begin
88
+ JSON.parse(r.body.read)
89
+ rescue => e
90
+ {}
91
+ end
92
+
93
+ params = params.merge(body)
94
+ end
95
+
96
+ not_blank = ReeObject::NotBlank.new
97
+
98
+ filtered_params = ReeHash::TransformValues.new.call(params) do |k, v|
99
+ v.is_a?(Array) ? v.select { not_blank.call(_1) } : v
100
+ end
101
+
102
+ accessor = r.env["warden"].user(route.warden_scope)
103
+ action_result = get_cached_action(route).call(accessor, filtered_params)
104
+
105
+ if route.serializer
106
+ serialized_result = get_cached_serializer(route).serialize(action_result)
107
+ else
108
+ serialized_result = {}
109
+ end
110
+
111
+ case route.request_method
112
+ when :post
113
+ r.response.status = 201
114
+ ReeJson::ToJson.new.call(serialized_result)
115
+ when :put, :delete, :patch
116
+ r.response.status = 204
117
+ ""
118
+ else
119
+ r.response.status = 200
120
+ ReeJson::ToJson.new.call(serialized_result)
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+
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
130
+ procs = []
131
+
132
+ child_procs = tree.children.map do |child|
133
+ build_traverse_tree_proc(child, context)
134
+ end
135
+
136
+ route_procs = tree.routes.map do |route|
137
+ route_proc(route, context)
138
+ end
139
+
140
+ procs << if tree.children.length > 0
141
+ if has_arbitrary_param
142
+ Proc.new do |r|
143
+ r.on String do |param_val|
144
+ r.params[route_part] = param_val
145
+
146
+ child_procs.each do |child_proc|
147
+ r.instance_exec(r, &child_proc)
148
+ end
149
+
150
+ route_procs.each do |route_proc|
151
+ r.instance_exec(r, &route_proc)
152
+ end
153
+
154
+ nil
155
+ end
156
+ end
157
+ else
158
+ Proc.new do |r|
159
+ r.on route_part do
160
+ child_procs.each do |child_proc|
161
+ r.instance_exec(r, &child_proc)
162
+ end
163
+
164
+ route_procs.each do |route_proc|
165
+ r.instance_exec(r, &route_proc)
166
+ end
167
+
168
+ nil
169
+ end
170
+ end
171
+ end
172
+ else
173
+ Proc.new do |r|
174
+ if has_arbitrary_param
175
+ r.is String do |param_val|
176
+ r.params[route_part] = param_val
177
+
178
+ route_procs.each do |route_proc|
179
+ r.instance_exec(r, &route_proc)
180
+ end
181
+
182
+ nil
183
+ end
184
+ else
185
+ r.is route_part do
186
+ route_procs.each do |route_proc|
187
+ r.instance_exec(r, &route_proc)
188
+ end
189
+
190
+ nil
191
+ end
192
+ end
193
+ end
194
+ end
195
+
196
+ Proc.new do |r|
197
+ procs.each do |proc|
198
+ r.instance_exec(r, &proc)
199
+ end
200
+ end
201
+ end
202
+ end
203
+
204
+ module RequestMethods
205
+ @@_actions_cache = {}
206
+ @@_route_serializers_cache = {}
207
+
208
+ def ree_routes
209
+ if scope.opts[:ree_routes_proc]
210
+ scope.opts[:ree_routes_proc].each do |request_proc|
211
+ self.instance_exec(self, &request_proc)
212
+ end
213
+ end
214
+ nil
215
+ end
216
+
217
+ private
218
+
219
+ def get_cached_action(route)
220
+ @@_actions_cache[route.action.object_id] ||= route.action.klass.new
221
+ end
222
+
223
+ def get_cached_serializer(route)
224
+ @@_route_serializers_cache[route.serializer.object_id] ||= route.serializer.klass.new
225
+ end
226
+ end
227
+ end
228
+
229
+ register_plugin(:ree_routes, Roda::RodaPlugins::ReeRoutes)
230
+ end
231
+ end
@@ -1,13 +1,13 @@
1
- class ReeRoda::BuildActionErrors
1
+ class ReeRoda::BuildRouteErrors
2
2
  include Ree::FnDSL
3
3
 
4
- fn :build_action_errors do
4
+ fn :build_route_errors do
5
5
  link "ree_swagger/dto/error_dto", -> { ErrorDto }
6
6
  end
7
7
 
8
- contract(ReeActions::Action => ArrayOf[ErrorDto])
9
- def call(action)
10
- ree_object = action.action
8
+ contract(ReeRoutes::Route => ArrayOf[ErrorDto])
9
+ def call(route)
10
+ ree_object = route.action
11
11
  errors = recursively_extract_errors(ree_object)
12
12
 
13
13
  errors