active_record_lite 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 384c59db0a31d49da5defdb12a12b39de14add88018d619711a73509dad4b6ff
4
- data.tar.gz: 8f09691dd1a6116306c1e07c028435a0eee0a83af42eb3b55f18391198c66c66
3
+ metadata.gz: 25396dbcff19274d249d4e139f1c04e82f574e968bcc0c142e07822176a7baca
4
+ data.tar.gz: 7638d9c05aebadc391cd49718800cd14f1f5d8d7a454baf0f4c258d94768859b
5
5
  SHA512:
6
- metadata.gz: ba9563d613333c24567fe7ec6247ea2dffc0b6071c5843470e6f19009edea0ee3f111cf783f2afbcc00262a706275c689241405bec73ef4c16d9b267b2c59967
7
- data.tar.gz: 8b0d582125de0ec0f84e7f340a591032e0a418506daa0cb342ed5375369623e11b2eded62c525b0ade6f7389196e2dd735c1f76b1679506154b1ef06bbe4961d
6
+ metadata.gz: 35c746af91f3865d313117a9ce57a7f808338e247375c0fd4988898fdd58c4b5b880bca7f41ac7126f8f407eecdf02598ea2326abb01a7215a04242db4c3beef
7
+ data.tar.gz: 20cf42ac85d713411e6227f722a83db2510934f1e883e351939c256e40540cf9c1ca2cdab84b38e99cba5d6f655b0d10efcd3ca5e7fbc577f8a3a90572a7f62a
data/README.md CHANGED
@@ -53,13 +53,25 @@ By default the lite class will include all columns defined in the parent model c
53
53
  @user.email # => undefined method
54
54
  ```
55
55
 
56
+ For specific use-cases, you can also limit loading the number of columns by passing the selectable columns to `to_lite`.
57
+
58
+ ```ruby
59
+ class User < ActiveRecord::Base
60
+ has_lite, columns: %w(id name email)
61
+ end
62
+
63
+ @user = User.where(id: 1).to_lite(:id, :name) # select id, name from users where id = 1;
64
+ @user.id # => 1
65
+ @user.name # => "name"
66
+
67
+ @user.email # => nil
68
+ ```
69
+
56
70
  #### NOTE:
57
71
  1. active_record_lite internally uses active_record, hence model level default scopes will apply when querying for the record from db.
58
72
 
59
73
  2. `to_lite` should be called after all `serialize` calls in the model. `to_lite` relies on `serialised_attributes` which will be correctly initialised only after all the `serialize` calls.
60
74
 
61
- 3. Dynamic selects are not possible. `to_lite` will run a `unscope(:select)` on the current chained scope.
62
-
63
75
  #### TODO:
64
76
  1. Add support to eager load lite objects via AR relation.currently.
65
77
 
@@ -8,27 +8,34 @@ module ActiveRecordLite
8
8
  }
9
9
  end
10
10
 
11
- def self.perform(sql)
11
+ def self.perform(sql, selects)
12
12
  res = fetch_from_db(sql).map { |obj|
13
- new(obj)
13
+ new(obj, selects)
14
14
  }
15
15
  res.size > 1 ? res : res.first
16
16
  end
17
17
 
18
- def initialize(obj)
18
+ def initialize(obj, selects)
19
19
  @attributes = obj
20
+ @selects = selects&.map!(&:to_s)
20
21
  end
21
22
 
22
23
  private
23
24
 
24
- attr_accessor :attributes
25
+ attr_reader :attributes, :selects
25
26
 
26
27
  def self.fetch_from_db(sql)
27
28
  base_class.connection.select_rows(sql)
28
29
  end
29
30
 
30
31
  def read_attribute(attr_name)
31
- attributes[self.class.attr_lookup(attr_name)]
32
+ if selects
33
+ index = selects.index(attr_name)
34
+ index && attributes[index]
35
+ else
36
+ index = self.class.attr_lookup(attr_name)
37
+ attributes[index]
38
+ end
32
39
  end
33
40
 
34
41
  def memoize_results(key)
@@ -5,9 +5,10 @@ module ActiveRecordLite
5
5
  @_arlcolumns = options.delete(:columns)
6
6
  end
7
7
  class_eval <<-EOV
8
- def self.to_lite
9
- scoper = unscope(:select).select(@_arlcolumns)
10
- ActiveRecordLite.perform(scoper.to_sql)
8
+ def self.to_lite(*args)
9
+ selects = args.presence || @_arlcolumns
10
+ scoper = unscope(:select).select(selects)
11
+ ActiveRecordLite.perform(scoper.to_sql, selects)
11
12
  end
12
13
 
13
14
  class ActiveRecordLite < ActiveRecordLite::Base
@@ -1,3 +1,3 @@
1
1
  module ActiveRecordLite
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ritikesh
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-16 00:00:00.000000000 Z
11
+ date: 2019-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake