acts_as_favoritor 1.1.0 → 1.1.2
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/CHANGELOG.md +39 -0
- data/README.md +27 -7
- data/acts_as_favoritor.gemspec +1 -1
- data/lib/acts_as_favoritor.rb +2 -0
- data/lib/acts_as_favoritor/configuration.rb +25 -0
- data/lib/acts_as_favoritor/favorite_scopes.rb +11 -6
- data/lib/acts_as_favoritor/favoritor_lib.rb +1 -1
- data/lib/acts_as_favoritor/version.rb +1 -1
- data/lib/generators/acts_as_favoritor_generator.rb +8 -3
- data/lib/generators/templates/acts_as_favoritor.yml.erb +6 -0
- data/lib/generators/templates/migration.rb.erb +2 -2
- data/test/schema.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 76ca5a001f34e1c116394acdf0b14ee10e7af8eb
|
|
4
|
+
data.tar.gz: b3fb2d0f0eea52611bb492f7c2c547971dbf24b5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ee98332d5dcbad109d348d4a6ef86fecc6709b8f5d5a497da404adecdc78404f91a389c9e4a60592fb8c542210503ed43471362a39601794ffd8475527f67256
|
|
7
|
+
data.tar.gz: 262e4a3890b63782f77b302b3a792bf4bc311199b6fabaacdde5f826fb21a283cb620cb3e840fa17192f8e2f240eb86c02f2c7ab9f845a7e4dc615d73d39072b
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
### unreleased
|
|
4
|
+
|
|
5
|
+
* nothing yet
|
|
6
|
+
|
|
7
|
+
### 1.1.2 - 2017-08-23
|
|
8
|
+
|
|
9
|
+
* bugfixes
|
|
10
|
+
* migration hotfix
|
|
11
|
+
|
|
12
|
+
### 1.1.1 - 2017-08-23
|
|
13
|
+
|
|
14
|
+
* notes
|
|
15
|
+
* default scope changed from `favorites` to `favorite`
|
|
16
|
+
* features
|
|
17
|
+
* added configuration
|
|
18
|
+
* enhancements
|
|
19
|
+
* add `scope` generator option
|
|
20
|
+
* add `skip_configuration` generator option
|
|
21
|
+
* index database columns
|
|
22
|
+
* minor bugfixes
|
|
23
|
+
|
|
24
|
+
### 1.1.0 - 2017-08-23
|
|
25
|
+
|
|
26
|
+
* features
|
|
27
|
+
* add scope functionality
|
|
28
|
+
|
|
29
|
+
### 1.0.2 - 2017-08-22
|
|
30
|
+
|
|
31
|
+
* enhancements
|
|
32
|
+
|
|
33
|
+
### 1.0.1 - 2017-08-22
|
|
34
|
+
|
|
35
|
+
* bug fixes
|
|
36
|
+
|
|
37
|
+
### 1.0.0 - 2017-08-22
|
|
38
|
+
|
|
39
|
+
* initial release
|
data/README.md
CHANGED
|
@@ -17,6 +17,7 @@ You are able to differentiate followers, favorites, watchers and whatever else y
|
|
|
17
17
|
* [`acts_as_favoritable` methods](#acts_as_favoritable-methods)
|
|
18
18
|
* [`Favorite` model](#favorite-model)
|
|
19
19
|
* [Scopes](#scopes)
|
|
20
|
+
* [Configuration](#configuration)
|
|
20
21
|
* [Testing](#testing)
|
|
21
22
|
* [Test Coverage](#test-coverage)
|
|
22
23
|
* [Contributing](#contributing)
|
|
@@ -51,12 +52,17 @@ Now run the generator:
|
|
|
51
52
|
|
|
52
53
|
$ rails g acts_as_favoritor
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
You can set your default scope by passing `--scope custom_scope`. Learn more about scopes [here](#scopes)
|
|
56
|
+
You can skip the creation of a configuration file by passing `--skip_configuration`. Learn more about configuring `acts_as_favoritor` [here](#configuration)
|
|
55
57
|
|
|
56
|
-
|
|
58
|
+
To wrap things up, migrate the changes into your database:
|
|
59
|
+
|
|
60
|
+
$ rails db:migrate
|
|
57
61
|
|
|
58
62
|
**Note:** Use `rake db:migrate` instead if you run Rails < 5.
|
|
59
63
|
|
|
64
|
+
This will create a Favorite model as well as a migration file.
|
|
65
|
+
|
|
60
66
|
## Usage
|
|
61
67
|
|
|
62
68
|
### Setup
|
|
@@ -198,16 +204,16 @@ Favorite.for_favoritable book
|
|
|
198
204
|
|
|
199
205
|
### Scopes
|
|
200
206
|
|
|
201
|
-
Using scopes with `acts_as_favoritor` enables you to Follow, Watch, Favorite, [...] between any of your models. This way you can separate distinct functionalities in your app between user states. For example: A user sees all his favorited books in a dashboard (`'
|
|
207
|
+
Using scopes with `acts_as_favoritor` enables you to Follow, Watch, Favorite, [...] between any of your models. This way you can separate distinct functionalities in your app between user states. For example: A user sees all his favorited books in a dashboard (`'favorite'`), but he only receives notifications for those, he is watching (`'watch'`). Just like YouTube does it.
|
|
202
208
|
|
|
203
|
-
By default all of your favorites are scoped to `'
|
|
209
|
+
By default all of your favorites are scoped to `'favorite'`.
|
|
204
210
|
|
|
205
211
|
You can create new scopes on the fly. Every single method takes `scope` as an option which expexts an array containing your scopes as strings.
|
|
206
212
|
|
|
207
213
|
So lets see how this works:
|
|
208
214
|
|
|
209
215
|
```ruby
|
|
210
|
-
user.favorite book, scope: [:
|
|
216
|
+
user.favorite book, scope: [:favorite, :watching]
|
|
211
217
|
user.remove_favorite book, scope: [:watching]
|
|
212
218
|
book.block user, scope: [:all] # applies to all scopes
|
|
213
219
|
```
|
|
@@ -217,7 +223,7 @@ That's simple!
|
|
|
217
223
|
When you call a method which returns something while specifying multiple scopes, the method returns the results in a hash with the scopes as keys:
|
|
218
224
|
|
|
219
225
|
```ruby
|
|
220
|
-
user.favorited? book, scope: [:
|
|
226
|
+
user.favorited? book, scope: [:favorite, :watching] # => { favorite: true, watching: false }
|
|
221
227
|
user.favorited? book, scope: [:all] # => true
|
|
222
228
|
```
|
|
223
229
|
|
|
@@ -229,7 +235,7 @@ Favorite.send(my_scope + '_list')
|
|
|
229
235
|
|
|
230
236
|
## Examples
|
|
231
237
|
### Returns all `Favorite` records where `scope` is `favorites`
|
|
232
|
-
Favorite.
|
|
238
|
+
Favorite.favorite_list
|
|
233
239
|
### Returns all `Favorite` records where `scope` is `watching`
|
|
234
240
|
Favorite.watching_list
|
|
235
241
|
### Very unnecessary, but `all_list` returns literally all `Favorite` records
|
|
@@ -238,6 +244,20 @@ Favorite.all_list
|
|
|
238
244
|
|
|
239
245
|
---
|
|
240
246
|
|
|
247
|
+
## Configuration
|
|
248
|
+
|
|
249
|
+
The installer creates a yaml config file for you (`config/acts_as_favoritor.yml`). Inside of that file you are able to adopt this gem to your specific needs.
|
|
250
|
+
|
|
251
|
+
When you delete this file, all settings will rollback to their defaults. You can prevent the creation of this configuration file when running the generator by passing the option `--skip_configuration`.
|
|
252
|
+
|
|
253
|
+
Currently supported Settings:
|
|
254
|
+
|
|
255
|
+
**default_scope:** Specify your default scope. Learn more about scopes here: https://github.com/slooob/acts_as_favoritor#scopes
|
|
256
|
+
|
|
257
|
+
If you have an idea for a new setting, propose it by creating a new [issue](https://github.com/slooob/acts_as_favoritor/issues).
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
241
261
|
## Testing
|
|
242
262
|
|
|
243
263
|
Tests are written with Shoulda on top of `Test::Unit` with Factory Girl being used instead of fixtures. Tests are run using rake.
|
data/acts_as_favoritor.gemspec
CHANGED
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
|
|
|
8
8
|
gem.authors = ['Jonas Hübotter']
|
|
9
9
|
gem.email = ['developer@slooob.com']
|
|
10
10
|
gem.homepage = 'https://github.com/slooob/acts_as_favoritor'
|
|
11
|
-
gem.summary = 'A Rubygem to add Favorite functionality
|
|
11
|
+
gem.summary = 'A Rubygem to add Favorite, Follow, etc. functionality to ActiveRecord models'
|
|
12
12
|
gem.description = 'acts_as_favoritor is a Rubygem to allow any ActiveRecord model to favorite any other model. This is accomplished through a double polymorphic relationship on the Favorite model. There is also built in support for blocking/un-blocking favorite records.'
|
|
13
13
|
gem.license = 'MIT'
|
|
14
14
|
|
data/lib/acts_as_favoritor.rb
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module ActsAsFavoritor
|
|
2
|
+
|
|
3
|
+
def self.default_scope
|
|
4
|
+
config = get_config
|
|
5
|
+
if config&.key :default_scope
|
|
6
|
+
config[:default_scope]
|
|
7
|
+
else
|
|
8
|
+
'favorite'
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def self.get_config
|
|
17
|
+
require 'yaml'
|
|
18
|
+
|
|
19
|
+
begin
|
|
20
|
+
YAML.load_file 'config/acts_as_favoritor.yml'
|
|
21
|
+
rescue Exception
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
module ActsAsFavoritor #:nodoc:
|
|
2
2
|
module FavoriteScopes
|
|
3
3
|
|
|
4
|
-
# send(scope + '_list') - returns favorite records of scope
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
# Allows magic names on send(scope + '_list') - returns favorite records of certain scope
|
|
5
|
+
# e.g. favoritors == favoritors.send('favorite_list')
|
|
6
|
+
def method_missing m, *args
|
|
7
|
+
if m.to_s[/(.+)_list/]
|
|
8
|
+
where scope: $1.singularize.classify
|
|
9
|
+
else
|
|
10
|
+
super
|
|
8
11
|
end
|
|
9
12
|
end
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
|
|
14
|
+
def respond_to? m, include_private = false
|
|
15
|
+
super || m.to_s[/(.+)_list/]
|
|
12
16
|
end
|
|
17
|
+
|
|
13
18
|
def all_list
|
|
14
19
|
all
|
|
15
20
|
end
|
|
@@ -37,7 +37,7 @@ module ActsAsFavoritor
|
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def validate_scopes method, options = {}
|
|
40
|
-
options[:scope] = options[:scope] ||
|
|
40
|
+
options[:scope] = options[:scope] || ActsAsFavoritor.default_scope
|
|
41
41
|
if options[:scope].size > 1
|
|
42
42
|
options[:multiple_scopes] = true
|
|
43
43
|
else
|
|
@@ -5,9 +5,10 @@ class ActsAsFavoritorGenerator < Rails::Generators::Base
|
|
|
5
5
|
|
|
6
6
|
include Rails::Generators::Migration
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
source_root File.join File.dirname(__FILE__), 'templates'
|
|
9
|
+
desc 'Install acts_as_favoritor'
|
|
10
|
+
class_option :scope, desc: 'Specify your default scope. Learn more about scopes here: https://github.com/slooob/acts_as_favoritor#scopes', type: :string, default: 'favorite', aliases: '-s'
|
|
11
|
+
class_option :skip_configuration, desc: 'Skip the creation of the configuration file. Learn more about configuring acts_as_favoritor here: https://github.com/slooob/acts_as_favoritor#configuration', type: :boolean, default: false
|
|
11
12
|
|
|
12
13
|
def self.next_migration_number dirname
|
|
13
14
|
if ActiveRecord::Base.timestamped_migrations
|
|
@@ -25,6 +26,10 @@ class ActsAsFavoritorGenerator < Rails::Generators::Base
|
|
|
25
26
|
template 'model.rb', 'app/models/favorite.rb'
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
def create_configuration
|
|
30
|
+
template 'acts_as_favoritor.yml.erb', 'config/acts_as_favoritor.yml' unless options[:skip_configuration]
|
|
31
|
+
end
|
|
32
|
+
|
|
28
33
|
def show_readme
|
|
29
34
|
readme 'README.md'
|
|
30
35
|
end
|
|
@@ -3,8 +3,8 @@ class ActsAsFavoritorMigration < ActiveRecord::Migration<% if Rails::VERSION::MA
|
|
|
3
3
|
create_table :favorites, force: true do |t|
|
|
4
4
|
t.references :favoritable, polymorphic: true, null: false
|
|
5
5
|
t.references :favoritor, polymorphic: true, null: false
|
|
6
|
-
t.string :scope, default:
|
|
7
|
-
t.boolean :blocked, default: false, null: false
|
|
6
|
+
t.string :scope, default: ActsAsFavoritor.default_scope, null: false, index: true
|
|
7
|
+
t.boolean :blocked, default: false, null: false, index: true
|
|
8
8
|
t.timestamps
|
|
9
9
|
end
|
|
10
10
|
|
data/test/schema.rb
CHANGED
|
@@ -5,7 +5,7 @@ ActiveRecord::Schema.define version: 0 do
|
|
|
5
5
|
t.string 'favoritable_type', null: false
|
|
6
6
|
t.integer 'favoritor_id', null: false
|
|
7
7
|
t.string 'favoritor_type', null: false
|
|
8
|
-
t.string :scope, default:
|
|
8
|
+
t.string :scope, default: ActsAsFavoritor.default_scope, null: false
|
|
9
9
|
t.boolean 'blocked', default: false, null: false
|
|
10
10
|
t.datetime 'created_at'
|
|
11
11
|
t.datetime 'updated_at'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: acts_as_favoritor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jonas Hübotter
|
|
@@ -122,6 +122,7 @@ files:
|
|
|
122
122
|
- ".github/pull_request_template.md"
|
|
123
123
|
- ".gitignore"
|
|
124
124
|
- ".travis.yml"
|
|
125
|
+
- CHANGELOG.md
|
|
125
126
|
- CODE_OF_CONDUCT.md
|
|
126
127
|
- CONTRIBUTING.md
|
|
127
128
|
- DEPRECATIONS.md
|
|
@@ -132,6 +133,7 @@ files:
|
|
|
132
133
|
- acts_as_favoritor.gemspec
|
|
133
134
|
- init.rb
|
|
134
135
|
- lib/acts_as_favoritor.rb
|
|
136
|
+
- lib/acts_as_favoritor/configuration.rb
|
|
135
137
|
- lib/acts_as_favoritor/favoritable.rb
|
|
136
138
|
- lib/acts_as_favoritor/favorite_scopes.rb
|
|
137
139
|
- lib/acts_as_favoritor/favoritor.rb
|
|
@@ -140,6 +142,7 @@ files:
|
|
|
140
142
|
- lib/acts_as_favoritor/version.rb
|
|
141
143
|
- lib/generators/acts_as_favoritor_generator.rb
|
|
142
144
|
- lib/generators/templates/README.md
|
|
145
|
+
- lib/generators/templates/acts_as_favoritor.yml.erb
|
|
143
146
|
- lib/generators/templates/migration.rb.erb
|
|
144
147
|
- lib/generators/templates/model.rb
|
|
145
148
|
- test/acts_as_favoritable_test.rb
|
|
@@ -193,5 +196,5 @@ rubyforge_project:
|
|
|
193
196
|
rubygems_version: 2.6.12
|
|
194
197
|
signing_key:
|
|
195
198
|
specification_version: 4
|
|
196
|
-
summary: A Rubygem to add Favorite functionality
|
|
199
|
+
summary: A Rubygem to add Favorite, Follow, etc. functionality to ActiveRecord models
|
|
197
200
|
test_files: []
|