acts-as-taggable-on-mongoid 6.1.1.7 → 6.1.1.8

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: a3389918de3bd83bfcc3ac3f82d9413d5a0f8ec076b8ae83c226d0787dd96158
4
- data.tar.gz: a2e731e6cf8b57d91697d3feb0fc61acca0073bbda5ef41452768bb42ffb7f57
3
+ metadata.gz: 923975d7d231581699ec0944f7482b0b80b66071bbf042f5ef8264dd70e6f2f9
4
+ data.tar.gz: 8220f30f3cc1901e0a7d2d8182b28c6cf9f7b7175e7ddddb3ee9cef52dd6cf77
5
5
  SHA512:
6
- metadata.gz: 0a21b7c8cb425ce8a839411cf2bd5db8985bacf7d16b527c0f5fcc58431af787603928aa14a4c5ae9dd200836756188242b908173b69293067c4b3db1906aef4
7
- data.tar.gz: 67918b704a7b3cdeb1c200e883e806b12562e7724daa1f67a8ebeee2ce3452339e9b84c7de5916b9715193b6496be82b802598b073f35ce8d3ef4ba0d6981d24
6
+ metadata.gz: 8115eb367985f2609847c95a54285a03d488f77eb5bbe390104539c7aec5fa68dc7530776371a888be68283cc77d0443ec01a0c7378532c5f73edee783ba93d1
7
+ data.tar.gz: 024c2fd74c764ab2658e1b77df1d375721c67d47fd212c4390b1494c601fe8b04cc8dd5fff65ebbe8ff7acd67572897fc3c4ab714e3122dd8cfeca24457ff66c
data/.rubocop.yml CHANGED
@@ -13,6 +13,15 @@ AllCops:
13
13
  - 'node_modules/**/*'
14
14
  UseCache: false
15
15
 
16
+ Style/HashEachMethods:
17
+ Enabled: true
18
+
19
+ Style/HashTransformKeys:
20
+ Enabled: true
21
+
22
+ Style/HashTransformValues:
23
+ Enabled: true
24
+
16
25
  Style/CollectionMethods:
17
26
  Description: Preferred collection methods.
18
27
  StyleGuide: https://github.com/bbatsov/ruby-style-guide#map-find-select-reduce-size
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- acts-as-taggable-on-mongoid (6.1.1.7)
4
+ acts-as-taggable-on-mongoid (6.1.1.8)
5
5
  activesupport (>= 5.0)
6
6
  mongoid (>= 6.1.1, <= 7.0.2)
7
7
 
@@ -22,7 +22,7 @@ GEM
22
22
  descendants_tracker (~> 0.0.4)
23
23
  ice_nine (~> 0.11.0)
24
24
  thread_safe (~> 0.3, >= 0.3.1)
25
- brakeman (4.7.2)
25
+ brakeman (4.8.0)
26
26
  bson (4.7.1)
27
27
  code_analyzer (0.5.1)
28
28
  sexp_processor
@@ -54,7 +54,7 @@ GEM
54
54
  gitlab (4.13.1)
55
55
  httparty (~> 0.14, >= 0.14.0)
56
56
  terminal-table (~> 1.5, >= 1.5.1)
57
- httparty (0.17.3)
57
+ httparty (0.18.0)
58
58
  mime-types (~> 3.0)
59
59
  multi_xml (>= 0.5.2)
60
60
  i18n (0.9.5)
@@ -123,6 +123,7 @@ GEM
123
123
  psych (~> 3.1.0)
124
124
  rainbow (>= 2.0, < 4.0)
125
125
  require_all (3.0.0)
126
+ rexml (3.2.4)
126
127
  rspec (3.9.0)
127
128
  rspec-core (~> 3.9.0)
128
129
  rspec-expectations (~> 3.9.0)
@@ -138,11 +139,12 @@ GEM
138
139
  rspec-support (3.9.2)
139
140
  rspec_junit_formatter (0.4.1)
140
141
  rspec-core (>= 2, < 4, != 2.12.0)
141
- rubocop (0.78.0)
142
+ rubocop (0.80.0)
142
143
  jaro_winkler (~> 1.5.1)
143
144
  parallel (~> 1.10)
144
- parser (>= 2.6)
145
+ parser (>= 2.7.0.1)
145
146
  rainbow (>= 2.2.2, < 4.0)
