litestack 0.4.3 → 0.4.4

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/.standard.yml +3 -1
  3. data/BENCHMARKS.md +3 -3
  4. data/CAVEATS.md +20 -0
  5. data/CHANGELOG.md +19 -4
  6. data/FILESYSTEMS.md +55 -0
  7. data/Gemfile +2 -0
  8. data/README.md +2 -2
  9. data/ROADMAP.md +6 -6
  10. data/assets/litestack_advantage.png +0 -0
  11. data/bench/bench.rb +2 -0
  12. data/bench/bench_cache_rails.rb +14 -17
  13. data/bench/bench_cache_raw.rb +18 -15
  14. data/bench/bench_jobs_rails.rb +3 -3
  15. data/bench/bench_jobs_raw.rb +3 -3
  16. data/bin/liteboard +16 -14
  17. data/gemfiles/rails70.gemfile +5 -0
  18. data/gemfiles/rails71.gemfile +5 -0
  19. data/gemfiles/rails71.gemfile.lock +264 -0
  20. data/lib/active_job/queue_adapters/litejob_adapter.rb +11 -3
  21. data/lib/active_record/connection_adapters/litedb_adapter.rb +17 -7
  22. data/lib/active_support/cache/litecache.rb +25 -15
  23. data/lib/generators/litestack/install/install_generator.rb +2 -2
  24. data/lib/litestack/liteboard/liteboard.rb +15 -19
  25. data/lib/litestack/liteboard/views/litecable.erb +1 -1
  26. data/lib/litestack/litecable.rb +1 -1
  27. data/lib/litestack/litecache.rb +23 -25
  28. data/lib/litestack/litedb.rb +5 -1
  29. data/lib/litestack/litejob.rb +1 -1
  30. data/lib/litestack/litejobqueue.rb +24 -14
  31. data/lib/litestack/litemetric.rb +7 -6
  32. data/lib/litestack/litequeue.rb +17 -2
  33. data/lib/litestack/litequeue.sql.yml +38 -5
  34. data/lib/litestack/litescheduler.rb +1 -2
  35. data/lib/litestack/litesearch/index.rb +11 -10
  36. data/lib/litestack/litesearch/model.rb +61 -3
  37. data/lib/litestack/litesearch/schema.rb +7 -2
  38. data/lib/litestack/litesearch/schema_adapters/backed_adapter.rb +69 -25
  39. data/lib/litestack/litesearch/schema_adapters.rb +4 -4
  40. data/lib/litestack/litesearch.rb +2 -2
  41. data/lib/litestack/litesupport.rb +7 -6
  42. data/lib/litestack/railtie.rb +4 -2
  43. data/lib/litestack/version.rb +1 -1
  44. data/lib/litestack.rb +15 -15
  45. data/lib/sequel/adapters/litedb.rb +9 -1
  46. data/lib/sequel/adapters/shared/litedb.rb +2 -2
  47. data/scripts/build_metrics.rb +2 -2
  48. data/scripts/test_cable.rb +1 -1
  49. metadata +95 -59
@@ -6,15 +6,16 @@ require "oj"
6
6
  require "yaml"
7
7
  require "pathname"
8
8
  require "fileutils"
9
+ require "erb"
9
10
 
10
- require_relative "./litescheduler"
11
+ require_relative "litescheduler"
11
12
 
12
13
  module Litesupport
13
14
  class Error < StandardError; end
14
15
 
15
16
  # Detect the Rack or Rails environment.
16
17
  def self.detect_environment
17
- if defined? Rails
18
+ if defined?(Rails) && Rails.respond_to?(:env)
18
19
  Rails.env
19
20
  elsif ENV["RACK_ENV"]
20
21
  ENV["RACK_ENV"]
@@ -174,7 +175,7 @@ module Litesupport
174
175
  end
175
176
 
176
177
  def configure(options = {})
177
- # detect enviornment (production, development, etc.)
178
+ # detect environment (production, development, etc.)
178
179
  defaults = begin
179
180
  self.class::DEFAULT_OPTIONS
180
181
  rescue
@@ -182,11 +183,11 @@ module Litesupport
182
183
  end
183
184
  @options = defaults.merge(options)
184
185
  config = begin
185
- YAML.load_file(@options[:config_path])
186
+ YAML.load(ERB.new(File.read(@options[:config_path])).result)
186
187
  rescue
