rivulet-rb 0.3.1 → 0.3.2

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: 002b318ec0a9c3870c5a4bc079af55e5465aa220e48c7f45f8550a8329d940f3
4
- data.tar.gz: 12a8390d911990d023b8544c19792e5b04197ac9a8dcc202a752ac6e5c429b55
3
+ metadata.gz: e4b42dc6a74dc928bb126b9cb6802b096b1b59b83b5c6ff0773ca1ed8922199a
4
+ data.tar.gz: f00390412a9018f6ef39ea9293ff62b3920107c26070cd6a7a6c7bfe9e3512e6
5
5
  SHA512:
6
- metadata.gz: fa32444e438ebba963ff30844d294591fbfdfd57fa887d336bc637203f939aa20accf5d8dcf5967513c5d16db7c2ea617c4eec2303e6478941cfad038c1a46cd
7
- data.tar.gz: 13643f0d76a49ad2df6d68b1168d54282005eddc5a3f4b8c8081677912b816c28361132b6bf774b56b741a4b80cb7609dff8a171f910e1ff4435027370ed6c99
6
+ metadata.gz: e8dc3048c25021f16dd148ce023235ae01abf8655e8b0dfebd0761a9aa2c600164aaeb6143019c3fbfb4233d2efe784d28a574d28f0d1e799c352df6bb413398
7
+ data.tar.gz: 4ad74647d4a0a32b274672998ca6e8413f2bd03c7111f684b151e252d8ffae537feab8362b050babaa4957a50e053e6b5474ed248f3d78dc4a06b875225af812
@@ -214,7 +214,7 @@ module Rivulet
214
214
  volumes:
215
215
  - db:/var/lib/postgresql/data
216
216
  healthcheck:
217
- test: ["CMD-SHELL", "pg_isready -U rivulet"]
217
+ test: ["CMD-SHELL", "pg_isready -U rivulet -d #{name}_development"]
218
218
  interval: 5s
219
219
  timeout: 3s
220
220
  retries: 5
@@ -24,6 +24,7 @@ module Rivulet
24
24
  register('run_migrations') { Rivulet::Steps::RunMigrations.new }
25
25
  register('run_console') { Rivulet::Steps::RunConsole.new }
26
26
  register('print_routes') { Rivulet::Steps::PrintRoutes.new }
27
+ register('freeze_settings') { Rivulet::Steps::FreezeSettings.new }
27
28
  end
28
29
  end
29
30
  end
@@ -8,6 +8,7 @@ module Rivulet
8
8
  load_db: 'steps.load_db',
9
9
  load_routes: 'steps.load_routes',
10
10
  load_initializers: 'steps.load_initializers',
11
+ freeze_settings: 'steps.freeze_settings',
11
12
  run_console: 'steps.run_console'
12
13
  ]
13
14
 
@@ -18,6 +19,7 @@ module Rivulet
18
19
  result = step load_app.(result)
19
20
  result = step load_routes.(result)
20
21
  result = step load_initializers.(result)
22
+ result = step freeze_settings.(result)
21
23
  result = step run_console.(result)
22
24
 
23
25
  result
@@ -7,7 +7,8 @@ module Rivulet
7
7
  load_app: 'steps.load_app',
8
8
  load_db: 'steps.load_db',
9
9
  load_routes: 'steps.load_routes',
10
- load_initializers: 'steps.load_initializers'
10
+ load_initializers: 'steps.load_initializers',
11
+ freeze_settings: 'steps.freeze_settings'
11
12
  ]
12
13
 
13
14
  def call(input = {})
@@ -17,6 +18,7 @@ module Rivulet
17
18
  result = step load_app.(result)
18
19
  result = step load_routes.(result)
19
20
  result = step load_initializers.(result)
21
+ result = step freeze_settings.(result)
20
22
 
21
23
  result
22
24
  end
@@ -1,11 +1,12 @@
1
1
  module Rivulet
2
2
  class Request
3
- attr_reader :http_method, :path, :content_type, :body, :session, :env
3
+ attr_reader :http_method, :path, :content_type, :query_string, :body, :session, :env
4
4
 
5
5
  def initialize(env)
6
6
  @http_method = env['REQUEST_METHOD'].downcase.to_sym
7
7
  @path = env['PATH_INFO']
8
8
  @content_type = env['CONTENT_TYPE']
9
+ @query_string = env['QUERY_STRING']
9
10
  @body = env['rack.input']
10
11
  @session = env['rack.session']
11
12
  @env = env
@@ -14,5 +15,29 @@ module Rivulet
14
15
  def cookies
15
16
  Rack::Utils.parse_cookies(env)
16
17
  end
18
+
19
+ def query_params
20
+ Rack::Utils
21
+ .parse_nested_query(query_string)
22
+ .then { |params| deep_symbolize_keys(params) }
23
+ end
24
+
25
+ def body_params
26
+ return {} unless content_type&.include?('application/json')
27
+ raw = body.read
28
+ return {} if raw.nil? || raw.empty?
29
+ Oj.load(raw, symbolize_names: true)
30
+ rescue Oj::ParseError
31
+ {}
32
+ end
33
+
34
+ private
35
+
36
+ def deep_symbolize_keys(hash)
37
+ hash.each_with_object({}) do |(key, val), result|
38
+ val = deep_symbolize_keys(val) if val.is_a? Hash
39
+ result[key.to_sym] = val
40
+ end
41
+ end
17
42
  end
18
43
  end
@@ -31,17 +31,9 @@ module Rivulet
31
31
 
32
32
  def build_params(route, request, path_match)
33
33
  path_params = extract_params(route, path_match)
34
- body_params = parse_body(request)
35
- body_params.merge(path_params)
36
- end
37
-
38
- def parse_body(request)
39
- return {} unless request.content_type&.include?('application/json')
40
- raw = request.body.read
41
- return {} if raw.nil? || raw.empty?
42
- Oj.load(raw, symbolize_names: true)
43
- rescue Oj::ParseError
44
- {}
34
+ body_params = request.body_params
35
+ query_params = request.query_params
36
+ query_params.merge(body_params, path_params)
45
37
  end
46
38
 
47
39
  def find_route(routes, request)
@@ -10,7 +10,7 @@ module Rivulet
10
10
  body, headers =
11
11
  case format
12
12
  when :json
13
- payload = Oj.dump(response.body, mode: :json)
13
+ payload = Oj.dump(response.body, mode: :strict)
14
14
 
15
15
  [
16
16
  Protocol::HTTP::Body::Buffered.wrap(payload),
@@ -0,0 +1,12 @@
1
+ module Rivulet
2
+ module Steps
3
+ class FreezeSettings < Rivulet::Step
4
+ def call(input)
5
+ app = input[:resource]
6
+ app.config.finalize!
7
+
8
+ Success(input)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -9,7 +9,6 @@ module Rivulet
9
9
  load app_file
10
10
 
11
11
  app.config.logger = app.config.logger.engine || default_logger(app)
12
- app.config.finalize!
13
12
 
14
13
  Success(input)
15
14
  end
@@ -1,3 +1,3 @@
1
1
  module Rivulet
2
- VERSION = '0.3.1'
2
+ VERSION = '0.3.2'
3
3
  end
data/lib/rivulet.rb CHANGED
@@ -34,6 +34,7 @@ require_relative 'rivulet/steps/build_context'
34
34
  require_relative 'rivulet/steps/validate_response'
35
35
  require_relative 'rivulet/steps/compile_response'
36
36
  require_relative 'rivulet/steps/dispatch'
37
+ require_relative 'rivulet/steps/freeze_settings'
37
38
  require_relative 'rivulet/steps/load_app'
38
39
  require_relative 'rivulet/steps/load_db'
39
40
  require_relative 'rivulet/steps/load_routes'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rivulet-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dombrovskiy <vold@fastmail.com>
@@ -149,6 +149,20 @@ dependencies:
149
149
  - - ">="
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: irb
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
152
166
  - !ruby/object:Gem::Dependency
153
167
  name: oj
154
168
  requirement: !ruby/object:Gem::Requirement
@@ -318,6 +332,7 @@ files:
318
332
  - lib/rivulet/steps/build_context.rb
319
333
  - lib/rivulet/steps/compile_response.rb
320
334
  - lib/rivulet/steps/dispatch.rb
335
+ - lib/rivulet/steps/freeze_settings.rb
321
336
  - lib/rivulet/steps/load_app.rb
322
337
  - lib/rivulet/steps/load_db.rb
323
338
  - lib/rivulet/steps/load_initializers.rb
@@ -350,7 +365,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
350
365
  - !ruby/object:Gem::Version
351
366
  version: '0'
352
367
  requirements: []
353
- rubygems_version: 4.0.20
368
+ rubygems_version: 4.0.23
354
369
  specification_version: 4
355
370
  summary: A small Rack web framework built on dry-rb, falcon and forced layering architecture
356
371
  test_files: []