problem_details 0.1.0 → 0.2.0

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
  SHA1:
3
- metadata.gz: 279ec9da84ba4698847e7ab6cf8ebb09760c8141
4
- data.tar.gz: b1f21ed649e8873860fc8b40aa769389789b963e
3
+ metadata.gz: aaa20fce362b636679a35cc9090c974bf3e36924
4
+ data.tar.gz: 5ac0e4fb420f456e79f4a7bc1d6477a47fd6d3f8
5
5
  SHA512:
6
- metadata.gz: 7c16cc005ec9b2e9f396f6847677fd66fb82d9859c4d17e4a52f74f7ee3c2bcafe6c47d0f220c5ce3565a006bd458f9e28911c6f7a7ac86417ebaff0252ccf9f
7
- data.tar.gz: c8956e2c8fffa9ad141fad4b225733c7109372b33c039a7c2f7c2a4d060479367623478554b1962b393141a4ac4af8b28d064c2eb2573fcdae38b655a727a178
6
+ metadata.gz: 979bec626f82c894b774b16902c7ede02caa1074aec7fd189cf24351630730fd67bffbd905682c10c8d1d52946732d5ef87f4114351235e92c6c948baf9b20b3
7
+ data.tar.gz: 9a41b0fef22b7ce25316e8ec1374c09ee494b3ffd68ee5768733735b0d58cb0000b13068fef2dc060e1f000e77c9b9172dfb99ac60118dc06463898eb0501dfe
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ ## 0.2.0 / 2018-03-20
2
+
3
+ ### Enhancements:
4
+ * Introduce a new gem, `sinatra-problem_details`, the Sinatra problem detail extention.
5
+
6
+ ## 0.1.0 / 2018-03-26
7
+
8
+ * First release
9
+ * Initial implementation of `problem_details`
10
+ * Rails renderer feature by `problem_details-rails`
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
- # ProblemDetails [![Build Status](https://travis-ci.org/nikushi/problem_details.svg?branch=master)](https://travis-ci.org/nikushi/problem_details)
1
+ # ProblemDetails [![Build Status](https://travis-ci.org/nikushi/problem_details.svg?branch=master)](https://travis-ci.org/nikushi/problem_details) [![Gem Version](https://badge.fury.io/rb/problem_details.svg)](https://badge.fury.io/rb/problem_details)
2
2
 
3
3
  ProblemDetails is an implementation of [RFC7807 Problem Details for HTTP APIs](https://tools.ietf.org/html/rfc7807).
4
4
 
5
5
  The RFC defines a "problem detail" as a way to inform errors to clients as machine readable form in a HTTP response
6
6
  to avoid the need to define new error response formats for HTTP APIs.
7
7
 
8
- This library also works with Rails, by the `problem` renderer that helps to respond with the problem detail form.
8
+ This library also works with Rails and Sinatra, by the `problem` renderer that helps to respond with the problem detail form.
9
9
 
10
10
  Currently only JSON serialization is supported.
11
11
 
@@ -28,6 +28,12 @@ Or if you use with Rails, add below line instead.
28
28
  gem 'problem_details-rails'
29
29
  ```
30
30
 
31
+ With Sinatra, add below line instead.
32
+
33
+ ```ruby
34
+ gem 'sinatra-problem_details'
35
+ ```
36
+
31
37
  And then execute:
32
38
 
33
39
  $ bundle
@@ -40,6 +46,9 @@ And then execute:
40
46
  require 'problem_details'
41
47
 
42
48
  ProblemDetails::Document.new(status: 404).to_json
49
+
50
+ # Or status code symbol can be specified as well.
51
+ ProblemDetails::Document.new(status: :not_found).to_json
43
52
  ```
44
53
 
45
54
  will produce:
@@ -103,7 +112,7 @@ will produce(note that `balance` and `accounts` are extention members):
103
112
 
104
113
  ### With Rails
105
114
 
106
- Once `render_problems-rails` gem is installed into a Rails system, a problem can be rendered with the problem detail form with `Content-Type: application/problem+json`.
115
+ Once `problem_details-rails` gem is installed into a Rails system, a problem can be rendered with the problem detail form with `Content-Type: application/problem+json`.
107
116
 
108
117
  For example, respond with validation error messages:
109
118
 
@@ -139,6 +148,54 @@ Content-Type: application/problem+json; charset=utf-8
139
148
  }
