salestation 0.11.0 → 0.12.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
- SHA1:
3
- metadata.gz: 6cb381a42babd96a28c8997c43485bc9bcf4640e
4
- data.tar.gz: 0c2c96eaea75568432a85ae6ee439ba8a25c8d94
2
+ SHA256:
3
+ metadata.gz: 46cd68d7bab2619bbe24c7c01e668b7e6d5279db7e116a024b4860c43cbe1f8c
4
+ data.tar.gz: 4e6ce42687e5ff792d425d6d2c1ed80b230fa9c1ca57d16b107c976c961d749c
5
5
  SHA512:
6
- metadata.gz: 9d2aef67f53d9b52441968c3881996338fb0517fa5051df2b8a1fa8fe43b983f1cc9d8b9ee73dabc9d9dc57afe189235141863f93462a8faa58dd138ac5941ca
7
- data.tar.gz: 47521d25f27864525b3792ef407e482ccae15e1596431641d2c7fa57ab799e3fe4f84b1ae560f94bde96fc7d70ef28e3a9c674b1a9fa3810daddfa2821f42ddf
6
+ metadata.gz: b0c6b7c774c875f6b24c195dbf9300bdca6a70ea288c6ebd80d0612f801b5a058b726dd936ecedb1e1818c4d50bb1b7e4f11de0188613a6fc7f07b8735be94f5
7
+ data.tar.gz: 4af44c26fa86b7d2f3b3bd3305feb035723934419becdb5e113e5efe4630ea488638a401b5e199bfc30dc27c2fa875353577e9b0fcf738349096432a4365eee0
data/README.md CHANGED
@@ -86,8 +86,15 @@ Multiple extractors can be merged together. If two or more extractors use the sa
86
86
  Define a route
87
87
 
88
88
  ```ruby
89
+ include Salestation::Web.new
89
90
  include Salestation::Web::Extractors
90
91
 
92
+ APP = Salestation::App.new(env: {})
93
+
94
+ def create_app_request
95
+ -> (input) { App.create_request(input) }
96
+ end
97
+
91
98
  post '/hello/:name' do |name|
92
99
  coercions = {age: ->(age) { age.to_s }}
93
100
 
@@ -95,27 +102,12 @@ post '/hello/:name' do |name|
95
102
  .merge(ConstantInput[name: name])
96
103
  .merge(HeadersExtractor[{'authorization' => :auth}])
97
104
 
98
- process extractor do |request|
99
- HelloUser.call(request)
100
- .map(Responses.to_ok)
101
- end
102
- end
105
+ response = extractor.call(request)
106
+ .map(create_app_request)
107
+ .map(HelloUser)
108
+ .map(Responses.to_ok)
103
109
 
104
- ERROR_MAPPER = Salestation::Web::ErrorMapper.new
105
-
106
- def process(extract_input, &process_request)
107
- response = extract_input.call(request).match do
108
- Success() do |value|
109
- create_request(value)
110
- .map(process_request)
111
- .map_err(&ERROR_MAPPER.map)
112
- end
113
- Failure() do |value|
114
- Result::Success(value)
115
- end
116
- end
117
- rescue Salestation::Web::ErrorMapper::UndefinedErrorClass => exception
118
- raise exception
110
+ process(response)
119
111
  end
120
112
  ```
121
113
 
@@ -2,54 +2,38 @@ module Salestation
2
2
  class App
3
3
  module Errors
4
4
  class InvalidInput < Dry::Struct
5
- constructor_type :strict_with_defaults
6
-
7
5
  attribute :errors, Types::Strict::Hash
8
6
  attribute :hints, Types::Coercible::Hash.default({})
9
7
  end
10
8
 
11
9
  class DependencyCurrentlyUnavailable < Dry::Struct
12
- constructor_type :strict
13
-
14
10
  attribute :message, Types::Strict::String
15
11
  end
16
12
 
17
13
  class RequestedResourceNotFound < Dry::Struct
18
- constructor_type :strict
19
-
20
14
  attribute :message, Types::Strict::String
21
15
  end
22
16
 
23
17
  class Forbidden < Dry::Struct
24
- constructor_type :strict
25
-
26
18
  attribute :message, Types::Strict::String
27
19
  end
28
20
 
29
21
  class Conflict < Dry::Struct
30
- constructor_type :strict
31
-
32
22
  attribute :message, Types::Strict::String
33
23
  attribute :debug_message, Types::Strict::String
34
24
  end
35
25
 
36
26
  class NotAcceptable < Dry::Struct
37
- constructor_type :strict
38
-
39
27
  attribute :message, Types::Strict::String
40
28
  attribute :debug_message, Types::Strict::String
41
29
  end
42
30
 
43
31
  class UnsupportedMediaType < Dry::Struct
44
- constructor_type :strict
45
-
46
32
  attribute :message, Types::Strict::String
47
33
  attribute :debug_message, Types::Strict::String
48
34
  end
49
35
 
50
36
  class RequestEntityTooLarge < Dry::Struct
51
- constructor_type :strict
52
-
53
37
  attribute :message, Types::Strict::String
54
38
  end
55
39
  end
@@ -20,7 +20,12 @@ module Salestation
20
20
  const_set :Responses, Salestation::Web::Responses
21
21
 
22
22
  define_method(:process) do |response|
23
- result = response.map_err(error_mapper.map).value
23
+ result =
24
+ if response.value.is_a?(Salestation::Web::Responses::Response)
25
+ response.value
26
+ else
27
+ response.map_err(error_mapper.map).value
28
+ end
24
29
 
25
30
  status result.status
26
31
  json result.body
@@ -17,8 +17,8 @@ module Salestation
17
17
  -> (*) { Deterministic::Result::Success(Responses::NoContent.new(body: {})) }
18
18
  end
19
19
 
20
- module Response
21
- def with_code(code)
20
+ class Response < Dry::Struct
21
+ def self.with_code(code)
22
22
  Class.new(self) do
23
23
  define_singleton_method :new do |attrs|
24
24
  super(attrs.merge(status: code))
@@ -27,11 +27,8 @@ module Salestation
27
27
  end
28
28
  end
29
29
 
30
- class Error < Dry::Struct
31
- extend Response
32
- constructor_type :strict_with_defaults
33
-
34
- attribute :status, Types::Strict::Int
30
+ class Error < Response
31
+ attribute :status, Types::Strict::Integer
35
32
  attribute :message, Types::Strict::String
36
33
  attribute :debug_message, Types::String.default('')
37
34
  attribute :context, Types::Hash.default({})
@@ -41,11 +38,8 @@ module Salestation
41
38
  end
42
39
  end
43
40
 
44
- class Success < Dry::Struct
45
- extend Response
46
- constructor_type :strict
47
-
48
- attribute :status, Types::Strict::Int
41
+ class Success < Response
42
+ attribute :status, Types::Strict::Integer
49
43
  attribute :body, Types::Strict::Hash | Types::Strict::Array
50
44
  end
51
45
 
data/salestation.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "salestation"
7
- spec.version = "0.11.0"
7
+ spec.version = "0.12.0"
8
8
  spec.authors = ["SaleMove TechMovers"]
9
9
  spec.email = ["techmovers@salemove.com"]
10
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salestation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SaleMove TechMovers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-30 00:00:00.000000000 Z
11
+ date: 2018-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  version: '0'
157
157
  requirements: []
158
158
  rubyforge_project:
159
- rubygems_version: 2.6.13
159
+ rubygems_version: 2.7.6
160
160
  signing_key:
161
161
  specification_version: 4
162
162
  summary: ''