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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/timescaledb/acts_as_hypertable/core.rb +1 -1
  3. data/lib/timescaledb/database/quoting.rb +12 -0
  4. data/lib/timescaledb/database/schema_statements.rb +168 -0
  5. data/lib/timescaledb/database/types.rb +17 -0
  6. data/lib/timescaledb/database.rb +11 -0
  7. data/lib/timescaledb/toolkit/time_vector.rb +41 -4
  8. data/lib/timescaledb/version.rb +1 -1
  9. metadata +6 -95
  10. data/.github/workflows/ci.yml +0 -72
  11. data/.gitignore +0 -12
  12. data/.rspec +0 -3
  13. data/.ruby-version +0 -1
  14. data/.tool-versions +0 -1
  15. data/.travis.yml +0 -9
  16. data/CODE_OF_CONDUCT.md +0 -74
  17. data/Fastfile +0 -17
  18. data/Gemfile +0 -8
  19. data/Gemfile.lock +0 -75
  20. data/Gemfile.scenic +0 -7
  21. data/Gemfile.scenic.lock +0 -119
  22. data/README.md +0 -490
  23. data/Rakefile +0 -21
  24. data/bin/console +0 -28
  25. data/bin/setup +0 -13
  26. data/docs/command_line.md +0 -178
  27. data/docs/img/lttb_example.png +0 -0
  28. data/docs/img/lttb_sql_vs_ruby.gif +0 -0
  29. data/docs/img/lttb_zoom.gif +0 -0
  30. data/docs/index.md +0 -72
  31. data/docs/migrations.md +0 -76
  32. data/docs/models.md +0 -78
  33. data/docs/toolkit.md +0 -507
  34. data/docs/toolkit_lttb_tutorial.md +0 -557
  35. data/docs/toolkit_lttb_zoom.md +0 -357
  36. data/docs/toolkit_ohlc.md +0 -315
  37. data/docs/videos.md +0 -16
  38. data/examples/all_in_one/all_in_one.rb +0 -94
  39. data/examples/all_in_one/benchmark_comparison.rb +0 -108
  40. data/examples/all_in_one/caggs.rb +0 -93
  41. data/examples/all_in_one/query_data.rb +0 -78
  42. data/examples/ranking/.gitattributes +0 -7
  43. data/examples/ranking/.gitignore +0 -29
  44. data/examples/ranking/.ruby-version +0 -1
  45. data/examples/ranking/Gemfile +0 -33
  46. data/examples/ranking/Gemfile.lock +0 -189
  47. data/examples/ranking/README.md +0 -166
  48. data/examples/ranking/Rakefile +0 -6
  49. data/examples/ranking/app/controllers/application_controller.rb +0 -2
  50. data/examples/ranking/app/controllers/concerns/.keep +0 -0
  51. data/examples/ranking/app/jobs/application_job.rb +0 -7
  52. data/examples/ranking/app/models/application_record.rb +0 -3
  53. data/examples/ranking/app/models/concerns/.keep +0 -0
  54. data/examples/ranking/app/models/game.rb +0 -2
  55. data/examples/ranking/app/models/play.rb +0 -7
  56. data/examples/ranking/bin/bundle +0 -114
  57. data/examples/ranking/bin/rails +0 -4
  58. data/examples/ranking/bin/rake +0 -4
  59. data/examples/ranking/bin/setup +0 -33
  60. data/examples/ranking/config/application.rb +0 -39
  61. data/examples/ranking/config/boot.rb +0 -4
  62. data/examples/ranking/config/credentials.yml.enc +0 -1
  63. data/examples/ranking/config/database.yml +0 -86
  64. data/examples/ranking/config/environment.rb +0 -5
  65. data/examples/ranking/config/environments/development.rb +0 -60
  66. data/examples/ranking/config/environments/production.rb +0 -75
  67. data/examples/ranking/config/environments/test.rb +0 -53
  68. data/examples/ranking/config/initializers/cors.rb +0 -16
  69. data/examples/ranking/config/initializers/filter_parameter_logging.rb +0 -8
  70. data/examples/ranking/config/initializers/inflections.rb +0 -16
  71. data/examples/ranking/config/initializers/timescale.rb +0 -2
  72. data/examples/ranking/config/locales/en.yml +0 -33
  73. data/examples/ranking/config/puma.rb +0 -43
  74. data/examples/ranking/config/routes.rb +0 -6
  75. data/examples/ranking/config/storage.yml +0 -34
  76. data/examples/ranking/config.ru +0 -6
  77. data/examples/ranking/db/migrate/20220209120747_create_games.rb +0 -10
  78. data/examples/ranking/db/migrate/20220209120910_create_plays.rb +0 -19
  79. data/examples/ranking/db/migrate/20220209143347_create_score_per_hours.rb +0 -5
  80. data/examples/ranking/db/schema.rb +0 -47
  81. data/examples/ranking/db/seeds.rb +0 -7
  82. data/examples/ranking/db/views/score_per_hours_v01.sql +0 -7
  83. data/examples/ranking/lib/tasks/.keep +0 -0
  84. data/examples/ranking/log/.keep +0 -0
  85. data/examples/ranking/public/robots.txt +0 -1
  86. data/examples/ranking/storage/.keep +0 -0
  87. data/examples/ranking/tmp/.keep +0 -0
  88. data/examples/ranking/tmp/pids/.keep +0 -0
  89. data/examples/ranking/tmp/storage/.keep +0 -0
  90. data/examples/ranking/vendor/.keep +0 -0
  91. data/examples/toolkit-demo/compare_volatility.rb +0 -104
  92. data/examples/toolkit-demo/lttb/README.md +0 -15
  93. data/examples/toolkit-demo/lttb/lttb.rb +0 -92
  94. data/examples/toolkit-demo/lttb/lttb_sinatra.rb +0 -139
  95. data/examples/toolkit-demo/lttb/lttb_test.rb +0 -21
  96. data/examples/toolkit-demo/lttb/views/index.erb +0 -27
  97. data/examples/toolkit-demo/lttb-zoom/README.md +0 -13
  98. data/examples/toolkit-demo/lttb-zoom/lttb_zoomable.rb +0 -90
  99. data/examples/toolkit-demo/lttb-zoom/views/index.erb +0 -33
  100. data/examples/toolkit-demo/ohlc.rb +0 -175
  101. data/mkdocs.yml +0 -34
  102. data/timescaledb.gemspec +0 -40
