dandy 0.12.2 → 1.0.1

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: b3801fd28080c3bdea511c614591b6b15c3d33066724ba8692941b9d77a56957
4
- data.tar.gz: 226894d6c2cdfedaa9fda4677e3b9ac607e57de240045d7879a1f1f93312a78a
3
+ metadata.gz: f4cb37da294ec33ad6decfb043f63b542a12510a51df75ead5638c032b65a6d1
4
+ data.tar.gz: 07a54c2cd08d9ad03c0ef7dd7aab5381cbef0b2e393c9be1ded7ace34ea7da04
5
5
  SHA512:
6
- metadata.gz: 86a58f84405999d88351c799c2475fdce2d8835ced1c2ae07a046d5f3491f3b7dc73f69073abdb97fb48f59934769fcd681c7a7ee4d6a10856305fed46cf3b75
7
- data.tar.gz: e8b2e3ec269c757881ae9d42af8944ed9979d8b95713aed9b33cdf34357bb32018e423989eb59a07b119c66acf56af67f85a08560c55d04600c8af9d8fc56782
6
+ metadata.gz: 393ea464f6049946efa5ba1e2eef32675a964d648defc34e56feffd5d22b0b21edc56167370c72ae801ef5b5fa2adf2fdc287eb4673ba3d2e8280697cef4a0c8
7
+ data.tar.gz: 2c6dc7c37a44bfa9e03fdbd9ee75e30f8c7570ce8853c2c46812214ac032210374796b2bb3184959ccc59bf9e5ea865d9baa99739f1dce71a45be238eb10807b
data/.travis.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.1
5
- before_install: gem install bundler -v 1.15.4
4
+ - 2.6
5
+ before_install: gem install bundler
data/README.md CHANGED
@@ -109,7 +109,7 @@ or just
109
109
  $ rackup -p 8000 config.ru
110
110
  ```
111
111
 
112
- 4. Run curl command `curl http://localhost:9292 -H "Accept: application/json"` and you'll see:
112
+ 4. Run curl command `curl http://localhost:8000 -H "Accept: application/json"` and you'll see:
113
113
 
