quickery 1.0.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20c5125563b48a48ba73907330199cf2b7d330e0e78bc3449db1ba92f29783aa
4
- data.tar.gz: 047cc01e20747481b825ca1d4f26dfe34ba4ab31429a005be4b8767cf51b6e12
3
+ metadata.gz: 06ee53003d29d3dfa2bf9cd981c5d6f154bb49a8a07538d846acff0b30adb52d
4
+ data.tar.gz: 2bf0d7a7e35f9d46ec2fabeacd11f36479f4165c1110b8e75d3336e91329d5f9
5
5
  SHA512:
6
- metadata.gz: 7cdc80db27ccdbe249a2592bc0e537cd0cf4a8c2146afcc0a306ffadd01cb7a76e1181492d6e44795bd94862c23d7e1aadbaf42e19962f99f1ee4b2985ebdb21
7
- data.tar.gz: 72f951760cd8737b117d1f11865cb2cc4c6b4ba5c427d86dcdffa704a2025d51432d45c69b0226eb0b2c42c20dd241ab93909dc8a83d8b4d51e8113db4eaeed8
6
+ metadata.gz: 290d4b4ba0ee7b2f239619231c07ceb848a79d3b858b0b03287644459a67ed5ae826e426b6b291debee23afecaca4221434df1c21fda53bb8d662791f8afda0e
7
+ data.tar.gz: 1c3b3f6b7817550bf272e342b88c70964ff8955f9bc73fe81e6c234f0036c19d4ed8278cf6b0ec45346d8dee010842060b51d3e17c8593a753ffb6943dc1fc35
data/README.md CHANGED
@@ -185,7 +185,7 @@ end
185
185
  ```
186
186
 
187
187
  ## Gotchas
188
- * Quickery makes use of Rails model callbacks such as `before_save`. This meant that data-integrity holds unless `update_columns` or `update_column` is used which bypasses model callbacks, or unless any manual SQL update is performed.
188
+ * Quickery makes use of Rails model callbacks such as `before_update`. This meant that data-integrity holds unless `update_columns` or `update_column` is used which bypasses model callbacks, or unless any manual SQL update is performed.
189
189
  * Quickery does not automatically update old records existing in the database that were created before you integrate Quickery, or before you add new/more Quickery-attributes for that model. One solution is [`recreate_quickery_cache!`](#recreate_quickery_cache) below.
190
190
 
191
191
  ## DSL
@@ -203,7 +203,6 @@ end
203
203
  * `{ branch: { name: :branch_name, id: :branch_id }` will create two `Quickery::QuickeryBuilder`
204
204
  * In this particular example, you are required to specify `belongs_to :branch` in this model
205
205
  * Similarly, you are required to specify `belongs_to :company` inside `Branch` model, `belongs_to :country` inside `Company` model; etc...
206
- * defines a set of "hidden" Quickery `before_save`, `before_update`, `before_destroy`, and `before_create` callbacks across all models specified in the quickery-defined attribute association chain.
207
206
  * quickery-defined attributes such as say `:branch_company_country_category_name` are updated by Quickery automatically whenever any of it's dependent records across models have been changed. Note that updates in this way do not trigger model callbacks, as I wanted to isolate logic and scope of Quickery by not triggering model callbacks that you already have.
208
207
  * quickery-defined attributes such as say `:branch_company_country_category_name` are READ-only! Do not update these attributes manually. You can, but it will not automatically update the other end, and thus will break data integrity. If you want to re-update these attributes to match the other end, see `recreate_quickery_cache!` below.
209
208
 
@@ -235,6 +234,16 @@ end
235
234
  # => 'Ireland'
236
235
  ```
237
236
 
237
+ ##### `determine_quickery_values`
238
+ * returns a Hash of all quickery-defined attributes mapped to the current "actual" supposed values
239
+ * i.e. you can do something like the following:
240
+
241
+ ```ruby
242
+ employee = Employee.first
243
+ puts employee.determine_quickery_values
244
+ # => { branch_company_country_id: 1, branch_compnay_country_name: 'Ireland' }
245
+ ```
246
+
238
247
  ## TODOs
239
248
  * Possibly support two-way mapping of attributes? So that you can do, say... `employee.update!(branch_company_name: 'somenewcompanyname')`
240
249
  * Support `has_many` as currently only `belongs_to` is supported. This would then allow us to cache Array of values.
@@ -264,6 +273,9 @@ See [my detailed comparisons](other_similar_gems_comparison.md)
264
273
  5. Create new Pull Request
265
274
 
266
275
  ## Changelog
276
+ * 1.1.0
277
+ * added helper method [`determine_quickery_values`](#determine_quickery_values)
278
+ * fixed `recreate_quickery_cache!` raising `NilClass` error when the immediate association is nil
267
279
  * 1.0.0
268
280
  * Done (TODO): DSL changed from quickery (block) into quickery (hash). Thanks to @xire28 and @sshaw_ in my [reddit post](https://www.reddit.com/r/ruby/comments/9dlcc5/i_just_published_a_new_gem_quickery_an/) for the suggestion.
269
281
  * Done (TODO): Now updates in one go, instead of updating record per quickery-attribute, thereby greatly improving speed.
@@ -12,6 +12,7 @@ module Quickery
12
12
  attr_accessor :quickery_association_chain_dependers
13
13
  attr_accessor :quickery_association_chain_dependees
14
14
  attr_accessor :quickery_association_chain_intermediaries
15
+ attr_accessor :quickery_builders
15
16
 
16
17
  def quickery(mappings)
17
18
  mappings_builder = MappingsBuilder.new(model: self, mappings: mappings.with_indifferent_access)
@@ -33,7 +34,15 @@ module Quickery
33
34
  raise ArgumentError, "No defined quickery builder for #{depender_column_name}. Defined values are #{self.class.quickery_builders.keys}" unless quickery_builder
34
35
 
35
36
  dependee_record = quickery_builder.association_chains.first.dependee_record(self)
36
- dependee_record.send(quickery_builder.dependee_column_name)
37
+ dependee_record.public_send(quickery_builder.dependee_column_name) if dependee_record
38
+ end
39
+
40
+ def determine_quickery_values
41
+ quickery_values = {}
42
+ self.class.quickery_builders.each do |depender_column_name, quickery_builder|
43
+ quickery_values[depender_column_name] = determine_quickery_value(depender_column_name)
44
+ end
45
+ quickery_values
37
46
  end
38
47
  end
39
48
  end
@@ -79,7 +79,7 @@ module Quickery
79
79
 
80
80
  child_association_chains(include_self: true).inject(from_record) do |from_record, association_chain|
81
81
  if association_chain.belongs_to
82
- from_record.send(association_chain.belongs_to.name)
82
+ from_record.send(association_chain.belongs_to.name) if from_record
83
83
  else
84
84
  from_record
85
85
  end
@@ -13,8 +13,7 @@ module Quickery
13
13
  end
14
14
 
15
15
  def add_to_model
16
- define_quickery_builders_in_model_class unless @model.respond_to? :quickery_builders
17
- # include this to the list of quickery builders defined for this model
16
+ @model.quickery_builders ||= {}
18
17
  @model.quickery_builders[depender_column_name] = self
19
18
  end
20
19
 
@@ -28,18 +27,5 @@ module Quickery
28
27
  @callbacks_builder = CallbacksBuilder.new(quickery_builder: self)
29
28
  @callbacks_builder.build_callbacks
30
29
  end
31
-
32
- private
33
-
34
- def define_quickery_builders_in_model_class
35
- # set default empty Hash if first time setting quickery_builders
36
- @model.class_eval do
37
- @quickery_builders = {}
38
-
39
- class << self
40
- attr_reader :quickery_builders
41
- end
42
- end
43
- end
44
30
  end
45
31
  end
@@ -1,3 +1,3 @@
1
1
  module Quickery
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quickery
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jules Roman Polidario
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-31 00:00:00.000000000 Z
11
+ date: 2018-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties