active_partition 0.3.0 → 0.5.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: cd2f915d2a18fe45a1bfd5abada5f585341ee132a04c01a37214cd7a633ba7bd
4
- data.tar.gz: dd8d0e55063e0acc1089cfc99c3de44e30c40f1b8ff4b99696c424407fd8aa7c
3
+ metadata.gz: 9c038362292769cc7d68786d177c845429a6e15a3bac8c6b1de166e976a27d26
4
+ data.tar.gz: 84a4f14e03c642cd562caae6e93fd9aaee1a4bf2bb7e4bb50f284860a809e2fa
5
5
  SHA512:
6
- metadata.gz: f32b271affea24e5c9d450c004fb094c2c18308e8370132754bf16444a16db0c21b75e72f2cf693c92ddbbc2cfad97ff4297495813f596996a9ee364fef15704
7
- data.tar.gz: b18f0e4b19d116423ac3135797e68622eaaee93d0c1ea93f530282152606811cca395e156b516400e971427424897d3cd34f4eff49635774e6e24c20c131af00
6
+ metadata.gz: 9d15088d3d42bb257b854e7f04ed265400ae810831692b5fda3f5ef8ae2d7e3582bf09e7703393e2cbdf67cdf388b74a6b1dd77624a74a38706f9face93ac3d1
7
+ data.tar.gz: 0a58ffcebd2c11bc4e26faefe7106928ef58fa435c7d8c7e441b11b06487f018298cfcceec3fb8d924ac80a62f1d4a844f8c381a736930f6a583bcc9f334d30d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_partition (0.2.0)
4
+ active_partition (0.4.0)
5
5
  rails
6
6
  range_operators (~> 0.1.1)
7
7
  rspec-rails
data/bin/console CHANGED
@@ -30,7 +30,31 @@ class OutgoingEvent < ActiveRecord::Base
30
30
  self.retention_partition_count = 3
31
31
  end
32
32
 
33
+ class OutgoingEventsWebhook < ActiveRecord::Base
34
+ include ActivePartition::Partitionable
35
+ self.primary_key = "id"
36
+ self.partitioned_by = "created_at"
37
+ self.partition_range = 1.hour
38
+
39
+ # You can choose 1 of the following 2 options
40
+ self.retention_period = 1.day
41
+ self.retention_partition_count = 3
42
+ end
43
+
33
44
  OutgoingEvent.establish_connection(ENV["DATABASE_URL"])
45
+ OutgoingEventsWebhook.establish_connection(ENV["DATABASE_URL"])
46
+
47
+ if OutgoingEventsWebhook.partition_adapter == OutgoingEvent.partition_adapter
48
+ puts "Violate the partition adapter constraint", OutgoingEventsWebhook.partition_adapter == OutgoingEvent.partition_adapter
49
+ puts OutgoingEventsWebhook.partition_adapter
50
+ puts OutgoingEvent.partition_adapter
51
+ end
52
+
53
+ if OutgoingEventsWebhook.partition_manager == OutgoingEvent.partition_manager
54
+ puts "Violate the partition manager constraint"
55
+ puts OutgoingEventsWebhook.partition_manager
56
+ puts OutgoingEvent.partition_manager
57
+ end
34
58
 
35
59
  require "irb"
36
60
  IRB.start(__FILE__)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActivePartition
4
- VERSION = "0.3.0"
4
+ VERSION = "0.5.0"
5
5
  end
@@ -13,6 +13,7 @@ module ActivePartition
13
13
  module Partitionable
14
14
  extend ActiveSupport::Concern
15
15
 
16
+ # rubocop:disable Metrics
16
17
  included do
17
18
  # when partitioned column change, create partition if needed
18
19
  # before_validation will be called with create, update, save, and create! methods
@@ -30,47 +31,50 @@ module ActivePartition
30
31
  partitioned_value = attributes[self.class.partitioned_by.to_s]
31
32
  self.class.prepare_partition(partitioned_value, self.class.partition_range)