147
+ rexml
146
148
  ruby-progressbar (~> 1.7)
147
149
  unicode-display_width (>= 1.4.0, < 1.7)
148
150
  rubocop-performance (1.5.2)
@@ -155,10 +157,10 @@ GEM
155
157
  addressable (>= 2.3.5)
156
158
  faraday (> 0.8, < 2.0)
157
159
  sexp_processor (4.14.1)
158
- simplecov (0.18.1)
160
+ simplecov (0.18.2)
159
161
  docile (~> 1.1)
160
- simplecov-html (~> 0.11.0)
161
- simplecov-html (0.11.0)
162
+ simplecov-html (~> 0.11)
163
+ simplecov-html (0.12.0)
162
164
  simplecov-rcov (0.2.3)
163
165
  simplecov (>= 0.4.1)
164
166
  terminal-table (1.8.0)
data/README.md CHANGED
@@ -190,6 +190,7 @@ end
190
190
  class MyTaggable
191
191
  include ::Mongoid::Document
192
192
 
193
+ # See lib/acts_as_taggable_on_mongoid/taggable.rb for more details on options.
193
194
  acts_as_taggable_on :my_tags,
194
195
  :your_tags,
195
196
  :other_tags,
@@ -36,7 +36,7 @@ module ActsAsTaggableOnMongoid
36
36
  end
37
37
 
38
38
  autoload_under :Taggable do
39
- # autoload :Cache
39
+ autoload :Cache
40
40
  # autoload :Collection
41
41
  autoload :Core
42
42
  autoload :Changeable
@@ -11,7 +11,11 @@ module ActsAsTaggableOnMongoid
11
11
 
12
12
  belongs_to :tag, counter_cache: true, inverse_of: :taggings
13
13
  belongs_to :tagger, polymorphic: true, optional: true
14
- belongs_to :taggable, polymorphic: true
14
+
15
+ # Tags and Taggings are created in an after_save event on taggable.
16
+ # If autosave is not false, then this will cause the taggable object
17
+ # to be saved AGAIN, that could cause a number of unwanted side-effects.
18
+ belongs_to :taggable, polymorphic: true, autosave: false
15
19
 
16
20
  before_validation :atom_unset_blank_owner
17
21
  end
@@ -18,7 +18,11 @@ module ActsAsTaggableOnMongoid
18
18
  # * preserve_tag_order
19
19
  # If true, the _list accessor will save and returns tags in the order they are added to the object.
20
20
  # * cached_in_model
21
- # Not currently supported
21
+ # If true, a field is added to de-normalize/cache the list into. Can also be a hash with options:
22
+ # field: The name of the field to cache the list in
23
+ # as_list: true/false - If the cached value should be an Array or a String. No order is guaranteed
24
+ # in either case.
25
+ # Defaults to true.
22
26
  # * force_lowercase
23
27
  # If true, values stored for tags will first be downcased to make the values effectively case-insensitive
24
28
  # * force_parameterize
@@ -122,7 +126,7 @@ module ActsAsTaggableOnMongoid
122
126
  ActsAsTaggableOnMongoid::Taggable::Changeable,
123
127
  ActsAsTaggableOnMongoid::Taggable::TaggedWith,
124
128
  # include Collection - not sure we will need as done here. Need to think more on this one.
125
- # include Cache - TODO: Add this.
129
+ ActsAsTaggableOnMongoid::Taggable::Cache,
126
130
  # include Related - TODO: Add this.
127
131
  ActsAsTaggableOnMongoid::Taggable::TaggerRelation,
128
132
  ActsAsTaggableOnMongoid::Taggable::ListTags].each do |include_module|
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActsAsTaggableOnMongoid
4
+ module Taggable
5
+ # A collection of generic methods which use the tag definition to perform actions.
6
+ #
7
+ # These methods are called by the individual tag generated methods to do their work so that
8
+ # the code can be defined in only one location and "shared" by all tags rather than putting the code
9
+ # and definitions into the dynamically defined methods directly.
10
+ #
11
+ # This module actually consists almost exclusively of utility functions
12
+
13
+ # :reek:FeatureEnvy
14
+ # :reek:UtilityFunction
15
+ module Cache
16
+ def save_cached_tag_lists
17
+ tag_types.each_value do |tag_definition|
18
+ next unless tag_definition.cached_in_model?
19
+ next unless tag_list_cache_set_on(tag_definition)
20
+
21
+ list = all_tags_list_on(tag_definition)
22
+
23
+ list = list.to_s unless tag_definition.cached_in_model_as_list?
24
+
25
+ public_send("#{tag_definition.cached_in_model_field}=", list)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -22,6 +22,7 @@ module ActsAsTaggableOnMongoid
22
22
  # attr_writer :custom_contexts
