hoardable 0.14.2 → 0.16.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/.streerc +1 -0
 - data/.tool-versions +2 -2
 - data/CHANGELOG.md +19 -0
 - data/Gemfile +9 -10
 - data/README.md +198 -177
 - data/Rakefile +22 -8
 - data/lib/generators/hoardable/install_generator.rb +25 -26
 - data/lib/generators/hoardable/migration_generator.rb +17 -8
 - data/lib/generators/hoardable/templates/install.rb.erb +2 -25
 - data/lib/generators/hoardable/templates/migration.rb.erb +7 -1
 - data/lib/hoardable/arel_visitors.rb +57 -0
 - data/lib/hoardable/database_client.rb +41 -23
 - data/lib/hoardable/engine.rb +32 -33
 - data/lib/hoardable/error.rb +4 -7
 - data/lib/hoardable/finder_methods.rb +1 -3
 - data/lib/hoardable/has_many.rb +6 -10
 - data/lib/hoardable/has_one.rb +3 -3
 - data/lib/hoardable/has_rich_text.rb +14 -7
 - data/lib/hoardable/model.rb +19 -16
 - data/lib/hoardable/schema_dumper.rb +25 -0
 - data/lib/hoardable/schema_statements.rb +33 -0
 - data/lib/hoardable/scopes.rb +22 -29
 - data/lib/hoardable/source_model.rb +6 -5
 - data/lib/hoardable/version.rb +1 -1
 - data/lib/hoardable/version_model.rb +30 -31
 - data/lib/hoardable.rb +21 -18
 - data/sig/hoardable.rbs +37 -12
 - metadata +14 -29
 - data/.rubocop.yml +0 -21
 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Hoardable
         
     | 
| 
      
 4 
     | 
    
         
            +
              module SchemaDumper
         
     | 
| 
      
 5 
     | 
    
         
            +
                def ignored?(table_name)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  super || @connection.inherited_table?(table_name)
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def tables(stream)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  super
         
     | 
| 
      
 11 
     | 
    
         
            +
                  dump_inherited_tables(stream)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  empty_line(stream)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  triggers(stream)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                private def dump_inherited_tables(stream)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  sorted_tables = @connection.tables.filter { |table| @connection.inherited_table?(table) }.sort
         
     | 
| 
      
 18 
     | 
    
         
            +
                  sorted_tables.each do |table_name|
         
     | 
| 
      
 19 
     | 
    
         
            +
                    table(table_name, stream)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    foreign_keys(table_name, stream)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
              private_constant :SchemaDumper
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Hoardable
         
     | 
| 
      
 4 
     | 
    
         
            +
              module SchemaStatements
         
     | 
| 
      
 5 
     | 
    
         
            +
                def table_options(table_name)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  options = super || {}
         
     | 
| 
      
 7 
     | 
    
         
            +
                  if !options[:options] && (inherited_table_names = parent_table_names(table_name))
         
     | 
| 
      
 8 
     | 
    
         
            +
                    options[:options] = "INHERITS (#{inherited_table_names.join(", ")})"
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
                  options
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                private def parent_table_names(table_name)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  scope = quoted_scope(table_name, type: "BASE TABLE")
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  query_values(<<~SQL.presence, "SCHEMA").presence
         
     | 
| 
      
 17 
     | 
    
         
            +
                    SELECT parent.relname
         
     | 
| 
      
 18 
     | 
    
         
            +
                    FROM pg_catalog.pg_inherits i
         
     | 
| 
      
 19 
     | 
    
         
            +
                      JOIN pg_catalog.pg_class child ON i.inhrelid = child.oid
         
     | 
| 
      
 20 
     | 
    
         
            +
                      JOIN pg_catalog.pg_class parent ON i.inhparent = parent.oid
         
     | 
| 
      
 21 
     | 
    
         
            +
                      LEFT JOIN pg_namespace n ON n.oid = child.relnamespace
         
     | 
| 
      
 22 
     | 
    
         
            +
                    WHERE child.relname = #{scope[:name]}
         
     | 
