dandy 0.12.2 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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.