187
188
  {}
188
189
  end # an empty hash won't hurt
189
- config = config[Litesupport.environment] if config[Litesupport.environment] # if there is a config for the current enviornment defined then use it, otherwise use the top level declaration
190
+ config = config[Litesupport.environment] if config[Litesupport.environment] # if there is a config for the current environment defined then use it, otherwise use the top level declaration
190
191
  config.keys.each do |k| # symbolize keys
191
192
  config[k.to_sym] = config[k]
192
193
  config.delete k
@@ -231,7 +232,7 @@ module Litesupport
231
232
  end
232
233
 
233
234
  def create_pooled_connection(count = 1)
234
- count = 1 unless count and count.is_a? Integer
235
+ count = 1 unless count&.is_a?(Integer)
235
236
  Litesupport::Pool.new(count) { create_connection }
236
237
  end
237
238
 
@@ -3,8 +3,10 @@ require "rails/railtie"
3
3
  module Litestack
4
4
  class Railtie < ::Rails::Railtie
5
5
  initializer :disable_production_sqlite_warning do |app|
6
- # The whole point of this gem is to use sqlite3 in production.
7
- app.config.active_record.sqlite3_production_warning = false
6
+ if config.active_record.key?(:sqlite3_production_warning)
7
+ # The whole point of this gem is to use sqlite3 in production.
8
+ app.config.active_record.sqlite3_production_warning = false
9
+ end
8
10
  end
9
11
  end
10
12
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Litestack
4
- VERSION = "0.4.3"
4
+ VERSION = "0.4.4"
5
5
  end
data/lib/litestack.rb CHANGED
@@ -1,23 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # load core classes
4
- require_relative "./litestack/version"
5
- require_relative "./litestack/litescheduler"
6
- require_relative "./litestack/litesupport"
7
- require_relative "./litestack/litemetric"
8
- require_relative "./litestack/litedb"
9
- require_relative "./litestack/litecache"
10
- require_relative "./litestack/litejob"
11
- require_relative "./litestack/litecable"
4
+ require_relative "litestack/version"
5
+ require_relative "litestack/litescheduler"
6
+ require_relative "litestack/litesupport"
7
+ require_relative "litestack/litemetric"
8
+ require_relative "litestack/litedb"
9
+ require_relative "litestack/litecache"
10
+ require_relative "litestack/litejob"
11
+ require_relative "litestack/litecable"
12
12
 
13
13
  # conditionally load integration with other libraries
14
- require_relative "./sequel/adapters/litedb" if defined? Sequel
15
- require_relative "./active_record/connection_adapters/litedb_adapter" if defined? ActiveRecord
16
- require_relative "./railties/rails/commands/dbconsole" if defined?(Rails) && defined?(ActiveRecord)
17
- require_relative "./active_support/cache/litecache" if defined? ActiveSupport
18
- require_relative "./active_job/queue_adapters/litejob_adapter" if defined? ActiveJob
19
- require_relative "./action_cable/subscription_adapter/litecable" if defined? ActionCable
20
- require_relative "./litestack/railtie" if defined? Rails::Railtie
14
+ require_relative "sequel/adapters/litedb" if defined? Sequel
15
+ require_relative "active_record/connection_adapters/litedb_adapter" if defined? ActiveRecord
16
+ require_relative "railties/rails/commands/dbconsole" if defined?(Rails) && defined?(ActiveRecord)
17
+ require_relative "active_support/cache/litecache" if defined? ActiveSupport
18
+ require_relative "active_job/queue_adapters/litejob_adapter" if defined? ActiveJob
19
+ require_relative "action_cable/subscription_adapter/litecable" if defined? ActionCable
20
+ require_relative "litestack/railtie" if defined? Rails::Railtie
21
21
 
22
22
  module Litestack
23
23
  class NotImplementedError < RuntimeError; end
@@ -19,6 +19,7 @@ module Sequel
19
19
  sqlite3_opts = {}
20
20
  sqlite3_opts[:readonly] = typecast_value_boolean(opts[:readonly]) if opts.has_key?(:readonly)
21
21
  db = ::Litedb.new(opts[:database].to_s, sqlite3_opts)
22
+ @raw_db = db
22
23
 
23
24
  self.transaction_mode = :immediate
24
25
 
@@ -33,12 +34,19 @@ module Sequel
33
34
  end
34
35
 
35
36
  db.instance_variable_set(:@prepared_statements, {})
36
- @raw_db = db
37
37
  db
38
38
  end
39
+
40
+ def sqlite_version
41
+ @raw_db.sqlite_version
42
+ end
43
+
39
44
  end
40
45
 
41
46
  class Dataset < Sequel::SQLite::Dataset
47
+ def supports_insert_select?
48
+ true
49
+ end
42
50
  end
43
51
  end
44
52
  end
@@ -715,7 +715,7 @@ module Sequel
715
715
 
716
716
  # Handle uniqueness violations when inserting, by using a specified
717
717
  # resolution algorithm. With no options, uses INSERT OR REPLACE. SQLite
718
- # supports the following conflict resolution algoriths: ROLLBACK, ABORT,
718
+ # supports the following conflict resolution algorithms: ROLLBACK, ABORT,
719
719
  # FAIL, IGNORE and REPLACE.
720
720
  #
721
721
  # On SQLite 3.24.0+, you can pass a hash to use an ON CONFLICT clause.
@@ -877,7 +877,7 @@ module Sequel
877
877
  end
878
878
 
879
879
  # Use from_self for aggregate dataset using VALUES.
880
- def aggreate_dataset_use_from_self?
880
+ def aggregate_dataset_use_from_self?
881
881
  super || @opts[:values]
882
882
  end
883
883
 
@@ -17,14 +17,14 @@ Litejobqueue.new({
17
17
  log: nil
18
18
  })
19
19
 
20
- $time = Time.now.to_i #- 10800
20
+ $time = Time.now.to_i # - 10800
21
21
  $start_time = Time.now.to_i
22
22
 
23
23
  class NormalJob
24
24
  include Litejob
25
25
  self.queue = "normal"
26
26
  def perform(time)
27
- $time = time #-= (rand * 100).to_i #10 seconds in the past
27
+ $time = time # -= (rand * 100).to_i #10 seconds in the past
28
28
  sleep 0.001
29
29
  warn "performing some normal action"
30
30
  end
@@ -11,7 +11,7 @@ class Client
11
11
  end
12
12
 
13
13
  def call(*args)
14
- warn "[#{Process.pid}]:#{object_id} recieved #{args} from #{@channel}"
14
+ warn "[#{Process.pid}]:#{object_id} received #{args} from #{@channel}"
15
15
  end
16
16
  end
17
17
 
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: litestack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mohamed Hassan
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-02-15 00:00:00.000000000 Z
10
+ date: 2024-05-21 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: sqlite3
@@ -16,183 +15,216 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '0'
18
+ version: 1.6.0
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: 2.0.0
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
26
  - - ">="
25
27
  - !ruby/object:Gem::Version
26
- version: '0'
28
+ version: 1.6.0
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: 2.0.0
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: oj
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
- - - ">="
36
+ - - "~>"
32
37
  - !ruby/object:Gem::Version
33
- version: '0'
38
+ version: '3'
34
39
  type: :runtime
35
40
  prerelease: false
36
41
  version_requirements: !ruby/object:Gem::Requirement
37
42
  requirements:
38
- - - ">="
43
+ - - "~>"
39
44
  - !ruby/object:Gem::Version
40
- version: '0'
45
+ version: '3'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rack
43
48
  requirement: !ruby/object:Gem::Requirement
44
49
  requirements:
45
- - - ">="
50
+ - - "~>"
46
51
  - !ruby/object:Gem::Version
47
- version: '0'
52
+ version: '3'
48
53
  type: :runtime
49
54
  prerelease: false
50
55
  version_requirements: !ruby/object:Gem::Requirement
51
56
  requirements:
52
- - - ">="
57
+ - - "~>"
53
58
  - !ruby/object:Gem::Version
54
- version: '0'
59
+ version: '3'
55
60
  - !ruby/object:Gem::Dependency
56
- name: hanami-router
61
+ name: rackup
57
62
  requirement: !ruby/object:Gem::Requirement
58
63
  requirements:
59
- - - ">="
64
+ - - "~>"
60
65
  - !ruby/object:Gem::Version
61
- version: '0'
66
+ version: '2'
62
67
  type: :runtime
63
68
  prerelease: false
