acts_as_favoritor 5.0.1 → 6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2554cf505e5a47eb5f24bc1de95fb6287d397259cc70685f4905d99be6164e72
4
- data.tar.gz: ac5749692ac44627c97dfb2797834671f7d3cc368d32e63aac5d2d9a94e4b6b6
3
+ metadata.gz: 720e4ea66b88a043a1bcd46c702dc8aa445b20fe60517e978791d8c4bcbc90af
4
+ data.tar.gz: beb07b7607a369e302816b9e39b9dae5ec8ca488ff717ff3bdb3e3b96fea1227
5
5
  SHA512:
6
- metadata.gz: 544dda8f78ced970192a0d523f8c7b4804be135d33afe8635a15eaef3263d5413793d54ca5342fa12636d4a1c893b4d52bb1c160180bb72386c4a144a3280a6b
7
- data.tar.gz: 28fd936df2e6dc96f6b5a2449fc654f40b4307a7d4bed58e5f648652e283af46d3547f1e3ac2245b928400d1391186fae291ff4fc1756438a14afb8c03858abe
6
+ metadata.gz: f1dc068b8f318a7141d2d695693245aef8aaf22ffecc2cb46484308fb9c0563cd1576d855113f336871cb4a6e7a20adf867c5b0629f7a04042fbd5862615a746
7
+ data.tar.gz: b736fbaa9e300ac44c9f83cbe99f780e8cfabcde661a9baf7bbef8a7fa88a28c61a022e8140d005269315b84524d8a69a549fa699da3a513221511613da28800
data/README.md CHANGED
@@ -4,6 +4,8 @@ acts_as_favoritor is a Rubygem to allow any ActiveRecord model to associate any
4
4
 
5
5
  You are able to differentiate followers, favorites, watchers, votes and whatever else you can imagine through a single relationship. This is accomplished by a double polymorphic relationship on the Favorite model. There is also built in support for blocking/un-blocking favorite records as well as caching.
6
6
 
