better_record 0.16.1 → 0.17.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: 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