make_taggable 0.6.3 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/mysql_tests.yml +56 -0
- data/.github/workflows/pg_tests.yml +56 -0
- data/.github/workflows/{ci.yml → sqlite_tests.yml} +10 -10
- data/.github/workflows/standardrb-check.yml +37 -0
- data/.gitignore +3 -0
- data/Appraisals +4 -0
- data/README.md +77 -33
- data/Rakefile +4 -0
- data/UPGRADING.md +5 -0
- data/db/migrate/3_change_tag_name_collation_mysql.rb +7 -0
- data/db/migrate/{3_add_index_to_tags.rb → 4_add_index_to_tags.rb} +0 -0
- data/db/migrate/{4_add_index_to_taggings.rb → 5_add_index_to_taggings.rb} +0 -0
- data/lib/make_taggable.rb +3 -3
- data/lib/make_taggable/taggable/tagged_with_query/query_base.rb +4 -4
- data/lib/make_taggable/tagger.rb +1 -1
- data/lib/make_taggable/tagging.rb +1 -1
- data/lib/make_taggable/version.rb +1 -2
- data/lib/tasks/setup_test_db.rake +6 -0
- data/make_taggable.gemspec +22 -8
- data/spec/dummy/README.md +0 -24
- data/spec/dummy/app/models/cached_model_with_array.rb +0 -6
- data/spec/dummy/app/models/taggable_model_with_json.rb +6 -0
- data/spec/dummy/config/application.rb +2 -8
- data/spec/dummy/config/database.yml +1 -19
- data/spec/dummy/config/mysql_database.yml.ci +8 -0
- data/spec/dummy/config/pg_database.yml.ci +8 -0
- data/spec/dummy/db/migrate/{20201119220853_create_taggable_models.rb → 020201119220853_create_taggable_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221037_create_columns_override_models.rb → 020201119221037_create_columns_override_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221121_create_non_standard_id_taggable_models.rb → 020201119221121_create_non_standard_id_taggable_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221228_create_untaggable_models.rb → 020201119221228_create_untaggable_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221247_create_cached_models.rb → 020201119221247_create_cached_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221314_create_other_cached_models.rb → 020201119221314_create_other_cached_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221343_create_companies.rb → 020201119221343_create_companies.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221416_create_users.rb → 020201119221416_create_users.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221434_create_other_taggable_models.rb → 020201119221434_create_other_taggable_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221507_create_ordered_taggable_models.rb → 020201119221507_create_ordered_taggable_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221530_create_cache_methods_injected_models.rb → 020201119221530_create_cache_methods_injected_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221629_create_other_cached_with_array_models.rb → 020201119221629_create_other_cached_with_array_models.rb} +0 -0
- data/spec/dummy/db/migrate/{20201119221746_create_taggable_model_with_jsons.rb → 020201119221746_create_taggable_model_with_jsons.rb} +0 -0
- data/spec/make_taggable/tag_spec.rb +88 -250
- data/spec/make_taggable/taggable_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -2
- metadata +116 -80
- data/.travis.yml +0 -36
- data/gemfiles/rails_5.gemfile +0 -9
- data/gemfiles/rails_6.gemfile +0 -9
- data/gemfiles/rails_master.gemfile +0 -9
- data/spec/dummy/db/migrate/20201119222429_create_make_taggable_tags.make_taggable_engine.rb +0 -11
- data/spec/dummy/db/migrate/20201119222430_create_make_taggable_taggings.make_taggable_engine.rb +0 -13
- data/spec/dummy/db/migrate/20201119222431_add_index_to_tags.make_taggable_engine.rb +0 -6
- data/spec/dummy/db/migrate/20201119222432_add_index_to_taggings.make_taggable_engine.rb +0 -13
- data/spec/dummy/db/schema.rb +0 -117
- data/spec/dummy/db/seeds.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 656b91c8e3413eb256819e637338927cd744e9502e9208ab2ee983344eeb0dc0
|
4
|
+
data.tar.gz: fc1d7f0e41f254536af79d94a0d42d40afb1f8db2e6a7fc1ff92f7536efe8b39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebac450ac5fdc36410898fa78e1a8d93453967ffdc4a9326c3438348d462ccff566bb65282ee50b1bf7c3af32a48764f18139bc566635253401f936497670319
|
7
|
+
data.tar.gz: 0662c53dc1f42ef1fd87b3d9ee1d26ab8af286e2f85105ffe9cf6af4fa41eb0b189ecc34fa1e752615107acc3bcaa27186deb19ad7b5cf5978436d4e66965e03
|
@@ -0,0 +1,56 @@
|
|
1
|
+
---
|
2
|
+
name: MySQL Tests
|
3
|
+
|
4
|
+
on:
|
5
|
+
pull_request:
|
6
|
+
branches:
|
7
|
+
- '*'
|
8
|
+
push:
|
9
|
+
branches:
|
10
|
+
- master
|
11
|
+
jobs:
|
12
|
+
mysql:
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby: ['2.5', '2.6', '2.7']
|
17
|
+
|
18
|
+
services:
|
19
|
+
mysql:
|
20
|
+
image: mysql:8
|
21
|
+
env:
|
22
|
+
MYSQL_ROOT_PASSWORD: password
|
23
|
+
MSQL_DATABASE: my_sql_test_db
|
24
|
+
ports: ['3306:3306']
|
25
|
+
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
26
|
+
|
27
|
+
steps:
|
28
|
+
- uses: actions/checkout@master
|
29
|
+
|
30
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
31
|
+
uses: ruby/setup-ruby@v1
|
32
|
+
with:
|
33
|
+
ruby-version: ${{ matrix.ruby }}
|
34
|
+
|
35
|
+
- name: Cache gems
|
36
|
+
uses: actions/cache@v2
|
37
|
+
with:
|
38
|
+
path: vendor/bundle
|
39
|
+
key: ${{ runner.os }}-${{ matrix.ruby }}-gem-${{ hashFiles('**/Gemfile.lock') }}
|
40
|
+
restore-keys: |
|
41
|
+
${{ runner.os }}-${{ matrix.ruby }}-gem-
|
42
|
+
|
43
|
+
- name: Install dependencies
|
44
|
+
run: |
|
45
|
+
gem install bundler
|
46
|
+
bundle install --jobs 4 --retry 3
|
47
|
+
bundle exec appraisal install
|
48
|
+
|
49
|
+
- name: Run tests
|
50
|
+
env:
|
51
|
+
DATABASE_URL: mysql2://root:password@127.0.0.1:3306/my_sql_test_db
|
52
|
+
RAILS_ENV: test
|
53
|
+
run: |
|
54
|
+
cp spec/dummy/config/mysql_database.yml.ci spec/dummy/config/database.yml
|
55
|
+
bundle exec rake test_app
|
56
|
+
bundle exec appraisal rake
|
@@ -0,0 +1,56 @@
|
|
1
|
+
---
|
2
|
+
name: Postgres Tests
|
3
|
+
|
4
|
+
on:
|
5
|
+
pull_request:
|
6
|
+
branches:
|
7
|
+
- '*'
|
8
|
+
push:
|
9
|
+
branches:
|
10
|
+
- master
|
11
|
+
jobs:
|
12
|
+
postgres:
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby: ['2.5', '2.6', '2.7']
|
17
|
+
|
18
|
+
services:
|
19
|
+
postgres:
|
20
|
+
image: postgres:12
|
21
|
+
env:
|
22
|
+
POSTGRES_USER: postgres
|
23
|
+
POSTGRES_PASSWORD: password
|
24
|
+
POSTGRES_DB: pg_test
|
25
|
+
ports: ['5432:5432']
|
26
|
+
|
27
|
+
steps:
|
28
|
+
- uses: actions/checkout@master
|
29
|
+
|
30
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
31
|
+
uses: ruby/setup-ruby@v1
|
32
|
+
with:
|
33
|
+
ruby-version: ${{ matrix.ruby }}
|
34
|
+
|
35
|
+
- name: Cache gems
|
36
|
+
uses: actions/cache@v2
|
37
|
+
with:
|
38
|
+
path: vendor/bundle
|
39
|
+
key: ${{ runner.os }}-${{ matrix.ruby }}-gem-${{ hashFiles('**/Gemfile.lock') }}
|
40
|
+
restore-keys: |
|
41
|
+
${{ runner.os }}-${{ matrix.ruby }}-gem-
|
42
|
+
|
43
|
+
- name: Install dependencies
|
44
|
+
run: |
|
45
|
+
gem install bundler
|
46
|
+
bundle install --jobs 4 --retry 3
|
47
|
+
bundle exec appraisal install
|
48
|
+
|
49
|
+
- name: Run tests
|
50
|
+
env:
|
51
|
+
DATABASE_URL: postgres://postgres:password@localhost:5432/pg_test
|
52
|
+
RAILS_ENV: test
|
53
|
+
run: |
|
54
|
+
cp spec/dummy/config/pg_database.yml.ci spec/dummy/config/database.yml
|
55
|
+
bundle exec rake test_app
|
56
|
+
bundle exec appraisal rake
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
---
|
2
|
+
name: SQLite Tests
|
2
3
|
|
3
4
|
on:
|
4
5
|
pull_request:
|
@@ -8,26 +9,27 @@ on:
|
|
8
9
|
branches:
|
9
10
|
- master
|
10
11
|
jobs:
|
11
|
-
|
12
|
+
sqlite:
|
12
13
|
runs-on: ubuntu-latest
|
13
14
|
strategy:
|
14
15
|
matrix:
|
15
|
-
ruby: [
|
16
|
+
ruby: ['2.5', '2.6', '2.7']
|
16
17
|
steps:
|
17
18
|
- uses: actions/checkout@master
|
18
19
|
|
19
|
-
- name: Set up Ruby
|
20
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
20
21
|
uses: ruby/setup-ruby@v1
|
21
22
|
with:
|
22
23
|
ruby-version: ${{ matrix.ruby }}
|
23
24
|
|
24
25
|
- name: Cache gems
|
25
|
-
uses: actions/cache@
|
26
|
+
uses: actions/cache@v2
|
26
27
|
with:
|
27
28
|
path: vendor/bundle
|
28
|
-
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
|
29
|
+
key: ${{ runner.os }}-${{ matrix.ruby }}-gem-${{ hashFiles('**/Gemfile.lock') }}
|
29
30
|
restore-keys: |
|
30
|
-
${{ runner.os }}-gem-
|
31
|
+
${{ runner.os }}-${{ matrix.ruby }}-gem-
|
32
|
+
|
31
33
|
- name: Install dependencies
|
32
34
|
run: |
|
33
35
|
sudo apt-get update
|
@@ -37,11 +39,9 @@ jobs:
|
|
37
39
|
bundle install --jobs 4 --retry 3
|
38
40
|
bundle exec appraisal install
|
39
41
|
|
40
|
-
- name: StandardRb check
|
41
|
-
run: bundle exec standardrb
|
42
|
-
|
43
42
|
- name: Run tests
|
44
43
|
env:
|
45
44
|
RAILS_ENV: test
|
46
45
|
run: |
|
46
|
+
bundle exec rake test_app
|
47
47
|
bundle exec appraisal rake
|
@@ -0,0 +1,37 @@
|
|
1
|
+
name: Standard Rb
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
branches:
|
6
|
+
- '*'
|
7
|
+
push:
|
8
|
+
branches:
|
9
|
+
- master
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
standard:
|
13
|
+
name: StandardRB Check Action
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@master
|
17
|
+
|
18
|
+
- name: Set up Ruby 2.7
|
19
|
+
uses: actions/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: 2.7.x
|
22
|
+
|
23
|
+
- uses: actions/cache@v1
|
24
|
+
with:
|
25
|
+
path: vendor/bundle
|
26
|
+
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
27
|
+
restore-keys: |
|
28
|
+
${{ runner.os }}-gems-
|
29
|
+
|
30
|
+
- name: Bundle install
|
31
|
+
run: |
|
32
|
+
gem install bundler
|
33
|
+
bundle config path vendor/bundle
|
34
|
+
bundle install --jobs 4 --retry 3
|
35
|
+
|
36
|
+
- name: Run StandardRB
|
37
|
+
run: bundle exec standardrb --format progress
|
data/.gitignore
CHANGED
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -1,26 +1,20 @@
|
|
1
1
|
# MakeTaggable
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/make_taggable.svg)](https://badge.fury.io/rb/make_taggable)
|
3
|
-
|
4
|
-
|
3
|
+
![Postgres Tests](https://github.com/MatthewKennedy/make_taggable/workflows/Postgres%20Tests/badge.svg)
|
4
|
+
![MySQL Tests](https://github.com/MatthewKennedy/make_taggable/workflows/MySQL%20Tests/badge.svg)
|
5
|
+
![SQLite Tests](https://github.com/MatthewKennedy/make_taggable/workflows/SQLite%20Tests/badge.svg)
|
6
|
+
![Standard Rb](https://github.com/MatthewKennedy/make_taggable/workflows/Standard%20Rb/badge.svg)
|
5
7
|
|
6
|
-
MakeTaggable is a fork of
|
8
|
+
MakeTaggable is a fork of Acts-As-Taggable-On with code updates, fresh migrations that work on MySQL, and tested against a dummy Rails app.
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
For the PostgreSQL users, this is not an issue, but if you have an app or gem that used acts-as-taggable-on, you can no longer test against MySQL, so it seems a fresh start would be useful to clear out any legacy issues and move forward.
|
10
|
+
All credit goes to those who contributed to Acts-As-Taggable-On: Michael Bleigh & Joost Baaij.
|
11
11
|
|
12
12
|
## Installation
|
13
13
|
|
14
|
-
To use
|
15
|
-
|
16
|
-
```ruby
|
17
|
-
gem "make_taggable", "~> 0.6.0"
|
18
|
-
```
|
19
|
-
|
20
|
-
and bundle:
|
14
|
+
To use make_taggable, run the followng from the root of your application:
|
21
15
|
|
22
16
|
```shell
|
23
|
-
bundle
|
17
|
+
bundle add make_taggable
|
24
18
|
```
|
25
19
|
|
26
20
|
#### Post Installation
|
@@ -28,15 +22,30 @@ bundle
|
|
28
22
|
Install migrations
|
29
23
|
|
30
24
|
```shell
|
31
|
-
# For the latest versions :
|
32
25
|
rails make_taggable_engine:install:migrations
|
33
26
|
```
|
34
27
|
|
35
|
-
Review the generated migrations then migrate
|
28
|
+
Review the generated migrations then migrate:
|
36
29
|
```shell
|
37
30
|
rails db:migrate
|
38
31
|
```
|
39
32
|
|
33
|
+
#### For MySql users
|
34
|
+
To make MySQL play nice with spÉcial characters you can setting the following line in an initializer file:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
MakeTaggable.force_binary_collation = true
|
38
|
+
```
|
39
|
+
|
40
|
+
Or by run this rake task:
|
41
|
+
|
42
|
+
```shell
|
43
|
+
rails make_taggable_engine:tag_names:collate_bin
|
44
|
+
```
|
45
|
+
|
46
|
+
See the Configuration section for more details.
|
47
|
+
|
48
|
+
|
40
49
|
## Usage
|
41
50
|
|
42
51
|
Setup
|
@@ -167,7 +176,7 @@ MakeTaggable::Tag.least_used(10)
|
|
167
176
|
|
168
177
|
### Finding Tagged Objects
|
169
178
|
|
170
|
-
|
179
|
+
MakeTaggable uses scopes to create an association for tags.
|
171
180
|
This way you can mix and match to filter down your results.
|
172
181
|
|
173
182
|
```ruby
|
@@ -396,6 +405,7 @@ CSS:
|
|
396
405
|
.css4 { font-size: 1.6em; }
|
397
406
|
```
|
398
407
|
|
408
|
+
|
399
409
|
## Configuration
|
400
410
|
|
401
411
|
If you would like to remove unused tag objects after removing taggings, add:
|
@@ -444,35 +454,69 @@ MakeTaggable.delimiter = ','
|
|
444
454
|
*NOTE 1: SQLite by default can't upcase or downcase multibyte characters, resulting in unwanted behavior. Load the SQLite ICU extension for proper handle of such characters. [See docs](http://www.sqlite.org/src/artifact?ci=trunk&filename=ext/icu/README.txt)*
|
445
455
|
|
446
456
|
|
447
|
-
|
448
|
-
|
449
|
-
see [UPGRADING](UPGRADING.md)
|
457
|
+
## Upgrading
|
450
458
|
|
451
|
-
|
459
|
+
Install new migrations by running:
|
452
460
|
|
453
|
-
|
461
|
+
```shell
|
462
|
+
rails make_taggable_engine:install:migrations
|
463
|
+
```
|
454
464
|
|
455
465
|
## Compatibility
|
456
466
|
|
457
|
-
|
467
|
+
Version 0.7.x is compatible with Ruby 2.5 > and Rails 5.2 >
|
458
468
|
|
459
469
|
|
460
|
-
## TODO
|
461
|
-
- Review migrations indexes they seem excessive looking at the schema.
|
462
|
-
- See if the newer version of ActiveRecord or arel can be used instead of the MySQL workarounds.
|
463
|
-
|
464
470
|
## Testing
|
465
471
|
|
466
|
-
|
467
|
-
|
472
|
+
MakeTaggable uses RSpec for its test coverage. Inside the gem directory, you can run the specs by following the steps below:
|
473
|
+
|
474
|
+
Install the rquired gems:
|
475
|
+
|
476
|
+
```shell
|
477
|
+
bundle install
|
478
|
+
```
|
479
|
+
|
480
|
+
Setup the dummy test app:
|
481
|
+
|
482
|
+
```shell
|
483
|
+
bundle exec rake test_app
|
484
|
+
```
|
485
|
+
|
486
|
+
Run the spec tests against SQLite use the followiong command.
|
487
|
+
|
488
|
+
```shell
|
489
|
+
bundle exec rake
|
490
|
+
```
|
491
|
+
|
492
|
+
You can also run all the tests across all the Rails versions by running:
|
493
|
+
|
494
|
+
```shell
|
495
|
+
bundle exec appraisal install
|
496
|
+
|
497
|
+
bundle exec appraisal rake
|
498
|
+
```
|
499
|
+
|
500
|
+
## Contributing
|
501
|
+
|
502
|
+
Please use the following Standard Rb commands to format your code before creating a pull request:
|
503
|
+
|
504
|
+
Check for code errors:
|
505
|
+
|
506
|
+
```shell
|
507
|
+
bundle exec standardrb
|
508
|
+
```
|
509
|
+
|
510
|
+
Fix code errors:
|
468
511
|
|
469
512
|
```shell
|
470
|
-
bundle
|
471
|
-
rake spec
|
513
|
+
bundle exec standardrb --fix
|
472
514
|
```
|
515
|
+
For more information please review the [Contributing](https://github.com/MatthewKennedy/make_taggable/blob/master/CONTRIBUTING.md) section.
|
473
516
|
|
474
|
-
|
517
|
+
#### Contributors
|
518
|
+
List of valued contributors From Acts-As-Taggable-On: [Check them all](https://github.com/mbleigh/acts-as-taggable-on/contributors)
|
475
519
|
|
476
520
|
|
477
521
|
## License
|
478
|
-
MIT
|
522
|
+
This gem is available as open source under the terms of the [MIT License](https://github.com/MatthewKennedy/make_taggable/blob/master/LICENSE.txt).
|
data/Rakefile
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
|
3
|
+
import "./lib/tasks/tags_collate_utf8.rake"
|
4
|
+
|
3
5
|
APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
|
4
6
|
|
5
7
|
require "rspec/core/rake_task"
|
6
8
|
RSpec::Core::RakeTask.new(:spec)
|
7
9
|
task default: :spec
|
10
|
+
|
11
|
+
load "lib/tasks/setup_test_db.rake"
|
data/UPGRADING.md
ADDED
File without changes
|
File without changes
|
data/lib/make_taggable.rb
CHANGED
@@ -111,10 +111,10 @@ module MakeTaggable
|
|
111
111
|
|
112
112
|
def self.apply_binary_collation(bincoll)
|
113
113
|
if Utils.using_mysql?
|
114
|
-
coll = "
|
115
|
-
coll = "
|
114
|
+
coll = "utf8mb4_general_ci"
|
115
|
+
coll = "utf8mb4_bin" if bincoll
|
116
116
|
begin
|
117
|
-
ActiveRecord::Migration.execute("ALTER TABLE #{Tag.table_name} MODIFY name varchar(255) CHARACTER SET
|
117
|
+
ActiveRecord::Migration.execute("ALTER TABLE #{Tag.table_name} MODIFY name varchar(255) CHARACTER SET utf8mb4 COLLATE #{coll};")
|
118
118
|
rescue => e
|
119
119
|
puts "Trapping #{e.class}: collation parameter ignored while migrating for the first time."
|
120
120
|
end
|