better_record 0.16.1 → 0.17.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/app/models/better_record/attachment_validation.rb +6 -2
- data/app/models/better_record/table_size.rb +10 -2
- data/db/migrate/20190107202602_add_updated_at_to_better_record_table_sizes.rb +5 -0
- data/lib/better_record/concerns/active_record_extensions/base_extensions.rb +1 -1
- data/lib/better_record/concerns/active_record_extensions/base_extensions/attribute_methods/write.rb +3 -0
- data/lib/better_record/rspec/extensions/boolean_column.rb +43 -34
- data/lib/better_record/rspec/extensions/has_valid_factory.rb +1 -1
- data/lib/better_record/rspec/extensions/optional_column.rb +1 -1
- data/lib/better_record/rspec/extensions/required_column.rb +2 -2
- data/lib/better_record/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81f5e207070f67c49384c88765d2420575e8ae8c97f4deb8ce6018a7e0d87efb
|
4
|
+
data.tar.gz: dfcb23a181c8074ff08dccd0a5a7b76c6676a92ffca711a860adb313a56c1b98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8eda452e19969b7b66e6ea6d823c765598698d458cdb51bd9a11f9e279bae46b6b449bf39a309051070028d90514f676997c5c2557c647f2a875a11914a01a09
|
7
|
+
data.tar.gz: 54f634bfd2833292510c7f6cc0041310ba8a9c5456948acb152f3b00c24109e6a3528168009c5a95ea017d8fc972291e76a44195ad17a437a231f92522739010
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module BetterRecord
|
4
|
-
class AttachmentValidation <
|
4
|
+
class AttachmentValidation < Base
|
5
5
|
# == Constants ============================================================
|
6
6
|
|
7
7
|
# == Attributes ===========================================================
|
@@ -12,13 +12,14 @@ module BetterRecord
|
|
12
12
|
belongs_to :attachment,
|
13
13
|
class_name: 'ActiveStorage::Attachment',
|
14
14
|
inverse_of: :validations
|
15
|
-
|
15
|
+
|
16
16
|
ActiveStorage::Attachment.has_many :validations,
|
17
17
|
class_name: 'BetterRecord::AttachmentValidation',
|
18
18
|
foreign_key: :attachment_id,
|
19
19
|
inverse_of: :attachment,
|
20
20
|
dependent: :destroy
|
21
21
|
# == Validations ==========================================================
|
22
|
+
validates_presence_of :name
|
22
23
|
|
23
24
|
# == Scopes ===============================================================
|
24
25
|
|
@@ -27,6 +28,9 @@ module BetterRecord
|
|
27
28
|
# == Boolean Class Methods ================================================
|
28
29
|
|
29
30
|
# == Class Methods ========================================================
|
31
|
+
# def self.boolean_columns
|
32
|
+
# @@boolean_columns ||= %i[ ran ].freeze
|
33
|
+
# end
|
30
34
|
|
31
35
|
# == Boolean Methods ======================================================
|
32
36
|
|
@@ -51,19 +51,27 @@ module BetterRecord
|
|
51
51
|
# == Boolean Class Methods ================================================
|
52
52
|
|
53
53
|
# == Class Methods ========================================================
|
54
|
+
class << self
|
55
|
+
alias :super_all :all
|
56
|
+
end
|
57
|
+
|
54
58
|
def self.find_by(*args)
|
55
59
|
reload_data
|
56
60
|
super *args
|
57
61
|
end
|
58
62
|
|
59
63
|
def self.all
|
60
|
-
reload_data if last_updated.blank? || (
|
64
|
+
reload_data if self.last_updated.blank? || (self.last_updated < 1.hour.ago)
|
61
65
|
super
|
62
66
|
end
|
63
67
|
|
64
68
|
def self.reload_data
|
65
|
-
@@last_updated ||= Time.now
|
66
69
|
connection.execute UPDATE_TABLE_SIZES_SQL
|
70
|
+
self.last_updated = Time.now
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.last_updated
|
74
|
+
@@last_updated ||= super_all.first&.updated_at
|
67
75
|
end
|
68
76
|
|
69
77
|
# def self.default_print
|
data/lib/better_record/concerns/active_record_extensions/base_extensions/attribute_methods/write.rb
CHANGED
@@ -21,6 +21,9 @@ module BetterRecord
|
|
21
21
|
when ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Jsonb
|
22
22
|
value.presence || {}
|
23
23
|
when ActiveRecord::Type::Boolean
|
24
|
+
puts attr_name, value, type_for_attribute(attr_name).is_a?(ActiveRecord::Type::Boolean),BetterRecord.strict_booleans, (
|
25
|
+
BetterRecord.strict_booleans ? Boolean.strict_parse(value) : Boolean.parse(value)
|
26
|
+
)
|
24
27
|
BetterRecord.strict_booleans ? Boolean.strict_parse(value) : Boolean.parse(value)
|
25
28
|
else
|
26
29
|
value.presence
|
@@ -3,51 +3,60 @@
|
|
3
3
|
module BetterRecord
|
4
4
|
module Rspec
|
5
5
|
module Extensions
|
6
|
-
def boolean_column(factory_name, column_name,
|
6
|
+
def boolean_column(factory_name, column_name, default: false, keep_boolean_strictness: true)
|
7
|
+
b_state = BetterRecord.strict_booleans || false
|
8
|
+
|
7
9
|
describe column_name.to_s do
|
8
|
-
let(:record) { build(factory_name) }
|
10
|
+
let(:record) { build(*factory_name) }
|
9
11
|
|
10
|
-
it "
|
11
|
-
stubbed = record.dup
|
12
|
-
allow(stubbed).to receive(:set_booleans)
|
13
|
-
|
14
|
-
stubbed.__send__"#{column_name}=", nil
|
15
|
-
expect(stubbed.valid?).to be false
|
16
|
-
expect(stubbed.errors[column_name]).to include("must be true or false")
|
17
|
-
expect { stubbed.save(validate: false) }.to raise_error(ActiveRecord::NotNullViolation)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "defaults to '#{default_val}'" do
|
12
|
+
it "defaults to '#{default}'" do
|
21
13
|
empty_record = record.class.new
|
22
|
-
expect(empty_record.__send__ column_name).to be
|
14
|
+
expect(empty_record.__send__ column_name).to be default
|
23
15
|
end
|
16
|
+
if keep_boolean_strictness
|
17
|
+
it "parses to a #{b_state ? 'two' : 'three'}-state boolean" do
|
18
|
+
[ nil, 0, 1, "true", "false", true, false ].each do |val|
|
19
|
+
record.__send__"#{column_name}=", val
|
20
|
+
|
21
|
+
expect(record.__send__ column_name).to eq(Boolean.__send__(b_state ? :strict_parse : :parse, val))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
else
|
25
|
+
context 'loose booleans' do
|
26
|
+
before do
|
27
|
+
BetterRecord.strict_booleans = false
|
28
|
+
end
|
24
29
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
expect(record.__send__ column_name).to be false
|
30
|
+
after do
|
31
|
+
BetterRecord.strict_booleans = b_state
|
32
|
+
end
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
|
34
|
+
it "parses to a three-state boolean" do
|
35
|
+
[ nil, 0, 1, "true", "false", true, false ].each do |val|
|
36
|
+
record.__send__"#{column_name}=", val
|
33
37
|
|
34
|
-
|
35
|
-
|
36
|
-
|
38
|
+
expect(record.__send__ column_name).to eq(Boolean.parse(val))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
37
42
|
|
38
|
-
|
39
|
-
|
40
|
-
|
43
|
+
context 'strict booleans' do
|
44
|
+
before do
|
45
|
+
BetterRecord.strict_booleans = true
|
46
|
+
end
|
41
47
|
|
42
|
-
|
43
|
-
|
44
|
-
|
48
|
+
after do
|
49
|
+
BetterRecord.strict_booleans = b_state
|
50
|
+
end
|
45
51
|
|
46
|
-
|
47
|
-
|
48
|
-
|
52
|
+
it "parses to a two-state boolean" do
|
53
|
+
[ nil, 0, 1, "true", "false", true, false ].each do |val|
|
54
|
+
record.__send__"#{column_name}=", val
|
49
55
|
|
50
|
-
|
56
|
+
expect(record.__send__ column_name).to eq(Boolean.strict_parse(val))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
51
60
|
end
|
52
61
|
end
|
53
62
|
end
|
@@ -5,7 +5,7 @@ module BetterRecord
|
|
5
5
|
module Extensions
|
6
6
|
def optional_column(factory_name, column_name, &blk)
|
7
7
|
describe column_name.to_s do
|
8
|
-
let(:record) { build(factory_name) }
|
8
|
+
let(:record) { build(*factory_name) }
|
9
9
|
|
10
10
|
it "is optional" do
|
11
11
|
record.__send__"#{column_name}=", nil
|
@@ -3,9 +3,9 @@
|
|
3
3
|
module BetterRecord
|
4
4
|
module Rspec
|
5
5
|
module Extensions
|
6
|
-
def required_column(factory_name, column_name, unique
|
6
|
+
def required_column(factory_name, column_name, unique: false, in_app_only: false, &blk)
|
7
7
|
describe column_name.to_s do
|
8
|
-
let(:record) { build(factory_name) }
|
8
|
+
let(:record) { build(*factory_name) }
|
9
9
|
|
10
10
|
it "is required" do
|
11
11
|
record.__send__"#{column_name}=", nil
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sampson Crowley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -265,6 +265,7 @@ files:
|
|
265
265
|
- db/migrate/20180518042060_create_better_record_custom_types.rb
|
266
266
|
- db/migrate/20180518042070_create_better_record_table_sizes.rb
|
267
267
|
- db/migrate/20181228204403_create_better_record_attachment_validations.rb
|
268
|
+
- db/migrate/20190107202602_add_updated_at_to_better_record_table_sizes.rb
|
268
269
|
- db/postgres-audit-trigger.psql
|
269
270
|
- lib/better_record.rb
|
270
271
|
- lib/better_record/batches.rb
|