make_taggable 0.7.4 → 1.0.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +79 -0
  3. data/CONTRIBUTING.md +65 -22
  4. data/LICENSE.md +18 -17
  5. data/README.md +73 -444
  6. data/UPGRADING.md +28 -2
  7. data/docs/caching.md +93 -0
  8. data/docs/configuration.md +108 -0
  9. data/docs/contexts.md +147 -0
  10. data/docs/database.md +106 -0
  11. data/docs/getting-started.md +114 -0
  12. data/docs/migrating-from-aato.md +67 -0
  13. data/docs/ownership.md +111 -0
  14. data/docs/parsers.md +109 -0
  15. data/docs/querying.md +163 -0
  16. data/docs/tag-clouds.md +74 -0
  17. data/lib/make_taggable/default_parser.rb +45 -32
  18. data/lib/make_taggable/engine.rb +6 -0
  19. data/lib/make_taggable/generic_parser.rb +30 -4
  20. data/lib/make_taggable/tag.rb +121 -19
  21. data/lib/make_taggable/tag_list.rb +77 -24
  22. data/lib/make_taggable/taggable/cache.rb +61 -11
  23. data/lib/make_taggable/taggable/collection.rb +102 -30
  24. data/lib/make_taggable/taggable/core.rb +154 -34
  25. data/lib/make_taggable/taggable/ownership.rb +82 -4
  26. data/lib/make_taggable/taggable/related.rb +66 -3
  27. data/lib/make_taggable/taggable/tag_list_type.rb +8 -0
  28. data/lib/make_taggable/taggable/tagged_with_query/all_tags_query.rb +10 -0
  29. data/lib/make_taggable/taggable/tagged_with_query/any_tags_query.rb +10 -0
  30. data/lib/make_taggable/taggable/tagged_with_query/exclude_tags_query.rb +10 -0
  31. data/lib/make_taggable/taggable/tagged_with_query/query_base.rb +15 -0
  32. data/lib/make_taggable/taggable/tagged_with_query.rb +17 -0
  33. data/lib/make_taggable/taggable.rb +34 -33
  34. data/lib/make_taggable/tagger.rb +73 -12
  35. data/lib/make_taggable/tagging.rb +30 -3
  36. data/lib/make_taggable/tags_helper.rb +22 -1
  37. data/lib/make_taggable/utils.rb +40 -5
  38. data/lib/make_taggable/version.rb +8 -1
  39. data/lib/make_taggable.rb +153 -8
  40. data/make_taggable.gemspec +13 -20
  41. metadata +50 -165
  42. data/.dummyrc +0 -17
  43. data/.github/workflows/ci.yml +0 -140
  44. data/.github/workflows/standard-ci.yml +0 -27
  45. data/.gitignore +0 -17
  46. data/.rspec +0 -3
  47. data/Appraisals +0 -15
  48. data/Gemfile +0 -16
  49. data/Rakefile +0 -13
  50. data/gemfiles/rails_5.gemfile +0 -9
  51. data/gemfiles/rails_6.gemfile +0 -9
  52. data/gemfiles/rails_6_1.gemfile +0 -9
  53. data/gemfiles/rails_master.gemfile +0 -9
  54. data/lib/tasks/setup_test_db.rake +0 -8
data/lib/make_taggable.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "make_taggable/version"
2
4
  require "active_record"
3
5
  require "active_record/version"
@@ -11,6 +13,21 @@ end
11
13
 
12
14
  require "digest/sha1"
13
15
 
16
+ ##
17
+ # Tagging for Active Record models, across any number of named contexts.
18
+ #
19
+ # Make a model taggable with {MakeTaggable::Taggable#make_taggable}, and configure the library
20
+ # through {MakeTaggable.setup}. Every setting on {MakeTaggable::Configuration} can also be read and
21
+ # written directly here.
22
+ #
23
+ # @example
24
+ # class Book < ActiveRecord::Base
25
+ # make_taggable :genres
26
+ # end
27
+ #
28
+ # Book.create!(genre_list: "sci-fi, classic")
29
+ # Book.tagged_with("sci-fi")
30
+ #
14
31
  module MakeTaggable