@@ -1,139 +0,0 @@
1
- # ruby lttb.rb postgres://user:pass@host:port/db_name
2
- require 'bundler/inline' #require only what you need
3
-
4
- gemfile(true) do
5
- gem 'timescaledb', path: '../../..'
6
- gem 'pry'
7
- gem 'sinatra', require: false
8
- gem 'sinatra-reloader', require: false
9
- gem 'sinatra-cross_origin', require: false
10
- gem 'chartkick'
11
- end
12
-
13
- require 'timescaledb/toolkit'
14
- require 'sinatra'
15
- require 'sinatra/json'
16
- require 'sinatra/cross_origin'
17
- require 'chartkick'
18
- require_relative 'lttb'
19
-
20
- PG_URI = ARGV.last
21
-
22
- VALID_SIZES = %i[small med big]
23
- def download_weather_dataset size: :small
24
- unless VALID_SIZES.include?(size)
25
- fail "Invalid size: #{size}. Valids are #{VALID_SIZES}"
26
- end
27
- url = "https://timescaledata.blob.core.windows.net/datasets/weather_#{size}.tar.gz"
28
- puts "fetching #{size} weather dataset..."
29
- system "wget \"#{url}\""
30
- puts "done!"
31
- end
32
-
33
- def setup size: :small
34
- file = "weather_#{size}.tar.gz"
35
- download_weather_dataset(size: size) unless File.exists? file
36
- puts "extracting #{file}"
37
- system "tar -xvzf #{file} "
38
- puts "creating data structures"
39
- system "psql #{PG_URI} < weather.sql"
40
- system %|psql #{PG_URI} -c "\\COPY locations FROM weather_#{size}_locations.csv CSV"|
41
- system %|psql #{PG_URI} -c "\\COPY conditions FROM weather_#{size}_conditions.csv CSV"|
42
- end
43
-
44
- ActiveRecord::Base.establish_connection(PG_URI)
45
- class Location < ActiveRecord::Base
46
- self.primary_key = "device_id"
47
-
48
- has_many :conditions, foreign_key: "device_id"
49
- end
50
-
51
- class Condition < ActiveRecord::Base
52
- acts_as_hypertable time_column: "time"
53
- acts_as_time_vector value_column: "temperature", segment_by: "device_id"
54
-
55
- belongs_to :location, foreign_key: "device_id"
56
- end
57
-
58
- # Setup Hypertable as in a migration
59
- ActiveRecord::Base.connection.instance_exec do
60
- ActiveRecord::Base.logger = Logger.new(STDOUT)
61
-
62
- unless Condition.table_exists?
63
- setup size: :big
64
- end
65
- end
66
-
67
- require 'sinatra/reloader'
68
- require 'sinatra/contrib'
69
- register Sinatra::Reloader
70
- register Sinatra::Contrib
71
- include Chartkick::Helper
72
-
73
- set :bind, '0.0.0.0'
74
- set :port, 9999
75
-
76
- def conditions
77
- device_ids = (1..9).map{|i|"weather-pro-00000#{i}"}
78
- Condition
79
- .where(device_id: device_ids.first)
80
- .order('time')
81
- end
82
-
83
- def threshold
84
- params[:threshold]&.to_i || 50
85
- end
86
-
87
- configure do
88
- enable :cross_origin
89
- end
90
- before do
91
- response.headers['Access-Control-Allow-Origin'] = '*'
92
- end
93
-
94
- # routes...
95
- options "*" do
96
- response.headers["Allow"] = "GET, PUT, POST, DELETE, OPTIONS"
97
- response.headers["Access-Control-Allow-Headers"] = "Authorization,
98
- Content-Type, Accept, X-User-Email, X-Auth-Token"
99
- response.headers["Access-Control-Allow-Origin"] = "*"
100
- 200
101
- end
102
-
103
- get '/' do
104
- headers 'Access-Control-Allow-Origin' => 'https://cdn.jsdelivr.net/'
105
-
106
- erb :index
107
- end
108
-
109
- get '/lttb_ruby' do
110
- payload = conditions
111
- .pluck(:device_id, :time, :temperature)
112
- .group_by(&:first)
113
- .map do |device_id, data|
114
- data.each(&:shift)
115
- {
116
- name: device_id,
117
- data: Lttb.downsample(data, threshold)
118
- }
119
- end
120
- json payload
121
- end
122
-
123
- get "/lttb_sql" do
124
- downsampled = conditions
125
- .lttb(threshold: threshold)
126
- .map do |device_id, data|
127
- {
128
- name: device_id,
129
- data: data.sort_by(&:first)
130
- }
131
- end
132
- json downsampled
133
- end
134
-
135
-
136
- get '/all_data' do
137
- data = conditions.pluck(:time, :temperature)
138
- json [ { name: "All data", data: data} ]
139
- end
@@ -1,21 +0,0 @@
1
- require_relative 'lttb'
2
- require 'pp'
3
- require 'date'
4
-
5
- data = [
6
- ['2020-1-1', 10],
7
- ['2020-1-2', 21],
8
- ['2020-1-3', 19],
9
- ['2020-1-4', 32],
10
- ['2020-1-5', 12],
11
- ['2020-1-6', 14],
12
- ['2020-1-7', 18],
13
- ['2020-1-8', 29],
14
- ['2020-1-9', 23],
15
- ['2020-1-10', 27],
16
- ['2020-1-11', 14]]
17
- data.each do |e|
18
- e[0] = Time.mktime(*e[0].split('-'))
19
- end
20
-
21
- pp Lttb.downsample(data, 5)
@@ -1,27 +0,0 @@
1
- <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.1/dist/jquery.min.js"></script>
2
- <script src="https://cdn.jsdelivr.net/npm/hammerjs@2.0.8hammerjs@2.0.8"></script>
3
- <script src="https://cdn.jsdelivr.net/npm/moment@2.29.4/moment.min.js"></script>
4
- <script src="https://cdn.jsdelivr.net/npm/highcharts@10.2.1/highcharts.min.js"></script>
5
- <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment@1.0.0/dist/chartjs-adapter-moment.min.js"></script>
6
- <script src="https://cdn.jsdelivr.net/npm/chartkick@4.2.0/dist/chartkick.min.js"></script>
7
- <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-zoom@1.2.1/dist/chartjs-plugin-zoom.min.js"></script>
8
- <h3>Downsampling <%= conditions.count %> records to
9
- <select value="<%= threshold %>" onchange="location.href=`/?threshold=${this.value}`">
10
- <option><%= threshold %></option>
11
- <option value="50">50</option>
12
- <option value="100">100</option>
13
- <option value="500">500</option>
14
- <option value="1000">1000</option>
15
- <option value="5000">5000</option>
16
- </select> points.
17
- </h3>
18
-
19
- <h3>SQL</h3>
20
- <%= line_chart("/lttb_sql?threshold=#{threshold}",
21
- loading: "dowsampled data from SQL") %>
22
- <h3>Ruby</h3>
23
- <%= line_chart("/lttb_ruby?threshold=#{threshold}",
24
- library: {chart: {zoomType: 'x'}},
25
- points: true, loading: "downsampled data from Ruby") %>
26
- <!--%= line_chart("/all_data", loading: "Loading all data") %-->
27
-
@@ -1,13 +0,0 @@
1
- # LTTB examples
2
-
3
- This folder contains an example to explore the a dynamic reloading of downsampled data.
4
-
5
- It keeps the same amount of data and refresh the data with a higher resolution
6
- as you keep zooming in.
7
- There is a [./lttb_zoomable.rb](./lttb_zoomable.rb) file is a small webserver that compares
8
- the SQL vs Ruby implementation. It also uses the [./views](./views) folder which
9
- contains the view with the rendering and javascript part.
10
-
11
- You can learn more by reading the [LTTB Zoom tutorial](https://jonatas.github.io/timescaledb/toolkit_lttb_zoom/).
12
-
13
-
@@ -1,90 +0,0 @@
1
- # ruby lttb_zoomable.rb postgres://user:pass@host:port/db_name
2
- require 'bundler/inline' #require only what you need
3
-
4
- gemfile(true) do
5
- gem 'timescaledb', path: '../../..'
6
- gem 'pry'
7
- gem 'sinatra', require: false
8
- gem 'sinatra-reloader'
9
- gem 'sinatra-cross_origin'
10
- end
11
-
12
- require 'timescaledb/toolkit'
13
- require 'sinatra'
14
- require 'sinatra/json'
15
- require 'sinatra/contrib'
16
-
17
- register Sinatra::Reloader
18
- register Sinatra::Contrib
19
-
20
- PG_URI = ARGV.last
21
-
22
- VALID_SIZES = %i[small med big]
23
- def download_weather_dataset size: :small
24
- unless VALID_SIZES.include?(size)
25
- fail "Invalid size: #{size}. Valids are #{VALID_SIZES}"
26
- end
27
- url = "https://timescaledata.blob.core.windows.net/datasets/weather_#{size}.tar.gz"
28
- puts "fetching #{size} weather dataset..."
29
- system "wget \"#{url}\""
30
- puts "done!"
31
- end
32
-
33
- def setup size: :small
34
- file = "weather_#{size}.tar.gz"
35
- download_weather_dataset(size: size) unless File.exists? file
36
- puts "extracting #{file}"
37
- system "tar -xvzf #{file} "
38
- puts "creating data structures"
39
- system "psql #{PG_URI} < weather.sql"
40
- system %|psql #{PG_URI} -c "\\COPY locations FROM weather_#{size}_locations.csv CSV"|
41
- system %|psql #{PG_URI} -c "\\COPY conditions FROM weather_#{size}_conditions.csv CSV"|
42
- end
43
-
44
- ActiveRecord::Base.establish_connection(PG_URI)
45
-
46
- class Condition < ActiveRecord::Base
47
- acts_as_hypertable time_column: "time"
48
- acts_as_time_vector value_column: "temperature", segment_by: "device_id"
49
- end
50
-
51
- # Setup Hypertable as in a migration
52
- ActiveRecord::Base.connection.instance_exec do
53
- ActiveRecord::Base.logger = Logger.new(STDOUT)
54
-
55
- if !Condition.table_exists? || Condition.count.zero?
56
-
57
- setup size: :big
58
- end
59
- end
60
-
61
-
62
- def filter_by_request_params
63
- filter= {device_id: "weather-pro-000001"}
64
- if params[:filter] && params[:filter] != "null"
65
- from, to = params[:filter].split(",").map(&Time.method(:parse))
66
- filter[:time] = from..to
67
- end
68
- filter
69
- end
70
-
71
- def conditions
72
- Condition.where(filter_by_request_params).order('time')
73
- end
74
-
75
- def threshold
76
- params[:threshold]&.to_i || 50
77
- end
78
-
79
- configure do
80
- enable :cross_origin
81
- end
82
-
83
- get '/' do
84
- erb :index
85
- end
86
-
87
- get "/lttb_sql" do
88
- downsampled = conditions.lttb(threshold: threshold, segment_by: nil)
89
- json downsampled
90
- end
@@ -1,33 +0,0 @@
1
- <head>
2
- <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.1/dist/jquery.min.js"></script>
3
- <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
4
- </head>
5
-
6
- <h3>Downsampling <%= conditions.count %> records to
7
- <select value="<%= threshold %>" onchange="location.href=`/?threshold=${this.value}`">
8
- <option><%= threshold %></option>
9
- <option value="50">50</option>
10
- <option value="100">100</option>
11
- <option value="500">500</option>
12
- <option value="1000">1000</option>
13
- <option value="5000">5000</option>
14
- </select> points.
15
- </h3>
16
- <div id='container'></div>
17
- <script>
18
- let chart = document.getElementById('container');
19
- function fetch(filter) {
20
- $.ajax({
21
- url: `/lttb_sql?threshold=<%= threshold %>&filter=${filter}`,
22
- success: function(result) {
23
- let x = result.map((e) => e[0]);
24
- let y = result.map((e) => parseFloat(e[1]));
25
- Plotly.newPlot(chart, [{x, y,"mode": "markers", "type": "scatter"}]);
26
- chart.on('plotly_relayout',
27
- function(eventdata){
28
- fetch([eventdata['xaxis.range[0]'],eventdata['xaxis.range[1]']]);
29
- });
30
- }});
31
- }
32
- fetch(null);
33
- </script>
@@ -1,175 +0,0 @@
1
- # ruby ohlc.rb postgres://user:pass@host:port/db_name
2
- # @see https://jonatas.github.io/timescaledb/ohlc_tutorial
3
-
4
- require 'bundler/inline' #require only what you need
5
-
6
- gemfile(true) do
7
- gem 'timescaledb', path: '../..'
8
- gem 'pry'
9
- end
10
-
11
- ActiveRecord::Base.establish_connection ARGV.last
12
-
13
- # Compare ohlc processing in Ruby vs SQL.
14
- class Tick < ActiveRecord::Base
15
- acts_as_hypertable time_column: "time"
16
- acts_as_time_vector segment_by: "symbol", value_column: "price"
17
- end
18
- require "active_support/concern"
19
-
20
- module Ohlc
21
- extend ActiveSupport::Concern
22
-
23
- included do
24
- %w[open high low close].each do |name|
25
- attribute name, :decimal
26
- attribute "#{name}_time", :time
27
- end
28
-
29
-
30
- scope :attributes, -> do
31
- select("symbol, time,
32
- toolkit_experimental.open(ohlc),
33
- toolkit_experimental.high(ohlc),
34
- toolkit_experimental.low(ohlc),
35
- toolkit_experimental.close(ohlc),
36
- toolkit_experimental.open_time(ohlc),
37
- toolkit_experimental.high_time(ohlc),
38
- toolkit_experimental.low_time(ohlc),
39
- toolkit_experimental.close_time(ohlc)")
40
- end
41
-
42
- scope :rollup, -> (timeframe: '1h') do
43
- select("symbol, time_bucket('#{timeframe}', time) as time,
44
- toolkit_experimental.rollup(ohlc) as ohlc")
45
- .group(1,2)
46
- end
47
-
48
- def readonly?
49
- true
50
- end
51
- end
52
-
53
- class_methods do
54
- end
55
- end
56
-
57
- class Ohlc1m < ActiveRecord::Base
58
- self.table_name = 'ohlc_1m'
59
- include Ohlc
60
- end
61
-
62
- class Ohlc1h < ActiveRecord::Base
63
- self.table_name = 'ohlc_1h'
64
- include Ohlc
65
- end
66
-
67
- class Ohlc1d < ActiveRecord::Base
68
- self.table_name = 'ohlc_1d'
69
- include Ohlc
70
- end
71
- =begin
72
- scope :ohlc_ruby, -> (
73
- timeframe: 1.hour,
74
- segment_by: segment_by_column,
75
- time: time_column,
76
- value: value_column) {
77
- ohlcs = Hash.new() {|hash, key| hash[key] = [] }
78
-
79
- key = tick.send(segment_by)
80
- candlestick = ohlcs[key].last
81
- if candlestick.nil? || candlestick.time + timeframe > tick.time
82
- ohlcs[key] << Candlestick.new(time $, price)
83
- end
84
- find_all do |tick|
85
- symbol = tick.symbol
86
-
87
- if previous[symbol]
88
- delta = (tick.price - previous[symbol]).abs
89
- volatility[symbol] += delta
90
- end
91
- previous[symbol] = tick.price
92
- end
93
- volatility
94
- }
95
- =end
96
-
97
- ActiveRecord::Base.connection.add_toolkit_to_search_path!
98
-
99
-
100
- ActiveRecord::Base.connection.instance_exec do
101
- ActiveRecord::Base.logger = Logger.new(STDOUT)
102
-
103
- unless Tick.table_exists?
104
- hypertable_options = {
105
- time_column: 'time',
106
- chunk_time_interval: '1 week',
107
- compress_segmentby: 'symbol',
108
- compress_orderby: 'time',
109
- compression_interval: '1 month'
110
- }
111
- create_table :ticks, hypertable: hypertable_options, id: false do |t|
112
- t.column :time , 'timestamp with time zone'
113
- t.string :symbol
114
- t.decimal :price
115
- t.integer :volume
116
- end
117
-
118
- options = {
119
- with_data: false,
120
- refresh_policies: {
121
- start_offset: "INTERVAL '1 month'",
122
- end_offset: "INTERVAL '1 minute'",
123
- schedule_interval: "INTERVAL '1 minute'"
124
- }
125
- }
126
- create_continuous_aggregate('ohlc_1m', Tick._ohlc(timeframe: '1m'), **options)
127
-
128
- execute "CREATE VIEW ohlc_1h AS #{ Ohlc1m.rollup(timeframe: '1 hour').to_sql}"
129
- execute "CREATE VIEW ohlc_1d AS #{ Ohlc1h.rollup(timeframe: '1 day').to_sql}"
130
- end
131
- end
132
-
133
- if Tick.count.zero?
134
- ActiveRecord::Base.connection.execute(<<~SQL)
135
- INSERT INTO ticks
136
- SELECT time, 'SYMBOL', 1 + (random()*30)::int, 100*(random()*10)::int
137
- FROM generate_series(TIMESTAMP '2022-01-01 00:00:00',
138
- TIMESTAMP '2022-02-01 00:01:00',
139
- INTERVAL '1 second') AS time;
140
- SQL
141
- end
142
-
143
-
144
- # Fetch attributes
145
- Ohlc1m.attributes
146
-
147
- # Rollup demo
148
-
149
- # Attributes from rollup
150
- Ohlc1m.attributes.from(Ohlc1m.rollup(timeframe: '1 day'))
151
-
152
-
153
- # Nesting several levels
154
- Ohlc1m.attributes.from(
155
- Ohlc1m.rollup(timeframe: '1 week').from(
156
- Ohlc1m.rollup(timeframe: '1 day')
157
- )
158
- )
159
- Ohlc1m.attributes.from(
160
- Ohlc1m.rollup(timeframe: '1 month').from(
161
- Ohlc1m.rollup(timeframe: '1 week').from(
162
- Ohlc1m.rollup(timeframe: '1 day')
163
- )
164
- )
165
- )
166
-
167
- Pry.start
168
-
169
- =begin
170
- TODO: implement the ohlc_ruby
171
- Benchmark.bm do |x|
172
- x.report("ruby") { Tick.ohlc_ruby }
173
- x.report("sql") { Tick.ohlc.map(&:attributes) }
174
- end
175
- =end
data/mkdocs.yml DELETED
@@ -1,34 +0,0 @@
1
- site_name: The Timescaledb gem
2
- repo_url: https://github.com/jonatas/timescaledb
3
- edit_uri: edit/master/docs/
4
- extra:
5
- analytics:
6
- provider: google
7
- property: G-9B2BMB0TNQ
8
- theme:
9
- name: material
10
- palette:
11
- primary: indigo
12
- accent: pink
13
- markdown_extensions:
14
- - admonition
15
- - codehilite:
16
- guess_lang: false
17
- - toc:
18
- permalink: true
19
- - pymdownx.highlight:
20
- anchor_linenums: true
21
- - pymdownx.inlinehilite
22
- - pymdownx.snippets
23
- - pymdownx.superfences
24
-
25
- nav:
26
- - Introduction: index.md
27
- - Migrations: migrations.md
28
- - Models: models.md
29
- - Toolkit Integration: toolkit.md
30
- - Toolkit LTTB Tutorial: toolkit_lttb_tutorial.md
31
- - Zooming with High Resolution: toolkit_lttb_zoom.md
32
- - Toolkit OHLC: toolkit_ohlc.md
33
- - Command Line: command_line.md
34
- - Videos: videos.md
data/timescaledb.gemspec DELETED
@@ -1,40 +0,0 @@
1
- require_relative 'lib/timescaledb/version'
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = "timescaledb"
5
- spec.version = Timescaledb::VERSION
6
- spec.authors = ["Jônatas Davi Paganini"]
7
- spec.email = ["jonatasdp@gmail.com"]
8
-
9
- spec.summary = %q{TimescaleDB helpers for Ruby ecosystem.}
10
- spec.description = %q{Functions from timescaledb available in the ActiveRecord models.}
11
- spec.homepage = "https://github.com/jonatas/timescaledb"
12
- spec.license = "MIT"
13
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
-
15
- spec.metadata["allowed_push_host"] = "https://rubygems.org"
16
-
17
- spec.metadata["homepage_uri"] = spec.homepage
18
- #spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
19
- #spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
20
-
21
- # Specify which files should be added to the gem when it is released.
22
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
24
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
- end
26
- spec.bindir = "bin"
27
- spec.executables = spec.files.grep(%r{^bin/tsdb}) { |f| File.basename(f) }
28
- spec.require_paths = ["lib"]
29
-
30
- spec.add_dependency "pg", "~> 1.2"
31
- spec.add_dependency "activerecord"
32
- spec.add_dependency "activesupport"
33
-
34
- spec.add_development_dependency "pry"
35
- spec.add_development_dependency "rspec-its"
36
- spec.add_development_dependency "rspec", "~> 3.0"
37
- spec.add_development_dependency "dotenv"
38
- spec.add_development_dependency "rake", "~> 12.0"
39
- spec.add_development_dependency "database_cleaner-active_record"
40
- end