114
114
  ```json
115
115
  {"message": "Welcome to dandy-app!"}
data/dandy.gemspec CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ['lib']
32
32
 
33
- spec.add_dependency 'hypo', '~> 0.9.0'
33
+ spec.add_dependency 'hypo', '~> 1.0.0'
34
34
  spec.add_dependency 'rack', '~> 2.0.3'
35
35
  spec.add_dependency 'thor', '~> 0.20.0'
36
36
  spec.add_dependency 'treetop', '~> 1.6.8'
@@ -40,7 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.add_dependency 'awrence', '~> 1.0.0'
41
41
  spec.add_dependency 'plissken', '~> 1.2.0'
42
42
 
43
- spec.add_development_dependency 'bundler', '~> 1.15'
43
+ spec.add_development_dependency 'bundler', '~> 2.1'
44
44
  spec.add_development_dependency 'rake', '~> 10.0'
45
45
  spec.add_development_dependency 'rspec', '~> 3.0'
46
46
  spec.add_development_dependency 'rspec-mocks', '~> 3.6'
data/lib/dandy/app.rb CHANGED
@@ -46,7 +46,8 @@ module Dandy
46
46
  def register_dependencies
47
47
  instances = {
48
48
  config_file_path: 'dandy.yml',
49
- dandy_env: ENV['DANDY_ENV'] || 'development'
49
+ dandy_env: ENV['DANDY_ENV'] || 'development',
50
+ env: ENV
50
51
  }
51
52
 
52
53
  instances.keys.each do |name|
data/lib/dandy/request.rb CHANGED
@@ -34,6 +34,7 @@ module Dandy
34
34
 
35
35
  if match.nil?
36
36
  result = [404, {'Content-Type' => headers['Accept']}, []]
37
+ release
37
38
  else
38
39
  status = match.route.http_status || default_http_status(match.route.http_verb)
39
40
  register_params(match.params)
@@ -50,11 +51,16 @@ module Dandy
50
51
 
51
52
  body = @safe_executor.execute(match.route, headers)
52
53
 
54
+ begin
55
+ release
56
+ rescue Exception => error
57
+ body = @safe_executor.handle_error(match.route, headers, error)
58
+ end
59
+
53
60
  status = @container.resolve(:dandy_status)
54
- result = [status, {'Content-Type' => headers['Accept']}, [body]]
61
+ result = [status, {'Content-Type' => 'application/json'}, [body]]
55
62
  end
56
63
 
57
- release
58
64
 
59
65
  result
60
66
  end
@@ -0,0 +1,11 @@
1
+ module Dandy
2
+ class Response
3
+ def self.format(result, headers)
4
+ if headers['Keys-Format'] == 'camel' && result
5
+ result = result.to_camelback_keys
6
+ end
7
+
8
+ JSON.generate(result)
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,5 @@
1
+ require 'dandy/response'
2
+
1
3
  module Dandy
2
4
  class SafeExecutor
3
5
  def initialize(container, dandy_config, view_factory)
@@ -15,27 +17,23 @@ module Dandy
15
17
  result = @view_factory.create(route.view, headers['Accept'], {keys_format: headers['Keys-Format'] || 'snake'})
16
18
  end
17
19
 
18
- body = result.is_a?(String) ? result : format_response(result, headers)
20
+ body = result.is_a?(String) ? result : Response.format(result, headers)
19
21
  rescue Exception => error
20
- @container
21
- .register_instance(error, :dandy_error)
22
- .using_lifetime(:scope)
23
- .bound_to(:dandy_request)
24
-
25
- action = @container.resolve(route.catch.name.to_sym)
26
- body = format_response(action.call, headers)
22
+ p error
23
+ body = handle_error(route, headers, error)
27
24
  end
28
25
 
29
26
  body
30
27
  end
31
28
 
32
- private
33
- def format_response(result, headers)
34
- if headers['Keys-Format'] == 'camel' && result
35
- result = result.to_camelback_keys
36
- end
29
+ def handle_error(route, headers, error)
30
+ @container
31
+ .register_instance(error, :dandy_error)
32
+ .using_lifetime(:scope)
33
+ .bound_to(:dandy_request)
37
34
 
38
- JSON.generate(result)
35
+ action = @container.resolve(route.catch.name.to_sym)
36
+ Response.format(action.call, headers)
39
37
  end
40
38
  end
41
39
  end
data/lib/dandy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dandy
2
- VERSION = '0.12.2'.freeze
2
+ VERSION = '1.0.1'
3
3
  end
@@ -12,8 +12,14 @@ module Dandy
12
12
 
13
13
  def create(name, content_type, options = {})
14
14
  type = content_type ? content_type.split('/')[1] : 'json'
15
- template = @template_registry.get(name, type)
16
15
  builder = @view_builder_registry.get(type)
16
+
17
+ if builder.nil?
18
+ type = 'json'
19
+ builder = @view_builder_registry.get(type)
20
+ end
21
+
22
+ template = @template_registry.get(name, type)
17
23
  view = builder.new(template, @container, options)
18
24
  view.process
19
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dandy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Kalinkin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-06 00:00:00.000000000 Z
11
+ date: 2020-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hypo
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.0
19
+ version: 1.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.0
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rack
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '1.15'
145
+ version: '2.1'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '1.15'
152
+ version: '2.1'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rake
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -256,6 +256,7 @@ files:
256
256
  - lib/dandy/loaders/template_loader.rb
257
257
  - lib/dandy/loaders/type_loader.rb
258
258
  - lib/dandy/request.rb
259
+ - lib/dandy/response.rb
259
260
  - lib/dandy/routing/builder.rb
260
261
  - lib/dandy/routing/file_reader.rb
261
262
  - lib/dandy/routing/match.rb
@@ -317,8 +318,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
317
318
  - !ruby/object:Gem::Version
318
319
  version: '0'
319
320
  requirements: []
320
- rubyforge_project:
321
- rubygems_version: 2.7.4
321
+ rubygems_version: 3.1.2
322
322
  signing_key:
323
323
  specification_version: 4
324
324
  summary: Dandy is a minimalistic web API framework.