15
32
  extend ActiveSupport::Autoload
16
33
 
@@ -28,23 +45,52 @@ module MakeTaggable
28
45
  autoload :Cache
29
46
  autoload :Collection
30
47
  autoload :Core
31
- autoload :Dirty
32
48
  autoload :Ownership
33
49
  autoload :Related
34
50
  autoload :TagListType
35
51
  end
36
52
 
37
53
  autoload :Utils
38
- autoload :Compatibility
39
54
 
55
+ ##
56
+ # Raised when a tag name is taken by a competing write and cannot be resolved by retrying.
57
+ #
40
58
  class DuplicateTagError < StandardError
41
59
  end
42
60
 
61
+ ##
62
+ # Yields the configuration so settings can be assigned in one block.
63
+ #
64
+ # Called without a block it only ensures the configuration exists, which is how the library
65
+ # initialises itself on load.
66
+ #
67
+ # @yieldparam configuration [MakeTaggable::Configuration] the current configuration
68
+ # @return [MakeTaggable::Configuration, NilClass] the configuration when no block is given
69
+ #
70
+ # @example
71
+ # MakeTaggable.setup do |config|
72
+ # config.force_lowercase = true
73
+ # config.remove_unused_tags = true
74
+ # end
75
+ #
43
76
  def self.setup
44
77
  @configuration ||= Configuration.new
45
78
  yield @configuration if block_given?
46
79
  end
47
80
 
81
+ ##
82
+ # Forwards unknown calls to the configuration, so every setting can be read and written directly
83
+ # on `MakeTaggable` as well as inside a {setup} block.
84
+ #
85
+ # @param method_name [Symbol] the configuration reader or writer
86
+ # @param args [Array<Object>] arguments forwarded to the configuration
87
+ # @return [Object] whatever the configuration returns
88
+ # @raise [NoMethodError] when the configuration has no such setting
89
+ #
90
+ # @example
91
+ # MakeTaggable.force_lowercase = true
92
+ # MakeTaggable.force_lowercase # => true
93
+ #
48
94
  def self.method_missing(method_name, *args, &block)
49
95
  if @configuration.respond_to?(method_name)
50
96
  @configuration.send(method_name, *args, &block)
@@ -53,16 +99,70 @@ module MakeTaggable
53
99
  end
54
100
  end
55
101
 
102
+ ##
103
+ # Reports the configuration's settings as available on `MakeTaggable` itself.
104
+ #
105
+ # @param method_name [Symbol] the method being tested
106
+ # @param include_private [TrueClass, FalseClass] whether private methods count
107
+ # @return [TrueClass, FalseClass]
108
+ #
56
109
  def self.respond_to_missing?(method_name, include_private = false)
57
- @configuration.respond_to? method_name
110
+ @configuration.respond_to?(method_name, include_private) || super
58
111
  end
59
112
 
113
+ ##
114
+ # The string used to join tags back together for display, derived from the configured delimiter.
115
+ #
116
+ # A trailing space is added when the delimiter does not already end in one, so a comma delimiter
117
+ # renders as `"one, two"` rather than `"one,two"`. When several delimiters are configured the
118
+ # first is used.
119
+ #
120
+ # @return [String] the delimiter, guaranteed to end in a space
121
+ #
122
+ # @example
123
+ # MakeTaggable.glue # => ", "
124
+ #
60
125
  def self.glue
61
126
  setting = @configuration.delimiter
62
127
  delimiter = setting.is_a?(Array) ? setting[0] : setting
63
128
  delimiter.end_with?(" ") ? delimiter : "#{delimiter} "
64
129
  end
65
130
 
