timescaledb 0.2.6 → 0.2.7
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/lib/timescaledb/acts_as_hypertable/core.rb +1 -1
- data/lib/timescaledb/database/quoting.rb +12 -0
- data/lib/timescaledb/database/schema_statements.rb +168 -0
- data/lib/timescaledb/database/types.rb +17 -0
- data/lib/timescaledb/database.rb +11 -0
- data/lib/timescaledb/toolkit/time_vector.rb +41 -4
- data/lib/timescaledb/version.rb +1 -1
- metadata +6 -95
- data/.github/workflows/ci.yml +0 -72
- data/.gitignore +0 -12
- data/.rspec +0 -3
- data/.ruby-version +0 -1
- data/.tool-versions +0 -1
- data/.travis.yml +0 -9
- data/CODE_OF_CONDUCT.md +0 -74
- data/Fastfile +0 -17
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -75
- data/Gemfile.scenic +0 -7
- data/Gemfile.scenic.lock +0 -119
- data/README.md +0 -490
- data/Rakefile +0 -21
- data/bin/console +0 -28
- data/bin/setup +0 -13
- data/docs/command_line.md +0 -178
- data/docs/img/lttb_example.png +0 -0
- data/docs/img/lttb_sql_vs_ruby.gif +0 -0
- data/docs/img/lttb_zoom.gif +0 -0
- data/docs/index.md +0 -72
- data/docs/migrations.md +0 -76
- data/docs/models.md +0 -78
- data/docs/toolkit.md +0 -507
- data/docs/toolkit_lttb_tutorial.md +0 -557
- data/docs/toolkit_lttb_zoom.md +0 -357
- data/docs/toolkit_ohlc.md +0 -315
- data/docs/videos.md +0 -16
- data/examples/all_in_one/all_in_one.rb +0 -94
- data/examples/all_in_one/benchmark_comparison.rb +0 -108
- data/examples/all_in_one/caggs.rb +0 -93
- data/examples/all_in_one/query_data.rb +0 -78
- data/examples/ranking/.gitattributes +0 -7
- data/examples/ranking/.gitignore +0 -29
- data/examples/ranking/.ruby-version +0 -1
- data/examples/ranking/Gemfile +0 -33
- data/examples/ranking/Gemfile.lock +0 -189
- data/examples/ranking/README.md +0 -166
- data/examples/ranking/Rakefile +0 -6
- data/examples/ranking/app/controllers/application_controller.rb +0 -2
- data/examples/ranking/app/controllers/concerns/.keep +0 -0
- data/examples/ranking/app/jobs/application_job.rb +0 -7
- data/examples/ranking/app/models/application_record.rb +0 -3
- data/examples/ranking/app/models/concerns/.keep +0 -0
- data/examples/ranking/app/models/game.rb +0 -2
- data/examples/ranking/app/models/play.rb +0 -7
- data/examples/ranking/bin/bundle +0 -114
- data/examples/ranking/bin/rails +0 -4
- data/examples/ranking/bin/rake +0 -4
- data/examples/ranking/bin/setup +0 -33
- data/examples/ranking/config/application.rb +0 -39
- data/examples/ranking/config/boot.rb +0 -4
- data/examples/ranking/config/credentials.yml.enc +0 -1
- data/examples/ranking/config/database.yml +0 -86
- data/examples/ranking/config/environment.rb +0 -5
- data/examples/ranking/config/environments/development.rb +0 -60
- data/examples/ranking/config/environments/production.rb +0 -75
- data/examples/ranking/config/environments/test.rb +0 -53
- data/examples/ranking/config/initializers/cors.rb +0 -16
- data/examples/ranking/config/initializers/filter_parameter_logging.rb +0 -8
- data/examples/ranking/config/initializers/inflections.rb +0 -16
- data/examples/ranking/config/initializers/timescale.rb +0 -2
- data/examples/ranking/config/locales/en.yml +0 -33
- data/examples/ranking/config/puma.rb +0 -43
- data/examples/ranking/config/routes.rb +0 -6
- data/examples/ranking/config/storage.yml +0 -34
- data/examples/ranking/config.ru +0 -6
- data/examples/ranking/db/migrate/20220209120747_create_games.rb +0 -10
- data/examples/ranking/db/migrate/20220209120910_create_plays.rb +0 -19
- data/examples/ranking/db/migrate/20220209143347_create_score_per_hours.rb +0 -5
- data/examples/ranking/db/schema.rb +0 -47
- data/examples/ranking/db/seeds.rb +0 -7
- data/examples/ranking/db/views/score_per_hours_v01.sql +0 -7
- data/examples/ranking/lib/tasks/.keep +0 -0
- data/examples/ranking/log/.keep +0 -0
- data/examples/ranking/public/robots.txt +0 -1
- data/examples/ranking/storage/.keep +0 -0
- data/examples/ranking/tmp/.keep +0 -0
- data/examples/ranking/tmp/pids/.keep +0 -0
- data/examples/ranking/tmp/storage/.keep +0 -0
- data/examples/ranking/vendor/.keep +0 -0
- data/examples/toolkit-demo/compare_volatility.rb +0 -104
- data/examples/toolkit-demo/lttb/README.md +0 -15
- data/examples/toolkit-demo/lttb/lttb.rb +0 -92
- data/examples/toolkit-demo/lttb/lttb_sinatra.rb +0 -139
- data/examples/toolkit-demo/lttb/lttb_test.rb +0 -21
- data/examples/toolkit-demo/lttb/views/index.erb +0 -27
- data/examples/toolkit-demo/lttb-zoom/README.md +0 -13
- data/examples/toolkit-demo/lttb-zoom/lttb_zoomable.rb +0 -90
- data/examples/toolkit-demo/lttb-zoom/views/index.erb +0 -33
- data/examples/toolkit-demo/ohlc.rb +0 -175
- data/mkdocs.yml +0 -34
- data/timescaledb.gemspec +0 -40
@@ -1,94 +0,0 @@
|
|
1
|
-
require 'bundler/inline' #require only what you need
|
2
|
-
|
3
|
-
gemfile(true) do
|
4
|
-
gem 'timescaledb', path: '../..'
|
5
|
-
gem 'pry'
|
6
|
-
gem 'faker'
|
7
|
-
end
|
8
|
-
|
9
|
-
require 'timescaledb'
|
10
|
-
require 'pp'
|
11
|
-
require 'pry'
|
12
|
-
# ruby all_in_one.rb postgres://user:pass@host:port/db_name
|
13
|
-
ActiveRecord::Base.establish_connection( ARGV.last)
|
14
|
-
|
15
|
-
# Simple example
|
16
|
-
class Event < ActiveRecord::Base
|
17
|
-
self.primary_key = nil
|
18
|
-
acts_as_hypertable
|
19
|
-
end
|
20
|
-
|
21
|
-
# Setup Hypertable as in a migration
|
22
|
-
ActiveRecord::Base.connection.instance_exec do
|
23
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
24
|
-
|
25
|
-
drop_table(:events, cascade: true) if Event.table_exists?
|
26
|
-
|
27
|
-
hypertable_options = {
|
28
|
-
time_column: 'created_at',
|
29
|
-
chunk_time_interval: '1 day',
|
30
|
-
compress_segmentby: 'identifier',
|
31
|
-
compression_interval: '7 days'
|
32
|
-
}
|
33
|
-
|
34
|
-
create_table(:events, id: false, hypertable: hypertable_options) do |t|
|
35
|
-
t.string :identifier, null: false
|
36
|
-
t.jsonb :payload
|
37
|
-
t.timestamps
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# Create some data just to see how it works
|
42
|
-
1.times do
|
43
|
-
Event.transaction do
|
44
|
-
Event.create identifier: "sign_up", payload: {"name" => "Eon"}
|
45
|
-
Event.create identifier: "login", payload: {"email" => "eon@timescale.com"}
|
46
|
-
Event.create identifier: "click", payload: {"user" => "eon", "path" => "/install/timescaledb"}
|
47
|
-
Event.create identifier: "scroll", payload: {"user" => "eon", "path" => "/install/timescaledb"}
|
48
|
-
Event.create identifier: "logout", payload: {"email" => "eon@timescale.com"}
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
|
53
|
-
def generate_fake_data(total: 100_000)
|
54
|
-
time = 1.month.ago
|
55
|
-
total.times.flat_map do
|
56
|
-
identifier = %w[sign_up login click scroll logout view]
|
57
|
-
time = time + rand(60).seconds
|
58
|
-
{
|
59
|
-
created_at: time,
|
60
|
-
updated_at: time,
|
61
|
-
identifier: identifier.sample,
|
62
|
-
payload: {
|
63
|
-
"name" => Faker::Name.name,
|
64
|
-
"email" => Faker::Internet.email
|
65
|
-
}
|
66
|
-
}
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def supress_logs
|
71
|
-
ActiveRecord::Base.logger =nil
|
72
|
-
yield
|
73
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
74
|
-
end
|
75
|
-
|
76
|
-
batch = generate_fake_data total: 10_000
|
77
|
-
supress_logs do
|
78
|
-
Event.insert_all(batch, returning: false)
|
79
|
-
end
|
80
|
-
# Now let's see what we have in the scopes
|
81
|
-
Event.last_hour.group(:identifier).count # => {"login"=>2, "click"=>1, "logout"=>1, "sign_up"=>1, "scroll"=>1}
|
82
|
-
|
83
|
-
puts "compressing #{ Event.chunks.count }"
|
84
|
-
Event.chunks.first.compress!
|
85
|
-
|
86
|
-
puts "detailed size"
|
87
|
-
pp Event.hypertable.detailed_size
|
88
|
-
|
89
|
-
puts "compression stats"
|
90
|
-
pp Event.hypertable.compression_stats
|
91
|
-
|
92
|
-
puts "decompressing"
|
93
|
-
Event.chunks.first.decompress!
|
94
|
-
Pry.start
|
@@ -1,108 +0,0 @@
|
|
1
|
-
require 'bundler/inline' #require only what you need
|
2
|
-
|
3
|
-
gemfile(true) do
|
4
|
-
gem 'timescaledb', path: '../..'
|
5
|
-
gem 'pry'
|
6
|
-
gem 'faker'
|
7
|
-
gem 'benchmark-ips', require: "benchmark/ips", git: 'https://github.com/evanphx/benchmark-ips'
|
8
|
-
end
|
9
|
-
|
10
|
-
require 'pp'
|
11
|
-
require 'benchmark'
|
12
|
-
# ruby all_in_one.rb postgres://user:pass@host:port/db_name
|
13
|
-
ActiveRecord::Base.establish_connection( ARGV.last)
|
14
|
-
|
15
|
-
# Simple example
|
16
|
-
class Event < ActiveRecord::Base
|
17
|
-
self.primary_key = nil
|
18
|
-
acts_as_hypertable
|
19
|
-
|
20
|
-
# If you want to override the automatic assingment of the `created_at ` time series column
|
21
|
-
def self.timestamp_attributes_for_create_in_model
|
22
|
-
[]
|
23
|
-
end
|
24
|
-
def self.timestamp_attributes_for_update_in_model
|
25
|
-
[]
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Event2 < ActiveRecord::Base
|
30
|
-
self.table_name = "events_2"
|
31
|
-
end
|
32
|
-
|
33
|
-
# Setup Hypertable as in a migration
|
34
|
-
ActiveRecord::Base.connection.instance_exec do
|
35
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
36
|
-
|
37
|
-
drop_table(Event.table_name) if Event.table_exists?
|
38
|
-
drop_table(Event2.table_name) if Event2.table_exists?
|
39
|
-
|
40
|
-
hypertable_options = {
|
41
|
-
time_column: 'created_at',
|
42
|
-
chunk_time_interval: '7 day',
|
43
|
-
compress_segmentby: 'identifier',
|
44
|
-
compression_interval: '7 days'
|
45
|
-
}
|
46
|
-
|
47
|
-
create_table(:events, id: false, hypertable: hypertable_options) do |t|
|
48
|
-
t.string :identifier, null: false
|
49
|
-
t.jsonb :payload
|
50
|
-
t.timestamps
|
51
|
-
end
|
52
|
-
|
53
|
-
create_table(Event2.table_name) do |t|
|
54
|
-
t.string :identifier, null: false
|
55
|
-
t.jsonb :payload
|
56
|
-
t.timestamps
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def generate_fake_data(total: 100_000)
|
61
|
-
time = Time.now
|
62
|
-
total.times.flat_map do
|
63
|
-
identifier = %w[sign_up login click scroll logout view]
|
64
|
-
time = time + rand(60).seconds
|
65
|
-
{
|
66
|
-
created_at: time,
|
67
|
-
updated_at: time,
|
68
|
-
identifier: identifier.sample,
|
69
|
-
payload: {
|
70
|
-
"name" => Faker::Name.name,
|
71
|
-
"email" => Faker::Internet.email
|
72
|
-
}
|
73
|
-
}
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
def parallel_inserts clazz: nil, size: 5_000, data: nil
|
79
|
-
limit = 8
|
80
|
-
threads = []
|
81
|
-
while (batch = data.shift(size)).any? do
|
82
|
-
threads << Thread.new(batch) do |batch|
|
83
|
-
begin
|
84
|
-
clazz.insert_all(batch, returning: false)
|
85
|
-
ensure
|
86
|
-
ActiveRecord::Base.connection.close if ActiveRecord::Base.connection
|
87
|
-
end
|
88
|
-
end
|
89
|
-
if threads.size == limit
|
90
|
-
threads.each(&:join)
|
91
|
-
threads = []
|
92
|
-
end
|
93
|
-
end
|
94
|
-
threads.each(&:join)
|
95
|
-
end
|
96
|
-
|
97
|
-
payloads = nil
|
98
|
-
ActiveRecord::Base.logger = nil
|
99
|
-
Benchmark.ips do |x|
|
100
|
-
x.config(time: 500, warmup: 2)
|
101
|
-
|
102
|
-
x.report("gen data") { payloads = generate_fake_data total: 100_000}
|
103
|
-
x.report("normal ") { parallel_inserts(data: payloads.dup, clazz: Event2, size: 5000) }
|
104
|
-
x.report("hyper ") { parallel_inserts(data: payloads.dup, clazz: Event, size: 5000) }
|
105
|
-
x.compare!
|
106
|
-
end
|
107
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
108
|
-
|
@@ -1,93 +0,0 @@
|
|
1
|
-
require 'bundler/inline' #require only what you need
|
2
|
-
|
3
|
-
gemfile(true) do
|
4
|
-
gem 'timescaledb', path: '../..'
|
5
|
-
gem 'pry'
|
6
|
-
end
|
7
|
-
|
8
|
-
require 'pp'
|
9
|
-
# ruby caggs.rb postgres://user:pass@host:port/db_name
|
10
|
-
ActiveRecord::Base.establish_connection( ARGV.last)
|
11
|
-
|
12
|
-
class Tick < ActiveRecord::Base
|
13
|
-
self.table_name = 'ticks'
|
14
|
-
self.primary_key = nil
|
15
|
-
|
16
|
-
acts_as_hypertable time_column: 'time'
|
17
|
-
|
18
|
-
%w[open high low close].each{|name| attribute name, :decimal}
|
19
|
-
|
20
|
-
scope :ohlc, -> (timeframe='1m') do
|
21
|
-
select("time_bucket('#{timeframe}', time) as time,
|
22
|
-
symbol,
|
23
|
-
FIRST(price, time) as open,
|
24
|
-
MAX(price) as high,
|
25
|
-
MIN(price) as low,
|
26
|
-
LAST(price, time) as close,
|
27
|
-
SUM(volume) as volume").group("1,2")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
ActiveRecord::Base.connection.instance_exec do
|
32
|
-
drop_table(:ticks, force: :cascade) if Tick.table_exists?
|
33
|
-
|
34
|
-
hypertable_options = {
|
35
|
-
time_column: 'time',
|
36
|
-
chunk_time_interval: '1 day',
|
37
|
-
compress_segmentby: 'symbol',
|
38
|
-
compress_orderby: 'time',
|
39
|
-
compression_interval: '7 days'
|
40
|
-
}
|
41
|
-
|
42
|
-
create_table :ticks, hypertable: hypertable_options, id: false do |t|
|
43
|
-
t.timestamp :time
|
44
|
-
t.string :symbol
|
45
|
-
t.decimal :price
|
46
|
-
t.integer :volume
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
FAANG = %w[META AMZN AAPL NFLX GOOG]
|
51
|
-
OPERATION = [:+, :-]
|
52
|
-
RAND_VOLUME = -> { (rand(10) * rand(10)) * 100 }
|
53
|
-
RAND_CENT = -> { (rand / 50.0).round(2) }
|
54
|
-
|
55
|
-
def generate_fake_data(total: 100)
|
56
|
-
previous_price = {}
|
57
|
-
time = Time.now
|
58
|
-
(total / FAANG.size).times.flat_map do
|
59
|
-
time += rand(10)
|
60
|
-
FAANG.map do |symbol|
|
61
|
-
if previous_price[symbol]
|
62
|
-
price = previous_price[symbol].send(OPERATION.sample, RAND_CENT.()).round(2)
|
63
|
-
else
|
64
|
-
price = 50 + rand(100)
|
65
|
-
end
|
66
|
-
payload = { time: time, symbol: symbol, price: price, volume: RAND_VOLUME.() }
|
67
|
-
previous_price[symbol] = price
|
68
|
-
payload
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
batch = generate_fake_data total: 10_000
|
74
|
-
ActiveRecord::Base.logger = nil
|
75
|
-
Tick.insert_all(batch, returning: false)
|
76
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
77
|
-
|
78
|
-
ActiveRecord::Base.connection.instance_exec do
|
79
|
-
create_continuous_aggregates('ohlc_1m', Tick.ohlc('1m'), with_data: true)
|
80
|
-
end
|
81
|
-
|
82
|
-
class Ohlc1m < ActiveRecord::Base
|
83
|
-
self.table_name = 'ohlc_1m'
|
84
|
-
attribute :time, :time
|
85
|
-
attribute :symbol, :string
|
86
|
-
%w[open high low close volume].each{|name| attribute name, :decimal}
|
87
|
-
|
88
|
-
def readonly?
|
89
|
-
true
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
binding.pry
|
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'bundler/inline' #require only what you need
|
2
|
-
|
3
|
-
gemfile(true) do
|
4
|
-
gem 'timescaledb', path: '../..'
|
5
|
-
gem 'pry'
|
6
|
-
gem 'faker'
|
7
|
-
end
|
8
|
-
|
9
|
-
require 'pp'
|
10
|
-
# ruby all_in_one.rb postgres://user:pass@host:port/db_name
|
11
|
-
ActiveRecord::Base.establish_connection( ARGV.last)
|
12
|
-
|
13
|
-
# Simple example
|
14
|
-
class Event < ActiveRecord::Base
|
15
|
-
self.primary_key = nil
|
16
|
-
acts_as_hypertable
|
17
|
-
|
18
|
-
# If you want to override the automatic assingment of the `created_at ` time series column
|
19
|
-
def self.timestamp_attributes_for_create_in_model
|
20
|
-
[]
|
21
|
-
end
|
22
|
-
def self.timestamp_attributes_for_update_in_model
|
23
|
-
[]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Setup Hypertable as in a migration
|
28
|
-
ActiveRecord::Base.connection.instance_exec do
|
29
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
30
|
-
|
31
|
-
drop_table(Event.table_name) if Event.table_exists?
|
32
|
-
|
33
|
-
hypertable_options = {
|
34
|
-
time_column: 'created_at',
|
35
|
-
chunk_time_interval: '7 day',
|
36
|
-
compress_segmentby: 'identifier',
|
37
|
-
compression_interval: '7 days'
|
38
|
-
}
|
39
|
-
|
40
|
-
create_table(:events, id: false, hypertable: hypertable_options) do |t|
|
41
|
-
t.string :identifier, null: false
|
42
|
-
t.jsonb :payload
|
43
|
-
t.timestamps
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def generate_fake_data(total: 100_000)
|
48
|
-
time = 1.month.ago
|
49
|
-
total.times.flat_map do
|
50
|
-
identifier = %w[sign_up login click scroll logout view]
|
51
|
-
time = time + rand(60).seconds
|
52
|
-
{
|
53
|
-
created_at: time,
|
54
|
-
updated_at: time,
|
55
|
-
identifier: identifier.sample,
|
56
|
-
payload: {
|
57
|
-
"name" => Faker::Name.name,
|
58
|
-
"email" => Faker::Internet.email
|
59
|
-
}
|
60
|
-
}
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
batch = generate_fake_data total: 10_000
|
66
|
-
ActiveRecord::Base.logger = nil
|
67
|
-
Event.insert_all(batch, returning: false)
|
68
|
-
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
69
|
-
|
70
|
-
pp Event.previous_month.count
|
71
|
-
pp Event.previous_week.count
|
72
|
-
pp Event.previous_month.group('identifier').count
|
73
|
-
pp Event.previous_week.group('identifier').count
|
74
|
-
|
75
|
-
pp Event
|
76
|
-
.previous_month
|
77
|
-
.select("time_bucket('1 day', created_at) as time, identifier, count(*)")
|
78
|
-
.group("1,2").map(&:attributes)
|
data/examples/ranking/.gitignore
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
-
#
|
3
|
-
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
-
# or operating system, you probably want to add a global ignore instead:
|
5
|
-
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
-
|
7
|
-
# Ignore bundler config.
|
8
|
-
/.bundle
|
9
|
-
|
10
|
-
# Ignore all logfiles and tempfiles.
|
11
|
-
/log/*
|
12
|
-
/tmp/*
|
13
|
-
!/log/.keep
|
14
|
-
!/tmp/.keep
|
15
|
-
|
16
|
-
# Ignore pidfiles, but keep the directory.
|
17
|
-
/tmp/pids/*
|
18
|
-
!/tmp/pids/
|
19
|
-
!/tmp/pids/.keep
|
20
|
-
|
21
|
-
# Ignore uploaded files in development.
|
22
|
-
/storage/*
|
23
|
-
!/storage/.keep
|
24
|
-
/tmp/storage/*
|
25
|
-
!/tmp/storage/
|
26
|
-
!/tmp/storage/.keep
|
27
|
-
|
28
|
-
# Ignore master key for decrypting credentials and more.
|
29
|
-
/config/master.key
|
@@ -1 +0,0 @@
|
|
1
|
-
2.7.1
|
data/examples/ranking/Gemfile
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
source "https://rubygems.org"
|
2
|
-
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
-
|
4
|
-
ruby "2.7.1"
|
5
|
-
|
6
|
-
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
|
7
|
-
gem "rails", "~> 7.0.2"
|
8
|
-
|
9
|
-
gem "timescaledb", path: "../../"
|
10
|
-
gem "pg", "~> 1.1"
|
11
|
-
gem "puma", "~> 5.0"
|
12
|
-
gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]
|
13
|
-
|
14
|
-
# Reduces boot times through caching; required in config/boot.rb
|
15
|
-
gem "bootsnap", require: false
|
16
|
-
|
17
|
-
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
|
18
|
-
# gem "image_processing", "~> 1.2"
|
19
|
-
|
20
|
-
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
|
21
|
-
# gem "rack-cors"
|
22
|
-
|
23
|
-
group :development, :test do
|
24
|
-
gem "pry-rails"
|
25
|
-
end
|
26
|
-
|
27
|
-
group :development do
|
28
|
-
# Speed up commands on slow machines / big apps [https://github.com/rails/spring]
|
29
|
-
# gem "spring"
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
gem "scenic", "~> 1.5"
|
@@ -1,189 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ../..
|
3
|
-
specs:
|
4
|
-
timescaledb (0.1.5)
|
5
|
-
activerecord
|
6
|
-
activesupport
|
7
|
-
pg (~> 1.2)
|
8
|
-
|
9
|
-
GEM
|
10
|
-
remote: https://rubygems.org/
|
11
|
-
specs:
|
12
|
-
actioncable (7.0.2)
|
13
|
-
actionpack (= 7.0.2)
|
14
|
-
activesupport (= 7.0.2)
|
15
|
-
nio4r (~> 2.0)
|
16
|
-
websocket-driver (>= 0.6.1)
|
17
|
-
actionmailbox (7.0.2)
|
18
|
-
actionpack (= 7.0.2)
|
19
|
-
activejob (= 7.0.2)
|
20
|
-
activerecord (= 7.0.2)
|
21
|
-
activestorage (= 7.0.2)
|
22
|
-
activesupport (= 7.0.2)
|
23
|
-
mail (>= 2.7.1)
|
24
|
-
net-imap
|
25
|
-
net-pop
|
26
|
-
net-smtp
|
27
|
-
actionmailer (7.0.2)
|
28
|
-
actionpack (= 7.0.2)
|
29
|
-
actionview (= 7.0.2)
|
30
|
-
activejob (= 7.0.2)
|
31
|
-
activesupport (= 7.0.2)
|
32
|
-
mail (~> 2.5, >= 2.5.4)
|
33
|
-
net-imap
|
34
|
-
net-pop
|
35
|
-
net-smtp
|
36
|
-
rails-dom-testing (~> 2.0)
|
37
|
-
actionpack (7.0.2)
|
38
|
-
actionview (= 7.0.2)
|
39
|
-
activesupport (= 7.0.2)
|
40
|
-
rack (~> 2.0, >= 2.2.0)
|
41
|
-
rack-test (>= 0.6.3)
|
42
|
-
rails-dom-testing (~> 2.0)
|
43
|
-
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
44
|
-
actiontext (7.0.2)
|
45
|
-
actionpack (= 7.0.2)
|
46
|
-
activerecord (= 7.0.2)
|
47
|
-
activestorage (= 7.0.2)
|
48
|
-
activesupport (= 7.0.2)
|
49
|
-
globalid (>= 0.6.0)
|
50
|
-
nokogiri (>= 1.8.5)
|
51
|
-
actionview (7.0.2)
|
52
|
-
activesupport (= 7.0.2)
|
53
|
-
builder (~> 3.1)
|
54
|
-
erubi (~> 1.4)
|
55
|
-
rails-dom-testing (~> 2.0)
|
56
|
-
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
57
|
-
activejob (7.0.2)
|
58
|
-
activesupport (= 7.0.2)
|
59
|
-
globalid (>= 0.3.6)
|
60
|
-
activemodel (7.0.2)
|
61
|
-
activesupport (= 7.0.2)
|
62
|
-
activerecord (7.0.2)
|
63
|
-
activemodel (= 7.0.2)
|
64
|
-
activesupport (= 7.0.2)
|
65
|
-
activestorage (7.0.2)
|
66
|
-
actionpack (= 7.0.2)
|
67
|
-
activejob (= 7.0.2)
|
68
|
-
activerecord (= 7.0.2)
|
69
|
-
activesupport (= 7.0.2)
|
70
|
-
marcel (~> 1.0)
|
71
|
-
mini_mime (>= 1.1.0)
|
72
|
-
activesupport (7.0.2)
|
73
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
74
|
-
i18n (>= 1.6, < 2)
|
75
|
-
minitest (>= 5.1)
|
76
|
-
tzinfo (~> 2.0)
|
77
|
-
bootsnap (1.10.3)
|
78
|
-
msgpack (~> 1.2)
|
79
|
-
builder (3.2.4)
|
80
|
-
coderay (1.1.3)
|
81
|
-
concurrent-ruby (1.1.9)
|
82
|
-
crass (1.0.6)
|
83
|
-
digest (3.1.0)
|
84
|
-
erubi (1.10.0)
|
85
|
-
globalid (1.0.0)
|
86
|
-
activesupport (>= 5.0)
|
87
|
-
i18n (1.9.1)
|
88
|
-
concurrent-ruby (~> 1.0)
|
89
|
-
io-wait (0.2.1)
|
90
|
-
loofah (2.13.0)
|
91
|
-
crass (~> 1.0.2)
|
92
|
-
nokogiri (>= 1.5.9)
|
93
|
-
mail (2.7.1)
|
94
|
-
mini_mime (>= 0.1.1)
|
95
|
-
marcel (1.0.2)
|
96
|
-
method_source (1.0.0)
|
97
|
-
mini_mime (1.1.2)
|
98
|
-
mini_portile2 (2.7.1)
|
99
|
-
minitest (5.15.0)
|
100
|
-
msgpack (1.4.4)
|
101
|
-
net-imap (0.2.3)
|
102
|
-
digest
|
103
|
-
net-protocol
|
104
|
-
strscan
|
105
|
-
net-pop (0.1.1)
|
106
|
-
digest
|
107
|
-
net-protocol
|
108
|
-
timeout
|
109
|
-
net-protocol (0.1.2)
|
110
|
-
io-wait
|
111
|
-
timeout
|
112
|
-
net-smtp (0.3.1)
|
113
|
-
digest
|
114
|
-
net-protocol
|
115
|
-
timeout
|
116
|
-
nio4r (2.5.8)
|
117
|
-
nokogiri (1.13.1)
|
118
|
-
mini_portile2 (~> 2.7.0)
|
119
|
-
racc (~> 1.4)
|
120
|
-
pg (1.3.1)
|
121
|
-
pry (0.14.1)
|
122
|
-
coderay (~> 1.1)
|
123
|
-
method_source (~> 1.0)
|
124
|
-
pry-rails (0.3.9)
|
125
|
-
pry (>= 0.10.4)
|
126
|
-
puma (5.6.1)
|
127
|
-
nio4r (~> 2.0)
|
128
|
-
racc (1.6.0)
|
129
|
-
rack (2.2.3)
|
130
|
-
rack-test (1.1.0)
|
131
|
-
rack (>= 1.0, < 3)
|
132
|
-
rails (7.0.2)
|
133
|
-
actioncable (= 7.0.2)
|
134
|
-
actionmailbox (= 7.0.2)
|
135
|
-
actionmailer (= 7.0.2)
|
136
|
-
actionpack (= 7.0.2)
|
137
|
-
actiontext (= 7.0.2)
|
138
|
-
actionview (= 7.0.2)
|
139
|
-
activejob (= 7.0.2)
|
140
|
-
activemodel (= 7.0.2)
|
141
|
-
activerecord (= 7.0.2)
|
142
|
-
activestorage (= 7.0.2)
|
143
|
-
activesupport (= 7.0.2)
|
144
|
-
bundler (>= 1.15.0)
|
145
|
-
railties (= 7.0.2)
|
146
|
-
rails-dom-testing (2.0.3)
|
147
|
-
activesupport (>= 4.2.0)
|
148
|
-
nokogiri (>= 1.6)
|
149
|
-
rails-html-sanitizer (1.4.2)
|
150
|
-
loofah (~> 2.3)
|
151
|
-
railties (7.0.2)
|
152
|
-
actionpack (= 7.0.2)
|
153
|
-
activesupport (= 7.0.2)
|
154
|
-
method_source
|
155
|
-
rake (>= 12.2)
|
156
|
-
thor (~> 1.0)
|
157
|
-
zeitwerk (~> 2.5)
|
158
|
-
rake (13.0.6)
|
159
|
-
scenic (1.5.5)
|
160
|
-
activerecord (>= 4.0.0)
|
161
|
-
railties (>= 4.0.0)
|
162
|
-
strscan (3.0.1)
|
163
|
-
thor (1.2.1)
|
164
|
-
timeout (0.2.0)
|
165
|
-
tzinfo (2.0.4)
|
166
|
-
concurrent-ruby (~> 1.0)
|
167
|
-
websocket-driver (0.7.5)
|
168
|
-
websocket-extensions (>= 0.1.0)
|
169
|
-
websocket-extensions (0.1.5)
|
170
|
-
zeitwerk (2.5.4)
|
171
|
-
|
172
|
-
PLATFORMS
|
173
|
-
ruby
|
174
|
-
|
175
|
-
DEPENDENCIES
|
176
|
-
bootsnap
|
177
|
-
pg (~> 1.1)
|
178
|
-
pry-rails
|
179
|
-
puma (~> 5.0)
|
180
|
-
rails (~> 7.0.2)
|
181
|
-
scenic (~> 1.5)
|
182
|
-
timescaledb!
|
183
|
-
tzinfo-data
|
184
|
-
|
185
|
-
RUBY VERSION
|
186
|
-
ruby 2.7.1p83
|
187
|
-
|
188
|
-
BUNDLED WITH
|
189
|
-
2.1.4
|