23
23
 
24
24
  after_save :save_tags
25
+ before_save :save_cached_tag_lists
25
26
  end
26
27
 
27
28
  class_methods do
@@ -171,7 +172,7 @@ module ActsAsTaggableOnMongoid
171
172
  end
172
173
 
173
174
  def all_tags_list_on(tag_definition)
174
- tag_list_on(tag_definition).flatten
175
+ tag_list_cache_on(tag_definition).flatten
175
176
  end
176
177
 
177
178
  ##
@@ -58,6 +58,7 @@ module ActsAsTaggableOnMongoid
58
58
  self.my_tag_types = new_tag_types
59
59
  tag_definition = new_tag_types[tag_type] = ActsAsTaggableOnMongoid::Taggable::TagTypeDefinition.new(self, tag_type, options)
60
60
 
61
+ tag_definition.define_cache_field
61
62
  tag_definition.define_base_relations
62
63
  tag_definition.define_relations
63
64
  tag_definition.add_tag_list
@@ -76,6 +76,18 @@ module ActsAsTaggableOnMongoid
76
76
  end
77
77
  end
78
78
 
79
+ def define_cache_field
80
+ tag_definition = self
81
+
82
+ return unless tag_definition.cached_in_model?
83
+
84
+ owner.class_eval do
85
+ field_type = tag_definition.cached_in_model_as_list? ? Array : String
86
+
87
+ field tag_definition.cached_in_model_field, type: field_type
88
+ end
89
+ end
90
+
79
91
  def define_base_relations
80
92
  tag_definition = self
81
93
 
@@ -52,6 +52,14 @@ module ActsAsTaggableOnMongoid
52
52
  end
53
53
  end
54
54
 
55
+ def cached_in_model_field
56
+ @cached_in_model_field ||= cache_hash.fetch(:field) { "cached_#{tag_list_name}" }
57
+ end
58
+
59
+ def cached_in_model_as_list?
60
+ @cached_in_model_as_list ||= cache_hash.fetch(:as_list) { true }
61
+ end
62
+
55
63
  alias preserve_tag_order? preserve_tag_order
56
64
  alias cached_in_model? cached_in_model
57
65
  alias force_lowercase? force_lowercase
@@ -103,6 +111,10 @@ module ActsAsTaggableOnMongoid
103
111
 
104
112
  private
105
113
 
114
+ def cache_hash
115
+ @cache_hash ||= cached_in_model.is_a?(Hash) ? cached_in_model : {}
116
+ end
117
+
106
118
  def tagger_params
107
119
  return @tagger_params if defined?(@tagger_params)
108
120
 
@@ -101,7 +101,7 @@ module ActsAsTaggableOnMongoid
101
101
  def taggable=(value)
102
102
  @taggable = value
103
103
 
104
- tagger_tag_lists.values.each do |tag_list|
104
+ tagger_tag_lists.each_value do |tag_list|
105
105
  tag_list.taggable = taggable
106
106
  end
107
107
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActsAsTaggableOnMongoid
4
- VERSION = "6.1.1.7"
4
+ VERSION = "6.1.1.8"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts-as-taggable-on-mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.1.7
4
+ version: 6.1.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - RealNobody
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-19 00:00:00.000000000 Z
11
+ date: 2020-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -350,6 +350,7 @@ files:
350
350
  - lib/acts_as_taggable_on_mongoid/models/tagging.rb
351
351
  - lib/acts_as_taggable_on_mongoid/tag_list.rb
352
352
  - lib/acts_as_taggable_on_mongoid/taggable.rb
353
+ - lib/acts_as_taggable_on_mongoid/taggable/cache.rb
353
354
  - lib/acts_as_taggable_on_mongoid/taggable/changeable.rb
354
355
  - lib/acts_as_taggable_on_mongoid/taggable/core.rb
355
356
  - lib/acts_as_taggable_on_mongoid/taggable/list_tags.rb