64
69
  version_requirements: !ruby/object:Gem::Requirement
65
70
  requirements:
66
- - - ">="
71
+ - - "~>"
67
72
  - !ruby/object:Gem::Version
68
- version: '0'
73
+ version: '2'
69
74
  - !ruby/object:Gem::Dependency
70
75
  name: tilt
71
76
  requirement: !ruby/object:Gem::Requirement
72
77
  requirements:
73
- - - ">="
78
+ - - "~>"
74
79
  - !ruby/object:Gem::Version
75
- version: '0'
80
+ version: '2'
76
81
  type: :runtime
77
82
  prerelease: false
78
83
  version_requirements: !ruby/object:Gem::Requirement
79
84
  requirements:
80
- - - ">="
85
+ - - "~>"
81
86
  - !ruby/object:Gem::Version
82
- version: '0'
87
+ version: '2'
83
88
  - !ruby/object:Gem::Dependency
84
89
  name: erubi
85
90
  requirement: !ruby/object:Gem::Requirement
86
91
  requirements:
87
- - - ">="
92
+ - - "~>"
88
93
  - !ruby/object:Gem::Version
89
- version: '0'
94
+ version: '1'
90
95
  type: :runtime
91
96
  prerelease: false
92
97
  version_requirements: !ruby/object:Gem::Requirement
93
98
  requirements:
94
- - - ">="
99
+ - - "~>"
95
100
  - !ruby/object:Gem::Version
96
- version: '0'
101
+ version: '1'
97
102
  - !ruby/object:Gem::Dependency
98
103
  name: rake
99
104
  requirement: !ruby/object:Gem::Requirement
100
105
  requirements:
101
- - - ">="
106
+ - - "~>"
102
107
  - !ruby/object:Gem::Version
103
- version: '0'
108
+ version: '13'
104
109
  type: :development
105
110
  prerelease: false
106
111
  version_requirements: !ruby/object:Gem::Requirement
107
112
  requirements:
108
- - - ">="
113
+ - - "~>"
109
114
  - !ruby/object:Gem::Version
110
- version: '0'
115
+ version: '13'
111
116
  - !ruby/object:Gem::Dependency
112
- name: railties
117
+ name: activerecord
113
118
  requirement: !ruby/object:Gem::Requirement
114
119
  requirements:
115
- - - ">="
120
+ - - "~>"
116
121
  - !ruby/object:Gem::Version
117
- version: '0'
122
+ version: '7'
118
123
  type: :development
119
124
  prerelease: false
120
125
  version_requirements: !ruby/object:Gem::Requirement
121
126
  requirements:
122
- - - ">="
127
+ - - "~>"
123
128
  - !ruby/object:Gem::Version
124
- version: '0'
129
+ version: '7'
125
130
  - !ruby/object:Gem::Dependency
126
- name: minitest
131
+ name: activejob
127
132
  requirement: !ruby/object:Gem::Requirement
128
133
  requirements:
129
- - - ">="
134
+ - - "~>"
130
135
  - !ruby/object:Gem::Version
131
- version: '0'
136
+ version: '7'
132
137
  type: :development
133
138
  prerelease: false
134
139
  version_requirements: !ruby/object:Gem::Requirement
135
140
  requirements:
136
- - - ">="
141
+ - - "~>"
137
142
  - !ruby/object:Gem::Version
138
- version: '0'
143
+ version: '7'
139
144
  - !ruby/object:Gem::Dependency
140
- name: rack
145
+ name: railties
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '7'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '7'
158
+ - !ruby/object:Gem::Dependency
159
+ name: minitest
141
160
  requirement: !ruby/object:Gem::Requirement
142
161
  requirements:
143
162
  - - "~>"
144
163
  - !ruby/object:Gem::Version
145
- version: '3.0'
164
+ version: '5'
146
165
  type: :development
147
166
  prerelease: false
148
167
  version_requirements: !ruby/object:Gem::Requirement
149
168
  requirements:
150
169
  - - "~>"
151
170
  - !ruby/object:Gem::Version
152
- version: '3.0'
171
+ version: '5'
153
172
  - !ruby/object:Gem::Dependency
154
173
  name: simplecov
155
174
  requirement: !ruby/object:Gem::Requirement
156
175
  requirements:
