hoardable 0.12.2 → 0.12.5

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: eec6cda69bb2bbb1aeec6a0c460881c33abbe1de123ef9178d2c16378374b2bd
4
- data.tar.gz: f3f57007e08f958017483dfffd0275b5b70c0ef1522984ea78da4c595a9e5506
3
+ metadata.gz: 931223031ac56883e27e5f11da07eae3b59793ca8a2c77ce4e20f67cdb730174
4
+ data.tar.gz: 452472091834577883a5d56ea8b1af4375120648eaff066119edc2459c2cf035
5
5
  SHA512:
6
- metadata.gz: 04a13fec8198d4c4fda05b5364a7925755e7f2708004e15a564f243b64836577f4393cb502e7dd7d88ea123df29909ccb36a1d603cae8b2e711958250dc45763
7
- data.tar.gz: 34a59cb91ed643784e4aa6ab88abac2d3e7a59a59945bcdce6e849aa441bc1490a6870c2661f65c31d246e4cb87bb39c4502e6cb8ce05cb3c42a6ad0e56f1140
6
+ metadata.gz: 414a407c30d2aa0f504cd89773a83dd0b775bbbed51c8f7dbaa4225141aa34d301aac6167b6ce3553af02f03e8e2d1a053b58b4f9946814d5fb1b17282f86817
7
+ data.tar.gz: 995256175f51743332171ec32e232bdf01abb7288df8987d75b4e164499cf99610dc8605a9956fed3eb0edbb736b46ae24906fdf00cf5c14fa9ec99d752647d2
@@ -13,6 +13,7 @@ class InstallHoardable < ActiveRecord::Migration[<%= ActiveRecord::Migration.cur
13
13
  END IF;
14
14
  END
15
15
  $$;
16
+
16
17
  CREATE OR REPLACE FUNCTION hoardable_source_set_id() RETURNS trigger
17
18
  LANGUAGE plpgsql AS
18
19
  $$
@@ -31,6 +32,16 @@ class InstallHoardable < ActiveRecord::Migration[<%= ActiveRecord::Migration.cur
31
32
  NEW.hoardable_id = _id;
32
33
  RETURN NEW;
33
34
  END;$$;
35
+
36
+ CREATE OR REPLACE FUNCTION hoardable_prevent_update_id() RETURNS trigger
37
+ LANGUAGE plpgsql AS
38
+ $$BEGIN
39
+ IF NEW.hoardable_id <> OLD.hoardable_id THEN
40
+ RAISE EXCEPTION 'hoardable id cannot be updated';
41
+ END IF;
42
+ RETURN NEW;
43
+ END;$$;
44
+
34
45
  CREATE OR REPLACE FUNCTION hoardable_version_prevent_update() RETURNS trigger
35
46
  LANGUAGE plpgsql AS
36
47
  $$BEGIN
@@ -46,6 +57,7 @@ class InstallHoardable < ActiveRecord::Migration[<%= ActiveRecord::Migration.cur
46
57
  DROP TYPE IF EXISTS hoardable_operation;
47
58
  DROP FUNCTION IF EXISTS hoardable_version_prevent_update();
48
59
  DROP FUNCTION IF EXISTS hoardable_source_set_id();
60
+ DROP FUNCTION IF EXISTS hoardable_prevent_update_id();
49
61
  SQL
50
62
  )
51
63
  end
@@ -21,6 +21,9 @@ class Create<%= class_name.singularize.delete(':') %>Versions < ActiveRecord::Mi
21
21
  CREATE TRIGGER <%= table_name %>_set_hoardable_id
22
22
  BEFORE INSERT ON <%= table_name %> FOR EACH ROW
23
23
  EXECUTE PROCEDURE hoardable_source_set_id();
24
+ CREATE TRIGGER <%= table_name %>_prevent_update_hoardable_id
25
+ BEFORE UPDATE ON <%= table_name %> FOR EACH ROW
26
+ EXECUTE PROCEDURE hoardable_prevent_update_id();
24
27
  SQL
25
28
  )
26
29
  end
@@ -31,16 +34,15 @@ class Create<%= class_name.singularize.delete(':') %>Versions < ActiveRecord::Mi
31
34
  ON <%= singularized_table_name %>_versions;
32
35
  DROP TRIGGER <%= table_name %>_set_hoardable_id
33
36
  ON <%= table_name %>;
37
+ DROP TRIGGER <%= table_name %>_prevent_update_hoardable_id
38
+ ON <%= table_name %>;
34
39
  SQL
35
40
  )
