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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9da7dfa5f4edc6d8389cb2e1f8599f84629d91ca8482d54cfe7bb2eac708c32
4
- data.tar.gz: d3edd96851b2af73067d40f5e4443659a09b6735efe483b5090ec16f1f7d263c
3
+ metadata.gz: 81f5e207070f67c49384c88765d2420575e8ae8c97f4deb8ce6018a7e0d87efb
4
+ data.tar.gz: dfcb23a181c8074ff08dccd0a5a7b76c6676a92ffca711a860adb313a56c1b98
5
5
  SHA512:
6
- metadata.gz: 0d139bab289cdcb3df7503accd7a78a79d4a016fbfd3b1ea167d01716c0837c69bfb1b4fe661cb40c9f84407d7cef82ad12e15306ecf786949ab6f3c7886bb53
7
- data.tar.gz: 3fc5dba27275c1cecb374809e5d8ac5f1c761cb3ed6d415b4c7bd6ca7b7b253736738b3b17fd23a28f20fd114958fa794f8bd2a069c29b7580fc7c37e006cb1f
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 < ApplicationRecord
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? || (super.first.last_updated > 1.hour.ago)
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
@@ -0,0 +1,5 @@
1
+ class AddUpdatedAtToBetterRecordTableSizes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column("#{BetterRecord.db_audit_schema}.table_sizes", :updated_at, :datetime, default: -> { 'NOW()'})
4
+ end
5
+ end
@@ -167,7 +167,7 @@ module BetterRecord
167
167
 
168
168
  def set_booleans
169
169
  self.class.boolean_columns.each do |nm|
170
- self.__send__("#{nm}=", __send__("#{nm}=", !!Boolean.parse(__send__ nm)))
170
+ __send__("#{nm}=", !!Boolean.parse(__send__ nm))
171
171
  end
172
172
  true
173
173
  end
@@ -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, default_val = false)
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 "cannot be nil in the database" do
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 default_val
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
- it "will parse to boolean on save" do
26
- record.__send__"#{column_name}=", nil
27
- record.save
28
- expect(record.__send__ column_name).to be false
30
+ after do
31
+ BetterRecord.strict_booleans = b_state
32
+ end
29
33
 
30
- record.__send__"#{column_name}=", 0
31
- record.save
32
- expect(record.__send__ column_name).to be false
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
- record.__send__"#{column_name}=", 'false'
35
- record.save
36
- expect(record.__send__ column_name).to be false
38
+ expect(record.__send__ column_name).to eq(Boolean.parse(val))
39
+ end
40
+ end
41
+ end
37
42
 
38
- record.__send__"#{column_name}=", 1
39
- record.save
40
- expect(record.__send__ column_name).to be true
43
+ context 'strict booleans' do
44
+ before do
45
+ BetterRecord.strict_booleans = true
46
+ end
41
47
 
42
- record.__send__"#{column_name}=", 'asdf'
43
- record.save
44
- expect(record.__send__ column_name).to be true
48
+ after do
49
+ BetterRecord.strict_booleans = b_state
50
+ end
45
51
 
46
- record.__send__"#{column_name}=", 'true'
47
- record.save
48
- expect(record.__send__ column_name).to be true
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
- record.destroy
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
@@ -8,7 +8,7 @@ module BetterRecord
8
8
  records = []
9
9
  count = (count.to_i == 0) ? 1 : count.to_i
10
10
  count.times do
11
- test_factory = build(factory_name)
11
+ test_factory = build(*factory_name)
12
12
  unless test_factory.valid?
13
13
  puts test_factory.errors.full_messages
14
14
  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 = false, in_app_only = false, &blk)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BetterRecord
4
- VERSION = '0.16.1'
4
+ VERSION = '0.17.0'
5
5
  end
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.16.1
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-04 00:00:00.000000000 Z
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