131
+ ##
132
+ # The library's settings.
133
+ #
134
+ # Reach these through {MakeTaggable.setup} or directly on `MakeTaggable`, which forwards to the
135
+ # single instance held here.
136
+ #
137
+ # @!attribute [rw] force_lowercase
138
+ # Whether tag names are downcased before they are saved.
139
+ # @return [TrueClass, FalseClass] defaults to `false`
140
+ # @!attribute [rw] force_parameterize
141
+ # Whether tag names are parameterized before they are saved.
142
+ # @return [TrueClass, FalseClass] defaults to `false`
143
+ # @!attribute [rw] remove_unused_tags
144
+ # Whether a tag row is destroyed once its last tagging goes away. Requires `tags_counter`.
145
+ # @return [TrueClass, FalseClass] defaults to `false`
146
+ # @!attribute [rw] default_parser
147
+ # The class used to turn tag input into a {MakeTaggable::TagList}.
148
+ # @return [Class] defaults to {MakeTaggable::DefaultParser}
149
+ # @!attribute [rw] tags_counter
150
+ # Whether taggings maintain a counter cache on their tag.
151
+ # @return [TrueClass, FalseClass] defaults to `true`
152
+ # @!attribute [rw] tags_table
153
+ # The table backing {MakeTaggable::Tag}.
154
+ # @return [Symbol, String] defaults to `:tags`
155
+ # @!attribute [rw] taggings_table
156
+ # The table backing {MakeTaggable::Tagging}.
157
+ # @return [Symbol, String] defaults to `:taggings`
158
+ # @!attribute [r] delimiter
159
+ # The delimiter, or delimiters, separating tags in a string. Metacharacters are escaped, so
160
+ # each one is matched literally.
161
+ # @return [String, Array<String>] defaults to `","`
162
+ # @!attribute [r] strict_case_match
163
+ # Whether tag lookups are case sensitive.
164
+ # @return [TrueClass, FalseClass] defaults to `false`
165
+ #
66
166
  class Configuration
67
167
  attr_accessor :force_lowercase, :force_parameterize,
68
168
  :remove_unused_tags, :default_parser,
@@ -70,6 +170,11 @@ module MakeTaggable
70
170
  :taggings_table
71
171
  attr_reader :delimiter, :strict_case_match
72
172
 
173
+ ##
174
+ # Builds the configuration with the library's defaults.
175
+ #
176
+ # @return [MakeTaggable::Configuration]
177
+ #
73
178
  def initialize
74
179
  @delimiter = ","
75
180
  @force_lowercase = false
@@ -83,19 +188,49 @@ module MakeTaggable
83
188
  @taggings_table = :taggings
84
189
  end
85
190
 
191
+ ##
192
+ # Sets whether tag lookups are case sensitive.
193
+ #
194
+ # Ignored while {#force_binary_collation=} is on, which already implies case sensitivity.
195
+ #
196
+ # @param force_cs [TrueClass, FalseClass] whether to match case exactly
197
+ # @return [TrueClass, FalseClass]
198
+ #
86
199
  def strict_case_match=(force_cs)
87
200
  @strict_case_match = force_cs unless @force_binary_collation
88
201
  end
89
202
 
203
+ ##
204
+ # Sets the delimiter separating tags in a string.
205
+ #
206
+ # @deprecated Configure a {#default_parser} instead. This will be removed in a future release.
207
+ #
208
+ # @param string [String, Array<String>] one delimiter, or several
209
+ # @return [String, Array<String>]
210
+ #
211
+ # @example Several delimiters, matched literally
212
+ # MakeTaggable.delimiter = [",", "|"]
213
+ #
90
214
  def delimiter=(string)
91
- ActiveRecord::Base.logger.warn <<~WARNING
92
- MakeTaggable.delimiter is deprecated \
93
- and will be removed from v4.0+, use \
94
- a MakeTaggable.default_parser instead
95
- WARNING
215
+ # Active Record does not always have a logger -- a plain Active Record
216
+ # process, or an initializer running before the logger is assigned, will
217
+ # both leave it nil.
218
+ ActiveRecord::Base.logger&.warn(
219
+ "MakeTaggable.delimiter is deprecated and will be removed in a future " \
220
+ "release. Configure a MakeTaggable.default_parser instead."
221
+ )
96
222
  @delimiter = string
97
223
  end
98
224
 