32
33
  end
33
- end
34
-
35
- # rubocop:disable Metrics
36
- class_methods do
37
- # The range of each partition. You can change this value over time.
38
- # example: 1.month, 2.weeks, 3.hours
39
- attr_accessor :partition_range
40
- # The column name to partition the table by
41
- attr_accessor :partitioned_by
42
- # Retains partitions until the specified time [Choose one of retention_period or retention_partition_count]
43
- # For example: 1.month (1 month from now), 2.weeks (2 weeks from now), 3.hours (3 hours from now)
44
- attr_accessor :retention_period
45
- # Retains the specified number of partitions [Choose one of retention_period or retention_partition_count]
46
- attr_accessor :retention_partition_count
47
34
 
48
- def partition_adapter
49
- @@partition_adapter ||= ActivePartition::Adapters::PostgresqlAdapter.new(connection, table_name)
50
- end
35
+ class << self
36
+ def partition_adapter
37
+ @partition_adapter ||= ActivePartition::Adapters::PostgresqlAdapter.new(connection, table_name)
38
+ end
51
39
 
52
- def partition_manager
53
- @@partition_manager ||= case columns_hash[partitioned_by.to_s].type.to_s
54
- when "datetime"
55
- ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
56
- else
57
- ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
40
+ def partition_manager
41
+ @partition_manager ||= case columns_hash[partitioned_by.to_s].type.to_s
42
+ when "datetime"
43
+ ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
44
+ else
45
+ ActivePartition::PartitionManagers::TimeRange.new(partition_adapter, table_name)
46
+ end
58
47
  end
59
- end
60
48
 
61
- def delete_expired_partitions
62
- if retention_period && retention_period.is_a?(ActiveSupport::Duration)
63
- partition_manager.retain_by_time(retention_period.ago)
64
- elsif retention_partition_count
65
- partition_manager.retain_by_partition_count(retention_partition_count)
49
+ # The range of each partition. You can change this value over time.
50
+ # example: 1.month, 2.weeks, 3.hours
51
+ attr_accessor :partition_range
52
+ # The column name to partition the table by
53
+ attr_accessor :partitioned_by
54
+ # Retains partitions until the specified time [Choose one of retention_period or retention_partition_count]
55
+ # For example: 1.month (1 month from now), 2.weeks (2 weeks from now), 3.hours (3 hours from now)
56
+ attr_accessor :retention_period
57
+ # Retains the specified number of partitions [Choose one of retention_period or retention_partition_count]
58
+ attr_accessor :retention_partition_count
59
+
60
+ def delete_expired_partitions
61
+ if retention_period && retention_period.is_a?(ActiveSupport::Duration)
62
+ partition_manager.retain_by_time(retention_period.ago)
63
+ elsif retention_partition_count
64
+ partition_manager.retain_by_partition_count(retention_partition_count)
65
+ end
66
66
  end
67
- end
68
67
 
69
- # delegate :premake, :latest_partition_coverage_time, to: :partition_manager
70
- # delegate :retain, :retain_by_time, :retain_by_partition_count, to: :partition_manager
71
- # delegate :prepare_partition, "active_partitions_cover?", to: :partition_manager
72
- # delegate :get_all_supported_partition_tables, to: :partition_adapter
73
- # delegate :drop_partition, to: :partition_adapter
68
+ delegate :premake, :latest_partition_coverage_time, to: :partition_manager
69
+ delegate :retain, :retain_by_time, :retain_by_partition_count, to: :partition_manager
70
+ delegate :prepare_partition, "active_partitions_cover?", to: :partition_manager
71
+ delegate :get_all_supported_partition_tables, to: :partition_adapter
72
+ delegate :drop_partition, to: :partition_adapter
73
+ end
74
74
  end
75
+
76
+ # rubocop:disable Metrics
77
+ # class_methods do
78
+ # end
75
79
  end
76
80
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_partition
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thien Tran
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-24 00:00:00.000000000 Z
11
+ date: 2024-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug