pragma-operation 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -1
- data/README.md +0 -1
- data/lib/pragma/operation.rb +1 -0
- data/lib/pragma/operation/error.rb +24 -0
- data/lib/pragma/operation/response.rb +37 -0
- data/lib/pragma/operation/response/bad_request.rb +1 -0
- data/lib/pragma/operation/response/conflict.rb +20 -0
- data/lib/pragma/operation/response/created.rb +5 -0
- data/lib/pragma/operation/response/forbidden.rb +5 -0
- data/lib/pragma/operation/response/internal_server_error.rb +6 -1
- data/lib/pragma/operation/response/no_content.rb +4 -0
- data/lib/pragma/operation/response/not_found.rb +5 -0
- data/lib/pragma/operation/response/ok.rb +5 -0
- data/lib/pragma/operation/response/payment_required.rb +6 -1
- data/lib/pragma/operation/response/service_unavailable.rb +6 -1
- data/lib/pragma/operation/response/unauthorized.rb +6 -1
- data/lib/pragma/operation/response/unprocessable_entity.rb +12 -0
- data/lib/pragma/operation/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d7f82fe38cc8a293b5ee3e99a22cf5fd700cdd24d5f2139c7e740414020fbb5
|
4
|
+
data.tar.gz: ca5b8bd2e1a558c1bb5874a4ed37b934fa8db6fda3e4b6346691e1a1fa857172
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5976f017a997c16fdafc2051d82b5856d995403926f170ac9fdf004863f00dfb1164e718f461dab3d3607a295a9db451108f02a526b5df397322102709c060e4
|
7
|
+
data.tar.gz: f4b48e76ee2fb71e677ff1b110f94d8b37d2fe0f4c3e9dddecba2e535a1a32433fd2dec1ecfbc296f4dbcd265654e00a4fae2f832e76e94b1e6fa60ac07e7291
|
data/CHANGELOG.md
CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [2.2.0]
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- Added `Conflict` response template
|
15
|
+
|
10
16
|
## [2.1.0]
|
11
17
|
|
12
18
|
### Added
|
@@ -24,6 +30,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
24
30
|
|
25
31
|
First Pragma 2 release.
|
26
32
|
|
27
|
-
[Unreleased]: https://github.com/pragmarb/pragma-operation/compare/v2.
|
33
|
+
[Unreleased]: https://github.com/pragmarb/pragma-operation/compare/v2.2.0...HEAD
|
34
|
+
[2.2.0]: https://github.com/pragmarb/pragma-operation/compare/v2.1.0...v2.2.0
|
28
35
|
[2.1.0]: https://github.com/pragmarb/pragma-operation/compare/v2.0.0...v2.1.0
|
29
36
|
[2.0.0]: https://github.com/pragmarb/pragma-operation/compare/v1.6.3...v2.0.0
|
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Pragma::Operation
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/pragmarb/pragma-operation.svg?branch=master)](https://travis-ci.org/pragmarb/pragma-operation)
|
4
|
-
[![Dependency Status](https://gemnasium.com/badges/github.com/pragmarb/pragma-operation.svg)](https://gemnasium.com/github.com/pragmarb/pragma-operation)
|
5
4
|
[![Coverage Status](https://coveralls.io/repos/github/pragmarb/pragma-operation/badge.svg?branch=master)](https://coveralls.io/github/pragmarb/pragma-operation?branch=master)
|
6
5
|
[![Maintainability](https://api.codeclimate.com/v1/badges/e51e8d7489eb72ab97ba/maintainability)](https://codeclimate.com/github/pragmarb/pragma-operation/maintainability)
|
7
6
|
|
data/lib/pragma/operation.rb
CHANGED
@@ -19,6 +19,7 @@ require 'pragma/operation/response/no_content'
|
|
19
19
|
require 'pragma/operation/response/unauthorized'
|
20
20
|
require 'pragma/operation/response/service_unavailable'
|
21
21
|
require 'pragma/operation/response/internal_server_error'
|
22
|
+
require 'pragma/operation/response/conflict'
|
22
23
|
require 'pragma/operation/response/payment_required'
|
23
24
|
|
24
25
|
module Pragma
|
@@ -2,15 +2,34 @@
|
|
2
2
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
|
+
# A generic error entity to hold error information for HTTP responses.
|
6
|
+
#
|
7
|
+
# This format is not mandatory, but recommended for consistency and convenience.
|
5
8
|
class Error
|
9
|
+
# @!attribute [r] error_type
|
10
|
+
# @return [Symbol|String] a machine-readable error type
|
11
|
+
#
|
12
|
+
# @!attribute [r] error_message
|
13
|
+
# @return [String] a human-readable error message
|
14
|
+
#
|
15
|
+
# @!attribute [r] meta
|
16
|
+
# @return [Hash] metadata about the error
|
6
17
|
attr_reader :error_type, :error_message, :meta
|
7
18
|
|
19
|
+
# Creates a new error entity.
|
20
|
+
#
|
21
|
+
# @param error_type [Symbol|String] a machine-readable error type
|
22
|
+
# @param error_message [String] a human-readable error message
|
23
|
+
# @param meta [Hash] metadata about the error
|
8
24
|
def initialize(error_type:, error_message:, meta: {})
|
9
25
|
@error_type = error_type
|
10
26
|
@error_message = error_message
|
11
27
|
@meta = meta
|
12
28
|
end
|
13
29
|
|
30
|
+
# Converts the entity to a hash ready to be dumped as JSON.
|
31
|
+
#
|
32
|
+
# @return [Hash]
|
14
33
|
def as_json(*)
|
15
34
|
{
|
16
35
|
error_type: error_type,
|
@@ -19,6 +38,11 @@ module Pragma
|
|
19
38
|
}
|
20
39
|
end
|
21
40
|
|
41
|
+
# Dumps the JSON representation as a JSON string.
|
42
|
+
#
|
43
|
+
# @return [String]
|
44
|
+
#
|
45
|
+
# @see #as_json
|
22
46
|
def to_json
|
23
47
|
JSON.dump as_json
|
24
48
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
|
+
# Represents an HTTP response. Provides utilities to deal with status codes and such.
|
5
6
|
class Response
|
6
7
|
STATUSES = {
|
7
8
|
100 => :continue,
|
@@ -64,23 +65,49 @@ module Pragma
|
|
64
65
|
511 => :network_authentication_required
|
65
66
|
}.freeze
|
66
67
|
|
68
|
+
# @!attribute [rw] entity
|
69
|
+
# @return [Object] the entity/body of the response
|
70
|
+
#
|
71
|
+
# @!attribute [rw] headers
|
72
|
+
# @return [Hash] the headers of the response
|
67
73
|
attr_accessor :entity, :headers
|
74
|
+
|
75
|
+
# @!attribute [r] status
|
76
|
+
# @return [Integer|Symbol] the HTTP status code of the response
|
68
77
|
attr_reader :status
|
69
78
|
|
79
|
+
# Initializes the response.
|
80
|
+
#
|
81
|
+
# @param status [Integer|Symbol] the HTTP status code of the response
|
82
|
+
# @param entity [Object] the entity/body of the response
|
83
|
+
# @param headers [Hash] the headers of the response
|
70
84
|
def initialize(status: 200, entity: nil, headers: {})
|
71
85
|
self.status = status
|
72
86
|
self.entity = entity
|
73
87
|
self.headers = headers
|
74
88
|
end
|
75
89
|
|
90
|
+
# Returns whether the response has a successful HTTP status code, by checking whether the
|
91
|
+
# status code is 1xx, 2xx or 3xx.
|
92
|
+
#
|
93
|
+
# @return [Boolean]
|
76
94
|
def success?
|
77
95
|
%w[1 2 3].include?(@status.to_s[0])
|
78
96
|
end
|
79
97
|
|
98
|
+
# Returns whether the response has a failed HTTP status code, by checking whether the status
|
99
|
+
# code is 4xx or 5xx.
|
100
|
+
#
|
101
|
+
# @return [Boolean]
|
80
102
|
def failure?
|
81
103
|
!success?
|
82
104
|
end
|
83
105
|
|
106
|
+
# Sets the HTTP status code of the response.
|
107
|
+
#
|
108
|
+
# @param v [Symbol|Integer] the status code (e.g. +200+/+:ok+)
|
109
|
+
#
|
110
|
+
# @raise [ArgumentError] if an invalid status code is provided
|
84
111
|
def status=(v)
|
85
112
|
case v
|
86
113
|
when Integer
|
@@ -89,9 +116,19 @@ module Pragma
|
|
89
116
|
when Symbol, String
|
90
117
|
fail ArgumentError, "#{v} is not a valid status phrase" unless STATUSES.invert[v.to_sym]
|
91
118
|
@status = STATUSES.invert[v.to_sym]
|
119
|
+
else
|
120
|
+
fail ArgumentError, "#status= expects an integer or a symbol, #{v} provided"
|
92
121
|
end
|
93
122
|
end
|
94
123
|
|
124
|
+
# Applies a decorator to the response's entity.
|
125
|
+
#
|
126
|
+
# @param decorator [Class] the decorator to apply
|
127
|
+
#
|
128
|
+
# @return [Response] returns itself for chaining
|
129
|
+
#
|
130
|
+
# @example Applying a decorator
|
131
|
+
# response = Pragma::Operation::Response::Ok.new(entity: user).decorate_with(UserDecorator)
|
95
132
|
def decorate_with(decorator)
|
96
133
|
tap do
|
97
134
|
self.entity = decorator.represent(entity)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pragma
|
4
|
+
module Operation
|
5
|
+
class Response
|
6
|
+
# Represents the 409 Conflict HTTP response.
|
7
|
+
class Conflict < Response
|
8
|
+
def initialize(
|
9
|
+
entity: Error.new(
|
10
|
+
error_type: :conflict,
|
11
|
+
error_message: 'Your request is in conflict with other content on this server.'
|
12
|
+
),
|
13
|
+
headers: {}
|
14
|
+
)
|
15
|
+
super(status: 409, entity: entity, headers: headers)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -3,7 +3,12 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 201 Created HTTP response.
|
6
7
|
class Created < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(entity: nil, headers: {})
|
8
13
|
super(status: 201, entity: entity, headers: headers)
|
9
14
|
end
|
@@ -3,7 +3,12 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 403 Forbidden HTTP response.
|
6
7
|
class Forbidden < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(
|
8
13
|
entity: Error.new(
|
9
14
|
error_type: :forbidden,
|
@@ -3,11 +3,16 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 500 Internal Server Error HTTP response.
|
6
7
|
class InternalServerError < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(
|
8
13
|
entity: Error.new(
|
9
14
|
error_type: :internal_server_error,
|
10
|
-
error_message: 'There was an error processing your request.'
|
15
|
+
error_message: 'There was an error processing your request.'
|
11
16
|
),
|
12
17
|
headers: {}
|
13
18
|
)
|
@@ -3,7 +3,11 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 204 No Content HTTP response.
|
6
7
|
class NoContent < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param headers [Hash] the response's headers
|
7
11
|
def initialize(headers: {})
|
8
12
|
super(status: 204, entity: nil, headers: headers)
|
9
13
|
end
|
@@ -3,7 +3,12 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 404 Not Found HTTP response.
|
6
7
|
class NotFound < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(
|
8
13
|
entity: Error.new(
|
9
14
|
error_type: :not_found,
|
@@ -3,7 +3,12 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 200 Ok HTTP response.
|
6
7
|
class Ok < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(entity: nil, headers: {})
|
8
13
|
super(status: 200, entity: entity, headers: headers)
|
9
14
|
end
|
@@ -3,11 +3,16 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 402 Payment Required HTTP response.
|
6
7
|
class PaymentRequired < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(
|
8
13
|
entity: Error.new(
|
9
14
|
error_type: :payment_required,
|
10
|
-
error_message: 'This resource requires payment.'
|
15
|
+
error_message: 'This resource requires payment.'
|
11
16
|
),
|
12
17
|
headers: {}
|
13
18
|
)
|
@@ -3,11 +3,16 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 503 Service Unavailable HTTP response.
|
6
7
|
class ServiceUnavailable < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(
|
8
13
|
entity: Error.new(
|
9
14
|
error_type: :service_unavailable,
|
10
|
-
error_message: 'This resource is not available right now. Try later.'
|
15
|
+
error_message: 'This resource is not available right now. Try later.'
|
11
16
|
),
|
12
17
|
headers: {}
|
13
18
|
)
|
@@ -3,11 +3,16 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 401 Unauthorized HTTP response.
|
6
7
|
class Unauthorized < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# @param entity [Object] the response's entity
|
11
|
+
# @param headers [Hash] the response's headers
|
7
12
|
def initialize(
|
8
13
|
entity: Error.new(
|
9
14
|
error_type: :unauthorized,
|
10
|
-
error_message: 'This resource requires authentication.'
|
15
|
+
error_message: 'This resource requires authentication.'
|
11
16
|
),
|
12
17
|
headers: {}
|
13
18
|
)
|
@@ -3,7 +3,19 @@
|
|
3
3
|
module Pragma
|
4
4
|
module Operation
|
5
5
|
class Response
|
6
|
+
# Represents the 422 Unprocessable Entity HTTP response.
|
6
7
|
class UnprocessableEntity < Response
|
8
|
+
# Initializes the response.
|
9
|
+
#
|
10
|
+
# You can provide either +entity+ or +errors+, but not both. If you provide +entity+, the
|
11
|
+
# standard response's entity will be replaced with yours. If you provide +errors+, the
|
12
|
+
# standard entity will be used and your errors will be added to the meta.
|
13
|
+
#
|
14
|
+
# @param entity [Object] the response's entity
|
15
|
+
# @param headers [Hash] the response's headers
|
16
|
+
# @param errors [Hash] the response's errors
|
17
|
+
#
|
18
|
+
# @raise [ArgumentError] if both +entity+ and +errors+ are provided
|
7
19
|
def initialize(entity: nil, headers: {}, errors: nil)
|
8
20
|
fail ArgumentError, 'You cannot provide both :entity and :errors!' if entity && errors
|
9
21
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pragma-operation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alessandro Desantis
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trailblazer-operation
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/pragma/operation/error.rb
|
132
132
|
- lib/pragma/operation/response.rb
|
133
133
|
- lib/pragma/operation/response/bad_request.rb
|
134
|
+
- lib/pragma/operation/response/conflict.rb
|
134
135
|
- lib/pragma/operation/response/created.rb
|
135
136
|
- lib/pragma/operation/response/forbidden.rb
|
136
137
|
- lib/pragma/operation/response/internal_server_error.rb
|