225
+ ##
226
+ # Switches the MySQL tag name column between a binary and a case-insensitive collation.
227
+ #
228
+ # A binary collation makes tag names compare exactly, including accented and other multi-byte
229
+ # characters, and forces {#strict_case_match} on. Does nothing on other adapters.
230
+ #
231
+ # @param force_bin [TrueClass, FalseClass] whether to apply the binary collation
232
+ # @return [TrueClass, FalseClass]
233
+ #
99
234
  def force_binary_collation=(force_bin)
100
235
  if Utils.using_mysql?
101
236
  if force_bin
@@ -109,6 +244,16 @@ module MakeTaggable
109
244
  end
110
245
  end
111
246
 
247
+ ##
248
+ # Alters the MySQL tag name column to the requested collation.
249
+ #
250
+ # Failures are reported rather than raised: the column does not exist yet the first time the
251
+ # migrations run, and that is not an error.
252
+ #
253
+ # @param bincoll [TrueClass, FalseClass] `true` for `utf8mb4_bin`, `false` for
254
+ # `utf8mb4_general_ci`
255
+ # @return [NilClass]
256
+ #
112
257
  def self.apply_binary_collation(bincoll)
113
258
  if Utils.using_mysql?
114
259
  coll = "utf8mb4_general_ci"
@@ -6,37 +6,30 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["Matthew Kennedy", "Michael Bleigh", "Joost Baaij"]
7
7
  spec.email = %w[m.kennedy@me.com]
8
8
 
9
- spec.required_ruby_version = ">= 2.5"
9
+ spec.required_ruby_version = ">= 3.2"
10
10
 
11
11
  spec.summary = "Advanced Tagging For Rails"
12
- spec.description = "MakeTaggable is a fork of Acts-As-Taggable-On with code updates & fresh migrations"
12
+ spec.description = "MakeTaggable lets Active Record models carry tags across any number of " \
13
+ "named contexts, with ownership, ordering, custom parsers and tag-cloud calculations."
13
14
 
14
15
  spec.homepage = "https://github.com/MatthewKennedy/make_taggable"
15
16
  spec.license = "MIT"
16
17
 
