timescaledb-rails 0.1.5 → 0.1.6

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: 7fc0e42b6db3e42267d014923180abf3c64a643937942b8b3f17ad9b2a3bf223
4
- data.tar.gz: 96c3105df56f184894cdd7e3ca8658b083a87e8a050711c17e52eeae6c836c3e
3
+ metadata.gz: 8e350967c0553e59b57a773226c1b532f9e1e2a93a03b1908c7228816c942d39
4
+ data.tar.gz: 6636c247f01919bfd344f8ff4afb7a74eaff050f4ec3246b64f24904c3046752
5
5
  SHA512:
6
- metadata.gz: 9988f806f0512c73456e531dd42dfe3f3c5765d9ee426bcf6f4b45e3098568fcac3518884abde8fb473a42cba66d73aa4558631b2806256ea4726496a212bdb9
7
- data.tar.gz: e85fa03def618ed5d114275a6f2b929871ca0c0ea52e95ada85cca332baa2f1252f8a6bc3fc29be544aaa8dc8225dbcda52df83903bedd530a63b3683be30e8b
6
+ metadata.gz: a96ee3099632fa74997735f6bbef27971be5f65d0e54e2978c90d4df7ae0ea64a7478acd0ffec787d05bcb0c7126a0ee51937fa4d59b03fc1fbb5c80bb20189c
7
+ data.tar.gz: 6bdd3e8bfe645fea36dc66461d6c4773d560d86d9af79c0bbb5a7a6d1d11eaf424898b6f3e07591b03828a2b2a521581b6a47783bb60e8dfa3b2b2a8e3ff8721
data/README.md CHANGED
@@ -51,16 +51,20 @@ class CreatePayloadHypertable < ActiveRecord::Migration[7.0]
51
51
  end
52
52
  ```
53
53
 
54
- Add hypertable compression
54
+ Add hypertable compression policy
55
55
 
56
56
  ```ruby
57
- class AddEventCompression < ActiveRecord::Migration[7.0]
57
+ class AddEventCompressionPolicy < ActiveRecord::Migration[7.0]
58
58
  def up
59
- add_hypertable_compression :events, 20.days, segment_by: :name, order_by: 'occurred_at DESC'
59
+ enable_hypertable_compression :events, segment_by: :name, order_by: 'occurred_at DESC'
60
+
61
+ add_hypertable_compression_policy :events, 20.days
60
62
  end
61
63
 
62
64
  def down
63
- remove_hypertable_compression :events
65
+ remove_hypertable_compression_policy :events
66
+
67
+ disable_hypertable_compression :events
64
68
  end
65
69
  end
66
70
  ```
@@ -97,6 +101,8 @@ Create continuous aggregate
97
101
 
98
102
  ```ruby
99
103
  class CreateTemperatureEventAggregate < ActiveRecord::Migration[7.0]
104
+ disable_ddl_transaction!
105
+
100
106
  def up
101
107
  create_continuous_aggregate(
102
108
  :temperature_events,
@@ -5,48 +5,27 @@ module Timescaledb
5
5
  module ActiveRecord
6
6
  # :nodoc:
7
7
  module CommandRecorder
8
- def create_hypertable(*args, &block)
9
- record(:create_hypertable, args, &block)
10
- end
11
-
12
- def add_hypertable_compression(*args, &block)
13
- record(:add_hypertable_compression, args, &block)
14
- end
15
-
16
- def remove_hypertable_compression(*args, &block)
17
- record(:remove_hypertable_compression, args, &block)
18
- end
19
-
20
- def add_hypertable_reorder_policy(*args, &block)
21
- record(:add_hypertable_reorder_policy, args, &block)
22
- end
23
-
24
- def remove_hypertable_reorder_policy(*args, &block)
25
- record(:remove_hypertable_reorder_policy, args, &block)
26
- end
27
-
28
- def add_hypertable_retention_policy(*args, &block)
29
- record(:add_hypertable_retention_policy, args, &block)
30
- end
31
-
32
- def remove_hypertable_retention_policy(*args, &block)
33
- record(:remove_hypertable_retention_policy, args, &block)
34
- end
35
-
36
- def create_continuous_aggregate(*args, &block)
37
- record(:create_continuous_aggregate, args, &block)
38
- end
39
-
40
- def drop_continuous_aggregate(*args, &block)
41
- record(:drop_continuous_aggregate, args, &block)
42
- end
43
-
44
- def add_continuous_aggregate_policy(*args, &block)
45
- record(:add_continuous_aggregate_policy, args, &block)
46
- end
47
-
48
- def remove_continuous_aggregate_policy(*args, &block)
49
- record(:remove_continuous_aggregate_policy, args, &block)
8
+ %w[
9
+ create_hypertable
10
+ enable_hypertable_compression
11
+ disable_hypertable_compression
12
+ add_hypertable_compression_policy
13
+ remove_hypertable_compression_policy
14
+ add_hypertable_reorder_policy
15
+ remove_hypertable_reorder_policy
16
+ add_hypertable_retention_policy
17
+ remove_hypertable_retention_policy
18
+ create_continuous_aggregate
19
+ drop_continuous_aggregate
20
+ add_continuous_aggregate_policy
21
+ remove_continuous_aggregate_policy
22
+ ].each do |method|
23
+ module_eval <<-METHOD, __FILE__, __LINE__ + 1
24
+ def #{method}(*args, &block) # def create_table(*args, &block)
25
+ record(:"#{method}", args, &block) # record(:create_table, args, &block)
26
+ end # end
27
+ METHOD
28
+ ruby2_keywords(method) if respond_to?(:ruby2_keywords)
50
29
  end
51
30
 
52
31
  def invert_create_hypertable(args, &block)
@@ -57,16 +36,24 @@ module Timescaledb
57
36
  [:drop_table, args.first, block]
58
37
  end
59
38
 
60
- def invert_add_hypertable_compression(args, &block)
61
- [:remove_hypertable_compression, args, block]
39
+ def invert_enable_hypertable_compression(args, &block)
40
+ [:disable_hypertable_compression, args, block]
41
+ end
42
+
43
+ def invert_disable_hypertable_compression(args, &block)
44
+ [:enable_hypertable_compression, args, block]
45
+ end
46
+
47
+ def invert_add_hypertable_compression_policy(args, &block)
48
+ [:remove_hypertable_compression_policy, args, block]
62
49
  end
63
50
 
64
- def invert_remove_hypertable_compression(args, &block)
51
+ def invert_remove_hypertable_compression_policy(args, &block)
65
52
  if args.size < 2
66
- raise ::ActiveRecord::IrreversibleMigration, 'remove_hypertable_compression is only reversible if given table name and compress period.' # rubocop:disable Layout/LineLength
53
+ raise ::ActiveRecord::IrreversibleMigration, 'remove_hypertable_compression_policy is only reversible if given table name and compress period.' # rubocop:disable Layout/LineLength
67
54
  end
68
55
 
69
- [:add_hypertable_compression, args, block]
56
+ [:add_hypertable_compression_policy, args, block]
70
57
  end
71
58
 
72
59
  def invert_add_hypertable_retention_policy(args, &block)
@@ -27,7 +27,8 @@ module Timescaledb
27
27
  Timescaledb::Rails::Hypertable.all.each do |hypertable|
28
28
  drop_ts_insert_trigger_statment(hypertable, file)
29
29
  create_hypertable_statement(hypertable, file)
30
- add_hypertable_compression_statement(hypertable, file)
30
+ enable_hypertable_compression_statement(hypertable, file)
31
+ add_hypertable_compression_policy_statement(hypertable, file)
31
32
  add_hypertable_reorder_policy_statement(hypertable, file)
32
33
  add_hypertable_retention_policy_statement(hypertable, file)
33
34
  end
@@ -36,7 +37,7 @@ module Timescaledb
36
37
 
37
38
  def continuous_aggregates(filename)
38
39
  File.open(filename, 'a') do |file|
39
- Timescaledb::Rails::ContinuousAggregate.all.each do |continuous_aggregate|
40
+ Timescaledb::Rails::ContinuousAggregate.dependency_ordered.each do |continuous_aggregate|
40
41
  create_continuous_aggregate_statement(continuous_aggregate, file)
41
42
  add_continuous_aggregate_policy_statement(continuous_aggregate, file)
42
43
  end
@@ -56,12 +57,17 @@ module Timescaledb
56
57
  file << "SELECT create_hypertable('#{hypertable.hypertable_schema}.#{hypertable.hypertable_name}', '#{hypertable.time_column_name}', #{options});\n\n"
57
58
  end
58
59
 
59
- def add_hypertable_compression_statement(hypertable, file)
60
+ def enable_hypertable_compression_statement(hypertable, file)
60
61
  return unless hypertable.compression?
61
62
 
62
63
  options = hypertable_compression_options(hypertable)
63
64
 
64
65
  file << "ALTER TABLE #{hypertable.hypertable_schema}.#{hypertable.hypertable_name} SET (#{options});\n\n"
66
+ end
67
+
68
+ def add_hypertable_compression_policy_statement(hypertable, file)
69
+ return unless hypertable.compression_policy?
70
+
65
71
  file << "SELECT add_compression_policy('#{hypertable.hypertable_schema}.#{hypertable.hypertable_name}', INTERVAL '#{hypertable.compression_policy_interval}');\n\n"
66
72
  end
67
73
 
@@ -139,7 +145,7 @@ module Timescaledb
139
145
 
140
146
  # @return [Boolean]
141
147
  def timescale_enabled?
142
- Timescaledb::Rails::Hypertable.table_exists?
148
+ ApplicationRecord.timescale_connection?(connection) && Hypertable.table_exists?
143
149
  end
144
150
  end
145
151
  # rubocop:enable Layout/LineLength
@@ -19,9 +19,9 @@ module Timescaledb
19
19
  def continuous_aggregates(stream)
20
20
  return unless timescale_enabled?
21
21
 
22
- Timescaledb::Rails::ContinuousAggregate.all.each do |continuous_aggregate|
23
- continuous_aggregate(continuous_aggregate, stream)
24
- continuous_aggregate_policy(continuous_aggregate, stream)
22
+ Timescaledb::Rails::ContinuousAggregate.dependency_ordered.each do |ca|
23
+ continuous_aggregate(ca, stream)
24
+ continuous_aggregate_policy(ca, stream)
25
25
  end
26
26
  end
27
27
 
@@ -55,8 +55,9 @@ module Timescaledb
55
55
 
56
56
  hypertable(hypertable, stream)
57
57
  hypertable_compression(hypertable, stream)
58
- hypertable_reorder(hypertable, stream)
59
- hypertable_retention(hypertable, stream)
58
+ hypertable_compression_policy(hypertable, stream)
59
+ hypertable_reorder_policy(hypertable, stream)
60
+ hypertable_retention_policy(hypertable, stream)
60
61
  end
61
62
 
62
63
  private
@@ -72,14 +73,22 @@ module Timescaledb
72
73
  def hypertable_compression(hypertable, stream)
73
74
  return unless hypertable.compression?
74
75
 
76
+ options = [hypertable.hypertable_name.inspect, hypertable_compression_options(hypertable)]
77
+
78
+ stream.puts " enable_hypertable_compression #{options.join(', ')}"
79
+ stream.puts
80
+ end
81
+
82
+ def hypertable_compression_policy(hypertable, stream)
83
+ return unless hypertable.compression_policy?
84
+
75
85
  options = [hypertable.hypertable_name.inspect, hypertable.compression_policy_interval.inspect]
76
- options |= hypertable_compression_options(hypertable)
77
86
 
78
- stream.puts " add_hypertable_compression #{options.join(', ')}"
87
+ stream.puts " add_hypertable_compression_policy #{options.join(', ')}"
79
88
  stream.puts
80
89
  end
81
90
 
82
- def hypertable_reorder(hypertable, stream)
91
+ def hypertable_reorder_policy(hypertable, stream)
83
92
  return unless hypertable.reorder?
84
93
 
85
94
  options = [hypertable.hypertable_name.inspect, hypertable.reorder_policy_index_name.inspect]
@@ -88,7 +97,7 @@ module Timescaledb
88
97
  stream.puts
89
98
  end
90
99
 
91
- def hypertable_retention(hypertable, stream)
100
+ def hypertable_retention_policy(hypertable, stream)
92
101
  return unless hypertable.retention?
93
102
 
94
103
  options = [hypertable.hypertable_name.inspect, hypertable.retention_policy_interval.inspect]
@@ -140,7 +149,7 @@ module Timescaledb
140
149
  end
141
150
 
142
151
  def timescale_enabled?
143
- Timescaledb::Rails::Hypertable.table_exists?
152
+ ApplicationRecord.timescale_connection?(@connection) && Hypertable.table_exists?
144
153
  end
145
154
  end
146
155
  end
@@ -40,29 +40,42 @@ module Timescaledb
40
40
  execute "SELECT create_hypertable('#{table_name}', '#{time_column_name}', #{options_as_sql});"
41
41
  end
42
42
 
43
- # Enables compression and sets compression options.
43
+ # Enables compression on given hypertable.
44
44
  #
45
- # add_hypertable_compression('events', 7.days, segment_by: :created_at, order_by: :name)
45
+ # enable_hypertable_compression('events', segment_by: :created_at, order_by: :name)
46
46
  #
47
- def add_hypertable_compression(table_name, compress_after, segment_by: nil, order_by: nil)
48
- compress_after = compress_after.inspect if compress_after.is_a?(ActiveSupport::Duration)
49
-
47
+ def enable_hypertable_compression(table_name, segment_by: nil, order_by: nil)
50
48
  options = ['timescaledb.compress']
51
49
  options << "timescaledb.compress_orderby = '#{order_by}'" unless order_by.nil?
52
50
  options << "timescaledb.compress_segmentby = '#{segment_by}'" unless segment_by.nil?
53
51
 
54
52
  execute "ALTER TABLE #{table_name} SET (#{options.join(', ')});"
53
+ end
54
+
55
+ # Disables compression on given hypertable.
56
+ #
57
+ # disable_hypertable_compression('events')
58
+ #
59
+ def disable_hypertable_compression(table_name, segment_by: nil, order_by: nil) # rubocop:disable Lint/UnusedMethodArgument
60
+ execute "ALTER TABLE #{table_name} SET (timescaledb.compress = false);"
61
+ end
62
+
63
+ # Adds compression policy to given hypertable.
64
+ #
65
+ # add_hypertable_compression_policy('events', 7.days)
66
+ #
67
+ def add_hypertable_compression_policy(table_name, compress_after)
68
+ compress_after = compress_after.inspect if compress_after.is_a?(ActiveSupport::Duration)
55
69
 
56
70
  execute "SELECT add_compression_policy('#{table_name}', INTERVAL '#{stringify_interval(compress_after)}');"
57
71
  end
58
72
 
59
- # Removes compression policy and disables compression from given hypertable.
73
+ # Removes compression policy from the given hypertable.
60
74
  #
61
- # remove_hypertable_compression('events')
75
+ # remove_hypertable_compression_policy('events')
62
76
  #
63
- def remove_hypertable_compression(table_name, compress_after = nil, segment_by: nil, order_by: nil) # rubocop:disable Lint/UnusedMethodArgument
77
+ def remove_hypertable_compression_policy(table_name, _compress_after = nil)
64
78
  execute "SELECT remove_compression_policy('#{table_name}');"
65
- execute "ALTER TABLE #{table_name.inspect} SET (timescaledb.compress = false);"
66
79
  end
67
80
 
68
81
  # Add a data retention policy to given hypertable.
@@ -103,15 +116,22 @@ module Timescaledb
103
116
  # 'temperature_events', "SELECT * FROM events where event_type = 'temperature'"
104
117
  # )
105
118
  #
106
- def create_continuous_aggregate(view_name, view_query)
107
- execute "CREATE MATERIALIZED VIEW #{view_name} WITH (timescaledb.continuous) AS #{view_query};"
119
+ def create_continuous_aggregate(view_name, view_query, force: false)
120
+ if force
121
+ execute "DROP MATERIALIZED VIEW #{quote_table_name(view_name)} CASCADE;" if view_exists? view_name
122
+ else
123
+ schema_cache.clear_data_source_cache!(view_name.to_s)
124
+ end
125
+
126
+ execute "CREATE MATERIALIZED VIEW #{quote_table_name(view_name)} " \
127
+ "WITH (timescaledb.continuous) AS #{view_query};"
108
128
  end
109
129
 
110
130
  # Drops a continuous aggregate
111
131
  #
112
132
  # drop_continuous_aggregate('temperature_events')
113
133
  #
114
- def drop_continuous_aggregate(view_name, _view_query = nil)
134
+ def drop_continuous_aggregate(view_name, _view_query = nil, force: false) # rubocop:disable Lint/UnusedMethodArgument
115
135
  execute "DROP MATERIALIZED VIEW #{view_name};"
116
136
  end
117
137
 
@@ -10,12 +10,18 @@ module Timescaledb
10
10
  TIME_BUCKET_ALIAS = 'time_bucket'
11
11
 
12
12
  # @return [ActiveRecord::Relation<ActiveRecord::Base>]
13
- def time_bucket(interval, target_column = nil)
14
- target_column ||= hypertable_time_column_name
13
+ def time_bucket(interval, target_column = nil, select_alias: TIME_BUCKET_ALIAS)
14
+ target_column &&= Arel.sql(target_column.to_s)
15
+ target_column ||= arel_table[hypertable_time_column_name]
15
16
 
16
- select("time_bucket('#{format_interval_value(interval)}', #{target_column}) as #{TIME_BUCKET_ALIAS}")
17
- .group(TIME_BUCKET_ALIAS)
18
- .order(TIME_BUCKET_ALIAS)
17
+ time_bucket = Arel::Nodes::NamedFunction.new(
18
+ 'time_bucket',
19
+ [Arel::Nodes.build_quoted(format_interval_value(interval)), target_column]
20
+ )
21
+
22
+ select(time_bucket.dup.as(select_alias))
23
+ .group(time_bucket)
24
+ .order(time_bucket)
19
25
  .extending(AggregateFunctions)
20
26
  end
21
27
 
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Timescaledb
4
+ module Rails
5
+ # :nodoc:
6
+ class ApplicationRecord < ::ActiveRecord::Base
7
+ self.abstract_class = true
8
+
9
+ def self.timescale_connection?(connection)
10
+ pool_name = lambda do |pool|
11
+ if pool.respond_to?(:db_config)
12
+ pool.db_config.name
13
+ elsif pool.respond_to?(:spec)
14
+ pool.spec.name
15
+ else
16
+ raise "Don't know how to get pool name from #{pool.inspect}"
17
+ end
18
+ end
19
+
20
+ pool_name[connection.pool] == pool_name[self.connection.pool]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -3,7 +3,7 @@
3
3
  module Timescaledb
4
4
  module Rails
5
5
  # :nodoc:
6
- class Chunk < ::ActiveRecord::Base
6
+ class Chunk < ApplicationRecord
7
7
  self.table_name = 'timescaledb_information.chunks'
8
8
  self.primary_key = 'hypertable_name'
9
9
 
@@ -17,13 +17,13 @@ module Timescaledb
17
17
  end
18
18
 
19
19
  def compress!
20
- ::ActiveRecord::Base.connection.execute(
20
+ self.class.connection.execute(
21
21
  "SELECT compress_chunk('#{chunk_full_name}')"
22
22
  )
23
23
  end
24
24
 
25
25
  def decompress!
26
- ::ActiveRecord::Base.connection.execute(
26
+ self.class.connection.execute(
27
27
  "SELECT decompress_chunk('#{chunk_full_name}')"
28
28
  )
29
29
  end
@@ -40,7 +40,7 @@ module Timescaledb
40
40
  options = ["'#{chunk_full_name}'"]
41
41
  options << "'#{index}'" if index.present?
42
42
 
43
- ::ActiveRecord::Base.connection.execute(
43
+ self.class.connection.execute(
44
44
  "SELECT reorder_chunk(#{options.join(', ')})"
45
45
  )
46
46
  end
@@ -3,7 +3,7 @@
3
3
  module Timescaledb
4
4
  module Rails
5
5
  # :nodoc:
6
- class CompressionSetting < ::ActiveRecord::Base
6
+ class CompressionSetting < ApplicationRecord
7
7
  self.table_name = 'timescaledb_information.compression_settings'
8
8
  self.primary_key = 'hypertable_name'
9
9
 
@@ -11,6 +11,8 @@ module Timescaledb
11
11
 
12
12
  # @return [String]
13
13
  def parse_duration(duration)
14
+ return if duration.nil?
15
+
14
16
  duration_in_seconds = duration_in_seconds(duration)
15
17
 
16
18
  duration_to_interval(
@@ -5,7 +5,7 @@ require 'timescaledb/rails/models/concerns/durationable'
5
5
  module Timescaledb
6
6
  module Rails
7
7
  # :nodoc:
8
- class ContinuousAggregate < ::ActiveRecord::Base
8
+ class ContinuousAggregate < ApplicationRecord
9
9
  include Timescaledb::Rails::Models::Durationable
10
10
 
11
11
  self.table_name = 'timescaledb_information.continuous_aggregates'
@@ -13,13 +13,22 @@ module Timescaledb
13
13
 
14
14
  has_many :jobs, foreign_key: 'hypertable_name', class_name: 'Timescaledb::Rails::Job'
15
15
 
16
+ def self.dependency_ordered
17
+ deps = find_each.index_by(&:materialization_hypertable_name)
18
+
19
+ TSort.tsort_each(
20
+ ->(&b) { deps.each_value.sort_by(&:hypertable_name).each(&b) },
21
+ ->(n, &b) { Array.wrap(deps[n.hypertable_name]).each(&b) }
22
+ )
23
+ end
24
+
16
25
  # Manually refresh a continuous aggregate.
17
26
  #
18
27
  # @param [DateTime] start_time
19
28
  # @param [DateTime] end_time
20
29
  #
21
30
  def refresh!(start_time = 'NULL', end_time = 'NULL')
22
- ::ActiveRecord::Base.connection.execute(
31
+ self.class.connection.execute(
23
32
  "CALL refresh_continuous_aggregate('#{view_name}', #{start_time}, #{end_time});"
24
33
  )
25
34
  end
@@ -3,7 +3,7 @@
3
3
  module Timescaledb
4
4
  module Rails
5
5
  # :nodoc:
6
- class Dimension < ::ActiveRecord::Base
6
+ class Dimension < ApplicationRecord
7
7
  TIME_TYPE = 'Time'
8
8
 
9
9
  self.table_name = 'timescaledb_information.dimensions'
@@ -5,7 +5,7 @@ require 'timescaledb/rails/models/concerns/durationable'
5
5
  module Timescaledb
6
6
  module Rails
7
7
  # :nodoc:
8
- class Hypertable < ::ActiveRecord::Base
8
+ class Hypertable < ApplicationRecord
9
9
  include Timescaledb::Rails::Models::Durationable
10
10
 
11
11
  self.table_name = 'timescaledb_information.hypertables'
@@ -57,10 +57,15 @@ module Timescaledb
57
57
  end
58
58
 
59
59
  # @return [Boolean]
60
- def compression?
60
+ def compression_policy?
61
61
  compression_job.present?
62
62
  end
63
63
 
64
+ # @return [Boolean]
65
+ def compression?
66
+ compression_settings.any?
67
+ end
68
+
64
69
  # @return [Boolean]
65
70
  def reorder?
66
71
  reorder_job.present?
@@ -3,7 +3,7 @@
3
3
  module Timescaledb
4
4
  module Rails
5
5
  # :nodoc:
6
- class Job < ::ActiveRecord::Base
6
+ class Job < ApplicationRecord
7
7
  self.table_name = 'timescaledb_information.jobs'
8
8
  self.primary_key = 'hypertable_name'
9
9
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative './models/application_record'
4
+
3
5
  require_relative './models/chunk'
4
6
  require_relative './models/compression_setting'
5
7
  require_relative './models/continuous_aggregate'
@@ -3,6 +3,6 @@
3
3
  module Timescaledb
4
4
  # :nodoc:
5
5
  module Rails
6
- VERSION = '0.1.5'
6
+ VERSION = '0.1.6'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timescaledb-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iván Etchart
8
8
  - Santiago Doldán
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-01-24 00:00:00.000000000 Z
12
+ date: 2023-04-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -123,7 +123,7 @@ dependencies:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: '2.15'
126
- description:
126
+ description:
127
127
  email: oss@crunchloop.io
128
128
  executables: []
129
129
  extensions: []
@@ -144,6 +144,7 @@ files:
144
144
  - lib/timescaledb/rails/model/hyperfunctions.rb
145
145
  - lib/timescaledb/rails/model/scopes.rb
146
146
  - lib/timescaledb/rails/models.rb
147
+ - lib/timescaledb/rails/models/application_record.rb
147
148
  - lib/timescaledb/rails/models/chunk.rb
148
149
  - lib/timescaledb/rails/models/compression_setting.rb
149
150
  - lib/timescaledb/rails/models/concerns/durationable.rb
@@ -159,7 +160,7 @@ licenses:
159
160
  - MIT
160
161
  metadata:
161
162
  rubygems_mfa_required: 'true'
162
- post_install_message:
163
+ post_install_message:
163
164
  rdoc_options: []
164
165
  require_paths:
165
166
  - lib
@@ -174,8 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
175
  - !ruby/object:Gem::Version
175
176
  version: '0'
176
177
  requirements: []
177
- rubygems_version: 3.0.3.1
178
- signing_key:
178
+ rubygems_version: 3.3.7
179
+ signing_key:
179
180
  specification_version: 4
180
181
  summary: TimescaleDB Rails integration
181
182
  test_files: []