better_record 0.3.0 → 0.4.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 +4 -4
- data/lib/better_record.rb +1 -1
- data/lib/better_record/rspec/extensions.rb +10 -0
- data/lib/better_record/rspec/extensions/boolean_column.rb +54 -0
- data/lib/better_record/rspec/extensions/has_valid_factory.rb +22 -0
- data/lib/better_record/rspec/extensions/optional_column.rb +19 -0
- data/lib/better_record/rspec/extensions/required_column.rb +37 -0
- data/lib/better_record/version.rb +1 -1
- data/lib/generators/better_record/eject_rspec_extensions/USAGE +12 -0
- data/lib/generators/better_record/eject_rspec_extensions/eject_rspec_extensions_generator.rb +8 -0
- metadata +8 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b34680cbdfc9ffc808911351efc1e7694a8ba71d7b3cfb8420cfed2af6cbc2ef
|
4
|
+
data.tar.gz: f0940956cf68e9043664be86359be4c0fe60a0c01165ab0e8c430547a2ee1957
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 826c96881eeb3caaa6cc37bf72adfc9dbba9a78a30854a63954295c57717e41bf96e7013de9f5c5d6700d4f61c6fd50a22eeb117d3752e60d9bdace03dce4d41
|
7
|
+
data.tar.gz: a1a368f27c284f95b99639cd839d17fde9b2e6d9331f4101262658b08b29a77c7d42cab718fd4671ae86f5ac5d3d37e24acd113ed7846912b65f9cedda4af0ba
|
data/lib/better_record.rb
CHANGED
@@ -17,7 +17,7 @@ module BetterRecord
|
|
17
17
|
self.app_domain_name = (ENV.fetch('APP_DOMAIN_NAME') { 'non_existant_domain.com' }).to_s
|
18
18
|
end
|
19
19
|
|
20
|
-
Dir.glob("#{File.expand_path(__dir__)}/better_record
|
20
|
+
Dir.glob("#{File.expand_path(__dir__)}/better_record/*.rb").each do |d|
|
21
21
|
require d unless (d =~ /fake/)
|
22
22
|
end
|
23
23
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module BetterRecord
|
2
|
+
module Rspec
|
3
|
+
module Extensions
|
4
|
+
def boolean_column(factory_name, column_name, default_val = false)
|
5
|
+
describe column_name.to_s do
|
6
|
+
let(:record) { build(factory_name) }
|
7
|
+
|
8
|
+
it "cannot be nil in the database" do
|
9
|
+
stubbed = record.dup
|
10
|
+
allow(stubbed).to receive(:set_booleans)
|
11
|
+
|
12
|
+
stubbed.__send__"#{column_name}=", nil
|
13
|
+
expect(stubbed.valid?).to be false
|
14
|
+
expect(stubbed.errors[column_name]).to include("must be true or false")
|
15
|
+
expect { stubbed.save(validate: false) }.to raise_error(ActiveRecord::NotNullViolation)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "defaults to '#{default_val}'" do
|
19
|
+
empty_record = record.class.new
|
20
|
+
expect(empty_record.__send__ column_name).to be default_val
|
21
|
+
end
|
22
|
+
|
23
|
+
it "will parse to boolean on save" do
|
24
|
+
record.__send__"#{column_name}=", nil
|
25
|
+
record.save
|
26
|
+
expect(record.__send__ column_name).to be false
|
27
|
+
|
28
|
+
record.__send__"#{column_name}=", 0
|
29
|
+
record.save
|
30
|
+
expect(record.__send__ column_name).to be false
|
31
|
+
|
32
|
+
record.__send__"#{column_name}=", 'false'
|
33
|
+
record.save
|
34
|
+
expect(record.__send__ column_name).to be false
|
35
|
+
|
36
|
+
record.__send__"#{column_name}=", 1
|
37
|
+
record.save
|
38
|
+
expect(record.__send__ column_name).to be true
|
39
|
+
|
40
|
+
record.__send__"#{column_name}=", 'asdf'
|
41
|
+
record.save
|
42
|
+
expect(record.__send__ column_name).to be true
|
43
|
+
|
44
|
+
record.__send__"#{column_name}=", 'true'
|
45
|
+
record.save
|
46
|
+
expect(record.__send__ column_name).to be true
|
47
|
+
|
48
|
+
record.destroy
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module BetterRecord
|
2
|
+
module Rspec
|
3
|
+
module Extensions
|
4
|
+
def has_valid_factory(factory_name, count = 10)
|
5
|
+
it "has a valid factory" do
|
6
|
+
records = []
|
7
|
+
count = (count.to_i == 0) ? 1 : count.to_i
|
8
|
+
count.times do
|
9
|
+
test_factory = build(factory_name)
|
10
|
+
unless test_factory.valid?
|
11
|
+
puts test_factory.errors.full_messages
|
12
|
+
end
|
13
|
+
expect(test_factory.valid?).to be true
|
14
|
+
expect(test_factory.save).to be true
|
15
|
+
records << test_factory
|
16
|
+
end
|
17
|
+
records.each {|f| f.destroy}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module BetterRecord
|
2
|
+
module Rspec
|
3
|
+
module Extensions
|
4
|
+
def optional_column(factory_name, column_name, &blk)
|
5
|
+
describe column_name.to_s do
|
6
|
+
let(:record) { build(factory_name) }
|
7
|
+
|
8
|
+
it "is optional" do
|
9
|
+
record.__send__"#{column_name}=", nil
|
10
|
+
expect(record.valid?).to be true
|
11
|
+
expect(record.errors[column_name]).to be_empty
|
12
|
+
end
|
13
|
+
|
14
|
+
instance_eval(&blk) if block_given?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module BetterRecord
|
2
|
+
module Rspec
|
3
|
+
module Extensions
|
4
|
+
def required_column(factory_name, column_name, unique = false, &blk)
|
5
|
+
describe column_name.to_s do
|
6
|
+
let(:record) { build(factory_name) }
|
7
|
+
|
8
|
+
it "is required" do
|
9
|
+
record.__send__"#{column_name}=", nil
|
10
|
+
expect(record.valid?).to be false
|
11
|
+
expect(record.errors[column_name]).to include("can't be blank")
|
12
|
+
expect { record.save(validate: false) }.to raise_error(ActiveRecord::NotNullViolation)
|
13
|
+
end
|
14
|
+
|
15
|
+
if unique
|
16
|
+
it "must be unique" do
|
17
|
+
expect(record.valid?).to be true
|
18
|
+
expect(record.save).to be true
|
19
|
+
|
20
|
+
dupped = record.dup
|
21
|
+
expect(dupped.valid?).to be false
|
22
|
+
expect(dupped.errors[column_name]).to include("has already been taken")
|
23
|
+
expect(dupped.save).to be false
|
24
|
+
|
25
|
+
record.destroy
|
26
|
+
expect(dupped.valid?).to be true
|
27
|
+
expect(dupped.save).to be true
|
28
|
+
dupped.destroy
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
instance_eval(&blk) if block_given?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Description:
|
2
|
+
Eject BetterRecord::Rspec::Extensions into local spec dir
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate better_record:eject_rspec_extensions
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
spec/extensions.rb
|
9
|
+
spec/extensions/boolean_column.rb
|
10
|
+
spec/extensions/has_valid_factory.rb
|
11
|
+
spec/extensions/optional_column.rb
|
12
|
+
spec/extensions/required_column.rb
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class BetterRecord::EjectRspecExtensionsGenerator < Rails::Generators::Base
|
2
|
+
source_root File.expand_path('templates', __dir__)
|
3
|
+
|
4
|
+
def copy_templates
|
5
|
+
template "#{BetterRecord::Engine.root}/lib/better_record/rspec/extensions.rb", 'spec/extensions.rb'
|
6
|
+
directory "#{BetterRecord::Engine.root}/lib/better_record/rspec/extensions", 'spec/extensions'
|
7
|
+
end
|
8
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sampson Crowley
|
@@ -196,7 +196,14 @@ files:
|
|
196
196
|
- lib/better_record/railtie.rb
|
197
197
|
- lib/better_record/reflection.rb
|
198
198
|
- lib/better_record/relation.rb
|
199
|
+
- lib/better_record/rspec/extensions.rb
|
200
|
+
- lib/better_record/rspec/extensions/boolean_column.rb
|
201
|
+
- lib/better_record/rspec/extensions/has_valid_factory.rb
|
202
|
+
- lib/better_record/rspec/extensions/optional_column.rb
|
203
|
+
- lib/better_record/rspec/extensions/required_column.rb
|
199
204
|
- lib/better_record/version.rb
|
205
|
+
- lib/generators/better_record/eject_rspec_extensions/USAGE
|
206
|
+
- lib/generators/better_record/eject_rspec_extensions/eject_rspec_extensions_generator.rb
|
200
207
|
- lib/generators/better_record/setup/USAGE
|
201
208
|
- lib/generators/better_record/setup/setup_generator.rb
|
202
209
|
- lib/generators/better_record/setup/templates/gitattributes
|