occams-record 0.11.0 → 0.12.0
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/README.md +7 -3
- data/lib/occams-record/eager_loaders.rb +2 -1
- data/lib/occams-record/results.rb +3 -0
- data/lib/occams-record/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a33f839ea9d811478c883f3cf8e54ad3c67c366761db4281ad7994d54234e519
|
|
4
|
+
data.tar.gz: f3370573806301fd8b7beeb60d66fce4cd37160d147f9a626a3ba228430ba935
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b28285305d8e16e497e813e1e89362b27f2d6a35f79bdb529d175dfbd07741592fd168150bfc8170eea8fcf1a538b0c22a6e1258615632240e2661c184583fc8
|
|
7
|
+
data.tar.gz: 3ed3e6cee8688afd1227d3aa736d4744e78102cc040735691f753ee32943be8a71ea24044570a64aa02739e52a5b4303b8d1c79be3359a7cd10e11e67056b7da
|
data/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Occam's Record is a high-efficiency query API for ActiveRecord. It is **not** an
|
|
|
12
12
|
* Allows eager loading of associations when using raw SQL.
|
|
13
13
|
* Allows `find_each`/`find_in_batches` when using raw SQL.
|
|
14
14
|
|
|
15
|
-
[Look over the speed and memory measurements yourself!](https://github.com/jhollinger/occams-record/wiki/Measurements)
|
|
15
|
+
[Look over the speed and memory measurements yourself!](https://github.com/jhollinger/occams-record/wiki/Measurements) OccamsRecord achieves all of this by making some very specific trade-offs:
|
|
16
16
|
|
|
17
17
|
* OccamsRecord results are **read-only**.
|
|
18
18
|
* OccamsRecord results are **purely database rows** - they don't have any instance methods from your Rails models.
|
|
@@ -140,7 +140,9 @@ widgets = OccamsRecord.sql(%(
|
|
|
140
140
|
}).run
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
**Performing eager loading with raw SQL**
|
|
144
|
+
|
|
145
|
+
To perform eager loading with raw SQL you must specify the base model. NOTE some database adapters, notably SQLite, require you to always specify the model.
|
|
144
146
|
|
|
145
147
|
```ruby
|
|
146
148
|
widgets = OccamsRecord.
|
|
@@ -155,7 +157,9 @@ widgets = OccamsRecord.
|
|
|
155
157
|
run
|
|
156
158
|
```
|
|
157
159
|
|
|
158
|
-
|
|
160
|
+
**Using find_each/find_in_batches with raw SQL**
|
|
161
|
+
|
|
162
|
+
To use `find_each` or `find_in_batches` with raw SQL you must provide the `LIMIT` and `OFFSET` statements yourself. The bind values for these will be filled in by OccamsRecord.
|
|
159
163
|
|
|
160
164
|
```ruby
|
|
161
165
|
widgets = OccamsRecord.sql(%(
|
|
@@ -27,7 +27,8 @@ module OccamsRecord
|
|
|
27
27
|
#
|
|
28
28
|
def eager_load(assoc, scope = nil, select: nil, use: nil, as: nil, &eval_block)
|
|
29
29
|
ref = @model ? @model.reflections[assoc.to_s] : nil
|
|
30
|
-
|
|
30
|
+
ref ||= @model.subclasses.map(&:reflections).detect { |x| x.has_key? assoc.to_s }&.[](assoc.to_s) if @model
|
|
31
|
+
raise "OccamsRecord: No assocation `:#{assoc}` on `#{@model&.name || '<model missing>'}` or subclasses" if ref.nil?
|
|
31
32
|
scope ||= ->(q) { q.select select } if select
|
|
32
33
|
@eager_loaders << eager_loader_for_association(ref).new(ref, scope, use: use, as: as, &eval_block)
|
|
33
34
|
self
|
|
@@ -40,6 +40,9 @@ module OccamsRecord
|
|
|
40
40
|
case type.type
|
|
41
41
|
when :datetime
|
|
42
42
|
define_method(col) { @cast_values[idx] ||= type.send(CASTER, @raw_values[idx])&.in_time_zone }
|
|
43
|
+
when :boolean
|
|
44
|
+
define_method(col) { @cast_values[idx] ||= type.send(CASTER, @raw_values[idx]) }
|
|
45
|
+
define_method("#{col}?") { !!send(col) }
|
|
43
46
|
else
|
|
44
47
|
define_method(col) { @cast_values[idx] ||= type.send(CASTER, @raw_values[idx]) }
|
|
45
48
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: occams-record
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.12.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jordan Hollinger
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-03-
|
|
11
|
+
date: 2018-03-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|