7
+ [This Medium article](https://medium.com/swlh/add-dynamic-like-dislike-buttons-to-your-rails-6-application-ccce8a234c43) gives a good introduction to this gem.
8
+
7
9
  ## Installation
8
10
 
9
11
  You can add acts_as_favoritor to your `Gemfile` with:
@@ -145,7 +147,7 @@ Using scopes with `acts_as_favoritor` enables you to Follow, Watch, Favorite, [.
145
147
 
146
148
  By default all of your favorites are scoped to `'favorite'`.
147
149
 
148
- You can create new scopes on the fly. Every single method takes `scope`/`scopes` as an option which expexts a symbol or an array of symbols containing your scopes.
150
+ You can create new scopes on the fly. Every single method takes `scope`/`scopes` as an option which expects a symbol or an array of symbols containing your scopes.
149
151
 
150
152
  So lets see how this works:
151
153
 
@@ -222,6 +224,8 @@ book.favoritable_favorite_cache # => 1
222
224
 
223
225
  **Note:** These methods are available for every scope you are using.
224
226
 
227
+ The total counts all favorites that were recorded, while the score factors in favorites that were removed. In most use cases the score is the most useful.
228
+
225
229
  ## Configuration
226
230
 
227
231
  You can configure acts_as_favoritor by passing a block to `configure`. This can be done in `config/initializers/acts_as_favoritor.rb`:
@@ -262,7 +266,7 @@ We warmly welcome everyone who is intersted in contributing. Please reference ou
262
266
 
263
267
  ## Releases
264
268
 
265
- [Here](https://github.com/jonhue/acts_as_favoritor/releases) you can find details on all past releases. Unreleased breaking changes that are on the current master can be found [here](CHANGELOG.md).
269
+ [Here](https://github.com/jonhue/acts_as_favoritor/releases) you can find details on all past releases. Unreleased breaking changes that are on the current `main` can be found [here](CHANGELOG.md).
266
270
 
267
271
  acts_as_favoritor follows Semantic Versioning 2.0 as defined at http://semver.org. Reference our [security policy](SECURITY.md).
268
272
 
@@ -271,6 +275,6 @@ acts_as_favoritor follows Semantic Versioning 2.0 as defined at http://semver.or
271
275
  1. Review breaking changes and deprecations in `CHANGELOG.md`.
272
276
  1. Change the gem version in `lib/acts_as_favoritor/version.rb`.
273
277
  1. Reset `CHANGELOG.md`.
274
- 1. Create a pull request to merge the changes into `master`.
275
- 1. After the pull request was merged, create a new release listing the breaking changes and commits on `master` since the last release.
278
+ 1. Create a pull request to merge the changes into `main`.
279
+ 1. After the pull request was merged, create a new release listing the breaking changes and commits on `main` since the last release.
276
280
  2. The release workflow will publish the gem to RubyGems.
@@ -38,13 +38,11 @@ module ActsAsFavoritor
38
38
  end
39
39
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
40
40
 
41
- # rubocop:disable Style/OptionalBooleanParameter
42
41
  def respond_to_missing?(method, include_private = false)
43
42
  super || method.to_s[/(.+)_favoritors/] ||
44
43
  method.to_s[/favoritable_(.+)_score/] ||
45
44
  method.to_s[/favoritable_(.+)_total/]
46
45
  end
47
- # rubocop:enable Style/OptionalBooleanParameter
48
46
 
49
47
  def favoritors(scope: ActsAsFavoritor.configuration.default_scope,
50
48
  scopes: nil)
@@ -12,11 +12,9 @@ module ActsAsFavoritor
12
12
  end
13
13
  end
14
14
 
15
- # rubocop:disable Style/OptionalBooleanParameter
16
15
  def respond_to_missing?(method, include_private = false)
17
16
  super || method.to_s[/(.+)_list/]
18
17
  end
19
- # rubocop:enable Style/OptionalBooleanParameter
20
18
 
21
19
  def for_favoritor(favoritor)
22
20
  where(
@@ -38,13 +38,11 @@ module ActsAsFavoritor
38
38
  end
39
39
  # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
40
40
 
41
- # rubocop:disable Style/OptionalBooleanParameter
42
41
  def respond_to_missing?(method, include_private = false)
43
42
  super || method.to_s[/favorited_(.+)/] ||
44
43
  method.to_s[/favoritor_(.+)_score/] ||
45
44
  method.to_s[/favoritor_(.+)_total/]
46
45
  end
47
- # rubocop:enable Style/OptionalBooleanParameter
48
46
 
49
47
  def favorite(favoritable,
50
48
  scope: ActsAsFavoritor.configuration.default_scope,
@@ -52,10 +50,11 @@ module ActsAsFavoritor
52
50
  self.class.build_result_for_scopes(scopes || scope) do |s|
53
51
  return nil if self == favoritable
54
52
 
55
- inc_cache(favoritable, s) if ActsAsFavoritor.configuration.cache
56
-
57
53
  favorites.for_favoritable(favoritable).send("#{s}_list")
58
- .first_or_create!
54
+ .first_or_create! do |new_record|
55
+ inc_cache(favoritable, s) if ActsAsFavoritor.configuration.cache
56
+ new_record
57
+ end
59
58
  end
60
59
  end
61
60
 
@@ -64,10 +63,11 @@ module ActsAsFavoritor
64
63
  scopes: nil)
65
64
  self.class.build_result_for_scopes(scopes || scope) do |s|
66
65
  favorite_record = get_favorite(favoritable, s)
67
- return nil unless favorite_record.present?
66
+ return nil if favorite_record.blank?
68
67
 
69
- dec_cache(favoritable, s) if ActsAsFavoritor.configuration.cache
70
- favorite_record.destroy!
68
+ result = favorite_record.destroy!
69
+ dec_cache(favoritable, s) if ActsAsFavoritor.configuration.cache && result.destroyed?
70
+ result
71
71
  end
72
72
  end
73
73
 
@@ -2,11 +2,11 @@
2
2
 
3
3
  module ActsAsFavoritor
4
4
  module FavoritorLib
5
- def build_result_for_scopes(scopes)
5
+ def build_result_for_scopes(scopes, &block)
6
6
  return yield(scopes) unless scopes.is_a?(Array)
7
7
  return if scopes.empty?
8
8
 
9
- sanitized_scopes(scopes).map { |scope| [scope, yield(scope)] }.to_h
9
+ sanitized_scopes(scopes).index_with(&block)
10
10
  end
11
11
 
12
12
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActsAsFavoritor
4
- VERSION = '5.0.1'
4
+ VERSION = '6.0.0'
5
5
  end
@@ -18,6 +18,10 @@ class ActsAsFavoritorMigration < ActiveRecord::Migration<%= migration_version %>
18
18
  add_index :favorites,
19
19
  ['favoritable_id', 'favoritable_type'],
20
20
  name: 'fk_favoritables'
21
+ add_index :favorites,
22
+ ['favoritable_type', 'favoritable_id', 'favoritor_type',
23
+ 'favoritor_id', 'scope'],
24
+ name: 'uniq_favorites__and_favoritables', unique: true
21
25
  end
22
26
 
23
27
  def self.down
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_favoritor
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Hübotter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-06 00:00:00.000000000 Z
11
+ date: 2022-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop-rspec
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +142,7 @@ description: acts_as_favoritor is a Rubygem to allow any ActiveRecord model to a
128
142
  and whatever else you can imagine through a single relationship. This is accomplished
129
143
  by a double polymorphic relationship on the Favorite model. There is also built
130
144
  in support for blocking/un-blocking favorite records as well as caching.
131
- email: me@jonhue.me
145
+ email: jonas.huebotter@gmail.com
132
146
  executables: []
133
147
  extensions: []
134
148
  extra_rdoc_files: []
@@ -159,14 +173,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
173
  requirements:
160
174
  - - ">="
161
175
  - !ruby/object:Gem::Version
162
- version: '2.5'
176
+ version: '2.7'
163
177
  required_rubygems_version: !ruby/object:Gem::Requirement
164
178
  requirements:
165
179
  - - ">="
166
180
  - !ruby/object:Gem::Version
167
181
  version: '0'
168
182
  requirements: []
169
- rubygems_version: 3.1.4
183
+ rubygems_version: 3.3.7
170
184
  signing_key:
171
185
  specification_version: 4
172
186
  summary: A Rubygem to add Favorite, Follow, Vote, etc. functionality to ActiveRecord