Module: ActiveRecord::QuickRead
- Defined in:
- lib/activerecord/quick_read.rb,
lib/activerecord/quick_read/railtie.rb,
lib/activerecord/quick_read/version.rb
Defined Under Namespace
Modules: LiteBase
Classes: Railtie
Constant Summary
collapse
- VERSION =
"0.2.0"
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.define_lite_struct(model) ⇒ Object
42
43
44
|
# File 'lib/activerecord/quick_read.rb', line 42
def self.define_lite_struct(model)
model.const_set(:Lite, Struct.new(*model.column_names.map(&:to_sym)) { include(LiteBase) })
end
|
.define_lite_structs ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/activerecord/quick_read.rb', line 30
def self.define_lite_structs
return if QuickRead.models.empty?
ActiveRecord::Base.logger.debug("QuickRead") { "Defining #{QuickRead.models.size} quick models" }
time = Benchmark.realtime do
while model = models.pop
define_lite_struct(model)
end
end
ActiveRecord::Base.logger.debug("QuickRead") { "Defining quick models took #{time.round(4)}s" }
end
|
.extended(model) ⇒ Object
Initialize the Lite models to be returned when using #quick_reads or called directly with #quick_build
19
20
21
22
23
24
|
# File 'lib/activerecord/quick_read.rb', line 19
def self.extended(model)
super
return if !model.table_name || model.abstract_class
QuickRead.define_lite_struct(model)
end
|
.models ⇒ Object
26
27
28
|
# File 'lib/activerecord/quick_read.rb', line 26
def self.models
@models ||= []
end
|
Instance Method Details
#from_hash(attributes) ⇒ Object
Instantiate a new ActiveRecord object from a plain hash, marked as persisted, no changes, typecast
74
75
76
|
# File 'lib/activerecord/quick_read.rb', line 74
def from_hash(attributes)
allocate.init_with_attributes(attributes_builder.build_from_database(attributes.stringify_keys!))
end
|
#inherited(model) ⇒ Object
This would be used when extended onto the ApplicationRecord, which many models inherit from Add the model to the queue to be run after initialization, since the models aren’t fully defined yet wait until connections are available, after rails init
53
54
55
56
|
# File 'lib/activerecord/quick_read.rb', line 53
def inherited(model)
QuickRead.models << model
super
end
|
#quick_build(attrs = {}) ⇒ Object
58
59
60
61
|
# File 'lib/activerecord/quick_read.rb', line 58
def quick_build(attrs = {})
klass = const_get(:Lite)
klass.new(*attrs.symbolize_keys!.values_at(*klass.members))
end
|
#quick_read ⇒ Object
67
68
69
|
# File 'lib/activerecord/quick_read.rb', line 67
def quick_read
current_scope.limit(1).quick_reads.first
end
|
#quick_reads ⇒ Object
63
64
65
|
# File 'lib/activerecord/quick_read.rb', line 63
def quick_reads
connection.select_all(current_scope.to_sql).map { |attrs| quick_build(attrs) }
end
|