157
- - - ">="
176
+ - - "~>"
158
177
  - !ruby/object:Gem::Version
159
- version: '0'
178
+ version: '0.2'
160
179
  type: :development
161
180
  prerelease: false
162
181
  version_requirements: !ruby/object:Gem::Requirement
163
182
  requirements:
164
- - - ">="
183
+ - - "~>"
165
184
  - !ruby/object:Gem::Version
166
- version: '0'
185
+ version: '0.2'
167
186
  - !ruby/object:Gem::Dependency
168
187
  name: standard
169
188
  requirement: !ruby/object:Gem::Requirement
170
189
  requirements:
171
- - - ">="
190
+ - - "~>"
172
191
  - !ruby/object:Gem::Version
173
- version: '0'
192
+ version: '1'
174
193
  type: :development
175
194
  prerelease: false
176
195
  version_requirements: !ruby/object:Gem::Requirement
177
196
  requirements:
178
- - - ">="
197
+ - - "~>"
179
198
  - !ruby/object:Gem::Version
180
- version: '0'
199
+ version: '1'
181
200
  - !ruby/object:Gem::Dependency
182
201
  name: sequel
183
202
  requirement: !ruby/object:Gem::Requirement
184
203
  requirements:
185
- - - ">="
204
+ - - "~>"
186
205
  - !ruby/object:Gem::Version
187
- version: '0'
206
+ version: '5'
188
207
  type: :development
189
208
  prerelease: false
190
209
  version_requirements: !ruby/object:Gem::Requirement
191
210
  requirements:
192
- - - ">="
211
+ - - "~>"
212
+ - !ruby/object:Gem::Version
213
+ version: '5'
214
+ - !ruby/object:Gem::Dependency
215
+ name: debug
216
+ requirement: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - "~>"
219
+ - !ruby/object:Gem::Version
220
+ version: '1'
221
+ type: :development
222
+ prerelease: false
223
+ version_requirements: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - "~>"
193
226
  - !ruby/object:Gem::Version
194
- version: '0'
195
- description:
227
+ version: '1'
196
228
  email:
197
229
  - oldmoe@gmail.com
198
230
  executables:
@@ -202,7 +234,9 @@ extra_rdoc_files: []
202
234
  files:
203
235
  - ".standard.yml"
204
236
  - BENCHMARKS.md
237
+ - CAVEATS.md
205
238
  - CHANGELOG.md
239
+ - FILESYSTEMS.md
206
240
  - Gemfile
207
241
  - LICENSE.txt
208
242
  - README.md
@@ -219,6 +253,7 @@ files:
219
253
  - assets/litejob_logo_teal.png
220
254
  - assets/litemetric_logo_teal.png
221
255
  - assets/litesearch_logo_teal.png
256
+ - assets/litestack_advantage.png
222
257
  - assets/litestack_logo_teal.png
223
258
  - assets/litestack_logo_teal_large.png
224
259
  - assets/topic_page.png
@@ -232,6 +267,9 @@ files:
232
267
  - bench/skjob.rb
233
268
  - bench/uljob.rb
234
269
  - bin/liteboard
270
+ - gemfiles/rails70.gemfile
271
+ - gemfiles/rails71.gemfile
272
+ - gemfiles/rails71.gemfile.lock
235
273
  - lib/action_cable/subscription_adapter/litecable.rb
236
274
  - lib/active_job/queue_adapters/litejob_adapter.rb
237
275
  - lib/active_record/connection_adapters/litedb_adapter.rb
@@ -293,7 +331,6 @@ metadata:
293
331
  homepage_uri: https://github.com/oldmoe/litestack
294
332
  source_code_uri: https://github.com/oldmoe/litestack
295
333
  changelog_uri: https://github.com/oldmoe/litestack/CHANEGELOG.md
296
- post_install_message:
297
334
  rdoc_options: []
298
335
  require_paths:
299
336
  - lib
@@ -309,8 +346,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
309
346
  - !ruby/object:Gem::Version
310
347
  version: '0'
311
348
  requirements: []
312
- rubygems_version: 3.5.3
313
- signing_key:
349
+ rubygems_version: 3.6.0.dev
314
350
  specification_version: 4
315
351
  summary: A SQLite based, lightning fast, super efficient and dead simple to setup
316
352
  and use database, cache and job queue for Ruby and Rails applications!