| 
      
 23 
     | 
    
         
            +
                      AND child.relkind IN (#{scope[:type]})
         
     | 
| 
      
 24 
     | 
    
         
            +
                      AND n.nspname = #{scope[:schema]}
         
     | 
| 
      
 25 
     | 
    
         
            +
                  SQL
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def inherited_table?(table_name)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  parent_table_names(table_name).present?
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
              private_constant :SchemaStatements
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/hoardable/scopes.rb
    CHANGED
    
    | 
         @@ -6,23 +6,12 @@ module Hoardable 
     | 
|
| 
       6 
6 
     | 
    
         
             
              module Scopes
         
     | 
| 
       7 
7 
     | 
    
         
             
                extend ActiveSupport::Concern
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                TABLEOID_AREL_CONDITIONS = lambda do |arel_table, condition|
         
     | 
| 
       10 
     | 
    
         
            -
                  arel_table[:tableoid].send(
         
     | 
| 
       11 
     | 
    
         
            -
                    condition,
         
     | 
| 
       12 
     | 
    
         
            -
                    Arel::Nodes::NamedFunction.new('CAST', [Arel::Nodes::Quoted.new(arel_table.name).as('regclass')])
         
     | 
| 
       13 
     | 
    
         
            -
                  )
         
     | 
| 
       14 
     | 
    
         
            -
                end.freeze
         
     | 
| 
       15 
     | 
    
         
            -
                private_constant :TABLEOID_AREL_CONDITIONS
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
9 
     | 
    
         
             
                included do
         
     | 
| 
       18 
     | 
    
         
            -
                  # @!visibility private
         
     | 
| 
       19 
     | 
    
         
            -
                  attr_writer :tableoid
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
10 
     | 
    
         
             
                  # By default {Hoardable} only returns instances of the parent table, and not the +versions+ in
         
     | 
| 
       22 
11 
     | 
    
         
             
                  # the inherited table. This can be bypassed by using the {.include_versions} scope or wrapping
         
     | 
| 
       23 
12 
     | 
    
         
             
                  # the code in a `Hoardable.at(datetime)` block.
         
     | 
| 
       24 
13 
     | 
    
         
             
                  default_scope do
         
     | 
| 
       25 
     | 
    
         
            -
                    if (hoardable_at = Hoardable.instance_variable_get( 
     | 
| 
      
 14 
     | 
    
         
            +
                    if (hoardable_at = Hoardable.instance_variable_get("@at"))
         
     | 
| 
       26 
15 
     | 
    
         
             
                      at(hoardable_at)
         
     | 
| 
       27 
16 
     | 
    
         
             
                    else
         
     | 
| 
       28 
17 
     | 
    
         
             
                      exclude_versions
         
     | 
| 
         @@ -35,7 +24,7 @@ module Hoardable 
     | 
|
| 
       35 
24 
     | 
    
         
             
                  #
         
     | 
| 
       36 
25 
     | 
    
         
             
                  # Returns +versions+ along with instances of the source models, all cast as instances of the
         
     | 
| 
       37 
26 
     | 
    
         
             
                  # source model’s class.
         
     | 
| 
       38 
     | 
    
         
            -
                  scope :include_versions, -> { unscope( 
     | 
| 
      
 27 
     | 
    
         
            +
                  scope :include_versions, -> { unscope(:from) }
         
     | 
| 
       39 
28 
     | 
    
         | 
| 
       40 
29 
     | 
    
         
             
                  # @!scope class
         
     | 
| 
       41 
30 
     | 
    
         
             
                  # @!method versions
         
     | 
| 
         @@ -43,7 +32,7 @@ module Hoardable 
     | 
|
| 
       43 
32 
     | 
    
         
             
                  #
         
     | 
| 
       44 
33 
     | 
    
         
             
                  # Returns only +versions+ of the parent +ActiveRecord+ class, cast as instances of the source
         
     | 
| 
       45 
34 
     | 
    
         
             
                  # model’s class.
         
     | 
| 
       46 
     | 
    
         
            -
                  scope :versions, -> {  
     | 
| 
      
 35 
     | 
    
         
            +
                  scope :versions, -> { from("ONLY #{version_class.table_name}") }
         
     | 
| 
       47 
36 
     | 
    
         | 
| 
       48 
37 
     | 
    
         
             
                  # @!scope class
         
     | 
| 
       49 
38 
     | 
    
         
             
                  # @!method exclude_versions
         
     | 
| 
         @@ -51,7 +40,7 @@ module Hoardable 
     | 
|
| 
       51 
40 
     | 
    
         
             
                  #
         
     | 
| 
       52 
41 
     | 
    
         
             
                  # Excludes +versions+ of the parent +ActiveRecord+ class. This is included by default in the
         
     | 
| 
       53 
42 
     | 
    
         
             
                  # source model’s +default_scope+.
         
     | 
| 
       54 
     | 
    
         
            -
                  scope :exclude_versions, -> {  
     | 
| 
      
 43 
     | 
    
         
            +
                  scope :exclude_versions, -> { from("ONLY #{table_name}") }
         
     | 
| 
       55 
44 
     | 
    
         | 
| 
       56 
45 
     | 
    
         
             
                  # @!scope class
         
     | 
| 
       57 
46 
     | 
    
         
             
                  # @!method at
         
     | 
| 
         @@ -59,21 +48,25 @@ module Hoardable 
     | 
|
| 
       59 
48 
     | 
    
         
             
                  #
         
     | 
| 
       60 
49 
     | 
    
         
             
                  # Returns instances of the source model and versions that were valid at the supplied
         
     | 
| 
       61 
50 
     | 
    
         
             
                  # +datetime+ or +time+, all cast as instances of the source model.
         
     | 
| 
       62 
     | 
    
         
            -
                  scope 
     | 
| 
       63 
     | 
    
         
            -
                     
     | 
| 
      
 51 
     | 
    
         
            +
                  scope(
         
     | 
| 
      
 52 
     | 
    
         
            +
                    :at,
         
     | 
| 
      
 53 
     | 
    
         
            +
                    lambda do |datetime|
         
     | 
| 
      
 54 
     | 
    
         
            +
                      raise(CreatedAtColumnMissingError, table_name) unless column_names.include?("created_at")
         
     | 
| 
       64 
55 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
                      from(
         
     | 
| 
      
 57 
     | 
    
         
            +
                        Arel::Nodes::As.new(
         
     | 
| 
      
 58 
     | 
    
         
            +
                          Arel::Nodes::Union.new(
         
     | 
| 
      
 59 
     | 
    
         
            +
                            include_versions.where(id: version_class.at(datetime).select(primary_key)).arel,
         
     | 
| 
      
 60 
     | 
    
         
            +
                            exclude_versions
         
     | 
| 
      
 61 
     | 
    
         
            +
                              .where(created_at: ..datetime)
         
     | 
| 
      
 62 
     | 
    
         
            +
                              .where.not(id: version_class.select(:hoardable_id).where(DURING_QUERY, datetime))
         
     | 
| 
      
 63 
     | 
    
         
            +
                              .arel
         
     | 
| 
      
 64 
     | 
    
         
            +
                          ),
         
     | 
| 
      
 65 
     | 
    
         
            +
                          arel_table
         
     | 
| 
      
 66 
     | 
    
         
            +
                        )
         
     | 
| 
      
 67 
     | 
    
         
            +
                      ).hoardable
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                  )
         
     | 
| 
       77 
70 
     | 
    
         
             
                end
         
     | 
| 
       78 
71 
     | 
    
         
             
              end
         
     | 
| 
       79 
72 
     | 
    
         
             
            end
         
     | 
| 
         @@ -32,11 +32,11 @@ module Hoardable 
     | 
|
| 
       32 
32 
     | 
    
         
             
                  include Scopes
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                  around_update(if: [HOARDABLE_CALLBACKS_ENABLED, HOARDABLE_VERSION_UPDATES]) do |_, block|
         
     | 
| 
       35 
     | 
    
         
            -
                    hoardable_client.insert_hoardable_version( 
     | 
| 
      
 35 
     | 
    
         
            +
                    hoardable_client.insert_hoardable_version("update", &block)
         
     | 
| 
       36 
36 
     | 
    
         
             
                  end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                  around_destroy(if: [HOARDABLE_CALLBACKS_ENABLED, HOARDABLE_SAVE_TRASH]) do |_, block|
         
     | 
| 
       39 
     | 
    
         
            -
                    hoardable_client.insert_hoardable_version( 
     | 
| 
      
 39 
     | 
    
         
            +
                    hoardable_client.insert_hoardable_version("delete", &block)
         
     | 
| 
       40 
40 
     | 
    
         
             
                  end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                  before_destroy(if: HOARDABLE_CALLBACKS_ENABLED, unless: HOARDABLE_SAVE_TRASH) do
         
     | 
| 
         @@ -47,7 +47,8 @@ module Hoardable 
     | 
|
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
                  # Returns all +versions+ in ascending order of their temporal timeframes.
         
     | 
| 
       49 
49 
     | 
    
         
             
                  has_many(
         
     | 
| 
       50 
     | 
    
         
            -
                    :versions, 
     | 
| 
      
 50 
     | 
    
         
            +
                    :versions,
         
     | 
| 
      
 51 
     | 
    
         
            +
                    -> { order("UPPER(_during) ASC") },
         
     | 
| 
       51 
52 
     | 
    
         
             
                    dependent: nil,
         
     | 
| 
       52 
53 
     | 
    
         
             
                    class_name: version_class.to_s,
         
     | 
| 
       53 
54 
     | 
    
         
             
                    inverse_of: :hoardable_source,
         
     | 
| 
         @@ -85,7 +86,7 @@ module Hoardable 
     | 
|
| 
       85 
86 
     | 
    
         
             
                #
         
     | 
| 
       86 
87 
     | 
    
         
             
                # @param datetime [DateTime, Time]
         
     | 
| 
       87 
88 
     | 
    
         
             
                def version_at(datetime)
         
     | 
| 
       88 
     | 
    
         
            -
                  raise(Error,  
     | 
| 
      
 89 
     | 
    
         
            +
                  raise(Error, "Future state cannot be known") if datetime.future?
         
     | 
| 
       89 
90 
     | 
    
         | 
| 
       90 
91 
     | 
    
         
             
                  versions.at(datetime).limit(1).first
         
     | 
| 
       91 
92 
     | 
    
         
             
                end
         
     | 
| 
         @@ -101,7 +102,7 @@ module Hoardable 
     | 
|
| 
       101 
102 
     | 
    
         
             
                end
         
     | 
| 
       102 
103 
     | 
    
         | 
| 
       103 
104 
     | 
    
         
             
                def hoardable_id
         
     | 
| 
       104 
     | 
    
         
            -
                  read_attribute( 
     | 
| 
      
 105 
     | 
    
         
            +
                  read_attribute("hoardable_id")
         
     | 
| 
       105 
106 
     | 
    
         
             
                end
         
     | 
| 
       106 
107 
     | 
    
         | 
| 
       107 
108 
     | 
    
         
             
                delegate :version_class, to: :class
         
     | 
    
        data/lib/hoardable/version.rb
    CHANGED
    
    
| 
         @@ -13,13 +13,6 @@ module Hoardable 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  def version_class
         
     | 
| 
       14 
14 
     | 
    
         
             
                    self
         
     | 
| 
       15 
15 
     | 
    
         
             
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  # This is needed to omit the pseudo row of 'tableoid' when using +ActiveRecord+’s +insert+.
         
     | 
| 
       18 
     | 
    
         
            -
                  #
         
     | 
| 
       19 
     | 
    
         
            -
                  # @!visibility private
         
     | 
| 
       20 
     | 
    
         
            -
                  def scope_attributes
         
     | 
| 
       21 
     | 
    
         
            -
                    super.without('tableoid')
         
     | 
| 
       22 
     | 
    
         
            -
                  end
         
     | 
| 
       23 
16 
     | 
    
         
             
                end
         
     | 
| 
       24 
17 
     | 
    
         | 
| 
       25 
18 
     | 
    
         
             
                included do
         
     | 
| 
         @@ -34,20 +27,26 @@ module Hoardable 
     | 
|
| 
       34 
27 
     | 
    
         
             
                  self.table_name = "#{table_name.singularize}#{VERSION_TABLE_SUFFIX}"
         
     | 
| 
       35 
28 
     | 
    
         | 
| 
       36 
29 
     | 
    
         
             
                  alias_method :readonly?, :persisted?
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                   
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  %i[operation event_uuid during].each do |symbol|
         
     | 
| 
      
 32 
     | 
    
         
            +
                    define_method("hoardable_#{symbol}") { public_send("_#{symbol}") }
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
       40 
34 
     | 
    
         | 
| 
       41 
35 
     | 
    
         
             
                  # @!scope class
         
     | 
| 
       42 
36 
     | 
    
         
             
                  # @!method trashed
         
     | 
| 
       43 
37 
     | 
    
         
             
                  # @return [ActiveRecord<Object>]
         
     | 
| 
       44 
38 
     | 
    
         
             
                  #
         
     | 
| 
       45 
39 
     | 
    
         
             
                  # Returns only trashed +versions+ that are currently orphans.
         
     | 
| 
       46 
     | 
    
         
            -
                  scope 
     | 
| 
       47 
     | 
    
         
            -
                     
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                      .where( 
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
      
 40 
     | 
    
         
            +
                  scope(
         
     | 
| 
      
 41 
     | 
    
         
            +
                    :trashed,
         
     | 
| 
      
 42 
     | 
    
         
            +
                    lambda do
         
     | 
| 
      
 43 
     | 
    
         
            +
                      left_outer_joins(:hoardable_source).where(
         
     | 
| 
      
 44 
     | 
    
         
            +
                        superclass.table_name => {
         
     | 
| 
      
 45 
     | 
    
         
            +
                          superclass.primary_key => nil
         
     | 
| 
      
 46 
     | 
    
         
            +
                        }
         
     | 
| 
      
 47 
     | 
    
         
            +
                      ).where(_operation: "delete")
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  )
         
     | 
| 
       51 
50 
     | 
    
         | 
| 
       52 
51 
     | 
    
         
             
                  # @!scope class
         
     | 
| 
       53 
52 
     | 
    
         
             
                  # @!method at
         
     | 
| 
         @@ -61,7 +60,7 @@ module Hoardable 
     | 
|
| 
       61 
60 
     | 
    
         
             
                  # @return [ActiveRecord<Object>]
         
     | 
| 
       62 
61 
     | 
    
         
             
                  #
         
     | 
| 
       63 
62 
     | 
    
         
             
                  # Returns +versions+ that were trashed at the supplied +datetime+ or +time+.
         
     | 
| 
       64 
     | 
    
         
            -
                  scope :trashed_at, ->(datetime) { where(_operation:  
     | 
| 
      
 63 
     | 
    
         
            +
                  scope :trashed_at, ->(datetime) { where(_operation: "insert").where(DURING_QUERY, datetime) }
         
     | 
| 
       65 
64 
     | 
    
         | 
| 
       66 
65 
     | 
    
         
             
                  # @!scope class
         
     | 
| 
       67 
66 
     | 
    
         
             
                  # @!method with_hoardable_event_uuid
         
     | 
| 
         @@ -76,17 +75,19 @@ module Hoardable 
     | 
|
| 
       76 
75 
     | 
    
         
             
                  # @return [ActiveRecord<Object>]
         
     | 
| 
       77 
76 
     | 
    
         
             
                  #
         
     | 
| 
       78 
77 
     | 
    
         
             
                  # Returns a limited +ActiveRecord+ scope of only the most recent version.
         
     | 
| 
       79 
     | 
    
         
            -
                  scope :only_most_recent, -> { limit(1).reorder( 
     | 
| 
      
 78 
     | 
    
         
            +
                  scope :only_most_recent, -> { limit(1).reorder("UPPER(_during) DESC") }
         
     | 
| 
       80 
79 
     | 
    
         
             
                end
         
     | 
| 
       81 
80 
     | 
    
         | 
| 
       82 
81 
     | 
    
         
             
                # Reverts the parent +ActiveRecord+ instance to the saved attributes of this +version+. Raises
         
     | 
| 
       83 
82 
     | 
    
         
             
                # an error if the version is trashed.
         
     | 
| 
       84 
83 
     | 
    
         
             
                def revert!
         
     | 
| 
       85 
     | 
    
         
            -
                  raise(Error,  
     | 
| 
      
 84 
     | 
    
         
            +
                  raise(Error, "Version is trashed, cannot revert") unless hoardable_operation == "update"
         
     | 
| 
       86 
85 
     | 
    
         | 
| 
       87 
86 
     | 
    
         
             
                  transaction do
         
     | 
| 
       88 
87 
     | 
    
         
             
                    hoardable_source.tap do |reverted|
         
     | 
| 
       89 
     | 
    
         
            -
                      reverted.reload.update!( 
     | 
| 
      
 88 
     | 
    
         
            +
                      reverted.reload.update!(
         
     | 
| 
      
 89 
     | 
    
         
            +
                        hoardable_source_attributes.without(self.class.superclass.primary_key, "hoardable_id")
         
     | 
| 
      
 90 
     | 
    
         
            +
                      )
         
     | 
| 
       90 
91 
     | 
    
         
             
                      reverted.instance_variable_set(:@hoardable_version, self)
         
     | 
| 
       91 
92 
     | 
    
         
             
                      reverted.run_callbacks(:reverted)
         
     | 
| 
       92 
93 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -96,29 +97,27 @@ module Hoardable 
     | 
|
| 
       96 
97 
     | 
    
         
             
                # Inserts a trashed +version+ back into its parent +ActiveRecord+ table with its original
         
     | 
| 
       97 
98 
     | 
    
         
             
                # primary key. Raises an error if the version is not trashed.
         
     | 
| 
       98 
99 
     | 
    
         
             
                def untrash!
         
     | 
| 
       99 
     | 
    
         
            -
                  raise(Error,  
     | 
| 
      
 100 
     | 
    
         
            +
                  raise(Error, "Version is not trashed, cannot untrash") unless hoardable_operation == "delete"
         
     | 
| 
       100 
101 
     | 
    
         | 
| 
       101 
102 
     | 
    
         
             
                  transaction do
         
     | 
| 
       102 
103 
     | 
    
         
             
                    insert_untrashed_source.tap do |untrashed|
         
     | 
| 
       103 
     | 
    
         
            -
                      untrashed 
     | 
| 
       104 
     | 
    
         
            -
                         
     | 
| 
       105 
     | 
    
         
            -
                         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
      
 104 
     | 
    
         
            +
                      untrashed
         
     | 
| 
      
 105 
     | 
    
         
            +
                        .send("hoardable_client")
         
     | 
| 
      
 106 
     | 
    
         
            +
                        .insert_hoardable_version("insert") do
         
     | 
| 
      
 107 
     | 
    
         
            +
                          untrashed.instance_variable_set(:@hoardable_version, self)
         
     | 
| 
      
 108 
     | 
    
         
            +
                          untrashed.run_callbacks(:untrashed)
         
     | 
| 
      
 109 
     | 
    
         
            +
                        end
         
     | 
| 
       107 
110 
     | 
    
         
             
                    end
         
     | 
| 
       108 
111 
     | 
    
         
             
                  end
         
     | 
| 
       109 
112 
     | 
    
         
             
                end
         
     | 
| 
       110 
113 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
                DATA_KEYS.each  
     | 
| 
       112 
     | 
    
         
            -
                  define_method("hoardable_#{key}") do
         
     | 
| 
       113 
     | 
    
         
            -
                    _data&.dig(key.to_s)
         
     | 
| 
       114 
     | 
    
         
            -
                  end
         
     | 
| 
       115 
     | 
    
         
            -
                end
         
     | 
| 
      
 114 
     | 
    
         
            +
                DATA_KEYS.each { |key| define_method("hoardable_#{key}") { _data&.dig(key.to_s) } }
         
     | 
| 
       116 
115 
     | 
    
         | 
| 
       117 
116 
     | 
    
         
             
                # Returns the +ActiveRecord+
         
     | 
| 
       118 
117 
     | 
    
         
             
                # {https://api.rubyonrails.org/classes/ActiveModel/Dirty.html#method-i-changes changes} that
         
     | 
| 
       119 
118 
     | 
    
         
             
                # were present during version creation.
         
     | 
| 
       120 
119 
     | 
    
         
             
                def changes
         
     | 
| 
       121 
     | 
    
         
            -
                  _data&.dig( 
     | 
| 
      
 120 
     | 
    
         
            +
                  _data&.dig("changes")
         
     | 
| 
       122 
121 
     | 
    
         
             
                end
         
     | 
| 
       123 
122 
     | 
    
         | 
| 
       124 
123 
     | 
    
         
             
                private
         
     | 
| 
         @@ -132,7 +131,7 @@ module Hoardable 
     | 
|
| 
       132 
131 
     | 
    
         
             
                def hoardable_source_attributes
         
     | 
| 
       133 
132 
     | 
    
         
             
                  attributes.without(
         
     | 
| 
       134 
133 
     | 
    
         
             
                    (self.class.column_names - self.class.superclass.column_names) +
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
      
 134 
     | 
    
         
            +
                      self.class.columns.select(&:virtual?).map(&:name)
         
     | 
| 
       136 
135 
     | 
    
         
             
                  )
         
     | 
| 
       137 
136 
     | 
    
         
             
                end
         
     | 
| 
       138 
137 
     | 
    
         
             
              end
         
     | 
    
        data/lib/hoardable.rb
    CHANGED
    
    | 
         @@ -1,20 +1,23 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require  
     | 
| 
       4 
     | 
    
         
            -
            require  
     | 
| 
       5 
     | 
    
         
            -
            require_relative  
     | 
| 
       6 
     | 
    
         
            -
            require_relative  
     | 
| 
       7 
     | 
    
         
            -
            require_relative  
     | 
| 
       8 
     | 
    
         
            -
            require_relative  
     | 
| 
       9 
     | 
    
         
            -
            require_relative  
     | 
| 
       10 
     | 
    
         
            -
            require_relative  
     | 
| 
       11 
     | 
    
         
            -
            require_relative  
     | 
| 
       12 
     | 
    
         
            -
            require_relative  
     | 
| 
       13 
     | 
    
         
            -
            require_relative  
     | 
| 
       14 
     | 
    
         
            -
            require_relative  
     | 
| 
       15 
     | 
    
         
            -
            require_relative  
     | 
| 
       16 
     | 
    
         
            -
            require_relative  
     | 
| 
       17 
     | 
    
         
            -
            require_relative  
     | 
| 
       18 
     | 
    
         
            -
            require_relative  
     | 
| 
       19 
     | 
    
         
            -
            require_relative  
     | 
| 
       20 
     | 
    
         
            -
            require_relative  
     | 
| 
      
 3 
     | 
    
         
            +
            require "active_record"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "fx"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative "hoardable/version"
         
     | 
| 
      
 6 
     | 
    
         
            +
            require_relative "hoardable/arel_visitors"
         
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative "hoardable/schema_statements"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require_relative "hoardable/schema_dumper"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative "hoardable/engine"
         
     | 
| 
      
 10 
     | 
    
         
            +
            require_relative "hoardable/finder_methods"
         
     | 
| 
      
 11 
     | 
    
         
            +
            require_relative "hoardable/scopes"
         
     | 
| 
      
 12 
     | 
    
         
            +
            require_relative "hoardable/error"
         
     | 
| 
      
 13 
     | 
    
         
            +
            require_relative "hoardable/database_client"
         
     | 
| 
      
 14 
     | 
    
         
            +
            require_relative "hoardable/source_model"
         
     | 
| 
      
 15 
     | 
    
         
            +
            require_relative "hoardable/version_model"
         
     | 
| 
      
 16 
     | 
    
         
            +
            require_relative "hoardable/model"
         
     | 
| 
      
 17 
     | 
    
         
            +
            require_relative "hoardable/associations"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require_relative "hoardable/has_many"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require_relative "hoardable/belongs_to"
         
     | 
| 
      
 20 
     | 
    
         
            +
            require_relative "hoardable/has_one"
         
     | 
| 
      
 21 
     | 
    
         
            +
            require_relative "hoardable/has_rich_text"
         
     | 
| 
      
 22 
     | 
    
         
            +
            require_relative "generators/hoardable/migration_generator"
         
     | 
| 
      
 23 
     | 
    
         
            +
            require_relative "generators/hoardable/install_generator"
         
     | 
    
        data/sig/hoardable.rbs
    CHANGED
    
    | 
         @@ -1,3 +1,10 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # TypeProf 0.21.9
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            # Global variables
         
     | 
| 
      
 4 
     | 
    
         
            +
            $thor_runner: false
         
     | 
| 
      
 5 
     | 
    
         
            +
            $trace: false
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            # Classes
         
     | 
| 
       1 
8 
     | 
    
         
             
            module Hoardable
         
     | 
| 
       2 
9 
     | 
    
         
             
              VERSION: String
         
     | 
| 
       3 
10 
     | 
    
         
             
              DATA_KEYS: [:meta, :whodunit, :event_uuid]
         
     | 
| 
         @@ -18,7 +25,7 @@ module Hoardable 
     | 
|
| 
       18 
25 
     | 
    
         
             
              def self.at: (untyped datetime) -> untyped
         
     | 
| 
       19 
26 
     | 
    
         
             
              def self.logger: -> untyped
         
     | 
| 
       20 
27 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
              class Engine
         
     | 
| 
      
 28 
     | 
    
         
            +
              class Engine < Rails::Engine
         
     | 
| 
       22 
29 
     | 
    
         
             
              end
         
     | 
| 
       23 
30 
     | 
    
         | 
| 
       24 
31 
     | 
    
         
             
              module FinderMethods
         
     | 
| 
         @@ -30,14 +37,7 @@ module Hoardable 
     | 
|
| 
       30 
37 
     | 
    
         
             
              end
         
     | 
| 
       31 
38 
     | 
    
         | 
| 
       32 
39 
     | 
    
         
             
              module Scopes
         
     | 
| 
       33 
     | 
    
         
            -
                 
     | 
| 
       34 
     | 
    
         
            -
                self.@klass: bot
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                private
         
     | 
| 
       37 
     | 
    
         
            -
                def tableoid: -> untyped
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                public
         
     | 
| 
       40 
     | 
    
         
            -
                attr_writer tableoid: untyped
         
     | 
| 
      
 40 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
       41 
41 
     | 
    
         
             
              end
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
              class Error < StandardError
         
     | 
| 
         @@ -47,14 +47,25 @@ module Hoardable 
     | 
|
| 
       47 
47 
     | 
    
         
             
                def initialize: (untyped source_table_name) -> void
         
     | 
| 
       48 
48 
     | 
    
         
             
              end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
              class UpdatedAtColumnMissingError < Error
         
     | 
| 
      
 51 
     | 
    
         
            +
                def initialize: (untyped source_table_name) -> void
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       50 
54 
     | 
    
         
             
              class DatabaseClient
         
     | 
| 
      
 55 
     | 
    
         
            +
                @generated_column_names: untyped
         
     | 
| 
      
 56 
     | 
    
         
            +
                @refreshable_column_names: untyped
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
       51 
58 
     | 
    
         
             
                attr_reader source_record: SourceModel
         
     | 
| 
       52 
59 
     | 
    
         
             
                def initialize: (SourceModel source_record) -> void
         
     | 
| 
       53 
60 
     | 
    
         
             
                def insert_hoardable_version: (untyped operation) -> untyped
         
     | 
| 
       54 
61 
     | 
    
         
             
                def source_primary_key: -> untyped
         
     | 
| 
       55 
62 
     | 
    
         
             
                def find_or_initialize_hoardable_event_uuid: -> untyped
         
     | 
| 
       56 
63 
     | 
    
         
             
                def initialize_version_attributes: (untyped operation) -> untyped
         
     | 
| 
      
 64 
     | 
    
         
            +
                def has_one_find_conditions: (untyped reflection) -> Hash[String, nil]
         
     | 
| 
      
 65 
     | 
    
         
            +
                def has_one_at_timestamp: -> untyped
         
     | 
| 
       57 
66 
     | 
    
         
             
                def source_attributes_without_primary_key: -> untyped
         
     | 
| 
      
 67 
     | 
    
         
            +
                def generated_column_names: -> Array[untyped]
         
     | 
| 
      
 68 
     | 
    
         
            +
                def refreshable_column_names: -> untyped
         
     | 
| 
       58 
69 
     | 
    
         
             
                def initialize_temporal_range: -> Range
         
     | 
| 
       59 
70 
     | 
    
         
             
                def initialize_hoardable_data: -> untyped
         
     | 
| 
       60 
71 
     | 
    
         
             
                def assign_hoardable_context: (:event_uuid | :meta | :whodunit key) -> nil
         
     | 
| 
         @@ -64,6 +75,7 @@ module Hoardable 
     | 
|
| 
       64 
75 
     | 
    
         
             
              end
         
     | 
| 
       65 
76 
     | 
    
         | 
| 
       66 
77 
     | 
    
         
             
              module SourceModel
         
     | 
| 
      
 78 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
       67 
79 
     | 
    
         
             
                include Scopes
         
     | 
| 
       68 
80 
     | 
    
         
             
                @hoardable_client: DatabaseClient
         
     | 
| 
       69 
81 
     | 
    
         | 
| 
         @@ -84,6 +96,8 @@ module Hoardable 
     | 
|
| 
       84 
96 
     | 
    
         
             
              end
         
     | 
| 
       85 
97 
     | 
    
         | 
| 
       86 
98 
     | 
    
         
             
              module VersionModel
         
     | 
| 
      
 99 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
       87 
101 
     | 
    
         
             
                def revert!: -> untyped
         
     | 
| 
       88 
102 
     | 
    
         
             
                def untrash!: -> untyped
         
     | 
| 
       89 
103 
     | 
    
         
             
                def changes: -> untyped
         
     | 
| 
         @@ -94,10 +108,10 @@ module Hoardable 
     | 
|
| 
       94 
108 
     | 
    
         | 
| 
       95 
109 
     | 
    
         
             
                public
         
     | 
| 
       96 
110 
     | 
    
         
             
                def version_class: -> VersionModel
         
     | 
| 
       97 
     | 
    
         
            -
                def scope_attributes: -> untyped
         
     | 
| 
       98 
111 
     | 
    
         
             
              end
         
     | 
| 
       99 
112 
     | 
    
         | 
| 
       100 
113 
     | 
    
         
             
              module Model
         
     | 
| 
      
 114 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
       101 
115 
     | 
    
         
             
                include VersionModel
         
     | 
| 
       102 
116 
     | 
    
         
             
                include SourceModel
         
     | 
| 
       103 
117 
     | 
    
         
             
                include Associations
         
     | 
| 
         @@ -108,6 +122,7 @@ module Hoardable 
     | 
|
| 
       108 
122 
     | 
    
         
             
              end
         
     | 
| 
       109 
123 
     | 
    
         | 
| 
       110 
124 
     | 
    
         
             
              module Associations
         
     | 
| 
      
 125 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
       111 
126 
     | 
    
         
             
                include HasRichText
         
     | 
| 
       112 
127 
     | 
    
         
             
                include BelongsTo
         
     | 
| 
       113 
128 
     | 
    
         
             
                include HasOne
         
     | 
| 
         @@ -115,6 +130,8 @@ module Hoardable 
     | 
|
| 
       115 
130 
     | 
    
         
             
              end
         
     | 
| 
       116 
131 
     | 
    
         | 
| 
       117 
132 
     | 
    
         
             
              module HasMany
         
     | 
| 
      
 133 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
       118 
135 
     | 
    
         
             
                def has_many: (*untyped args) -> untyped
         
     | 
| 
       119 
136 
     | 
    
         | 
| 
       120 
137 
     | 
    
         
             
                module HasManyExtension
         
     | 
| 
         @@ -129,6 +146,8 @@ module Hoardable 
     | 
|
| 
       129 
146 
     | 
    
         
             
              end
         
     | 
| 
       130 
147 
     | 
    
         | 
| 
       131 
148 
     | 
    
         
             
              module BelongsTo
         
     | 
| 
      
 149 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
       132 
151 
     | 
    
         
             
                def belongs_to: (*untyped args) -> nil
         
     | 
| 
       133 
152 
     | 
    
         | 
| 
       134 
153 
     | 
    
         
             
                private
         
     | 
| 
         @@ -136,25 +155,31 @@ module Hoardable 
     | 
|
| 
       136 
155 
     | 
    
         
             
              end
         
     | 
| 
       137 
156 
     | 
    
         | 
| 
       138 
157 
     | 
    
         
             
              module HasOne
         
     | 
| 
      
 158 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
       139 
160 
     | 
    
         
             
                def has_one: (*untyped args) -> nil
         
     | 
| 
       140 
161 
     | 
    
         
             
              end
         
     | 
| 
       141 
162 
     | 
    
         | 
| 
       142 
163 
     | 
    
         
             
              module HasRichText
         
     | 
| 
      
 164 
     | 
    
         
            +
                extend ActiveSupport::Concern
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
       143 
166 
     | 
    
         
             
                def has_rich_text: (untyped name, ?encrypted: false, ?hoardable: false) -> nil
         
     | 
| 
       144 
167 
     | 
    
         
             
              end
         
     | 
| 
       145 
168 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
              class MigrationGenerator
         
     | 
| 
      
 169 
     | 
    
         
            +
              class MigrationGenerator < ActiveRecord::Generators::Base
         
     | 
| 
       147 
170 
     | 
    
         
             
                @singularized_table_name: untyped
         
     | 
| 
       148 
171 
     | 
    
         | 
| 
       149 
172 
     | 
    
         
             
                def create_versions_table: -> untyped
         
     | 
| 
      
 173 
     | 
    
         
            +
                def create_triggers: -> {versions_prevent_update: untyped, set_hoardable_id: untyped, prevent_update_hoardable_id: untyped}
         
     | 
| 
       150 
174 
     | 
    
         
             
                def foreign_key_type: -> String
         
     | 
| 
       151 
175 
     | 
    
         
             
                def primary_key: -> String
         
     | 
| 
       152 
176 
     | 
    
         
             
                def singularized_table_name: -> untyped
         
     | 
| 
       153 
177 
     | 
    
         
             
              end
         
     | 
| 
       154 
178 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
              class InstallGenerator
         
     | 
| 
      
 179 
     | 
    
         
            +
              class InstallGenerator < Rails::Generators::Base
         
     | 
| 
       156 
180 
     | 
    
         
             
                def create_initializer_file: -> untyped
         
     | 
| 
       157 
181 
     | 
    
         
             
                def create_migration_file: -> untyped
         
     | 
| 
      
 182 
     | 
    
         
            +
                def create_functions: -> Array[String]
         
     | 
| 
       158 
183 
     | 
    
         
             
                def self.next_migration_number: (untyped dir) -> untyped
         
     | 
| 
       159 
184 
     | 
    
         
             
              end
         
     | 
| 
       160 
185 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: hoardable
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.16.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - justin talbott
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-10-11 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activerecord
         
     | 
| 
         @@ -16,60 +16,42 @@ dependencies: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - ">="
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: ' 
     | 
| 
       20 
     | 
    
         
            -
                - - "<"
         
     | 
| 
       21 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       22 
     | 
    
         
            -
                    version: '8'
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '7'
         
     | 
| 
       23 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       24 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       25 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       26 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       27 
24 
     | 
    
         
             
                - - ">="
         
     | 
| 
       28 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       29 
     | 
    
         
            -
                    version: ' 
     | 
| 
       30 
     | 
    
         
            -
                - - "<"
         
     | 
| 
       31 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       32 
     | 
    
         
            -
                    version: '8'
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '7'
         
     | 
| 
       33 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       34 
28 
     | 
    
         
             
              name: activesupport
         
     | 
| 
       35 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       36 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       37 
31 
     | 
    
         
             
                - - ">="
         
     | 
| 
       38 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       39 
     | 
    
         
            -
                    version: ' 
     | 
| 
       40 
     | 
    
         
            -
                - - "<"
         
     | 
| 
       41 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       42 
     | 
    
         
            -
                    version: '8'
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '7'
         
     | 
| 
       43 
34 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       44 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       45 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       46 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       47 
38 
     | 
    
         
             
                - - ">="
         
     | 
| 
       48 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       49 
     | 
    
         
            -
                    version: ' 
     | 
| 
       50 
     | 
    
         
            -
                - - "<"
         
     | 
| 
       51 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       52 
     | 
    
         
            -
                    version: '8'
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '7'
         
     | 
| 
       53 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       54 
42 
     | 
    
         
             
              name: railties
         
     | 
| 
       55 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       56 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       57 
45 
     | 
    
         
             
                - - ">="
         
     | 
| 
       58 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       59 
     | 
    
         
            -
                    version: ' 
     | 
| 
       60 
     | 
    
         
            -
                - - "<"
         
     | 
| 
       61 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       62 
     | 
    
         
            -
                    version: '8'
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '7'
         
     | 
| 
       63 
48 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       64 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       65 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       66 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       67 
52 
     | 
    
         
             
                - - ">="
         
     | 
| 
       68 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       69 
     | 
    
         
            -
                    version: ' 
     | 
| 
       70 
     | 
    
         
            -
                - - "<"
         
     | 
| 
       71 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       72 
     | 
    
         
            -
                    version: '8'
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '7'
         
     | 
| 
       73 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       74 
56 
     | 
    
         
             
              name: fx
         
     | 
| 
       75 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -117,7 +99,7 @@ executables: [] 
     | 
|
| 
       117 
99 
     | 
    
         
             
            extensions: []
         
     | 
| 
       118 
100 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       119 
101 
     | 
    
         
             
            files:
         
     | 
| 
       120 
     | 
    
         
            -
            - ". 
     | 
| 
      
 102 
     | 
    
         
            +
            - ".streerc"
         
     | 
| 
       121 
103 
     | 
    
         
             
            - ".tool-versions"
         
     | 
| 
       122 
104 
     | 
    
         
             
            - CHANGELOG.md
         
     | 
| 
       123 
105 
     | 
    
         
             
            - Gemfile
         
     | 
| 
         @@ -135,6 +117,7 @@ files: 
     | 
|
| 
       135 
117 
     | 
    
         
             
            - lib/generators/hoardable/triggers/set_hoardable_id.sql
         
     | 
| 
       136 
118 
     | 
    
         
             
            - lib/generators/hoardable/triggers/versions_prevent_update.sql
         
     | 
| 
       137 
119 
     | 
    
         
             
            - lib/hoardable.rb
         
     | 
| 
      
 120 
     | 
    
         
            +
            - lib/hoardable/arel_visitors.rb
         
     | 
| 
       138 
121 
     | 
    
         
             
            - lib/hoardable/associations.rb
         
     | 
| 
       139 
122 
     | 
    
         
             
            - lib/hoardable/belongs_to.rb
         
     | 
| 
       140 
123 
     | 
    
         
             
            - lib/hoardable/database_client.rb
         
     | 
| 
         @@ -147,6 +130,8 @@ files: 
     | 
|
| 
       147 
130 
     | 
    
         
             
            - lib/hoardable/has_rich_text.rb
         
     | 
| 
       148 
131 
     | 
    
         
             
            - lib/hoardable/model.rb
         
     | 
| 
       149 
132 
     | 
    
         
             
            - lib/hoardable/rich_text.rb
         
     | 
| 
      
 133 
     | 
    
         
            +
            - lib/hoardable/schema_dumper.rb
         
     | 
| 
      
 134 
     | 
    
         
            +
            - lib/hoardable/schema_statements.rb
         
     | 
| 
       150 
135 
     | 
    
         
             
            - lib/hoardable/scopes.rb
         
     | 
| 
       151 
136 
     | 
    
         
             
            - lib/hoardable/source_model.rb
         
     | 
| 
       152 
137 
     | 
    
         
             
            - lib/hoardable/version.rb
         
     | 
| 
         @@ -167,14 +152,14 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       167 
152 
     | 
    
         
             
              requirements:
         
     | 
| 
       168 
153 
     | 
    
         
             
              - - ">="
         
     | 
| 
       169 
154 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       170 
     | 
    
         
            -
                  version:  
     | 
| 
      
 155 
     | 
    
         
            +
                  version: '3.0'
         
     | 
| 
       171 
156 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       172 
157 
     | 
    
         
             
              requirements:
         
     | 
| 
       173 
158 
     | 
    
         
             
              - - ">="
         
     | 
| 
       174 
159 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       175 
160 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       176 
161 
     | 
    
         
             
            requirements: []
         
     | 
| 
       177 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 162 
     | 
    
         
            +
            rubygems_version: 3.5.6
         
     | 
| 
       178 
163 
     | 
    
         
             
            signing_key:
         
     | 
| 
       179 
164 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       180 
165 
     | 
    
         
             
            summary: An ActiveRecord extension for versioning and soft-deletion of records in
         
     | 
    
        data/.rubocop.yml
    DELETED
    
    | 
         @@ -1,21 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            AllCops:
         
     | 
| 
       2 
     | 
    
         
            -
              TargetRubyVersion: 2.7
         
     | 
| 
       3 
     | 
    
         
            -
              NewCops: enable
         
     | 
| 
       4 
     | 
    
         
            -
              SuggestExtensions: false
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            Layout/LineLength:
         
     | 
| 
       7 
     | 
    
         
            -
              Max: 120
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            Metrics/ClassLength:
         
     | 
| 
       10 
     | 
    
         
            -
              Exclude:
         
     | 
| 
       11 
     | 
    
         
            -
                - 'test/**/*.rb'
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            Metrics/BlockLength:
         
     | 
| 
       14 
     | 
    
         
            -
              Exclude:
         
     | 
| 
       15 
     | 
    
         
            -
                - 'test/**/*.rb'
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            Style/DocumentDynamicEvalDefinition:
         
     | 
| 
       18 
     | 
    
         
            -
              Enabled: false
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
            Naming/PredicateName:
         
     | 
| 
       21 
     | 
    
         
            -
              Enabled: false
         
     |