service_pattern 1.0.5 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6127af0c6cf5dff009118b626338c47e85cd92f920a3721b90ff17177b6d2d6f
4
- data.tar.gz: f9168398a91ef556e6aeff33f17e72b893e0d0c183d5923874b735278752ed61
3
+ metadata.gz: 63c1dea6c5ce4fe51b3e76f3d00d5ca1ae0ffe1606bd25e5bcb4015aa88b56bf
4
+ data.tar.gz: 99fcc5fe4cda47aab13599331717ea8c3f1781aa9889a2d1e208257de5c8cb16
5
5
  SHA512:
6
- metadata.gz: 55e3cb0164fc764be393f50e5ced27f2ccf698a2459d8416148692fff790317e65af55099150550099ea8a07ccf2e8badab5980d464a832ae7c40bc647f2ec63
7
- data.tar.gz: 1f027e60f2e958df5261486e011558b0d9498765832d3f45dd7caebec6d6c1656f5b6c84da8b664ac4612aa2fa0f5c99c69b69da7b3bd72f3629c1d7e20194e3
6
+ metadata.gz: b427f1b1346a9cf648a0366e0882c15244422b02e6cbeea637f23965ad74116f18427bf9df5c71c85e1f90aba61265925874d044bdd6b451d14cb44fc1e16bd7
7
+ data.tar.gz: ff393b3a73bb1951de6936005a95e47b248aecaf7ad1c96d3333bfc0d27eb422dc98c368b233e25f07e4846b49f824400331b5585ab0e77e21c1b9b1dffc56a5
@@ -1,6 +1,12 @@
1
1
  class ServicePattern::Response
2
2
  attr_reader :errors, :result
3
3
 
4
+ def self.check_response!(service, response)
5
+ return if response.is_a?(ServicePattern::Response)
6
+
7
+ raise ServicePattern::InvalidResponseError, "Expected a ServicePattern::Response from #{service.class.name} but it was instead: #{response.class.name}"
8
+ end
9
+
4
10
  def initialize(errors: [], result: nil)
5
11
  @errors = ServicePattern::Service.convert_errors(errors)
6
12
  @result = result
@@ -39,6 +39,46 @@ class ServicePattern::Service
39
39
  raise error
40
40
  end
41
41
 
42
+ def self.arguments(*arguments)
43
+ arguments.each do |argument_name|
44
+ argument argument_name
45
+ end
46
+ end
47
+
48
+ def self.argument(argument_name, **args)
49
+ attr_accessor argument_name
50
+
51
+ @arguments ||= {}
52
+ @arguments[argument_name] ||= {}
53
+
54
+ args.each do |key, value|
55
+ if key == :default
56
+ @arguments[argument_name][key] = value
57
+ else
58
+ raise ArgumentError, "Invalid argument: #{argument_name}"
59
+ end
60
+ end
61
+ end
62
+
63
+ def initialize(**args)
64
+ arguments = self.class.instance_variable_get(:@arguments)
65
+ arguments&.each do |argument_name, argument_options|
66
+ next if args.key?(argument_name)
67
+
68
+ if argument_options.key?(:default)
69
+ __send__("#{argument_name}=", argument_options.fetch(:default))
70
+ else
71
+ raise ArgumentError, "missing keyword: #{argument_name}"
72
+ end
73
+ end
74
+
75
+ args.each do |key, value|
76
+ raise ArgumentError, "unknown keyword: #{key}" unless arguments&.key?(key)
77
+
78
+ __send__("#{key}=", value)
79
+ end
80
+ end
81
+
42
82
  def can_execute?
43
83
  succeed!
44
84
  end
@@ -47,7 +87,9 @@ class ServicePattern::Service
47
87
  can_execute_response = can_execute?
48
88
  return can_execute_response unless can_execute_response.success?
49
89
 
50
- perform
90
+ response = perform
91
+ ServicePattern::Response.check_response!(self, response)
92
+ response
51
93
  rescue ServicePattern::FailedError => e
52
94
  ServicePattern::Response.new(errors: e.errors)
53
95
  end
@@ -56,6 +98,7 @@ class ServicePattern::Service
56
98
  can_execute_response = can_execute?
57
99
  ServicePattern::Service.fail!(can_execute_response.errors) unless can_execute_response.success?
58
100
  response = perform
101
+ ServicePattern::Response.check_response!(self, response)
59
102
  ServicePattern::Service.fail!(response.errors) unless response.success?
60
103
  response.result
61
104
  end
@@ -1,3 +1,3 @@
1
1
  module ServicePattern
2
- VERSION = "1.0.5".freeze
2
+ VERSION = "1.0.8".freeze
3
3
  end
@@ -1,4 +1,6 @@
1
1
  module ServicePattern
2
+ class InvalidResponseError < RuntimeError; end
3
+
2
4
  path = "#{File.dirname(__FILE__)}/service_pattern"
3
5
 
4
6
  autoload :FailError, "#{path}/fail_error"
metadata CHANGED
@@ -1,15 +1,155 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: service_pattern
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaspernj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-30 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-06-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: appraisal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: best_practice_project
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 6.0.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 6.0.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
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: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-performance
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sqlite3
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: tzinfo-data
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
13
153
  description: ServicePattern for Ruby on Rails.
14
154
  email:
15
155
  - kaspernj@gmail.com