salestation 0.0.1 → 0.0.2
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 +4 -4
- data/lib/salestation/app/errors.rb +8 -12
- data/lib/salestation/app/input_verification.rb +1 -1
- data/lib/salestation/app/request.rb +14 -5
- data/lib/salestation/app.rb +42 -7
- data/lib/salestation/result_helper.rb +16 -0
- data/lib/salestation/web/responses.rb +12 -16
- data/lib/salestation/web.rb +10 -13
- data/salestation.gemspec +3 -2
- metadata +18 -4
- data/lib/salestation/app/result_helper.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a0d7d199f2064988590ab8d627bc8f809e78b24
|
4
|
+
data.tar.gz: 310534a877c76635785ea428eb4f4d89a5c1ce6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a555ce987565baaec4cb39ba51b2b4105aba8c77acd522bb80d6f40875673124f59214f22291cc46be5bd6209364a211bbe4689bbb57d45984045f249610e7c
|
7
|
+
data.tar.gz: 71b32ec7cf9e996b050636c2e50e7d4a3a6e655d311de6c89efccdcfef5dd7e3cd1609f2df7b1707ba8f3dfe5bb27c568fb6b64dbf2e9079c5003dca2d491f4e
|
@@ -1,21 +1,17 @@
|
|
1
1
|
module Salestation
|
2
|
-
|
2
|
+
class App
|
3
3
|
module Errors
|
4
|
-
class InvalidInput
|
5
|
-
|
4
|
+
class InvalidInput < Dry::Struct
|
5
|
+
constructor_type :strict_with_defaults
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
attribute :hints, Hash
|
10
|
-
end
|
7
|
+
attribute :errors, Types::Strict::Hash
|
8
|
+
attribute :hints, Types::Coercible::Hash.default({})
|
11
9
|
end
|
12
10
|
|
13
|
-
class DependencyCurrentlyUnavailable
|
14
|
-
|
11
|
+
class DependencyCurrentlyUnavailable < Dry::Struct
|
12
|
+
constructor_type :strict
|
15
13
|
|
16
|
-
|
17
|
-
attribute :message, String
|
18
|
-
end
|
14
|
+
attribute :message, Types::Strict::String
|
19
15
|
end
|
20
16
|
end
|
21
17
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Salestation
|
2
|
-
|
2
|
+
class App
|
3
3
|
class Request
|
4
|
-
def self.create(env:, input:)
|
5
|
-
new(env: env, input: input).to_success
|
4
|
+
def self.create(env:, input:, initialize_hook: nil)
|
5
|
+
new(env: env, input: input, initialize_hook: initialize_hook).to_success
|
6
6
|
end
|
7
7
|
|
8
8
|
attr_reader :env, :input
|
@@ -12,7 +12,7 @@ module Salestation
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def replace_input(new_input)
|
15
|
-
self.class.new(env: env, input: new_input).to_success
|
15
|
+
self.class.new(env: env, input: new_input, initialize_hook: @initialize_hook).to_success
|
16
16
|
end
|
17
17
|
|
18
18
|
def to_success
|
@@ -23,11 +23,20 @@ module Salestation
|
|
23
23
|
Deterministic::Result::Failure(input)
|
24
24
|
end
|
25
25
|
|
26
|
+
# Initializes an asynchronous application hook
|
27
|
+
#
|
28
|
+
# Set a listener on App instance to receive a notification when the
|
29
|
+
# asynchronous process completes.
|
30
|
+
def initialize_hook(hook, payload)
|
31
|
+
@initialize_hook.call(hook, payload)
|
32
|
+
end
|
33
|
+
|
26
34
|
private
|
27
35
|
|
28
|
-
def initialize(env:, input:)
|
36
|
+
def initialize(env:, input:, initialize_hook:)
|
29
37
|
@env = env
|
30
38
|
@input = input
|
39
|
+
@initialize_hook = initialize_hook
|
31
40
|
end
|
32
41
|
end
|
33
42
|
end
|
data/lib/salestation/app.rb
CHANGED
@@ -1,12 +1,47 @@
|
|
1
1
|
require 'deterministic'
|
2
|
-
require '
|
3
|
-
|
4
|
-
require_relative './app/errors'
|
5
|
-
require_relative './app/request'
|
6
|
-
require_relative './app/input_verification'
|
7
|
-
require_relative './app/result_helper'
|
2
|
+
require 'dry-struct'
|
3
|
+
require 'dry-types'
|
8
4
|
|
9
5
|
module Salestation
|
10
|
-
|
6
|
+
class App
|
7
|
+
module Types
|
8
|
+
include Dry::Types.module
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(env:, hooks: {})
|
12
|
+
@environment = env
|
13
|
+
@hook_listeners = {}
|
14
|
+
@hooks = hooks
|
15
|
+
end
|
16
|
+
|
17
|
+
def start
|
18
|
+
@hooks.each do |hook_type, hook|
|
19
|
+
hook.start_listening do |payload|
|
20
|
+
@hook_listeners.fetch(hook_type, []).each { |handle| handle.call(payload) }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_request(input)
|
26
|
+
Request.create(env: @environment, input: input, initialize_hook: method(:initialize_hook))
|
27
|
+
end
|
28
|
+
|
29
|
+
def register_listener(hook_type, listener)
|
30
|
+
@hook_listeners[hook_type] ||= []
|
31
|
+
@hook_listeners[hook_type].push(listener)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def initialize_hook(hook_type, payload)
|
37
|
+
raise "Unknown hook_type #{hook_type}" unless @hooks[hook_type]
|
38
|
+
|
39
|
+
@hooks[hook_type].init(payload)
|
40
|
+
end
|
11
41
|
end
|
12
42
|
end
|
43
|
+
|
44
|
+
require_relative './app/errors'
|
45
|
+
require_relative './app/request'
|
46
|
+
require_relative './app/input_verification'
|
47
|
+
require_relative './result_helper'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Salestation
|
2
|
+
module ResultHelper
|
3
|
+
def observe(&block)
|
4
|
+
-> (result_value) do
|
5
|
+
block.call(result_value)
|
6
|
+
Deterministic::Result::Success(result_value)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def empty_success_response
|
11
|
+
-> (request) do
|
12
|
+
Deterministic::Result::Success({})
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -12,37 +12,33 @@ module Salestation
|
|
12
12
|
module Response
|
13
13
|
def with_code(code)
|
14
14
|
Class.new(self) do
|
15
|
-
|
15
|
+
define_singleton_method :new do |attrs|
|
16
16
|
super(attrs.merge(status: code))
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
class Error
|
22
|
+
class Error < Dry::Struct
|
23
23
|
extend Response
|
24
|
-
|
24
|
+
constructor_type :strict_with_defaults
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
attribute :context, Hash, default: {}
|
31
|
-
end
|
26
|
+
attribute :status, Types::Strict::Int
|
27
|
+
attribute :message, Types::Strict::String
|
28
|
+
attribute :debug_message, Types::String.default('')
|
29
|
+
attribute :context, Types::Hash.default({})
|
32
30
|
|
33
31
|
def body
|
34
|
-
{message: message}
|
32
|
+
{message: message, debug_message: debug_message}
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
38
|
-
class Success
|
36
|
+
class Success < Dry::Struct
|
39
37
|
extend Response
|
40
|
-
|
38
|
+
constructor_type :strict
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
attribute :body, Hash
|
45
|
-
end
|
40
|
+
attribute :status, Types::Strict::Int
|
41
|
+
attribute :body, Types::Strict::Hash
|
46
42
|
end
|
47
43
|
|
48
44
|
class UnprocessableEntityFromSchemaErrors
|
data/lib/salestation/web.rb
CHANGED
@@ -1,19 +1,12 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'deterministic'
|
2
|
+
require 'dry-struct'
|
3
|
+
require 'dry-types'
|
3
4
|
|
4
5
|
module Salestation
|
5
6
|
module Web
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
},
|
10
|
-
App::Errors::DependencyCurrentlyUnavailable => -> (error) {
|
11
|
-
Responses::ServiceUnavailable.new(
|
12
|
-
message: error.message,
|
13
|
-
debug_message: "Please try again later"
|
14
|
-
)
|
15
|
-
}
|
16
|
-
}.freeze
|
7
|
+
module Types
|
8
|
+
include Dry::Types.module
|
9
|
+
end
|
17
10
|
|
18
11
|
def process(response)
|
19
12
|
result = response.map_err(&ErrorMapper.map).value
|
@@ -27,3 +20,7 @@ module Salestation
|
|
27
20
|
end
|
28
21
|
end
|
29
22
|
end
|
23
|
+
|
24
|
+
require_relative './web/responses'
|
25
|
+
require_relative './web/error_mapper'
|
26
|
+
require_relative './result_helper'
|
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.0.
|
7
|
+
spec.version = "0.0.2"
|
8
8
|
spec.authors = ["SaleMove Developers"]
|
9
9
|
spec.email = ["support@salemove.com"]
|
10
10
|
|
@@ -24,5 +24,6 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rspec", "~> 3.0"
|
25
25
|
|
26
26
|
spec.add_dependency 'deterministic'
|
27
|
-
spec.add_dependency '
|
27
|
+
spec.add_dependency 'dry-struct'
|
28
|
+
spec.add_dependency 'dry-types'
|
28
29
|
end
|
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.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SaleMove Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -67,7 +67,21 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: dry-struct
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: dry-types
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -99,7 +113,7 @@ files:
|
|
99
113
|
- lib/salestation/app/errors.rb
|
100
114
|
- lib/salestation/app/input_verification.rb
|
101
115
|
- lib/salestation/app/request.rb
|
102
|
-
- lib/salestation/
|
116
|
+
- lib/salestation/result_helper.rb
|
103
117
|
- lib/salestation/web.rb
|
104
118
|
- lib/salestation/web/error_mapper.rb
|
105
119
|
- lib/salestation/web/responses.rb
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Salestation
|
2
|
-
module App
|
3
|
-
module ResultHelper
|
4
|
-
def observe(&block)
|
5
|
-
-> (result_value) do
|
6
|
-
block.call(result_value)
|
7
|
-
Deterministic::Result::Success(result_value)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def empty_success_response
|
12
|
-
-> (request) do
|
13
|
-
Deterministic::Result::Success({})
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|