easy_tags 0.2.2 → 0.2.6
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/.travis.yml +1 -3
- data/Appraisals +5 -5
- data/CHANGELOG.md +23 -2
- data/easy_tags.gemspec +4 -3
- data/gemfiles/activerecord_5.1.gemfile +4 -4
- data/gemfiles/activerecord_5.2.gemfile +4 -4
- data/gemfiles/activerecord_6.0.gemfile +8 -0
- data/lib/easy_tags/dirty_methods.rb +26 -0
- data/lib/easy_tags/taggable_context.rb +10 -5
- data/lib/easy_tags/taggable_methods.rb +3 -17
- data/lib/easy_tags/version.rb +1 -1
- data/lib/easy_tags.rb +1 -0
- metadata +42 -15
- data/gemfiles/activerecord_5.0.gemfile +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 28e114c5f8de3ceaf5728fecfe910c88464e1eb0067732a7b24bb9c7c5935c89
|
|
4
|
+
data.tar.gz: 064c888f328cfa05f9e3de0c6d0b0b8c90957134ef02ed97ce17140760f5de13
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9b5e9917f9f0e40c441ec4ded539fd6f4179d9dd835d508c28f1ad137c7b968a382013d9a0169f9c6b0abcdbd2f868c000d7e80e61b0176d6dea691092d06aaa
|
|
7
|
+
data.tar.gz: 3265ee7814dea6f750594558e99fe8ab58c5577c61358851e77e6e2c5e480774e4cf9125b2f59ec9d9fb54b26beab0b32af99f8eee800154ae388391408a9018
|
data/.travis.yml
CHANGED
|
@@ -14,16 +14,14 @@ script:
|
|
|
14
14
|
after_script:
|
|
15
15
|
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
|
16
16
|
rvm:
|
|
17
|
-
- 2.3.8
|
|
18
|
-
- 2.4.5
|
|
19
17
|
- 2.5.3
|
|
20
18
|
- 2.6.0
|
|
21
19
|
- ruby-head
|
|
22
20
|
gemfile:
|
|
23
21
|
- Gemfile
|
|
24
|
-
- gemfiles/activerecord_5.0.gemfile
|
|
25
22
|
- gemfiles/activerecord_5.1.gemfile
|
|
26
23
|
- gemfiles/activerecord_5.2.gemfile
|
|
24
|
+
- gemfiles/activerecord_6.0.gemfile
|
|
27
25
|
matrix:
|
|
28
26
|
allow_failures:
|
|
29
27
|
- rvm: ruby-head
|
data/Appraisals
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
appraise 'activerecord-5.0' do
|
|
2
|
-
gem 'activerecord', '~> 5.0.0'
|
|
3
|
-
gem 'activesupport', '~> 5.0.0'
|
|
4
|
-
end
|
|
5
|
-
|
|
6
1
|
appraise 'activerecord-5.1' do
|
|
7
2
|
gem 'activerecord', '~> 5.1.0'
|
|
8
3
|
gem 'activesupport', '~> 5.1.0'
|
|
@@ -12,3 +7,8 @@ appraise 'activerecord-5.2' do
|
|
|
12
7
|
gem 'activerecord', '~> 5.2.0'
|
|
13
8
|
gem 'activesupport', '~> 5.2.0'
|
|
14
9
|
end
|
|
10
|
+
|
|
11
|
+
appraise 'activerecord-6.0' do
|
|
12
|
+
gem 'activerecord', '~> 6.0.0'
|
|
13
|
+
gem 'activesupport', '~> 6.0.0'
|
|
14
|
+
end
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.2.6] - 2022-01-21
|
|
10
|
+
### Fixed
|
|
11
|
+
- Fixed bug with reload method arguments forwarding. [Issue #36](https://github.com/iiwo/easy_tags/issues/36)
|
|
12
|
+
|
|
13
|
+
## [0.2.5] - 2020-06-09
|
|
14
|
+
### Fixed
|
|
15
|
+
- Added association cache invalidation after tag changes are persisted
|
|
16
|
+
(fixes issue with explicit reload required to refresh `context_tags`)
|
|
17
|
+
|
|
18
|
+
## [0.2.4] - 2020-06-09
|
|
19
|
+
### Fixed
|
|
20
|
+
- Fixed tags eager loading
|
|
21
|
+
|
|
22
|
+
## [0.2.3] - 2020-01-15
|
|
23
|
+
### Added
|
|
24
|
+
- Rails 6.0 support
|
|
25
|
+
|
|
9
26
|
## [0.2.2] - 2019-10-24
|
|
10
27
|
### Fixed
|
|
11
28
|
- Fixed inspect and compare for context objects (delegate to tags list) that may have affected debug and testing
|
|
@@ -21,8 +38,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
21
38
|
## [0.1.0] - 2019-07-15
|
|
22
39
|
Initial release
|
|
23
40
|
|
|
24
|
-
[Unreleased]: https://github.com/iiwo/easy_tagscompare/v0.2.
|
|
25
|
-
[0.2.
|
|
41
|
+
[Unreleased]: https://github.com/iiwo/easy_tagscompare/v0.2.6...HEAD
|
|
42
|
+
[0.2.6]: https://github.com/iiwo/easy_tags/compare/v0.2.5...v0.2.6
|
|
43
|
+
[0.2.5]: https://github.com/iiwo/easy_tags/compare/v0.2.4...v0.2.5
|
|
44
|
+
[0.2.4]: https://github.com/iiwo/easy_tags/compare/v0.2.3...v0.2.4
|
|
45
|
+
[0.2.3]: https://github.com/iiwo/easy_tags/compare/v0.2.2...v0.2.3
|
|
46
|
+
[0.2.2]: https://github.com/iiwo/easy_tags/compare/v0.2.1...v0.2.2
|
|
26
47
|
[0.2.1]: https://github.com/iiwo/easy_tags/compare/v0.2.0...v0.2.1
|
|
27
48
|
[0.2.0]: https://github.com/iiwo/easy_tags/compare/v0.1.0...v0.2.0
|
|
28
49
|
[0.1.0]: https://github.com/iiwo/easy_tags/releases/tag/v0.1.0
|
data/easy_tags.gemspec
CHANGED
|
@@ -27,15 +27,16 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
28
28
|
spec.require_paths = ['lib']
|
|
29
29
|
|
|
30
|
-
spec.add_runtime_dependency 'activerecord', '
|
|
31
|
-
spec.add_runtime_dependency 'activesupport', '
|
|
30
|
+
spec.add_runtime_dependency 'activerecord', '>= 5.0', '< 6.1'
|
|
31
|
+
spec.add_runtime_dependency 'activesupport', '>= 5.0', '< 6.1'
|
|
32
32
|
|
|
33
33
|
spec.add_development_dependency 'appraisal'
|
|
34
34
|
spec.add_development_dependency 'database_cleaner'
|
|
35
|
+
spec.add_development_dependency 'db-query-matchers'
|
|
35
36
|
spec.add_development_dependency 'rspec'
|
|
36
37
|
spec.add_development_dependency 'rspec-rails'
|
|
37
38
|
spec.add_development_dependency 'simplecov'
|
|
38
39
|
spec.add_development_dependency 'simplecov-console'
|
|
39
|
-
spec.add_development_dependency 'sqlite3'
|
|
40
|
+
spec.add_development_dependency 'sqlite3'
|
|
40
41
|
end
|
|
41
42
|
# rubocop:enable Metrics/BlockLength
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# This file was generated by Appraisal
|
|
2
2
|
|
|
3
|
-
source
|
|
3
|
+
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
gem
|
|
6
|
-
gem
|
|
5
|
+
gem "activerecord", "~> 5.1.0"
|
|
6
|
+
gem "activesupport", "~> 5.1.0"
|
|
7
7
|
|
|
8
|
-
gemspec path:
|
|
8
|
+
gemspec path: "../"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# This file was generated by Appraisal
|
|
2
2
|
|
|
3
|
-
source
|
|
3
|
+
source "https://rubygems.org"
|
|
4
4
|
|
|
5
|
-
gem
|
|
6
|
-
gem
|
|
5
|
+
gem "activerecord", "~> 5.2.0"
|
|
6
|
+
gem "activesupport", "~> 5.2.0"
|
|
7
7
|
|
|
8
|
-
gemspec path:
|
|
8
|
+
gemspec path: "../"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module EasyTags
|
|
2
|
+
# Handles dirty behaviour
|
|
3
|
+
module DirtyMethods
|
|
4
|
+
RAILS_6 = ::ActiveRecord.gem_version >= ::Gem::Version.new('6.0.0')
|
|
5
|
+
|
|
6
|
+
def _mark_dirty(context:, taggable_context:)
|
|
7
|
+
_set_dirty_previous_value(attribute_name: "#{context}_list", value: taggable_context.persisted_tags.to_s)
|
|
8
|
+
write_attribute("#{context}_list", taggable_context.tags.to_s)
|
|
9
|
+
attribute_will_change!("#{context}_list")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
if RAILS_6
|
|
13
|
+
def _set_dirty_previous_value(attribute_name:, value:)
|
|
14
|
+
@attributes[attribute_name] = ActiveModel::Attribute.from_user(
|
|
15
|
+
attribute_name,
|
|
16
|
+
value,
|
|
17
|
+
ActiveModel::Type::Value.new
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
else
|
|
21
|
+
def _set_dirty_previous_value(attribute_name:, value:)
|
|
22
|
+
set_attribute_was(attribute_name, value)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -2,11 +2,11 @@ module EasyTags
|
|
|
2
2
|
# Handles tag context manipulation
|
|
3
3
|
class TaggableContext
|
|
4
4
|
# @param [String, Symbol] context
|
|
5
|
-
# @param [
|
|
5
|
+
# @param [ActiveRecord::Relation] tags_association
|
|
6
6
|
# @param [Proc] on_change
|
|
7
|
-
def initialize(context:,
|
|
7
|
+
def initialize(context:, tags_association:, on_change:)
|
|
8
8
|
self.context = context
|
|
9
|
-
self.
|
|
9
|
+
self.tags_association = tags_association
|
|
10
10
|
self.on_change = on_change
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -22,7 +22,7 @@ module EasyTags
|
|
|
22
22
|
|
|
23
23
|
# @return [TagList]
|
|
24
24
|
def persisted_tags
|
|
25
|
-
@persisted_tags ||=
|
|
25
|
+
@persisted_tags ||= preloaded_persisted_tags
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# @param [String, Symbol] value
|
|
@@ -47,6 +47,7 @@ module EasyTags
|
|
|
47
47
|
def refresh
|
|
48
48
|
@tags = nil
|
|
49
49
|
@persisted_tags = nil
|
|
50
|
+
tags_association.reset
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
# Add tags to the tag_list. Duplicate or blank tags will be ignored.
|
|
@@ -73,7 +74,7 @@ module EasyTags
|
|
|
73
74
|
|
|
74
75
|
private
|
|
75
76
|
|
|
76
|
-
attr_accessor :context, :
|
|
77
|
+
attr_accessor :context, :tags_association, :on_change
|
|
77
78
|
|
|
78
79
|
def respond_to_missing?(name, _include_private = false)
|
|
79
80
|
tags.respond_to?(name)
|
|
@@ -88,5 +89,9 @@ module EasyTags
|
|
|
88
89
|
def notify_change
|
|
89
90
|
on_change.call(self) if changed?
|
|
90
91
|
end
|
|
92
|
+
|
|
93
|
+
def preloaded_persisted_tags
|
|
94
|
+
TagList.new(tags_association.map(&:name))
|
|
95
|
+
end
|
|
91
96
|
end
|
|
92
97
|
end
|
|
@@ -14,20 +14,12 @@ module EasyTags
|
|
|
14
14
|
inverse_of: :taggable
|
|
15
15
|
)
|
|
16
16
|
|
|
17
|
-
has_many(
|
|
18
|
-
:base_tags,
|
|
19
|
-
through: :taggings,
|
|
20
|
-
source: :tag,
|
|
21
|
-
class_name: '::EasyTags::Tag',
|
|
22
|
-
inverse_of: :tag
|
|
23
|
-
)
|
|
24
|
-
|
|
25
17
|
after_save :_update_taggings, :_refresh_tagging
|
|
26
18
|
after_find :_refresh_tagging
|
|
27
19
|
|
|
28
20
|
# override ActiveRecord::Persistence#reload
|
|
29
21
|
# to refresh tags each time the model instance gets reloaded
|
|
30
|
-
def reload
|
|
22
|
+
def reload(*args)
|
|
31
23
|
_refresh_tagging
|
|
32
24
|
super
|
|
33
25
|
end
|
|
@@ -65,18 +57,12 @@ module EasyTags
|
|
|
65
57
|
end
|
|
66
58
|
end
|
|
67
59
|
|
|
68
|
-
|
|
69
|
-
write_attribute("#{context}_list", taggable_context.tags.to_s)
|
|
70
|
-
set_attribute_was("#{context}_list", taggable_context.persisted_tags.to_s)
|
|
71
|
-
attribute_will_change!("#{context}_list")
|
|
72
|
-
end
|
|
60
|
+
include DirtyMethods
|
|
73
61
|
|
|
74
62
|
def _taggable_context(context)
|
|
75
63
|
_taggable_contexts[context] ||= TaggableContext.new(
|
|
76
64
|
context: context,
|
|
77
|
-
|
|
78
|
-
taggings.joins(:tag).where(context: context).pluck(:name)
|
|
79
|
-
},
|
|
65
|
+
tags_association: public_send("#{context}_tags"),
|
|
80
66
|
on_change: lambda { |tag_context|
|
|
81
67
|
_mark_dirty(context: context, taggable_context: tag_context)
|
|
82
68
|
}
|
data/lib/easy_tags/version.rb
CHANGED
data/lib/easy_tags.rb
CHANGED
|
@@ -5,6 +5,7 @@ require 'active_record'
|
|
|
5
5
|
module EasyTags
|
|
6
6
|
extend ActiveSupport::Autoload
|
|
7
7
|
|
|
8
|
+
autoload :DirtyMethods, 'easy_tags/dirty_methods'
|
|
8
9
|
autoload :Tag, 'easy_tags/tag'
|
|
9
10
|
autoload :TaggableMethods, 'easy_tags/taggable_methods'
|
|
10
11
|
autoload :TaggableContextMethods, 'easy_tags/taggable_context_methods'
|
metadata
CHANGED
|
@@ -1,43 +1,55 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: easy_tags
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Iwo Dziechciarow
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-01-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '5.0'
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '6.1'
|
|
20
23
|
type: :runtime
|
|
21
24
|
prerelease: false
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
26
|
requirements:
|
|
24
|
-
- - "
|
|
27
|
+
- - ">="
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
26
29
|
version: '5.0'
|
|
30
|
+
- - "<"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '6.1'
|
|
27
33
|
- !ruby/object:Gem::Dependency
|
|
28
34
|
name: activesupport
|
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
|
30
36
|
requirements:
|
|
31
|
-
- - "
|
|
37
|
+
- - ">="
|
|
32
38
|
- !ruby/object:Gem::Version
|
|
33
39
|
version: '5.0'
|
|
40
|
+
- - "<"
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '6.1'
|
|
34
43
|
type: :runtime
|
|
35
44
|
prerelease: false
|
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
46
|
requirements:
|
|
38
|
-
- - "
|
|
47
|
+
- - ">="
|
|
39
48
|
- !ruby/object:Gem::Version
|
|
40
49
|
version: '5.0'
|
|
50
|
+
- - "<"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '6.1'
|
|
41
53
|
- !ruby/object:Gem::Dependency
|
|
42
54
|
name: appraisal
|
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,6 +78,20 @@ dependencies:
|
|
|
66
78
|
- - ">="
|
|
67
79
|
- !ruby/object:Gem::Version
|
|
68
80
|
version: '0'
|
|
81
|
+
- !ruby/object:Gem::Dependency
|
|
82
|
+
name: db-query-matchers
|
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
|
84
|
+
requirements:
|
|
85
|
+
- - ">="
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '0'
|
|
88
|
+
type: :development
|
|
89
|
+
prerelease: false
|
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - ">="
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0'
|
|
69
95
|
- !ruby/object:Gem::Dependency
|
|
70
96
|
name: rspec
|
|
71
97
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -126,16 +152,16 @@ dependencies:
|
|
|
126
152
|
name: sqlite3
|
|
127
153
|
requirement: !ruby/object:Gem::Requirement
|
|
128
154
|
requirements:
|
|
129
|
-
- - "
|
|
155
|
+
- - ">="
|
|
130
156
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
157
|
+
version: '0'
|
|
132
158
|
type: :development
|
|
133
159
|
prerelease: false
|
|
134
160
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
161
|
requirements:
|
|
136
|
-
- - "
|
|
162
|
+
- - ">="
|
|
137
163
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
164
|
+
version: '0'
|
|
139
165
|
description: Easy tagging for Rails
|
|
140
166
|
email:
|
|
141
167
|
- iiwo@o2.pl
|
|
@@ -159,10 +185,11 @@ files:
|
|
|
159
185
|
- bin/console
|
|
160
186
|
- bin/setup
|
|
161
187
|
- easy_tags.gemspec
|
|
162
|
-
- gemfiles/activerecord_5.0.gemfile
|
|
163
188
|
- gemfiles/activerecord_5.1.gemfile
|
|
164
189
|
- gemfiles/activerecord_5.2.gemfile
|
|
190
|
+
- gemfiles/activerecord_6.0.gemfile
|
|
165
191
|
- lib/easy_tags.rb
|
|
192
|
+
- lib/easy_tags/dirty_methods.rb
|
|
166
193
|
- lib/easy_tags/generators/default.rb
|
|
167
194
|
- lib/easy_tags/options/callback.rb
|
|
168
195
|
- lib/easy_tags/options/collection.rb
|
|
@@ -186,7 +213,7 @@ metadata:
|
|
|
186
213
|
changelog_uri: https://github.com/iiwo/easy_tags/blob/master/CHANGELOG.md
|
|
187
214
|
source_code_uri: https://github.com/iiwo/easy_tags
|
|
188
215
|
bug_tracker_uri: https://github.com/iiwo/easy_tags/issues
|
|
189
|
-
post_install_message:
|
|
216
|
+
post_install_message:
|
|
190
217
|
rdoc_options: []
|
|
191
218
|
require_paths:
|
|
192
219
|
- lib
|
|
@@ -201,8 +228,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
201
228
|
- !ruby/object:Gem::Version
|
|
202
229
|
version: '0'
|
|
203
230
|
requirements: []
|
|
204
|
-
rubygems_version: 3.
|
|
205
|
-
signing_key:
|
|
231
|
+
rubygems_version: 3.2.9
|
|
232
|
+
signing_key:
|
|
206
233
|
specification_version: 4
|
|
207
234
|
summary: EasyTags allows you to tag a single model on several contexts
|
|
208
235
|
test_files: []
|