140
149
  ```
141
150
 
151
+ ### With Sinatra
152
+
153
+ Install `sinatra-problems_details` into a sinatra app, a problem is be rendered as well with `Content-Type: application/problem+json`.
154
+
155
+ #### Classic Application
156
+
157
+ ```ruby
158
+ require 'sinatra'
159
+ require 'sinatra-problem_details'
160
+
161
+ get '/' do
162
+ status 400
163
+ problem foo: 'bar'
164
+ end
165
+ ```
166
+
167
+ #### Modular Application
168
+
169
+ ```ruby
170
+ require 'sinatra/base'
171
+ require 'sinatra-problem_details'
172
+
173
+ class MyApp < Sinatra::Base
174
+ register Sinatra::ProblemDetails
175
+
176
+ get '/' do
177
+ status 400
178
+ problem foo: 'bar'
179
+ end
180
+ end
181
+ ```
182
+
183
+ #### Response
184
+
185
+ The sinatra apps defined in the previous sections will render:
186
+
187
+ ```
188
+ HTTP/1.1 400 Bad Request
189
+ Content-Type: application/problem+json
190
+
191
+ {
192
+ "type": "about:blank",
193
+ "title": "Bad Request",
194
+ "status": 400,
195
+ "foo": "bar"
196
+ }
197
+ }
198
+ ```
142
199
 
143
200
  ## Development
144
201
 
data/Rakefile CHANGED
@@ -6,6 +6,23 @@ require 'rspec/core/rake_task'
6
6
  # For multiple gems
7
7
  # ref https://github.com/bkeepers/dotenv/blob/master/Rakefile
8
8
 
9
+ # === helpers ===
10
+ def source_version
11
+ @source_version ||= File.read(File.expand_path("../VERSION", __FILE__)).strip
12
+ end
13
+
14
+ # == release ====
15
+ desc "Commits the version"
16
+ task :commit_version do
17
+ sh <<-SH
18
+ gsed -i "s/.*VERSION.*/ VERSION = '#{source_version}'/" lib/problem_details/version.rb
19
+ gsed -i "s/.*VERSION.*/ VERSION = '#{source_version}'/" problem_details-rails/lib/problem_details/rails/version.rb
20
+ gsed -i "s/.*VERSION.*/ VERSION = '#{source_version}'/" sinatra-problem_details/lib/sinatra/problem_details/version.rb
21
+ SH
22
+
23
+ sh "git commit --allow-empty -a -m '#{source_version} release'"
24
+ end
25
+
9
26
  namespace 'problem_details' do
10
27
  Bundler::GemHelper.install_tasks name: 'problem_details'
11
28
  end
@@ -17,17 +34,47 @@ namespace 'problem_details-rails' do
17
34
  def tag_version; end # noop
18
35
  end
19
36
 
20
- ProblemDetailsRailsGemHelper.install_tasks name: 'problem_details-rails'
37
+ ProblemDetailsRailsGemHelper.install_tasks dir: File.join(__dir__, 'problem_details-rails'), name: 'problem_details-rails'
38
+ end
39
+
40
+ namespace 'sinatra-problem_details' do
41
+ class SinatraProblemDetailsGemHelper < Bundler::GemHelper
42
+ def guard_already_tagged; end # noop
43
+
44
+ def tag_version; end # noop
45
+ end
46
+
47
+ SinatraProblemDetailsGemHelper.install_tasks dir: File.join(__dir__, 'sinatra-problem_details'), name: 'sinatra-problem_details'
21
48
  end
22
49
 
23
50
  desc 'build gem'
24
- task build: ['problem_details:build', 'problem_details-rails:build']
51
+ task build: ['problem_details:build', 'problem_details-rails:build', 'sinatra-problem_details:build']
25
52
 
26
53
  desc 'build and install'
27
- task install: ['problem_details:install', 'problem_details-rails:install']
54
+ task install: ['problem_details:install', 'problem_details-rails:install', 'sinatra-problem_details:build']
28
55
 
29
56
  desc 'release'
30
- task release: ['problem_details:release', 'problem_details-rails:release']
57
+ task release: ['problem_details:release', 'problem_details-rails:release', 'sinatra-problem_details:build']
31
58
 
32
59
  RSpec::Core::RakeTask.new(:spec)
33
- task default: :spec
60
+ task default: 'spec:all'
61
+
62
+ namespace :spec do
63
+ dirs = %w(
64
+ .
65
+ problem_details-rails
66
+ sinatra-problem_details
67
+ )
68
+
69
+ desc "Run all specs"
70
+ task :all do
71
+ dirs.each do |d|
72
+ Dir.chdir(d) do
73
+ Bundler.with_clean_env do
74
+ sh 'bundle --quiet'
75
+ sh 'bundle exec rake spec'
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.0
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'problem_details/version'
4
3
  require 'problem_details/document'
4
+ require 'problem_details/version'
5
5
 
6
6
  module ProblemDetails
7
7
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ProblemDetails
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ version = File.read(File.expand_path('VERSION', __dir__)).strip
4
+
3
5
  lib = File.expand_path('lib', __dir__)
4
6
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'problem_details/version'
6
7
 
7
8
  Gem::Specification.new do |spec|
8
9
  spec.name = 'problem_details'
9
- spec.version = ProblemDetails::VERSION
10
+ spec.version = version
10
11
  spec.authors = ['Nobuhiro Nikushi']
11
12
  spec.email = ['deneb.ge@gmail.com']
12
13
 
@@ -15,9 +16,14 @@ Gem::Specification.new do |spec|
15
16
  spec.homepage = 'https://github.com/nikushi/problem_details'
16
17
  spec.license = 'MIT'
17
18
 
18
- spec.files = `git ls-files|grep -v rails`.split($OUTPUT_RECORD_SEPARATOR).reject do |f|
19
- f.match(%r{^(test|spec|features)/})
20
- end
19
+ spec.files = Dir['lib/**/*.rb'] + %w[
20
+ CHANGELOG.md
21
+ LICENSE.txt
22
+ README.md
23
+ Rakefile
24
+ problem_details.gemspec
25
+ VERSION
26
+ ]
21
27
  spec.require_paths = ['lib']
22
28
 
23
29
  spec.add_runtime_dependency 'rack'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: problem_details
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobuhiro Nikushi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-26 00:00:00.000000000 Z
11
+ date: 2018-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -73,15 +73,11 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - ".gitignore"
77
- - ".rspec"
78
- - ".travis.yml"
79
- - Gemfile
76
+ - CHANGELOG.md
80
77
  - LICENSE.txt
81
78
  - README.md
82
79
  - Rakefile
83
- - bin/console
84
- - bin/setup
80
+ - VERSION
85
81
  - lib/problem_details.rb
86
82
  - lib/problem_details/document.rb
87
83
  - lib/problem_details/version.rb
data/.gitignore DELETED
@@ -1,12 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
12
- Gemfile.lock
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.3
5
- - 2.5.0
6
- before_install: gem install bundler -v 1.16.1
data/Gemfile DELETED
@@ -1,7 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
-
5
- # Specify your gem's dependencies in problem_details.gemspec
6
- gemspec name: 'problem_details'
7
- gemspec name: 'problem_details-rails'
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'problem_details'
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'irb'
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here