17
- spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
19
- spec.metadata["changelog_uri"] = "https://github.com/MatthewKennedy/make_taggable/blob/master/CHANGELOG.md"
20
-
21
- spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
22
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
19
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
20
+ spec.metadata["bug_tracker_uri"] = "#{spec.homepage}/issues"
21
+ spec.metadata["documentation_uri"] = "#{spec.homepage}/blob/master/docs"
22
+ spec.metadata["rubygems_mfa_required"] = "true"
23
+
24
+ spec.files = Dir.chdir(__dir__) do
25
+ `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{\A(spec|gemfiles|\.github)/}) || f.match(%r{\A(\.|Appraisals|Rakefile|Gemfile)})
27
+ end
23
28
  end
24
29
 
25
- spec.bindir = "exe"
26
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
30
  spec.require_paths = ["lib"]
28
31
 
29
- spec.add_dependency "activerecord", ">= 5.2.0", "<= 7.5.0"
30
-
31
- spec.add_development_dependency "rails", ">= 5.2.0", "<= 7.5.0"
32
- spec.add_development_dependency "appraisal", "~> 2.3.0"
33
- spec.add_development_dependency "mysql2", "~> 0.5.0"
34
- spec.add_development_dependency "pg", "~> 1.2.0"
35
- spec.add_development_dependency "rspec", "~> 3.10.0"
36
- spec.add_development_dependency "rspec-rails", "~> 4.0.0"
37
- spec.add_development_dependency "standard", "~> 0.10.0"
38
- spec.add_development_dependency "sqlite3", "~> 1.4.0"
39
- spec.add_development_dependency "rails-dummy", "~> 0.1.0"
32
+ spec.add_dependency "activerecord", ">= 7.2"
40
33
 
41
34
  if File.exist?("UPGRADING.md")
42
35
  spec.post_install_message = File.read("UPGRADING.md")
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: make_taggable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Kennedy
8
8
  - Michael Bleigh
9
9
  - Joost Baaij
10
- autorequire:
11
- bindir: exe
10
+ bindir: bin
12
11
  cert_chain: []
13
- date: 2021-03-17 00:00:00.000000000 Z
12
+ date: 1980-01-02 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: activerecord
@@ -18,173 +17,27 @@ dependencies:
18
17
  requirements:
19
18
  - - ">="
20
19
  - !ruby/object:Gem::Version
21
- version: 5.2.0
22
- - - "<="
23
- - !ruby/object:Gem::Version
24
- version: 7.5.0
20
+ version: '7.2'
25
21
  type: :runtime
26
22
  prerelease: false
27
23
  version_requirements: !ruby/object:Gem::Requirement
28
24
  requirements:
29
25
  - - ">="
30
26
  - !ruby/object:Gem::Version
31
- version: 5.2.0
32
- - - "<="
33
- - !ruby/object:Gem::Version
34
- version: 7.5.0
35
- - !ruby/object:Gem::Dependency
36
- name: rails
37
- requirement: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: 5.2.0
42
- - - "<="
43
- - !ruby/object:Gem::Version
44
- version: 7.5.0
45
- type: :development
46
- prerelease: false
47
- version_requirements: !ruby/object:Gem::Requirement
48
- requirements:
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- version: 5.2.0
52
- - - "<="
53
- - !ruby/object:Gem::Version
54
- version: 7.5.0
55
- - !ruby/object:Gem::Dependency
56
- name: appraisal
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 2.3.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 2.3.0
69
- - !ruby/object:Gem::Dependency
70
- name: mysql2
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.5.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.5.0
83
- - !ruby/object:Gem::Dependency
84
- name: pg
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 1.2.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 1.2.0
97
- - !ruby/object:Gem::Dependency
98
- name: rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 3.10.0
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 3.10.0
111
- - !ruby/object:Gem::Dependency
112
- name: rspec-rails
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 4.0.0
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 4.0.0
125
- - !ruby/object:Gem::Dependency
126
- name: standard
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 0.10.0
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 0.10.0
139
- - !ruby/object:Gem::Dependency
140
- name: sqlite3
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 1.4.0
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 1.4.0
153
- - !ruby/object:Gem::Dependency
154
- name: rails-dummy
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: 0.1.0
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: 0.1.0
167
- description: MakeTaggable is a fork of Acts-As-Taggable-On with code updates & fresh
168
- migrations
27
+ version: '7.2'
28
+ description: MakeTaggable lets Active Record models carry tags across any number of
29
+ named contexts, with ownership, ordering, custom parsers and tag-cloud calculations.
169
30
  email:
170
31
  - m.kennedy@me.com
171
32
  executables: []
172
33
  extensions: []
173
34
  extra_rdoc_files: []
174
35
  files:
175
- - ".dummyrc"
176
- - ".github/workflows/ci.yml"
177
- - ".github/workflows/standard-ci.yml"
178
- - ".gitignore"
179
- - ".rspec"
180
- - Appraisals
181
36
  - CHANGELOG.md
182
37
  - CODE_OF_CONDUCT.md
183
38
  - CONTRIBUTING.md
184
- - Gemfile
185
39
  - LICENSE.md
186
40
  - README.md
187
- - Rakefile
188
41
  - UPGRADING.md
189
42
  - bin/console
190
43
  - bin/setup
@@ -193,10 +46,16 @@ files:
193
46
  - db/migrate/3_change_tag_name_collation_mysql.rb
194
47
  - db/migrate/4_add_index_to_tags.rb
195
48
  - db/migrate/5_add_index_to_taggings.rb
196
- - gemfiles/rails_5.gemfile
197
- - gemfiles/rails_6.gemfile
198
- - gemfiles/rails_6_1.gemfile
199
- - gemfiles/rails_master.gemfile
49
+ - docs/caching.md
50
+ - docs/configuration.md
51
+ - docs/contexts.md
52
+ - docs/database.md
53
+ - docs/getting-started.md
54
+ - docs/migrating-from-aato.md
55
+ - docs/ownership.md
56
+ - docs/parsers.md
57
+ - docs/querying.md
58
+ - docs/tag-clouds.md
200
59
  - lib/make_taggable.rb
201
60
  - lib/make_taggable/default_parser.rb
202
61
  - lib/make_taggable/engine.rb
@@ -220,22 +79,49 @@ files:
220
79
  - lib/make_taggable/tags_helper.rb
221
80
  - lib/make_taggable/utils.rb
222
81
  - lib/make_taggable/version.rb
223
- - lib/tasks/setup_test_db.rake
224
82
  - lib/tasks/tags_collate_utf8.rake
225
83
  - make_taggable.gemspec
226
84
  homepage: https://github.com/MatthewKennedy/make_taggable
227
85
  licenses:
228
86
  - MIT
229
87
  metadata:
230
- homepage_uri: https://github.com/MatthewKennedy/make_taggable
231
88
  source_code_uri: https://github.com/MatthewKennedy/make_taggable
232
89
  changelog_uri: https://github.com/MatthewKennedy/make_taggable/blob/master/CHANGELOG.md
90
+ bug_tracker_uri: https://github.com/MatthewKennedy/make_taggable/issues
91
+ documentation_uri: https://github.com/MatthewKennedy/make_taggable/blob/master/docs
92
+ rubygems_mfa_required: 'true'
233
93
  post_install_message: |
234
- When upgrading run the migrations generator
94
+ Upgrading to MakeTaggable 1.0
95
+
96
+ This release renames the declaration methods and changes how delimiters are escaped.
97
+
98
+ 1. Rename the declarations in your models:
99
+
100
+ acts_as_taggable -> make_taggable
101
+ acts_as_taggable_on :skills -> make_taggable :skills
102
+ acts_as_ordered_taggable -> make_ordered_taggable
103
+ acts_as_ordered_taggable_on :skills -> make_ordered_taggable :skills
104
+ acts_as_tagger -> make_tagger
105
+
106
+ Everything generated per context keeps its name: skill_list, skills,
107
+ skill_counts, top_skills, skills_from, find_related_skills.
108
+
109
+ 2. If you configure a delimiter containing a regular expression
110
+ metacharacter, unescape it. Delimiters are now literal strings:
111
+
112
+ MakeTaggable.delimiter = ['\|'] -> MakeTaggable.delimiter = ["|"]
113
+
114
+ 3. If you rely on `make_taggable` with no arguments adding no contexts,
115
+ note that it now tags on :tags.
116
+
117
+ 4. Requirements are now Ruby 3.2 and Active Record 7.2 or newer.
118
+
119
+ Install any new migrations:
235
120
 
236
121
  rails make_taggable_engine:install:migrations
122
+ rails db:migrate
237
123
 
238
- This will create any new migrations and skip existing ones
124
+ Full notes: https://github.com/MatthewKennedy/make_taggable/blob/master/CHANGELOG.md
239
125
  rdoc_options: []
240
126
  require_paths:
241
127
  - lib
@@ -243,15 +129,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
129
  requirements:
244
130
  - - ">="
245
131
  - !ruby/object:Gem::Version
246
- version: '2.5'
132
+ version: '3.2'
247
133
  required_rubygems_version: !ruby/object:Gem::Requirement
248
134
  requirements:
249
135
  - - ">="
250
136
  - !ruby/object:Gem::Version
251
137
  version: '0'
252
138
  requirements: []
253
- rubygems_version: 3.2.14
254
- signing_key:
139
+ rubygems_version: 3.6.9
255
140
  specification_version: 4
256
141
  summary: Advanced Tagging For Rails
257
142
  test_files: []
data/.dummyrc DELETED
@@ -1,17 +0,0 @@
1
- --skip-bootsnap
2
- --skip-webpack
3
- --skip-action-cable
4
- --skip-spring
5
- --skip-coffee
6
- --skip-turbolinks
7
- --skip-listen
8
- --skip-action-text
9
- --skip-active-storage
10
- --skip-action-cable
11
- --skip-action-mailer
12
- --skip-action-mailbox
13
- --skip-active-job
14
- --skip-javascript
15
- --skip-test
16
-
17
- --template=spec/template/test_app_template.rb