problem_detail 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +9 -0
- data/.travis.yml +17 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +3 -0
- data/LICENSE.md +21 -0
- data/README.md +99 -0
- data/Rakefile +21 -0
- data/VERSION.semver +1 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/certs/gem-cyril-public_cert.pem +21 -0
- data/lib/problem_detail.rb +78 -0
- data/pkg_checksum +11 -0
- data/problem_detail.gemspec +31 -0
- metadata +167 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1c48d34bd23a4fac2967fb379aaf9caba102022b
|
4
|
+
data.tar.gz: 9434a0365304cc2ea66c6f9bf5ce02ed10316204
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d2a19c79d47240d77dc6eac7c5e85116006c43e34cda3e50c8f02bc75a15dd18517c4a724394faad44663e5e615b475a66eca296a4a3d98231fb34881f6b186c
|
7
|
+
data.tar.gz: 8b665ed9b61522a38027f7203a0903027d343b3ae38632f180747a3767a83c5ff19bc5056dbf0707bcb8d767f3a49ae85fe608ff06f738e7cf1eb37e4d2dac59
|
checksums.yaml.gz.sig
ADDED
data.tar.gz.sig
ADDED
Binary file
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
language: ruby
|
2
|
+
sudo: false
|
3
|
+
cache: bundler
|
4
|
+
script: 'bundle exec rake test:coverage --trace'
|
5
|
+
before_install:
|
6
|
+
- gem install bundler
|
7
|
+
rvm:
|
8
|
+
- 2.2
|
9
|
+
- ruby-head
|
10
|
+
- jruby
|
11
|
+
- jruby-head
|
12
|
+
- rbx-2
|
13
|
+
matrix:
|
14
|
+
allow_failures:
|
15
|
+
- rvm: rbx-2
|
16
|
+
- rvm: jruby-head
|
17
|
+
- rvm: ruby-head
|
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
As contributors and maintainers of this project, and in the interest of
|
4
|
+
fostering an open and welcoming community, we pledge to respect all people who
|
5
|
+
contribute through reporting issues, posting feature requests, updating
|
6
|
+
documentation, submitting pull requests or patches, and other activities.
|
7
|
+
|
8
|
+
We are committed to making participation in this project a harassment-free
|
9
|
+
experience for everyone, regardless of level of experience, gender, gender
|
10
|
+
identity and expression, sexual orientation, disability, personal appearance,
|
11
|
+
body size, race, ethnicity, age, religion, or nationality.
|
12
|
+
|
13
|
+
Examples of unacceptable behavior by participants include:
|
14
|
+
|
15
|
+
* The use of sexualized language or imagery
|
16
|
+
* Personal attacks
|
17
|
+
* Trolling or insulting/derogatory comments
|
18
|
+
* Public or private harassment
|
19
|
+
* Publishing other's private information, such as physical or electronic
|
20
|
+
addresses, without explicit permission
|
21
|
+
* Other unethical or unprofessional conduct
|
22
|
+
|
23
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
24
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
25
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
26
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
27
|
+
threatening, offensive, or harmful.
|
28
|
+
|
29
|
+
By adopting this Code of Conduct, project maintainers commit themselves to
|
30
|
+
fairly and consistently applying these principles to every aspect of managing
|
31
|
+
this project. Project maintainers who do not follow or enforce the Code of
|
32
|
+
Conduct may be permanently removed from the project team.
|
33
|
+
|
34
|
+
This code of conduct applies both within project spaces and in public spaces
|
35
|
+
when an individual is representing the project or its community.
|
36
|
+
|
37
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
+
reported by contacting a project maintainer at contact@cyril.email. All
|
39
|
+
complaints will be reviewed and investigated and will result in a response that
|
40
|
+
is deemed necessary and appropriate to the circumstances. Maintainers are
|
41
|
+
obligated to maintain confidentiality with regard to the reporter of an
|
42
|
+
incident.
|
43
|
+
|
44
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
45
|
+
version 1.3.0, available at
|
46
|
+
[http://contributor-covenant.org/version/1/3/0/][version]
|
47
|
+
|
48
|
+
[homepage]: http://contributor-covenant.org
|
49
|
+
[version]: http://contributor-covenant.org/version/1/3/0/
|
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Cyril Wack
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# Problem Detail
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/cyril/problem_detail.rb.svg?branch=master)][travis]
|
4
|
+
[![Code Climate](https://codeclimate.com/github/cyril/problem_detail.rb/badges/gpa.svg)][codeclimate]
|
5
|
+
[![Dependency Status](https://gemnasium.com/cyril/problem_detail.rb.svg)][gemnasium]
|
6
|
+
[![Gem Version](https://badge.fury.io/rb/problem_detail.rb.svg)][gem]
|
7
|
+
[![Inline docs](http://inch-ci.org/github/cyril/problem_detail.rb.svg?branch=master)][inchpages]
|
8
|
+
[![Documentation](http://img.shields.io/:yard-docs-38c800.svg)][rubydoc]
|
9
|
+
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)][gitter]
|
10
|
+
|
11
|
+
> Problem Details for HTTP APIs.
|
12
|
+
|
13
|
+
A structure to define a *problem detail* as a way to carry machine-readable details of errors in a HTTP response, to avoid the need to define new error response formats for HTTP APIs.
|
14
|
+
|
15
|
+
To read more: [Indicating Problems in HTTP APIs](http://www.mnot.net/blog/2013/05/15/http_problem).
|
16
|
+
|
17
|
+
Supported version: [draft-nottingham-http-problem-07](https://www.ietf.org/archive/id/draft-nottingham-http-problem-07.txt).
|
18
|
+
|
19
|
+
## Rubies
|
20
|
+
|
21
|
+
* [MRI](https://www.ruby-lang.org/)
|
22
|
+
* [Rubinius](http://rubini.us/)
|
23
|
+
* [JRuby](http://jruby.org/)
|
24
|
+
|
25
|
+
## Installation
|
26
|
+
|
27
|
+
__ProblemDetail__ is cryptographically signed.
|
28
|
+
|
29
|
+
To be sure the gem you install hasn't been tampered with, add my public key (if you haven't already) as a trusted certificate:
|
30
|
+
|
31
|
+
$ gem cert --add <(curl -Ls https://raw.github.com/cyril/problem_detail.rb/master/certs/gem-cyril-public_cert.pem)
|
32
|
+
$ gem install problem_detail -P HighSecurity
|
33
|
+
|
34
|
+
The `HighSecurity` trust profile will verify all gems. All of __ProblemDetail__'s dependencies are signed.
|
35
|
+
|
36
|
+
Or add this line to your application's Gemfile:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
gem 'problem_detail'
|
40
|
+
```
|
41
|
+
|
42
|
+
And then execute:
|
43
|
+
|
44
|
+
$ bundle
|
45
|
+
|
46
|
+
## Usage
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
http_pb = ProblemDetail::Document.new(
|
50
|
+
type: 'http://example.com/probs/out-of-credit',
|
51
|
+
title: 'You do not have enough credit.',
|
52
|
+
detail: 'Your current balance is 30, but that costs 50.',
|
53
|
+
instance: 'http://example.net/account/12345/msgs/abc',
|
54
|
+
balance: 30,
|
55
|
+
accounts: [
|
56
|
+
'http://example.net/account/12345',
|
57
|
+
'http://example.net/account/67890'
|
58
|
+
]
|
59
|
+
)
|
60
|
+
|
61
|
+
http_pb.type # => #<URI::HTTP http://example.com/probs/out-of-credit>
|
62
|
+
http_pb.to_h # => {:balance=>30, :accounts=>["http://example.net/account/12345", "http://example.net/account/67890"], :detail=>"Your current balance is 30, but that costs 50.", :instance=>#<URI::HTTP http://example.net/account/12345/msgs/abc>, :title=>"You do not have enough credit.", :type=>#<URI::HTTP http://example.com/probs/out-of-credit>}
|
63
|
+
```
|
64
|
+
|
65
|
+
## Security
|
66
|
+
|
67
|
+
As a basic form of security __ProblemDetail__ provides a set of SHA512 checksums for
|
68
|
+
every Gem release. These checksums can be found in the `checksum/` directory.
|
69
|
+
Although these checksums do not prevent malicious users from tampering with a
|
70
|
+
built Gem they can be used for basic integrity verification purposes.
|
71
|
+
|
72
|
+
The checksum of a file can be checked using the `sha512sum` command. For
|
73
|
+
example:
|
74
|
+
|
75
|
+
$ sha512sum pkg/problem_detail-0.0.1.gem
|
76
|
+
d12d7d9c2a4fdfe075cbb7a141fa5f2195175891e4098c7e1a28c8bca655ab44fb9d67b6a2e3991d0f852026c5e4537fdf7e314575c68d1c80b3a4b1eb1c041f pkg/problem_detail-0.0.1.gem
|
77
|
+
|
78
|
+
## Versioning
|
79
|
+
|
80
|
+
__ProblemDetail__ follows [Semantic Versioning 2.0](http://semver.org/).
|
81
|
+
|
82
|
+
## Contributing
|
83
|
+
|
84
|
+
1. [Fork it](https://github.com/cyril/problem_detail.rb/fork)
|
85
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
86
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
87
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
88
|
+
5. Create a new Pull Request
|
89
|
+
|
90
|
+
## License
|
91
|
+
|
92
|
+
See `LICENSE.md` file.
|
93
|
+
|
94
|
+
[gem]: https://rubygems.org/gems/problem_detail
|
95
|
+
[travis]: https://travis-ci.org/cyril/problem_detail.rb
|
96
|
+
[codeclimate]: https://codeclimate.com/github/cyril/problem_detail.rb
|
97
|
+
[gemnasium]: https://gemnasium.com/cyril/problem_detail.rb
|
98
|
+
[inchpages]: http://inch-ci.org/github/cyril/problem_detail.rb
|
99
|
+
[rubydoc]: http://rubydoc.info/gems/problem_detail/frames
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rubocop/rake_task'
|
4
|
+
|
5
|
+
RuboCop::RakeTask.new
|
6
|
+
|
7
|
+
Rake::TestTask.new do |t|
|
8
|
+
t.verbose = true
|
9
|
+
t.warning = true
|
10
|
+
t.pattern = File.join('test', '**', '*_fix.rb')
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :test do
|
14
|
+
task :coverage do
|
15
|
+
ENV['COVERAGE'] = 'true'
|
16
|
+
Rake::Task['test'].invoke
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
task(:doc_stats) { ruby '-S yard stats' }
|
21
|
+
task default: [:test, :doc_stats, :rubocop]
|
data/VERSION.semver
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.7
|
data/bin/console
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDdDCCAlygAwIBAgIBATANBgkqhkiG9w0BAQUFADBAMRAwDgYDVQQDDAdjb250
|
3
|
+
YWN0MRUwEwYKCZImiZPyLGQBGRYFY3lyaWwxFTATBgoJkiaJk/IsZAEZFgVlbWFp
|
4
|
+
bDAeFw0xNTA3MzExMjExMDZaFw0xNjA3MzAxMjExMDZaMEAxEDAOBgNVBAMMB2Nv
|
5
|
+
bnRhY3QxFTATBgoJkiaJk/IsZAEZFgVjeXJpbDEVMBMGCgmSJomT8ixkARkWBWVt
|
6
|
+
YWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6hUEYoxnn1mtoaiK
|
7
|
+
NiwjzVPqPgQCR9ZeYdWjLJ3UUG2h5Q6awJCnbaGr8LGGcKtveCDbOJRjtdKNuOTH
|
8
|
+
O2FLTkf46nrMGiF+6/j//qh8o0EQHBRKIVMYkxZxZe4Fcqtdf1bWNMZuXeyoDjdt
|
9
|
+
4yiGfizbbTOu0gBf7Yrsv5DsL0a5CU/We7zxMfgGXCVb9PYkD+OWUMcTARYDKfYa
|
10
|
+
nN9ECI7CFm/yXcsof/eIQA5EmJNmQnhx8B+8L6jDqQeSUAUrBZnC9CdloKOoqmEL
|
11
|
+
weqM2g6LM932Ba74rEl4QlFRYDcs8kjr71UcvseHRCUkFr36j26OU8+gKelsTNdO
|
12
|
+
7OZNKQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
|
13
|
+
LSJTN9h29D6bqOhp+vyvhyM0AF4wHgYDVR0RBBcwFYETY29udGFjdEBjeXJpbC5l
|
14
|
+
bWFpbDAeBgNVHRIEFzAVgRNjb250YWN0QGN5cmlsLmVtYWlsMA0GCSqGSIb3DQEB
|
15
|
+
BQUAA4IBAQArqCC1rUyGJlF0DF9ZhUOgggyROvO0/WroSI5zWgzdB8EU7RJpsDIV
|
16
|
+
caGnpji7h0rQIGWQuJ6TL2fTFLfeGRFdIzRZwWC7TeXhcXngJHZxSjDBt2OpfM8A
|
17
|
+
P5eElSQS9iJCetBGGMyt354PfgZkg3URaC+JA6mdEisdtEdo64ElnMsLg9shCqye
|
18
|
+
JSR3BbejbyPVva0/MHKD+dR6RswlcM9KMiYOXQml7a/kH6huOHvVq9gj5xC2ih8W
|
19
|
+
dzJvWzQ1+dJU6WQv75E9ddSkaQrK3nhdgQVu+/wgvGSrsMvOGNz+LXaSDxQqZuwX
|
20
|
+
0KNQFuIukfrdk8URwRnHoAnvx4U93iUw
|
21
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
# A parser and emitter for Problem Details for HTTP APIs.
|
4
|
+
# Version: https://www.ietf.org/archive/id/draft-nottingham-http-problem-07.txt
|
5
|
+
module ProblemDetail
|
6
|
+
# This document defines a "problem detail" as a way to carry machine-readable
|
7
|
+
# details of errors in a HTTP response, to avoid the need to define new error
|
8
|
+
# response formats for HTTP APIs.
|
9
|
+
class Document
|
10
|
+
# A problem details object can have some members.
|
11
|
+
#
|
12
|
+
# @param title [#to_s] A short, human-readable summary of the problem type.
|
13
|
+
# It SHOULD NOT change from occurrence to occurrence of the problem,
|
14
|
+
# except for purposes of localisation (e.g., using proactive content
|
15
|
+
# negotiation).
|
16
|
+
# @param type [#to_s, nil] A URI reference that identifies the problem type.
|
17
|
+
# When dereferenced, it is encouraged to provide human-readable
|
18
|
+
# documentation for the problem type (e.g., using HTML. When this member
|
19
|
+
# is not present, its value is assumed to be "about:blank".
|
20
|
+
# @param options [Hash] Extend the problem details with additional members
|
21
|
+
# such as:
|
22
|
+
# * status: the HTTP status code generated by the origin server for this
|
23
|
+
# occurrence of the problem;
|
24
|
+
# * detail: an human readable explanation specific to this occurrence of
|
25
|
+
# the problem;
|
26
|
+
# * instance: a URI reference that identifies the specific occurrence of
|
27
|
+
# the problem.
|
28
|
+
def initialize(title:, type: 'about:blank', **options)
|
29
|
+
@title = title.to_s
|
30
|
+
@type = URI(type.to_s)
|
31
|
+
@options = options
|
32
|
+
end
|
33
|
+
|
34
|
+
# @!attribute [r] title
|
35
|
+
#
|
36
|
+
# @return [String] A short, human-readable summary of the problem type.
|
37
|
+
attr_reader :title
|
38
|
+
|
39
|
+
# @!attribute [r] type
|
40
|
+
#
|
41
|
+
# @return [URI] A URI reference that identifies the problem type.
|
42
|
+
attr_reader :type
|
43
|
+
|
44
|
+
# @return [Fixnum, nil] The HTTP status code generated by the origin server.
|
45
|
+
def status
|
46
|
+
@options[:status].to_i unless @options[:status].nil?
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [String, nil] An human readable explanation.
|
50
|
+
def detail
|
51
|
+
@options[:detail].to_s unless @options[:detail].nil?
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [URI, nil] The specific occurrence of the problem.
|
55
|
+
def instance
|
56
|
+
URI(@options[:instance].to_s) unless @options[:instance].nil?
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [Hash] Additional members.
|
60
|
+
def options
|
61
|
+
@options.reject { |k, _v| %i(status detail instance).include?(k) }
|
62
|
+
end
|
63
|
+
|
64
|
+
# Properties of the result.
|
65
|
+
#
|
66
|
+
# @return [Hash] The properties of the result.
|
67
|
+
def to_h
|
68
|
+
options.merge({
|
69
|
+
status: status,
|
70
|
+
detail: detail,
|
71
|
+
instance: instance
|
72
|
+
}.reject { |_k, v| v.nil? }).merge(
|
73
|
+
title: title,
|
74
|
+
type: type
|
75
|
+
)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/pkg_checksum
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'digest/sha2'
|
4
|
+
|
5
|
+
gemname = 'problem_detail'.to_sym
|
6
|
+
ARGV[0] = File.read('VERSION.semver').chomp if ARGV[0].nil?
|
7
|
+
built_gem_path = "pkg/#{gemname}-#{ARGV[0]}.gem"
|
8
|
+
checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
|
9
|
+
checksum_path = "checksum/#{gemname}-#{ARGV[0]}.gem.sha512"
|
10
|
+
|
11
|
+
File.open(checksum_path, 'w') { |f| f.write("#{checksum}\n") }
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Gem::Specification.new do |spec|
|
2
|
+
spec.name = 'problem_detail'
|
3
|
+
spec.version = File.read('VERSION.semver').chomp
|
4
|
+
spec.authors = ['Cyril Wack']
|
5
|
+
spec.email = ['contact@cyril.email']
|
6
|
+
|
7
|
+
spec.summary = 'Problem Details for HTTP APIs.'
|
8
|
+
spec.description = 'A "problem detail" as a way to carry machine-readable' \
|
9
|
+
' details of errors in a HTTP response, to avoid the' \
|
10
|
+
' need to define new error response formats for HTTP' \
|
11
|
+
' APIs.'
|
12
|
+
spec.homepage = 'https://github.com/cyril/problem_detail.rb'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
|
15
|
+
spec.files =
|
16
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^test/}) }
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
spec.add_dependency 'fix', '~> 0.17.0'
|
21
|
+
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.4'
|
24
|
+
spec.add_development_dependency 'yard', '~> 0.8'
|
25
|
+
spec.add_development_dependency 'simplecov', '~> 0.10'
|
26
|
+
spec.add_development_dependency 'rubocop', '~> 0.35'
|
27
|
+
|
28
|
+
spec.cert_chain = ['certs/gem-cyril-public_cert.pem']
|
29
|
+
private_key = File.expand_path('~/.ssh/gem-cyril-private_key.pem')
|
30
|
+
spec.signing_key = private_key if File.exist?(private_key)
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: problem_detail
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.7
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Cyril Wack
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDdDCCAlygAwIBAgIBATANBgkqhkiG9w0BAQUFADBAMRAwDgYDVQQDDAdjb250
|
14
|
+
YWN0MRUwEwYKCZImiZPyLGQBGRYFY3lyaWwxFTATBgoJkiaJk/IsZAEZFgVlbWFp
|
15
|
+
bDAeFw0xNTA3MzExMjExMDZaFw0xNjA3MzAxMjExMDZaMEAxEDAOBgNVBAMMB2Nv
|
16
|
+
bnRhY3QxFTATBgoJkiaJk/IsZAEZFgVjeXJpbDEVMBMGCgmSJomT8ixkARkWBWVt
|
17
|
+
YWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6hUEYoxnn1mtoaiK
|
18
|
+
NiwjzVPqPgQCR9ZeYdWjLJ3UUG2h5Q6awJCnbaGr8LGGcKtveCDbOJRjtdKNuOTH
|
19
|
+
O2FLTkf46nrMGiF+6/j//qh8o0EQHBRKIVMYkxZxZe4Fcqtdf1bWNMZuXeyoDjdt
|
20
|
+
4yiGfizbbTOu0gBf7Yrsv5DsL0a5CU/We7zxMfgGXCVb9PYkD+OWUMcTARYDKfYa
|
21
|
+
nN9ECI7CFm/yXcsof/eIQA5EmJNmQnhx8B+8L6jDqQeSUAUrBZnC9CdloKOoqmEL
|
22
|
+
weqM2g6LM932Ba74rEl4QlFRYDcs8kjr71UcvseHRCUkFr36j26OU8+gKelsTNdO
|
23
|
+
7OZNKQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
|
24
|
+
LSJTN9h29D6bqOhp+vyvhyM0AF4wHgYDVR0RBBcwFYETY29udGFjdEBjeXJpbC5l
|
25
|
+
bWFpbDAeBgNVHRIEFzAVgRNjb250YWN0QGN5cmlsLmVtYWlsMA0GCSqGSIb3DQEB
|
26
|
+
BQUAA4IBAQArqCC1rUyGJlF0DF9ZhUOgggyROvO0/WroSI5zWgzdB8EU7RJpsDIV
|
27
|
+
caGnpji7h0rQIGWQuJ6TL2fTFLfeGRFdIzRZwWC7TeXhcXngJHZxSjDBt2OpfM8A
|
28
|
+
P5eElSQS9iJCetBGGMyt354PfgZkg3URaC+JA6mdEisdtEdo64ElnMsLg9shCqye
|
29
|
+
JSR3BbejbyPVva0/MHKD+dR6RswlcM9KMiYOXQml7a/kH6huOHvVq9gj5xC2ih8W
|
30
|
+
dzJvWzQ1+dJU6WQv75E9ddSkaQrK3nhdgQVu+/wgvGSrsMvOGNz+LXaSDxQqZuwX
|
31
|
+
0KNQFuIukfrdk8URwRnHoAnvx4U93iUw
|
32
|
+
-----END CERTIFICATE-----
|
33
|
+
date: 2015-12-18 00:00:00.000000000 Z
|
34
|
+
dependencies:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: fix
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.17.0
|
42
|
+
type: :runtime
|
43
|
+
prerelease: false
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.17.0
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: bundler
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '1.10'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.10'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rake
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '10.4'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '10.4'
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
name: yard
|
79
|
+
requirement: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0.8'
|
84
|
+
type: :development
|
85
|
+
prerelease: false
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0.8'
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: simplecov
|
93
|
+
requirement: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0.10'
|
98
|
+
type: :development
|
99
|
+
prerelease: false
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0.10'
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: rubocop
|
107
|
+
requirement: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0.35'
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0.35'
|
119
|
+
description: A "problem detail" as a way to carry machine-readable details of errors
|
120
|
+
in a HTTP response, to avoid the need to define new error response formats for HTTP
|
121
|
+
APIs.
|
122
|
+
email:
|
123
|
+
- contact@cyril.email
|
124
|
+
executables: []
|
125
|
+
extensions: []
|
126
|
+
extra_rdoc_files: []
|
127
|
+
files:
|
128
|
+
- ".gitignore"
|
129
|
+
- ".travis.yml"
|
130
|
+
- CODE_OF_CONDUCT.md
|
131
|
+
- Gemfile
|
132
|
+
- LICENSE.md
|
133
|
+
- README.md
|
134
|
+
- Rakefile
|
135
|
+
- VERSION.semver
|
136
|
+
- bin/console
|
137
|
+
- bin/setup
|
138
|
+
- certs/gem-cyril-public_cert.pem
|
139
|
+
- lib/problem_detail.rb
|
140
|
+
- pkg_checksum
|
141
|
+
- problem_detail.gemspec
|
142
|
+
homepage: https://github.com/cyril/problem_detail.rb
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.4.5.1
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: Problem Details for HTTP APIs.
|
166
|
+
test_files: []
|
167
|
+
has_rdoc:
|
metadata.gz.sig
ADDED
Binary file
|