acts_as_favoritor 5.0.1 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
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