acts_as_favoritor 3.0.0 → 4.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 +4 -4
- data/README.md +11 -26
- data/lib/acts_as_favoritor/configuration.rb +5 -2
- data/lib/acts_as_favoritor/favoritable.rb +10 -10
- data/lib/acts_as_favoritor/favorite_scopes.rb +14 -24
- data/lib/acts_as_favoritor/favoritor.rb +24 -45
- data/lib/acts_as_favoritor/favoritor_lib.rb +2 -13
- data/lib/acts_as_favoritor/version.rb +1 -1
- data/lib/generators/templates/initializer.rb +1 -1
- data/lib/generators/templates/migration.rb.erb +9 -3
- data/lib/generators/templates/model.rb +1 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 688cadb90a8c8e5fb799d2973aaffa6345e756456640fdba0c3d9f44715b92c2
|
4
|
+
data.tar.gz: 3b9a838d6fdf2a011494ca5822ca8f54290738d1a81ddb82f36e051f8f3630cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1a3319925be822442579ec4d022b454b52649b5a95fa5949fdd7498420bb38038889136bb39c2da96f5511713a398eaf3a372a578ad4c8b6d1edd9089188ff5
|
7
|
+
data.tar.gz: 52f518e8ab2d8c66c6fdd47f3bc57329745c3cdf28bd1f3ac41b13b3214d4d8ce9bad2549415b3098326437ec2747d90baf99c27411973991adcc82755ac79e2
|
data/README.md
CHANGED
@@ -90,7 +90,7 @@ user = User.find(1)
|
|
90
90
|
user.favorite(book)
|
91
91
|
|
92
92
|
# `user` removes `book` from favorites.
|
93
|
-
user.
|
93
|
+
user.unfavorite(book)
|
94
94
|
|
95
95
|
# Whether `user` has marked `book` as his favorite. Returns `true` or `false`.
|
96
96
|
user.favorited?(book)
|
@@ -110,17 +110,11 @@ user.favorited_by_type('Book')
|
|
110
110
|
# Returns the exact same result as `user.favorited_by_type 'User'`.
|
111
111
|
user.favorited_users
|
112
112
|
|
113
|
-
#
|
114
|
-
user.
|
113
|
+
# Whether `user` has been blocked by `book`. Returns `true` or `false`.
|
114
|
+
user.blocked_by?(book)
|
115
115
|
|
116
|
-
#
|
117
|
-
user.
|
118
|
-
|
119
|
-
# Whether `user` has blocked `book`. Returns `true` or `false`.
|
120
|
-
user.blocked?(book)
|
121
|
-
|
122
|
-
# Returns an array including all blocked Favoritable records.
|
123
|
-
user.blocks
|
116
|
+
# Returns an array including all blocked Favorite records.
|
117
|
+
user.blocked_by
|
124
118
|
```
|
125
119
|
|
126
120
|
These methods take an optional hash parameter of ActiveRecord options (`:limit`, `:order`, etc...)
|
@@ -152,7 +146,7 @@ book.unblock(user)
|
|
152
146
|
book.blocked?(user)
|
153
147
|
|
154
148
|
# Returns an array including all blocked Favoritor records.
|
155
|
-
book.
|
149
|
+
book.blocked
|
156
150
|
```
|
157
151
|
|
158
152
|
These methods take an optional hash parameter of ActiveRecord options (`:limit`, `:order`, etc...)
|
@@ -162,17 +156,11 @@ These methods take an optional hash parameter of ActiveRecord options (`:limit`,
|
|
162
156
|
### `Favorite` model
|
163
157
|
|
164
158
|
```ruby
|
165
|
-
#
|
166
|
-
## Returns all `Favorite` records where `blocked` is `false`.
|
159
|
+
# Returns all `Favorite` records where `blocked` is `false`.
|
167
160
|
Favorite.unblocked
|
168
|
-
## Returns all `Favorite` records where `blocked` is `true`.
|
169
|
-
Favorite.blocked
|
170
|
-
## Returns an ordered array of the latest create `Favorite` records.
|
171
|
-
Favorite.descending
|
172
161
|
|
173
|
-
# Returns all `Favorite` records
|
174
|
-
Favorite.
|
175
|
-
Favorite.recent(1.month.ago)
|
162
|
+
# Returns all `Favorite` records where `blocked` is `true`.
|
163
|
+
Favorite.blocked
|
176
164
|
|
177
165
|
# Returns all favorites of `user`, including those who were blocked.
|
178
166
|
Favorite.for_favoritor(user)
|
@@ -193,10 +181,9 @@ So lets see how this works:
|
|
193
181
|
|
194
182
|
```ruby
|
195
183
|
user.favorite(book, scopes: [:favorite, :watching])
|
196
|
-
user.
|
184
|
+
user.unfavorite(book, scopes: [:watching])
|
197
185
|
second_user = User.find(2)
|
198
186
|
user.favorite(second_user, scopes: [:follow])
|
199
|
-
book.block(user, scopes: [:all]) # applies to all scopes
|
200
187
|
```
|
201
188
|
|
202
189
|
That's simple!
|
@@ -205,7 +192,7 @@ When you call a method which returns something while specifying multiple scopes,
|
|
205
192
|
|
206
193
|
```ruby
|
207
194
|
user.favorited?(book, scopes: [:favorite, :watching]) # => { favorite: true, watching: false }
|
208
|
-
user.favorited?(book, scopes: [:
|
195
|
+
user.favorited?(book, scopes: [:favorite]) # => true
|
209
196
|
```
|
210
197
|
|
211
198
|
`acts_as_favoritor` also provides some handy scopes for you to call on the `Favorite` model:
|
@@ -219,8 +206,6 @@ Favorite.send("#{my_scope}_list")
|
|
219
206
|
Favorite.favorite_list
|
220
207
|
### Returns all `Favorite` records where `scope` is `watching`
|
221
208
|
Favorite.watching_list
|
222
|
-
### Very unnecessary, but `all_list` returns literally all `Favorite` records
|
223
|
-
Favorite.all_list
|
224
209
|
```
|
225
210
|
|
226
211
|
### Caching
|
@@ -11,12 +11,15 @@ module ActsAsFavoritor
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class Configuration
|
14
|
+
DEFAULT_SCOPE = :favorite
|
15
|
+
DEFAULT_CACHE = false
|
16
|
+
|
14
17
|
attr_accessor :default_scope
|
15
18
|
attr_accessor :cache
|
16
19
|
|
17
20
|
def initialize
|
18
|
-
@default_scope =
|
19
|
-
@cache
|
21
|
+
@default_scope = DEFAULT_SCOPE
|
22
|
+
@cache = DEFAULT_CACHE
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
@@ -16,8 +16,8 @@ module ActsAsFavoritor
|
|
16
16
|
has_many :favorited, as: :favoritable, dependent: :destroy,
|
17
17
|
class_name: 'Favorite'
|
18
18
|
|
19
|
+
extend ActsAsFavoritor::FavoritorLib
|
19
20
|
include ActsAsFavoritor::Favoritable::InstanceMethods
|
20
|
-
include ActsAsFavoritor::FavoritorLib
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -45,7 +45,7 @@ module ActsAsFavoritor
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def favoritors(scopes: [ActsAsFavoritor.configuration.default_scope])
|
48
|
-
build_result_for_scopes scopes do |scope|
|
48
|
+
self.class.build_result_for_scopes scopes do |scope|
|
49
49
|
favorited.includes(:favoritor).unblocked.send("#{scope}_list")
|
50
50
|
.map(&:favoritor)
|
51
51
|
end
|
@@ -54,7 +54,7 @@ module ActsAsFavoritor
|
|
54
54
|
def favoritors_by_type(favoritor_type,
|
55
55
|
scopes: [ActsAsFavoritor.configuration
|
56
56
|
.default_scope])
|
57
|
-
build_result_for_scopes scopes do |scope|
|
57
|
+
self.class.build_result_for_scopes scopes do |scope|
|
58
58
|
favorited.unblocked.send("#{scope}_list")
|
59
59
|
.for_favoritor_type(favoritor_type).map(&:favoritor)
|
60
60
|
end
|
@@ -62,7 +62,7 @@ module ActsAsFavoritor
|
|
62
62
|
|
63
63
|
def favorited_by?(favoritor,
|
64
64
|
scopes: [ActsAsFavoritor.configuration.default_scope])
|
65
|
-
build_result_for_scopes scopes do |scope|
|
65
|
+
self.class.build_result_for_scopes scopes do |scope|
|
66
66
|
favorited.unblocked.send("#{scope}_list").for_favoritor(favoritor)
|
67
67
|
.first.present?
|
68
68
|
end
|
@@ -70,8 +70,8 @@ module ActsAsFavoritor
|
|
70
70
|
|
71
71
|
def block(favoritor,
|
72
72
|
scopes: [ActsAsFavoritor.configuration.default_scope])
|
73
|
-
build_result_for_scopes scopes do |scope|
|
74
|
-
get_favorite_for(favoritor, scope)
|
73
|
+
self.class.build_result_for_scopes scopes do |scope|
|
74
|
+
get_favorite_for(favoritor, scope)&.block! || Favorite.create(
|
75
75
|
favoritable: self,
|
76
76
|
favoritor: favoritor,
|
77
77
|
blocked: true,
|
@@ -82,21 +82,21 @@ module ActsAsFavoritor
|
|
82
82
|
|
83
83
|
def unblock(favoritor,
|
84
84
|
scopes: [ActsAsFavoritor.configuration.default_scope])
|
85
|
-
build_result_for_scopes scopes do |scope|
|
85
|
+
self.class.build_result_for_scopes scopes do |scope|
|
86
86
|
get_favorite_for(favoritor, scope)&.update(blocked: false)
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
90
|
def blocked?(favoritor,
|
91
91
|
scopes: [ActsAsFavoritor.configuration.default_scope])
|
92
|
-
build_result_for_scopes scopes do |scope|
|
92
|
+
self.class.build_result_for_scopes scopes do |scope|
|
93
93
|
favorited.blocked.send("#{scope}_list").for_favoritor(favoritor).first
|
94
94
|
.present?
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
-
def
|
99
|
-
build_result_for_scopes scopes do |scope|
|
98
|
+
def blocked(scopes: [ActsAsFavoritor.configuration.default_scope])
|
99
|
+
self.class.build_result_for_scopes scopes do |scope|
|
100
100
|
favorited.includes(:favoritor).blocked.send("#{scope}_list")
|
101
101
|
.map(&:favoritor)
|
102
102
|
end
|
@@ -2,12 +2,11 @@
|
|
2
2
|
|
3
3
|
module ActsAsFavoritor
|
4
4
|
module FavoriteScopes
|
5
|
-
|
6
|
-
|
7
|
-
# e.g. favoritors == favoritors.send('favorite_list')
|
5
|
+
DEFAULT_PARENTS = [ApplicationRecord, ActiveRecord::Base].freeze
|
6
|
+
|
8
7
|
def method_missing(method, *args)
|
9
8
|
if method.to_s[/(.+)_list/]
|
10
|
-
where(scope: $1.singularize)
|
9
|
+
where(scope: $1.singularize.to_sym)
|
11
10
|
else
|
12
11
|
super
|
13
12
|
end
|
@@ -17,11 +16,6 @@ module ActsAsFavoritor
|
|
17
16
|
super || method.to_s[/(.+)_list/]
|
18
17
|
end
|
19
18
|
|
20
|
-
def all_list
|
21
|
-
all
|
22
|
-
end
|
23
|
-
|
24
|
-
# returns favorite records where favoritor is the record passed in.
|
25
19
|
def for_favoritor(favoritor)
|
26
20
|
where(
|
27
21
|
favoritor_id: favoritor.id,
|
@@ -29,7 +23,6 @@ module ActsAsFavoritor
|
|
29
23
|
)
|
30
24
|
end
|
31
25
|
|
32
|
-
# returns favorite records where favoritable is the record passed in.
|
33
26
|
def for_favoritable(favoritable)
|
34
27
|
where(
|
35
28
|
favoritable_id: favoritable.id,
|
@@ -37,34 +30,31 @@ module ActsAsFavoritor
|
|
37
30
|
)
|
38
31
|
end
|
39
32
|
|
40
|
-
# returns favorite records where favoritor_type is the record passed in.
|
41
33
|
def for_favoritor_type(favoritor_type)
|
42
34
|
where(favoritor_type: favoritor_type)
|
43
35
|
end
|
44
36
|
|
45
|
-
# returns favorite records where favoritable_type is the record passed in.
|
46
37
|
def for_favoritable_type(favoritable_type)
|
47
38
|
where(favoritable_type: favoritable_type)
|
48
39
|
end
|
49
40
|
|
50
|
-
# returns favorite records from past 2 weeks with default parameter.
|
51
|
-
def recent(from)
|
52
|
-
where('created_at > ?', (from || 2.weeks.ago).to_s(:db))
|
53
|
-
end
|
54
|
-
|
55
|
-
# returns favorite records in descending order.
|
56
|
-
def descending
|
57
|
-
order('favorites.created_at desc')
|
58
|
-
end
|
59
|
-
|
60
|
-
# returns unblocked favorite records.
|
61
41
|
def unblocked
|
62
42
|
where(blocked: false)
|
63
43
|
end
|
64
44
|
|
65
|
-
# returns blocked favorite records.
|
66
45
|
def blocked
|
67
46
|
where(blocked: true)
|
68
47
|
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def parent_class_name(object)
|
52
|
+
if DEFAULT_PARENTS.include?(object.class.superclass) ||
|
53
|
+
!object.class.respond_to?(:base_class)
|
54
|
+
return object.class.name
|
55
|
+
end
|
56
|
+
|
57
|
+
object.class.base_class.name
|
58
|
+
end
|
69
59
|
end
|
70
60
|
end
|
@@ -15,8 +15,8 @@ module ActsAsFavoritor
|
|
15
15
|
|
16
16
|
has_many :favorites, as: :favoritor, dependent: :destroy
|
17
17
|
|
18
|
+
extend ActsAsFavoritor::FavoritorLib
|
18
19
|
include ActsAsFavoritor::Favoritor::InstanceMethods
|
19
|
-
include ActsAsFavoritor::FavoritorLib
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -46,45 +46,43 @@ module ActsAsFavoritor
|
|
46
46
|
|
47
47
|
def favorite(favoritable,
|
48
48
|
scopes: [ActsAsFavoritor.configuration.default_scope])
|
49
|
-
build_result_for_scopes scopes do |scope|
|
50
|
-
return if self == favoritable
|
51
|
-
return if scope == :all
|
49
|
+
self.class.build_result_for_scopes scopes do |scope|
|
50
|
+
return nil if self == favoritable
|
52
51
|
|
53
52
|
inc_cache if ActsAsFavoritor.configuration.cache
|
54
53
|
|
55
|
-
favorites.
|
56
|
-
|
57
|
-
favoritable_type: parent_class_name(favoritable),
|
58
|
-
scope: scope
|
59
|
-
).first_or_create!
|
54
|
+
favorites.for_favoritable(favoritable).send("#{scope}_list")
|
55
|
+
.first_or_create!
|
60
56
|
end
|
61
57
|
end
|
62
58
|
|
63
|
-
def
|
64
|
-
|
65
|
-
build_result_for_scopes scopes do |scope|
|
66
|
-
|
59
|
+
def unfavorite(favoritable,
|
60
|
+
scopes: [ActsAsFavoritor.configuration.default_scope])
|
61
|
+
self.class.build_result_for_scopes scopes do |scope|
|
62
|
+
favorite_record = get_favorite(favoritable, scope)
|
63
|
+
return nil unless favorite_record.present?
|
67
64
|
|
68
|
-
|
65
|
+
dec_cache if ActsAsFavoritor.configuration.cache
|
66
|
+
favorite_record.destroy!
|
69
67
|
end
|
70
68
|
end
|
71
69
|
|
72
70
|
def favorited?(favoritable,
|
73
71
|
scopes: [ActsAsFavoritor.configuration.default_scope])
|
74
|
-
build_result_for_scopes scopes do |scope|
|
72
|
+
self.class.build_result_for_scopes scopes do |scope|
|
75
73
|
Favorite.unblocked.send("#{scope}_list").for_favoritor(self)
|
76
74
|
.for_favoritable(favoritable).size.positive?
|
77
75
|
end
|
78
76
|
end
|
79
77
|
|
80
78
|
def all_favorites(scopes: [ActsAsFavoritor.configuration.default_scope])
|
81
|
-
build_result_for_scopes scopes do |scope|
|
79
|
+
self.class.build_result_for_scopes scopes do |scope|
|
82
80
|
favorites.unblocked.send("#{scope}_list")
|
83
81
|
end
|
84
82
|
end
|
85
83
|
|
86
84
|
def all_favorited(scopes: [ActsAsFavoritor.configuration.default_scope])
|
87
|
-
build_result_for_scopes scopes do |scope|
|
85
|
+
self.class.build_result_for_scopes scopes do |scope|
|
88
86
|
favorites.unblocked.send("#{scope}_list").includes(:favoritable)
|
89
87
|
.map(&:favoritable)
|
90
88
|
end
|
@@ -93,8 +91,8 @@ module ActsAsFavoritor
|
|
93
91
|
def favorites_by_type(favoritable_type,
|
94
92
|
scopes: [ActsAsFavoritor.configuration
|
95
93
|
.default_scope])
|
96
|
-
build_result_for_scopes scopes do |scope|
|
97
|
-
favorites.unblocked.send("#{scope}_list")
|
94
|
+
self.class.build_result_for_scopes scopes do |scope|
|
95
|
+
favorites.unblocked.send("#{scope}_list")
|
98
96
|
.for_favoritable_type(favoritable_type)
|
99
97
|
end
|
100
98
|
end
|
@@ -102,41 +100,22 @@ module ActsAsFavoritor
|
|
102
100
|
def favorited_by_type(favoritable_type,
|
103
101
|
scopes: [ActsAsFavoritor.configuration
|
104
102
|
.default_scope])
|
105
|
-
build_result_for_scopes scopes do |scope|
|
106
|
-
favorites.unblocked.send("#{scope}_list")
|
103
|
+
self.class.build_result_for_scopes scopes do |scope|
|
104
|
+
favorites.unblocked.send("#{scope}_list").includes(:favoritable)
|
107
105
|
.for_favoritable_type(favoritable_type).map(&:favoritable)
|
108
106
|
end
|
109
107
|
end
|
110
108
|
|
111
|
-
def
|
112
|
-
|
113
|
-
build_result_for_scopes scopes do |scope|
|
114
|
-
get_favorite(favoritable, scope).block! || Favorite.create(
|
115
|
-
favoritable: favoritable,
|
116
|
-
favoritor: self,
|
117
|
-
blocked: true,
|
118
|
-
scope: scope
|
119
|
-
)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def unblock(favoritable,
|
124
|
-
scopes: [ActsAsFavoritor.configuration.default_scope])
|
125
|
-
build_result_for_scopes scopes do |scope|
|
126
|
-
get_favorite(favoritable, scope)&.update(blocked: false)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
def blocked?(favoritable,
|
131
|
-
scopes: [ActsAsFavoritor.configuration.default_scope])
|
132
|
-
build_result_for_scopes scopes do |scope|
|
109
|
+
def blocked_by?(favoritable,
|
110
|
+
scopes: [ActsAsFavoritor.configuration.default_scope])
|
111
|
+
self.class.build_result_for_scopes scopes do |scope|
|
133
112
|
Favorite.blocked.send("#{scope}_list").for_favoritor(self)
|
134
113
|
.for_favoritable(favoritable).size.positive?
|
135
114
|
end
|
136
115
|
end
|
137
116
|
|
138
|
-
def
|
139
|
-
build_result_for_scopes scopes do |scope|
|
117
|
+
def blocked_by(scopes: [ActsAsFavoritor.configuration.default_scope])
|
118
|
+
self.class.build_result_for_scopes scopes do |scope|
|
140
119
|
favorites.includes(:favoritable).blocked.send("#{scope}_list")
|
141
120
|
.map(&:favoritable)
|
142
121
|
end
|
@@ -2,19 +2,6 @@
|
|
2
2
|
|
3
3
|
module ActsAsFavoritor
|
4
4
|
module FavoritorLib
|
5
|
-
private
|
6
|
-
|
7
|
-
DEFAULT_PARENTS = [ApplicationRecord, ActiveRecord::Base].freeze
|
8
|
-
|
9
|
-
# Retrieves the parent class name if using STI.
|
10
|
-
def parent_class_name(obj)
|
11
|
-
unless DEFAULT_PARENTS.include? obj.class.superclass
|
12
|
-
return obj.class.base_class.name
|
13
|
-
end
|
14
|
-
|
15
|
-
obj.class.name
|
16
|
-
end
|
17
|
-
|
18
5
|
def build_result_for_scopes(scopes)
|
19
6
|
return if scopes.empty?
|
20
7
|
|
@@ -26,6 +13,8 @@ module ActsAsFavoritor
|
|
26
13
|
result
|
27
14
|
end
|
28
15
|
|
16
|
+
private
|
17
|
+
|
29
18
|
def sanitized_scopes(scopes)
|
30
19
|
scopes.map(&:to_sym)
|
31
20
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
ActsAsFavoritor.configure do |config|
|
4
4
|
# Specify your default scope. Learn more about scopes here: https://github.com/jonhue/acts_as_favoritor#scopes
|
5
|
-
# config.default_scope =
|
5
|
+
# config.default_scope = :favorite
|
6
6
|
|
7
7
|
# Enable caching. Learn more about caching here: https://github.com/jonhue/acts_as_favoritor#caching
|
8
8
|
# config.cache = false
|
@@ -5,13 +5,19 @@ class ActsAsFavoritorMigration < ActiveRecord::Migration<%= migration_version %>
|
|
5
5
|
create_table :favorites, force: true do |t|
|
6
6
|
t.references :favoritable, polymorphic: true, null: false
|
7
7
|
t.references :favoritor, polymorphic: true, null: false
|
8
|
-
t.string :scope, default: ActsAsFavoritor.configuration.default_scope,
|
8
|
+
t.string :scope, default: ActsAsFavoritor.configuration.default_scope,
|
9
|
+
null: false,
|
10
|
+
index: true
|
9
11
|
t.boolean :blocked, default: false, null: false, index: true
|
10
12
|
t.timestamps
|
11
13
|
end
|
12
14
|
|
13
|
-
add_index :favorites,
|
14
|
-
|
15
|
+
add_index :favorites,
|
16
|
+
['favoritor_id', 'favoritor_type'],
|
17
|
+
name: 'fk_favorites'
|
18
|
+
add_index :favorites,
|
19
|
+
['favoritable_id', 'favoritable_type'],
|
20
|
+
name: 'fk_favoritables'
|
15
21
|
end
|
16
22
|
|
17
23
|
def self.down
|
@@ -1,13 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Favorite < ApplicationRecord
|
4
|
-
extend ActsAsFavoritor::FavoritorLib
|
5
4
|
extend ActsAsFavoritor::FavoriteScopes
|
6
5
|
|
7
6
|
belongs_to :favoritable, polymorphic: true
|
8
7
|
belongs_to :favoritor, polymorphic: true
|
9
8
|
|
10
9
|
def block!
|
11
|
-
update(blocked: true)
|
10
|
+
update!(blocked: true)
|
12
11
|
end
|
13
12
|
end
|
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:
|
4
|
+
version: 4.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: 2019-05-
|
11
|
+
date: 2019-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|