better_record 0.3.0 → 0.4.0

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: f55b373249d94d0c3897696ebcd255ee63195ad676e6fce7e00d60d6bd042c1c
4
- data.tar.gz: eec66e18958e1cdd9961220c5bd1992553ecb2b8a6eb4e96f1a7cb295bef574d
3
+ metadata.gz: b34680cbdfc9ffc808911351efc1e7694a8ba71d7b3cfb8420cfed2af6cbc2ef
4
+ data.tar.gz: f0940956cf68e9043664be86359be4c0fe60a0c01165ab0e8c430547a2ee1957
5
5
  SHA512:
6
- metadata.gz: 1d6cec87644e2201c977029d872a801f7eec6619eccdd705af3b534ddb193c248939923722568fc13af14b23add0f41332d01026bc25c056a7245fe1f1cfbc27
7
- data.tar.gz: ccdbbb3bea4fd5343e6a8fa1e138f0b3731ea1505299b65421042d01720381213ee9090ab2ba92f4396c1fdd998e26579dc93ebeb3e6159da30b4ee1e2a3824a
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/*").each do |d|
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,10 @@
1
+ module BetterRecord
2
+ module Rspec
3
+ module Extensions
4
+ end
5
+ end
6
+ end
7
+
8
+ Dir.glob("#{File.expand_path(__dir__)}/extensions/*").each do |d|
9
+ require d
10
+ end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module BetterRecord
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  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.3.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