36
41
  end
37
42
  end
38
43
  change_column_null :<%= table_name %>, :hoardable_id, false
39
- add_index(:<%= singularized_table_name %>_versions, :<%= primary_key %>, unique: true)
40
- add_index(
41
- :<%= singularized_table_name %>_versions,
42
- %i[_during hoardable_id],
43
- name: 'idx_<%= singularized_table_name %>_versions_temporally'
44
- )
44
+ add_index :<%= singularized_table_name %>_versions, :<%= primary_key %>, unique: true
45
+ add_index :<%= singularized_table_name %>_versions, :hoardable_id
46
+ add_index :<%= singularized_table_name %>_versions, :_during
45
47
  end
46
48
  end
@@ -15,4 +15,16 @@ module Hoardable
15
15
  )
16
16
  end
17
17
  end
18
+
19
+ # An error to be raised when 'updated_at' columns are missing for {Hoardable::Model}s.
20
+ class UpdatedAtColumnMissingError < Error
21
+ def initialize(source_table_name)
22
+ super(
23
+ <<~LOG
24
+ '#{source_table_name}' does not have an 'updated_at' column, so Hoardable cannot look up
25
+ associated record versions with it. Add an 'updated_at' column to '#{source_table_name}'.
26
+ LOG
27
+ )
28
+ end
29
+ end
18
30
  end
@@ -15,14 +15,30 @@ module Hoardable
15
15
 
16
16
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
17
17
  def #{name}
18
- return super unless (at = Hoardable.instance_variable_get('@at'))
18
+ reflection = _reflections['#{name}']
19
+ return super if reflection.klass.name.match?(/^ActionText/)
19
20
 
20
- super&.version_at(at) ||
21
- _reflections['profile'].klass.where(_reflections['profile'].foreign_key => id).first
21
+ super&.at(hoardable_at_timestamp) ||
22
+ reflection.klass.at(hoardable_at_timestamp).find_by(
23
+ {
24
+ reflection.type => self.class.name.sub(/Version$/, ''),
25
+ reflection.foreign_key => hoardable_id
26
+ }.reject { |key, _| key.blank? }
27
+ )
22
28
  end
23
29
  RUBY
24
30
  end
25
31
  end
32
+
33
+ included do
34
+ private
35
+
36
+ def hoardable_at_timestamp
37
+ Hoardable.instance_variable_get('@at') || updated_at
38
+ rescue NameError
39
+ raise(UpdatedAtColumnMissingError, self.class.table_name)
40
+ end
41
+ end
26
42
  end
27
43
  private_constant :HasOne
28
44
  end
@@ -14,6 +14,7 @@ module Hoardable
14
14
  end
15
15
  return unless hoardable
16
16
 
17
+ 'ActionText::RichText'.constantize # forces ActionText::RichText to load if it has not
17
18
  reflection_options = reflections["rich_text_#{name}"].options
18
19
  reflection_options[:class_name] = reflection_options[:class_name].sub(/ActionText/, 'Hoardable')
19
20
  end
@@ -46,6 +46,7 @@ module Hoardable
46
46
 
47
47
  included do
48
48
  include Associations
49
+ attr_readonly :hoardable_id
49
50
  define_model_callbacks :versioned, only: :after
50
51
  define_model_callbacks :reverted, only: :after
51
52
  define_model_callbacks :untrashed, only: :after
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hoardable
4
- VERSION = '0.12.2'
4
+ VERSION = '0.12.5'
5
5
  end
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.12.2
4
+ version: 0.12.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - justin talbott
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-11 00:00:00.000000000 Z
11
+ date: 2022-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord