timescaledb-rails 0.1.5 → 0.1.6

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: 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: []