minitest-sequel 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ba7809791b48d3d37abf55385778ff37b31a0743
4
+ data.tar.gz: eb4eca066d3a6a7e39a975a85f5587ad5f6faecc
5
+ SHA512:
6
+ metadata.gz: 73425aa76579e6118327dc672089e9725451551a00bf80d39b388c666eb31d6f1f26ba905935cf38ed0aad0446813783db0f6cc34d126befdd9b405ad1035007
7
+ data.tar.gz: 101c5b1c3c9b2d8e0be36353e63f8e9c84e7e371952fb7c7a8b17770e7bdc6f38aacd61e450e8df9b324e0ac9ba143b47035c1c86190daae4c65ad11f993a931
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1,20 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
+
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of
6
+ level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance,
7
+ body size, race, ethnicity, age, or religion.
8
+
9
+ Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory
10
+ comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
11
+
12
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki
13
+ edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not
14
+ follow the Code of Conduct may be removed from the project team.
15
+
16
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or
17
+ contacting one or more of the project maintainers.
18
+
19
+ This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0,
20
+ available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in minitest-sequel.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Kematzy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,345 @@
1
+ # Minitest-Sequel
2
+
3
+ [Minitest](https://github.com/seattlerb/minitest) assertions to speed-up development and testing of
4
+ [Sequel](http://sequel.jeremyevans.net/) database setups.
5
+
6
+ The general hope is that this gem will contain a variety of useful assertions in all areas of testing Sequel database
7
+ code within your apps, gems, etc.
8
+
9
+ Please help out with missing features / functionality.
10
+
11
+ -----
12
+
13
+ ## Model Definitions
14
+
15
+
16
+ ### `assert_have_column ()`
17
+
18
+ Conveniently test your Model definitions as follows:
19
+
20
+ let(:m) { Post.first }
21
+
22
+ it { assert_have_column(m, :title, type: :string, db_type: 'varchar(250)', allow_null: :false ) }
23
+
24
+ # definition of args
25
+ assert_have_column(<instance>, <column_name>, <options>, <custom_error_message>)
26
+
27
+
28
+ The `assert_have_column()` method first tests if the column name is defined in the Model and then checks all passed options.
29
+
30
+
31
+ The following options are valid and checked:
32
+
33
+ * :type
34
+ * :db_type
35
+ * :allow_null
36
+ * :max_length
37
+ * :default
38
+ * :primary_key
39
+ * :auto_increment
40
+
41
+
42
+ In the event the specs differ from the actual database implementation an extensive error message with the
43
+ differing option(s) is provided to help speed up debugging the issue:
44
+
45
+ Expected Post model to have column: :title with: \
46
+ { type: 'string', db_type: 'varchar(250)', allow_null: 'false' } \
47
+ but found: { db_type: 'varchar(255)' }
48
+
49
+
50
+ **Please NOTE!**
51
+
52
+ To test options with a value that is either `nil`, `true` or `false`, please use `:nil`, `:false` or `:true` and provide
53
+ numbers as 'strings' instead, ie: '1' instead of 1.
54
+
55
+
56
+ <br>
57
+ <br>
58
+
59
+ ----
60
+
61
+ <br>
62
+
63
+
64
+ ## Associations
65
+
66
+ Conveniently test model associations quickly and easily with these Minitest assertions:
67
+
68
+ * `assert_association_one_to_one`
69
+ * `assert_association_one_to_many`
70
+ * `assert_association_many_to_one`
71
+ * `assert_association_many_to_many`
72
+ * `assert_association`
73
+
74
+ <br>
75
+ <br>
76
+
77
+
78
+ ### `:one_to_one` association
79
+
80
+
81
+ A model defined with an association like this:
82
+
83
+ class Post < Sequel::Model
84
+ one_to_one :first_comment, :class=>:Comment, :order=>:id
85
+ end
86
+
87
+ Can be easily and quickly tested with `assert_association_one_to_one()` like this:
88
+
89
+ let(:m) { Post.first }
90
+
91
+ it { assert_association_one_to_one(m, :first_comment) }
92
+
93
+
94
+ # definition of args
95
+ assert_association_one_to_one(
96
+ <model_instance>,
97
+ <association_name>, # ie: :first_comment
98
+ <options>,
99
+ <custom_error_message>
100
+ )
101
+
102
+
103
+ In the event of errors an extensive error message is provided:
104
+
105
+ # example error message
106
+
107
+ Expected Author to have a :one_to_one association :key_posts but no association ':key_posts' was found -
108
+ available associations are: [ \
109
+ {:attribute=>:posts, :type=>:one_to_many, :class=>:Post, :keys=>[:author_id]}, \
110
+ {:attribute=>:key_post, :type=>:one_to_one, :class=>:Post, :keys=>[:author_id]} \
111
+ ]
112
+
113
+ <br>
114
+ <br>
115
+
116
+ ### `:one_to_many` association
117
+
118
+ A model defined with an association like this:
119
+
120
+ class Post < Sequel::Model
121
+ one_to_many :comments
122
+ end
123
+
124
+ Can be easily and quickly tested with `assert_association_one_to_many()` like this:
125
+
126
+ let(:p) { Post.first }
127
+
128
+ it { assert_association_one_to_many(p, :comments) }
129
+
130
+
131
+ As above the assertion provides an extensive error message if something is wrong.
132
+
133
+ <br>
134
+ <br>
135
+
136
+ ### `:many_to_one` association
137
+
138
+ A model defined with an association like this:
139
+
140
+ class Post < Sequel::Model
141
+ many_to_one :author
142
+ end
143
+
144
+ Can be easily and quickly tested with `assert_association_many_to_one()` like this:
145
+
146
+ let(:p) { Post.first }
147
+
148
+ it { assert_association_many_to_one(p, :author) }
149
+
150
+
151
+
152
+ As above the assertion provides an extensive error message if something is wrong.
153
+
154
+ <br>
155
+ <br>
156
+
157
+ ### `:many_to_many` association
158
+
159
+ A model defined with an association like this:
160
+
161
+ class Post < Sequel::Model
162
+ many_to_many :categories
163
+ end
164
+
165
+ Can be easily and quickly tested with `assert_association_many_to_many()` like this:
166
+
167
+ let(:p) { Post.first }
168
+
169
+ it { assert_association_many_to_many(p, :categories) }
170
+
171
+
172
+ If something is wrong an extensive error message is provided:
173
+
174
+ Expected Category to have a :many_to_many association :posts with given options: \
175
+ {:class_name=>'Posts'} but should be {:class_name=>'Post' }
176
+
177
+ or
178
+
179
+ Expected Category to have a :many_to_many association :post but no association ':post' was found - \
180
+ available associations are: [ \
181
+ { :attribute=>:posts, :type=>:many_to_many, :class=>:Post, :join_table=>:categories_posts, \
182
+ :left_keys=>[:category_id], :right_keys=>[:post_id]
183
+ }
184
+ ]
185
+
186
+
187
+ <br>
188
+ <br>
189
+
190
+ ### `assert_association() assertion`
191
+
192
+ if the above assertion methods are insufficient, you can use the base `assert_association` method instead.
193
+
194
+ it "should have a :one_through_one association" do
195
+ assert_association(Post, :one_through_one, :author)
196
+ end
197
+
198
+
199
+ #
200
+ assert_association(
201
+ <model_class>, <association_type>, <association_name>, <options>, <custom_error_message>
202
+ )
203
+
204
+
205
+ <br>
206
+ <br>
207
+
208
+ ----
209
+
210
+ <br>
211
+
212
+ ## Validations
213
+
214
+ **NOTE! NOT YET IMPLEMENTED! WORK IN PROGRESS**
215
+
216
+
217
+ If you are using the recommended `:validation_helpers` plugin in your app, the following instance validation methods
218
+ are supported:
219
+
220
+ * `validates_presence`
221
+
222
+ * `validates_exact_length`
223
+
224
+ * `validates_length_range`
225
+
226
+ * `validates_max_length`
227
+
228
+ * `validates_min_length`
229
+
230
+ * `validates_format`
231
+
232
+ * `validates_includes`
233
+
234
+ * `validates_integer`
235
+
236
+ * `validates_not_string`
237
+
238
+ * `validates_numeric`
239
+
240
+ * `validates_unique`
241
+
242
+
243
+ The following valid options will be checked:
244
+
245
+ * `:allow_blank`
246
+ * `:allow_missing`
247
+ * `:allow_nil`
248
+ * `:message`
249
+
250
+
251
+ ### Usage
252
+
253
+ A model defined with validations like this:
254
+
255
+ class Post < Sequel::Model
256
+ plugin :validation_helpers
257
+
258
+ def validate
259
+ super
260
+ validates_presence(:title)
261
+ validates_format(/\w+/, :title)
262
+ end
263
+ end
264
+
265
+ Can be quickly tested like this:
266
+
267
+ <snip...>
268
+
269
+ let(:m) { Post.first }
270
+
271
+ it "shoud validate presence of :title column" do
272
+ assert_validates_presence(m, :title)
273
+ end
274
+
275
+ it "shoud validate format of :title column with regexp" do
276
+ assert_validates_format(m, :title, /\w+/)
277
+ end
278
+
279
+
280
+
281
+ ## Installation
282
+
283
+ Add this line to your application's Gemfile:
284
+
285
+ gem 'minitest-sequel'
286
+
287
+ And then execute:
288
+
289
+ $ bundle
290
+
291
+ Or install it yourself as:
292
+
293
+ $ gem install minitest-sequel
294
+
295
+
296
+ ## Usage
297
+
298
+ In your project's `spec/spec_helper.rb` or `test/test_helper.rb` file ensure the following code is present:
299
+
300
+
301
+ require 'minitest/autorun'
302
+ require 'minitest/sequel'
303
+ require 'sqlite3' # using sqlite for tests
304
+
305
+ # The preferred default validations plugin, which uses instance-level methods.
306
+ Sequel::Model.plugin(:validation_helpers)
307
+
308
+ # connect to database
309
+ DB = Sequel.sqlite # :memory
310
+
311
+ ## add migrations and seeds below
312
+
313
+ DB.create_table(:posts) do
314
+ primary_key :id
315
+ <snip...>
316
+ end
317
+
318
+
319
+ Then in your tests you should be good to go when using the sequel assertions.
320
+
321
+
322
+
323
+ ## Development
324
+
325
+ After checking out the repo, run `bundle install` to install all dependencies. Then, run `rake spec` to run the tests.
326
+
327
+ To install this gem onto your local machine, run `bundle exec rake install`.
328
+
329
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`,
330
+ which will create a git tag for the version, push git commits and tags, and push the `.gem` file to
331
+ [rubygems.org](https://rubygems.org).
332
+
333
+
334
+ ## Contributing
335
+
336
+ Bug reports and pull requests are welcome on GitHub at https://github.com/kematzy/minitest-sequel/issues.
337
+
338
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere
339
+ to the [Contributor Covenant](contributor-covenant.org) code of conduct.
340
+
341
+
342
+ ## License
343
+
344
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
345
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:spec) do |t|
5
+ t.libs << "spec"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['spec/**/*_spec.rb']
8
+ end
9
+
10
+ task :default => :spec
@@ -0,0 +1,276 @@
1
+ require "minitest/sequel/version"
2
+ require 'sequel'
3
+
4
+ module Minitest
5
+ module Sequel
6
+
7
+
8
+ # Conveniently test your Model definitions as follows:
9
+ #
10
+ # let(:m) { Post.first }
11
+ #
12
+ # it { assert_have_column(m, :title, type: :string, db_type: 'varchar(250)', allow_null: :false ) }
13
+ #
14
+ # # assert_have_column(<instance>, <column_name>, <options>, <custom_error_message>)
15
+ #
16
+ #
17
+ # `assert_have_column()` first tests if the column name is defined in the Model and then checks all passed options.
18
+ # The following options are valid and checked:
19
+ #
20
+ # * :type
21
+ # * :db_type
22
+ # * :allow_null
23
+ # * :max_length
24
+ # * :default
25
+ # * :primary_key
26
+ # * :auto_increment
27
+ #
28
+ # In the event the specs differ from the actual database implementation an extensive error message
29
+ # with the differing option(s) is provided to help speed up debugging the issue:
30
+ #
31
+ # Expected Post model to have column: :title with: \
32
+ # { type: 'string', db_type: 'varchar(250)', allow_null: 'false' } \
33
+ # but found: { db_type: 'varchar(255)' }
34
+ #
35
+ #
36
+ # **Please NOTE!**
37
+ #
38
+ # To test options with a value that is either `nil`, `true` or `false`, please use `:nil`,
39
+ # `:false` or `:true` and provide numbers as 'strings' instead.
40
+ #
41
+ #
42
+ def assert_have_column(obj, attribute, opts={}, msg=nil)
43
+ msg = msg.nil? ? '' : "#{msg}\n"
44
+ msg << "Expected #{obj.class} model to have column: :#{attribute.to_s}"
45
+ err_msg = []; conf_msg = []
46
+ # check if column exists
47
+ col = obj.db.schema(obj.class.table_name).detect{|col| col[0]==attribute}
48
+ matching = !col.nil?
49
+
50
+ # bail out if no matching column
51
+ unless matching
52
+ msg << " but no such column exists"
53
+ assert matching, msg
54
+ end
55
+
56
+ # bail out if options provided are invalid
57
+ valid_opts = [:type, :db_type, :allow_null, :max_length, :default, :primary_key, :auto_increment]
58
+ invalid_opts = opts.keys.reject { |o| valid_opts.include?(o) }
59
+ unless invalid_opts.empty?
60
+ msg << " : ERROR: invalid option(s) provided: { "
61
+ invalid_opts.each{|o| msg << "#{o.inspect}; " }
62
+ msg << " } valid options are: #{valid_opts.inspect}"
63
+ assert false, msg
64
+ end
65
+
66
+ # carry on...
67
+
68
+ # check type
69
+ unless opts[:type].nil?
70
+ expected = (col[1][:type].to_s == opts[:type].to_s)
71
+ conf_msg << "type: '#{opts[:type]}'"
72
+ unless expected
73
+ err_msg << "type: '#{col[1][:type]}'"
74
+ end
75
+ matching &&= expected
76
+ end
77
+
78
+ # check db_type
79
+ unless opts[:db_type].nil?
80
+ expected = (col[1][:db_type].to_s == opts[:db_type].to_s)
81
+ conf_msg << "db_type: '#{opts[:db_type]}'"
82
+ unless expected
83
+ err_msg << "db_type: '#{col[1][:db_type]}'"
84
+ end
85
+ matching &&= expected
86
+ end
87
+
88
+ # check :allow_null
89
+ unless opts[:allow_null].nil?
90
+ _v = _convert_value(opts[:allow_null])
91
+ expected = (opts[:allow_null] === _v)
92
+ conf_msg << "allow_null: '#{opts[:allow_null]}'"
93
+ unless expected
94
+ err_msg << "allow_null: '#{col[1][:allow_null]}'"
95
+ end
96
+ matching &&= expected
97
+ end
98
+
99
+ # check :max_length
100
+ unless opts[:max_length].nil?
101
+ expected = (col[1][:max_length] === opts[:max_length])
102
+ conf_msg << "max_length: '#{opts[:max_length]}'"
103
+ unless expected
104
+ err_msg << "max_length: '#{col[1][:max_length]}'"
105
+ end
106
+ matching &&= expected
107
+ end
108
+
109
+ # check :default
110
+ unless opts[:default].nil?
111
+ _v = _convert_value(opts[:default])
112
+ expected = (col[1][:default] === _v )
113
+ conf_msg << "default: '#{opts[:default]}'"
114
+ unless expected
115
+ err_msg << "default: '#{col[1][:default].inspect}'"
116
+ end
117
+ matching &&= expected
118
+ end
119
+
120
+ # check :primary_key
121
+ unless opts[:primary_key].nil?
122
+ _v = _convert_value(opts[:primary_key])
123
+ expected = (col[1][:primary_key] === _v)
124
+ conf_msg << "primary_key: '#{opts[:primary_key]}'"
125
+ unless expected
126
+ err_msg << "primary_key: '#{col[1][:primary_key]}'"
127
+ end
128
+ matching &&= expected
129
+ end
130
+
131
+ # check :auto_increment
132
+ unless opts[:auto_increment].nil?
133
+ _v = _convert_value(opts[:auto_increment])
134
+ expected = (col[1][:auto_increment] === _v)
135
+ conf_msg << "auto_increment: '#{opts[:auto_increment]}'"
136
+ unless expected
137
+ err_msg << "auto_increment: '#{col[1][:auto_increment]}'"
138
+ end
139
+ matching &&= expected
140
+ end
141
+
142
+ msg = msg << " with: { #{conf_msg.join(', ')} } but found: { #{err_msg.join(', ')} }"
143
+ assert matching, msg
144
+
145
+ end
146
+
147
+ def assert_association_one_to_one(obj, attribute, opts={}, msg=nil)
148
+ assert_association(obj.class, :one_to_one, attribute, opts, msg)
149
+ end
150
+
151
+ def assert_association_one_to_many(obj, attribute, opts={}, msg=nil)
152
+ assert_association(obj.class, :one_to_many, attribute, opts, msg)
153
+ end
154
+
155
+ def assert_association_many_to_one(obj, attribute, opts={}, msg=nil)
156
+ assert_association(obj.class, :many_to_one, attribute, opts, msg)
157
+ end
158
+
159
+ def assert_association_many_to_many(obj, attribute, opts={}, msg=nil)
160
+ assert_association(obj.class, :many_to_many, attribute, opts, msg)
161
+ end
162
+
163
+ def assert_association(klass, association_type, attribute, opts={}, msg=nil)
164
+ msg = msg.nil? ? '' : "#{msg}\n"
165
+ msg << "Expected #{klass.inspect} to have a #{association_type.inspect} association #{attribute.inspect}"
166
+ assoc = klass.association_reflection(attribute) || {}
167
+ if assoc.empty?
168
+ msg << " but no association '#{attribute.inspect}' was found"
169
+ arr = []
170
+ klass.associations.each do |a|
171
+ o = klass.association_reflection(a)
172
+ if o[:type] == :many_to_many
173
+ arr << { attribute: o[:name], type: o[:type], class: o[:class_name].to_sym, join_table: o[:join_table], left_keys: o[:left_keys], right_keys: o[:right_keys] }
174
+ else
175
+ arr << { attribute: o[:name], type: o[:type], class: o[:class_name].to_sym, keys: o[:keys] }
176
+ end
177
+ end
178
+ msg << " - \navailable associations are: [ #{arr.join(', ')} ]\n"
179
+ assert false, msg
180
+ else
181
+ matching = assoc[:type] == association_type
182
+ err_msg = []; conf_msg = []
183
+ opts.each { |key, value|
184
+ conf_msg << { key => value }
185
+ if assoc[key]!= value
186
+ err_msg << { key => assoc[key] }
187
+ matching = false
188
+ end
189
+ }
190
+ msg << " with given options: #{conf_msg.join(', ')} but should be #{err_msg.join(', ')}"
191
+ assert matching, msg
192
+ end
193
+ end
194
+
195
+ ## VALIDATIONS
196
+
197
+ def assert_validates_presence(obj, attribute, opts={}, msg=nil)
198
+ assert_validates(obj, :presence, attribute, opts, msg)
199
+ end
200
+
201
+ def assert_validates_length(obj, attribute, opts={}, msg=nil)
202
+ assert_validates(obj, :length, attribute, opts, msg)
203
+ end
204
+
205
+ def assert_validates_exact_length(obj, attribute, opts={}, msg=nil)
206
+ assert_validates(obj, :exact_length, attribute, opts, msg)
207
+ end
208
+
209
+ def assert_validates_length_range(obj, attribute, opts={}, msg=nil)
210
+ assert_validates(obj, :length_range, attribute, opts, msg)
211
+ end
212
+
213
+ def assert_validates_max_length(obj, attribute, opts={}, msg=nil)
214
+ assert_validates(obj, :max_length, attribute, opts, msg)
215
+ end
216
+
217
+ def assert_validates_min_length(obj, attribute, opts={}, msg=nil)
218
+ assert_validates(obj, :min_length, attribute, opts, msg)
219
+ end
220
+
221
+ def assert_validates_format(obj, attribute, opts={}, msg=nil)
222
+ assert_validates(obj, :format, attribute, opts, msg)
223
+ end
224
+
225
+ def assert_validates_includes(obj, attribute, opts={}, msg=nil)
226
+ assert_validates(obj, :includes, attribute, opts, msg)
227
+ end
228
+
229
+ def assert_validates_integer(obj, attribute, opts={}, msg=nil)
230
+ assert_validates(obj, :integer, attribute, opts, msg)
231
+ end
232
+
233
+ def assert_validates_numeric(obj, attribute, opts={}, msg=nil)
234
+ assert_validates(obj, :numeric, attribute, opts, msg)
235
+ end
236
+
237
+ def assert_validates_not_string(obj, attribute, opts={}, msg=nil)
238
+ assert_validates(obj, :not_string, attribute, opts, msg)
239
+ end
240
+
241
+ def assert_validates_unique(obj, attribute, opts={}, msg=nil)
242
+ assert_validates(obj, :unique, attribute, opts, msg)
243
+ end
244
+
245
+ def assert_validates(obj, validation_type, attribute, opts={}, msg=nil)
246
+
247
+ end
248
+
249
+
250
+ private
251
+
252
+ def _convert_value(val)
253
+ _v = case val
254
+ when :nil
255
+ nil
256
+ when :false
257
+ false
258
+ when :true
259
+ true
260
+ else
261
+ val
262
+ end
263
+ _v
264
+ end
265
+
266
+ def _valid_validation_options
267
+ [ :allow_blank, :allow_missing, :allow_nil, :message ]
268
+ end
269
+
270
+ end
271
+
272
+ module Assertions
273
+ include Minitest::Sequel
274
+ end
275
+
276
+ end
@@ -0,0 +1,5 @@
1
+ module Minitest
2
+ module Sequel
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'minitest/sequel/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "minitest-sequel"
8
+ spec.version = Minitest::Sequel::VERSION
9
+ spec.authors = ["Kematzy"]
10
+ spec.email = ["kematzy@gmail.com"]
11
+
12
+ spec.summary = %q{Minitest assertions to speed-up development and testing of Sequel database setups.}
13
+ spec.description = %q{A collection of convenient assertions to enable faster DRY'er testing of Sequel database apps/gems.}
14
+ spec.homepage = "https://github.com/kematzy/minitest-sequel"
15
+ spec.license = "MIT"
16
+
17
+ # # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # # delete this section to allow pushing this gem to any host.
19
+ # if spec.respond_to?(:metadata)
20
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
+ # else
22
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
+ # end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ spec.bindir = "exe"
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_runtime_dependency 'minitest', '~> 5.7', '>= 5.7.0'
31
+ spec.add_runtime_dependency 'sequel', '~> 4.26'
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.10"
34
+ spec.add_development_dependency "rake", "~> 10.0"
35
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minitest-sequel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kematzy
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-09-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.7.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.7.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: sequel
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4.26'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '4.26'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.10'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.10'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '10.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '10.0'
75
+ description: A collection of convenient assertions to enable faster DRY'er testing
76
+ of Sequel database apps/gems.
77
+ email:
78
+ - kematzy@gmail.com
79
+ executables: []
80
+ extensions: []
81
+ extra_rdoc_files: []
82
+ files:
83
+ - ".gitignore"
84
+ - CODE_OF_CONDUCT.md
85
+ - Gemfile
86
+ - LICENSE.txt
87
+ - README.md
88
+ - Rakefile
89
+ - lib/minitest/sequel.rb
90
+ - lib/minitest/sequel/version.rb
91
+ - minitest-sequel.gemspec
92
+ homepage: https://github.com/kematzy/minitest-sequel
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.4.5
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Minitest assertions to speed-up development and testing of Sequel database
116
+ setups.
117
+ test_files: []