toolbelt 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/.ruby-version +1 -1
- data/.travis.yml +1 -2
- data/lib/toolbelt.rb +9 -0
- data/lib/toolbelt/policy.rb +3 -0
- data/lib/toolbelt/service.rb +3 -0
- data/lib/toolbelt/util/option_validator.rb +14 -0
- data/lib/toolbelt/version.rb +1 -1
- data/spec/lib/toolbelt/policy_spec.rb +21 -3
- data/spec/lib/toolbelt/service_spec.rb +13 -1
- data/spec/lib/toolbelt/version_spec.rb +1 -1
- data/spec/support/shared_examples_for_option_validator.rb +21 -0
- data/toolbelt.gemspec +1 -0
- metadata +46 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12bb6c26bbb60833d04dd08d3e31f2e759f0bf31
|
4
|
+
data.tar.gz: a57efa4ad0393db69a9d4d3783a07e4bd9de5a98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b8e755e1b4c4ed6ce9626180ef346df6ca3f2d212219b46a664108fc36ddc6ffce8c3636db2fcde623dd98974d829ee89613e4683e909166ff8c57b23f6bdc0
|
7
|
+
data.tar.gz: 8bf95f7c0d2de5a16b9f2a902ec57a7e1bc9cf44281a0e4c8807f121b85c7ef364511f2abb4e99bc5487d89d2fa6bef01981331fcfe51294dc89b5d8112045af
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.1.2
|
data/.travis.yml
CHANGED
data/lib/toolbelt.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'toolbelt/version'
|
2
2
|
require 'hashie'
|
3
|
+
require 'hash_validator'
|
3
4
|
|
5
|
+
require 'toolbelt/util/option_validator'
|
4
6
|
require 'toolbelt/service'
|
5
7
|
require 'toolbelt/policy'
|
6
8
|
|
@@ -10,4 +12,11 @@ module Toolbelt
|
|
10
12
|
|
11
13
|
class OverrideInSubclassError < ToolbeltError
|
12
14
|
end
|
15
|
+
|
16
|
+
class RequiredOptionsError < ToolbeltError
|
17
|
+
# Internal
|
18
|
+
def initialize(errors)
|
19
|
+
super("Missing required options '#{errors.inspect}'")
|
20
|
+
end
|
21
|
+
end
|
13
22
|
end
|
data/lib/toolbelt/policy.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Toolbelt
|
2
2
|
class Policy
|
3
|
+
include Util::OptionValidator
|
4
|
+
|
3
5
|
attr_reader :options
|
4
6
|
|
5
7
|
def self.pass?(options = {})
|
@@ -11,6 +13,7 @@ module Toolbelt
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def initialize(options = {})
|
16
|
+
validate_options!(options)
|
14
17
|
@options = Hashie::Mash.new(options)
|
15
18
|
end
|
16
19
|
|
data/lib/toolbelt/service.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Toolbelt
|
2
2
|
class Service
|
3
|
+
include Util::OptionValidator
|
4
|
+
|
3
5
|
attr_reader :options
|
4
6
|
|
5
7
|
def self.call(options = {})
|
@@ -7,6 +9,7 @@ module Toolbelt
|
|
7
9
|
end
|
8
10
|
|
9
11
|
def initialize(options = {})
|
12
|
+
validate_options!(options)
|
10
13
|
@options = Hashie::Mash.new(options)
|
11
14
|
end
|
12
15
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Toolbelt
|
2
|
+
module Util
|
3
|
+
module OptionValidator
|
4
|
+
def validate_options!(options)
|
5
|
+
validator = HashValidator.validate(options, required_options)
|
6
|
+
fail Toolbelt::RequiredOptionsError, validator.errors unless validator.valid?
|
7
|
+
end
|
8
|
+
|
9
|
+
def required_options
|
10
|
+
{}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/toolbelt/version.rb
CHANGED
@@ -1,12 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Toolbelt::Policy' do
|
4
|
-
class
|
4
|
+
class ValidWidgetPolicy < Toolbelt::Policy
|
5
5
|
def pass?
|
6
6
|
true
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
+
class PassingStudentPolicy < Toolbelt::Policy
|
11
|
+
def pass?
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def required_options
|
18
|
+
{
|
19
|
+
:grade => 'required'
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it_behaves_like 'an object with required options' do
|
25
|
+
let(:callable) { PassingStudentPolicy.pass? }
|
26
|
+
end
|
27
|
+
|
10
28
|
describe '.pass?' do
|
11
29
|
context 'when interacted with on the base class' do
|
12
30
|
it 'raises an exception' do
|
@@ -16,14 +34,14 @@ describe 'Toolbelt::Policy' do
|
|
16
34
|
end
|
17
35
|
|
18
36
|
describe 'when properly overriden from a subclass' do
|
19
|
-
subject {
|
37
|
+
subject { ValidWidgetPolicy.pass? }
|
20
38
|
it { should eq(true) }
|
21
39
|
end
|
22
40
|
end
|
23
41
|
|
24
42
|
describe '.fail?' do
|
25
43
|
describe 'when properly overriden from a subclass' do
|
26
|
-
let(:policy) {
|
44
|
+
let(:policy) { ValidWidgetPolicy.new }
|
27
45
|
|
28
46
|
it 'returns the opposite of #pass?' do
|
29
47
|
expect(policy.fail?).to eq(!policy.pass?)
|
@@ -5,6 +5,14 @@ describe 'Toolbelt::Service' do
|
|
5
5
|
def call
|
6
6
|
true
|
7
7
|
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def required_options
|
12
|
+
{
|
13
|
+
:object => 'required'
|
14
|
+
}
|
15
|
+
end
|
8
16
|
end
|
9
17
|
|
10
18
|
describe '.call' do
|
@@ -15,8 +23,12 @@ describe 'Toolbelt::Service' do
|
|
15
23
|
end
|
16
24
|
end
|
17
25
|
|
26
|
+
it_behaves_like 'an object with required options' do
|
27
|
+
let(:callable) { CreateWidget.call }
|
28
|
+
end
|
29
|
+
|
18
30
|
describe 'when properly overriden from a subclass' do
|
19
|
-
subject { CreateWidget.call }
|
31
|
+
subject { CreateWidget.call(:object => 'mock') }
|
20
32
|
it { should eq(true) }
|
21
33
|
end
|
22
34
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
shared_examples_for 'an object with required options' do
|
2
|
+
let(:validator) { double('hash_validator', :valid? => true) }
|
3
|
+
|
4
|
+
it 'validates the options passed in against #required_options' do
|
5
|
+
expect(HashValidator).to receive(:validate).and_return(validator)
|
6
|
+
callable
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'validates the options passed in against #required_options' do
|
10
|
+
allow(HashValidator).to receive(:validate).and_return(validator)
|
11
|
+
expect(validator).to receive(:valid?)
|
12
|
+
callable
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when missing required options' do
|
16
|
+
it 'raises an exception' do
|
17
|
+
expect { callable }
|
18
|
+
.to raise_error { Toolbelt::RequiredOptionsError }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/toolbelt.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
23
|
spec.add_dependency('hashie')
|
24
|
+
spec.add_dependency('hash_validator')
|
24
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
26
|
spec.add_development_dependency('pry')
|
26
27
|
spec.add_development_dependency('rake')
|
metadata
CHANGED
@@ -1,153 +1,167 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toolbelt
|
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
|
- PJ Kelly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hash_validator
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - ~>
|
45
|
+
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '1.3'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - ~>
|
52
|
+
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '1.3'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: pry
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rspec
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rubocop
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- -
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: guard
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - ">="
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: guard-rspec
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
|
-
- -
|
129
|
+
- - ">="
|
116
130
|
- !ruby/object:Gem::Version
|
117
131
|
version: '0'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
|
-
- -
|
136
|
+
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: guard-rubocop
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- -
|
143
|
+
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
145
|
version: '0'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- -
|
150
|
+
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: codeclimate-test-reporter
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- -
|
157
|
+
- - ">="
|
144
158
|
- !ruby/object:Gem::Version
|
145
159
|
version: '0'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- -
|
164
|
+
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0'
|
153
167
|
description: A collection of POROs to use in your applications.
|
@@ -157,10 +171,10 @@ executables: []
|
|
157
171
|
extensions: []
|
158
172
|
extra_rdoc_files: []
|
159
173
|
files:
|
160
|
-
- .gitignore
|
161
|
-
- .rubocop.yml
|
162
|
-
- .ruby-version
|
163
|
-
- .travis.yml
|
174
|
+
- ".gitignore"
|
175
|
+
- ".rubocop.yml"
|
176
|
+
- ".ruby-version"
|
177
|
+
- ".travis.yml"
|
164
178
|
- CHANGELOG.md
|
165
179
|
- Gemfile
|
166
180
|
- Guardfile
|
@@ -170,12 +184,14 @@ files:
|
|
170
184
|
- lib/toolbelt.rb
|
171
185
|
- lib/toolbelt/policy.rb
|
172
186
|
- lib/toolbelt/service.rb
|
187
|
+
- lib/toolbelt/util/option_validator.rb
|
173
188
|
- lib/toolbelt/version.rb
|
174
189
|
- spec/lib/toolbelt/policy_spec.rb
|
175
190
|
- spec/lib/toolbelt/service_spec.rb
|
176
191
|
- spec/lib/toolbelt/version_spec.rb
|
177
192
|
- spec/lib/toolbelt_spec.rb
|
178
193
|
- spec/spec_helper.rb
|
194
|
+
- spec/support/shared_examples_for_option_validator.rb
|
179
195
|
- toolbelt.gemspec
|
180
196
|
homepage: https://github.com/crushlovely/toolbelt
|
181
197
|
licenses: []
|
@@ -186,17 +202,17 @@ require_paths:
|
|
186
202
|
- lib
|
187
203
|
required_ruby_version: !ruby/object:Gem::Requirement
|
188
204
|
requirements:
|
189
|
-
- -
|
205
|
+
- - ">="
|
190
206
|
- !ruby/object:Gem::Version
|
191
207
|
version: '0'
|
192
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
209
|
requirements:
|
194
|
-
- -
|
210
|
+
- - ">="
|
195
211
|
- !ruby/object:Gem::Version
|
196
212
|
version: '0'
|
197
213
|
requirements: []
|
198
214
|
rubyforge_project: toolbelt
|
199
|
-
rubygems_version: 2.
|
215
|
+
rubygems_version: 2.2.2
|
200
216
|
signing_key:
|
201
217
|
specification_version: 4
|
202
218
|
summary: A collection of POROs to use in your applications.
|
@@ -206,4 +222,4 @@ test_files:
|
|
206
222
|
- spec/lib/toolbelt/version_spec.rb
|
207
223
|
- spec/lib/toolbelt_spec.rb
|
208
224
|
- spec/spec_helper.rb
|
209
|
-
|
225
|
+
- spec/support/shared_examples_for_option_validator.rb
|