gutentag 2.4.0 → 2.4.1

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: ab338132cb66484c650c46037b6c5133b4ee72c90e7397fbf045cb909029bc3c
4
- data.tar.gz: 7f4d9166ed7d9ef6a0b44a677f0a182434abcc1ceecfe26ea0ab137714b2c6c3
3
+ metadata.gz: 53b60a0cb99836a7c475d6fee7b431f99e38c16976f914e3591e86530c1d5b7b
4
+ data.tar.gz: 564c325549cf3f51ceb24a5986a06d5ad66b81f1a07b948a1875b4e1d8ebead5
5
5
  SHA512:
6
- metadata.gz: 57eaa6e0442287f4a07dfb612cbb2c18dda900fe8cf7b274f12eecd299b70355711ff786ab20bf0616716e0ba7b1dc8520458d90a779c3cc715fa78e7842304a
7
- data.tar.gz: 067b316bba0642bfedd777ff8cf7d0d85a08f326fd4959466ca3b831be3496fe9aad93872e16a7c3830f29b2ef8aafba8194628188784aed4d60413951d38c6e
6
+ metadata.gz: dcb6dba995fc07e770dbd605d667501dba90ed153c6c40ff825e53276890a2a7fb2e5d4f13cef3573a094d0b25fb1645baa956aeccdf3e1bfad8e6b0f8ade58e
7
+ data.tar.gz: df7591b2ed083abb732c447ecf1b916d540edc168b4542bca99fe41e03e8135f2cee6745b2a43d2e68cc9466da411e578db4bac40264123d3cf88ee5da84b502
data/.rubocop.yml CHANGED
@@ -3,6 +3,11 @@ inherit_from:
3
3
 
4
4
  AllCops:
5
5
  TargetRubyVersion: 2.2
6
+ Exclude:
7
+ - gemfiles/*.gemfile
8
+
9
+ Layout/AlignHash:
10
+ EnforcedHashRocketStyle: table
6
11
 
7
12
  Metrics/MethodLength:
8
13
  Exclude:
data/.travis.yml CHANGED
@@ -1,16 +1,23 @@
1
1
  language: ruby
2
+ dist: xenial
2
3
  script: bundle exec appraisal rake
3
4
  rvm:
4
5
  - 2.2.10
5
- - 2.3.7
6
- - 2.4.4
7
- - 2.5.1
8
- - jruby-9.1.16.0
6
+ - 2.3.8
7
+ - 2.4.5
8
+ - 2.5.3
9
+ - 2.6.1
10
+ - jruby-9.2.5.0
9
11
  before_install:
10
- - gem install bundler
12
+ - gem install bundler --version 1.17.3
13
+ install:
14
+ - bundle _1.17.3_ install --jobs=3 --retry=3
11
15
  before_script:
12
16
  - bundle exec appraisal install
13
17
  env:
14
18
  - DATABASE=postgres
15
19
  - DATABASE=mysql
16
20
  - DATABASE=sqlite
21
+ services:
22
+ - mysql
23
+ - postgresql
data/Appraisals CHANGED
@@ -1,37 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  appraise "rails_3_2" do
4
- gem "rails", "~> 3.2.22.5"
5
- gem "mysql2", "~> 0.3.10", :platform => :ruby
4
+ gem "rails", "~> 3.2.22.5"
5
+ gem "mysql2", "~> 0.3.10", :platform => :ruby
6
6
  end if RUBY_VERSION.to_f <= 2.2
7
7
 
8
8
  appraise "rails_4_0" do
9
- gem "rails", "~> 4.0.13"
10
- gem "mysql2", "~> 0.3.10", :platform => :ruby
9
+ gem "rails", "~> 4.0.13"
10
+ gem "mysql2", "~> 0.3.10", :platform => :ruby
11
11
  end if RUBY_VERSION.to_f < 2.4
12
12
 
13
13
  appraise "rails_4_1" do
14
- gem "rails", "~> 4.1.16"
15
- gem "mysql2", "~> 0.3.13", :platform => :ruby
14
+ gem "rails", "~> 4.1.16"
15
+ gem "mysql2", "~> 0.3.13", :platform => :ruby
16
16
  end if RUBY_VERSION.to_f < 2.4
17
17
 
18
18
  appraise "rails_4_2" do
19
- gem "rails", "~> 4.2.8"
20
- gem "mysql2", "~> 0.4.0", :platform => :ruby
19
+ gem "rails", "~> 4.2.8"
20
+ gem "mysql2", "~> 0.4.0", :platform => :ruby
21
+
22
+ gem "activerecord-jdbcmysql-adapter", "~> 1.3.23", :platform => :jruby
23
+ gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.23", :platform => :jruby
24
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.23", :platform => :jruby
21
25
  end
22
26
 
23
27
  appraise "rails_5_0" do
24
28
  gem "rails", "~> 5.0.3"
25
29
  gem "mysql2", "~> 0.4.0", :platform => :ruby
26
- end if RUBY_VERSION.to_f >= 2.2 && RUBY_PLATFORM != "java"
30
+ end if RUBY_VERSION.to_f >= 2.2
27
31
 
28
32
  appraise "rails_5_1" do
29
33
  gem "rails", "~> 5.1.1"
30
34
  gem "mysql2", "~> 0.4.0", :platform => :ruby
31
- end if RUBY_VERSION.to_f >= 2.2 && RUBY_PLATFORM != "java"
35
+ end if RUBY_VERSION.to_f >= 2.2
32
36
 
33
37
  appraise "rails_5_2" do
34
38
  gem "rails", "~> 5.2.0"
35
39
  gem "pg", "~> 1.0", :platform => :ruby
36
40
  gem "mysql2", "~> 0.5.0", :platform => :ruby
37
- end if RUBY_VERSION.to_f >= 2.2 && RUBY_PLATFORM != "java"
41
+ end if RUBY_VERSION.to_f >= 2.2
42
+
43
+ appraise "rails_6_0" do
44
+ gem "rails", "~> 6.0.0.beta1"
45
+ gem "pg", "~> 1.0", :platform => :ruby
46
+ gem "mysql2", "~> 0.5.0", :platform => :ruby
47
+ end if RUBY_VERSION.to_f >= 2.5 && RUBY_PLATFORM != "java"
data/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to this project (at least, from v0.5.0 onwards) will be documented in this file.
4
4
 
5
+ ## 2.4.1 - 2019-02-22
6
+
7
+ ### Changed
8
+
9
+ * Tests are now run against Rails 6.0, MRI 2.6, JRuby 9.2.5.
10
+ * The README documents a simpler migration ([seelensonne](https://github.com/seelensonne) in [#55](https://github.com/pat/gutentag/pull/55)).
11
+
12
+ ### Fixed
13
+
14
+ * Do not record changes when tag_names did not change ([Stephen Oberther](https://github.com/smo921) in [#60](https://github.com/pat/gutentag/pull/60)).
15
+
5
16
  ## 2.4.0 - 2018-05-18
6
17
 
7
18
  ### Changed
data/Gemfile CHANGED
@@ -6,12 +6,12 @@ gemspec
6
6
 
7
7
  gem "test-unit", :platform => :ruby_22
8
8
 
9
- gem "mysql2", "~> 0.3", :platform => :ruby
10
- gem "pg", "~> 0.18", :platform => :ruby
11
- gem "sqlite3", "~> 1.3", :platform => :ruby
9
+ gem "mysql2", "~> 0.3", :platform => :ruby
10
+ gem "pg", "~> 0.18", :platform => :ruby
11
+ gem "sqlite3", "~> 1.3.13", :platform => :ruby
12
12
 
13
- gem "activerecord-jdbcmysql-adapter", "~> 1.3.23", :platform => :jruby
14
- gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.23", :platform => :jruby
15
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.23", :platform => :jruby
13
+ gem "activerecord-jdbcmysql-adapter", ">= 1.3.23", :platform => :jruby
14
+ gem "activerecord-jdbcpostgresql-adapter", ">= 1.3.23", :platform => :jruby
15
+ gem "activerecord-jdbcsqlite3-adapter", ">= 1.3.23", :platform => :jruby
16
16
 
17
- gem "activerecord", [">= 3.2.22", "< 5"] if RUBY_PLATFORM == "java"
17
+ gem "activerecord", [">= 3.2.22"] if RUBY_PLATFORM == "java"
data/README.md CHANGED
@@ -72,8 +72,8 @@ Article.tagged_with(:ids => [tag_a.id, tag_b.id], :match => :all)
72
72
 
73
73
  These are the versions the test suite runs against. It's possible it may work on older versions of Ruby, but it definitely won't work on older versions of Rails.
74
74
 
75
- * Ruby: MRI v2.2-v2.5, JRuby v9.1
76
- * Rails/ActiveRecord: v3.2-v5.2
75
+ * Ruby: MRI v2.2-v2.6, JRuby v9.2.5
76
+ * Rails/ActiveRecord: v3.2-v6.0
77
77
 
78
78
  ### Installing
79
79
 
@@ -90,31 +90,25 @@ rake gutentag:install:migrations
90
90
  rake db:migrate
91
91
  ```
92
92
 
93
+ If you're using UUID primary keys, make sure you alter the migration files before running `db:migrate` to use UUIDs for the `taggable_id` foreign key column (as noted in [issue 57](https://github.com/pat/gutentag/issues/57).)
94
+
93
95
  ### Without Rails
94
96
 
95
97
  If you want to use Gutentag outside of Rails, you can. However, there is one caveat: You'll want to set up your database with the same schema (as importing in the migrations isn't possible without Rails). The schema from 0.7.0 onwards is below:
96
98
 
97
- ```Ruby
98
- create_table :gutentag_taggings do |t|
99
- t.integer :tag_id, null: false
100
- t.integer :taggable_id, null: false
101
- t.string :taggable_type, null: false
102
- t.timestamps null: false
103
- end
104
-
105
- add_index :gutentag_taggings, :tag_id
106
- add_index :gutentag_taggings, [:taggable_type, :taggable_id]
107
- add_index :gutentag_taggings, [:taggable_type, :taggable_id, :tag_id],
108
- unique: true, name: 'unique_taggings'
109
-
99
+ ```ruby
110
100
  create_table :gutentag_tags do |t|
111
- t.string :name, null: false
112
- t.integer :taggings_count, null: false, default: 0
113
- t.timestamps null: false
101
+ t.string :name, null: false, index: {unique: true}
102
+ t.bigint :taggings_count, null: false, index: true, default: 0
103
+ t.timestamps null: false
114
104
  end
115
105
 
116
- add_index :gutentag_tags, :name, unique: true
117
- add_index :gutentag_tags, :taggings_count
106
+ create_table :gutentag_taggings do |t|
107
+ t.references :tag, null: false, index: true, foreign_key: {to_table: :gutentag_tags}
108
+ t.references :taggable, null: false, index: true, polymorphic: true
109
+ t.timestamps null: false
110
+ end
111
+ add_index :gutentag_taggings, [:taggable_type, :taggable_id, :tag_id], unique: true, name: "gutentag_taggings_uniqueness"
118
112
  ```
119
113
 
120
114
  <h2 id="upgrading">Upgrading</h2>
data/gutentag.gemspec CHANGED
@@ -1,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
- # -*- encoding: utf-8 -*-
3
2
 
4
3
  Gem::Specification.new do |s|
5
4
  s.name = "gutentag"
6
- s.version = "2.4.0"
5
+ s.version = "2.4.1"
7
6
  s.authors = ["Pat Allan"]
8
7
  s.email = ["pat@freelancing-gods.com"]
9
8
  s.homepage = "https://github.com/pat/gutentag"
@@ -18,10 +17,10 @@ Gem::Specification.new do |s|
18
17
  s.add_runtime_dependency "activerecord", ">= 3.2.0"
19
18
 
20
19
  s.add_development_dependency "appraisal", "~> 2.1.0"
21
- s.add_development_dependency "bundler", ">= 1.7.12"
22
- s.add_development_dependency "combustion", "0.8.0"
20
+ s.add_development_dependency "bundler", "~> 1.17"
21
+ s.add_development_dependency "combustion", "~> 1.1"
23
22
  s.add_development_dependency "database_cleaner", "~> 1.6"
24
23
  s.add_development_dependency "rails"
25
24
  s.add_development_dependency "rspec-rails", "~> 3.1"
26
- s.add_development_dependency "rubocop", "~> 0.52.1"
25
+ s.add_development_dependency "rubocop", "~> 0.64.0"
27
26
  end
@@ -28,7 +28,7 @@ module Gutentag::ActiveRecord::InstanceMethods
28
28
  def tag_names=(names)
29
29
  # This value is about to be overwritten, but we want to make sure the change
30
30
  # tracking doesn't think the original value was nil.
31
- @attributes.write_from_database "tag_names", []
31
+ @attributes.write_from_database "tag_names", tags.pluck(:name)
32
32
 
33
33
  super Gutentag::TagNames.call(names)
34
34
  end
@@ -27,7 +27,7 @@ RSpec.describe "Dirty state of tag names" do
27
27
 
28
28
  it "knows what tag names have changed" do
29
29
  article.tag_names = ["pancakes"]
30
- article.save
30
+ article.save!
31
31
 
32
32
  expect(article.tag_names).to eq(["pancakes"])
33
33
 
@@ -49,4 +49,12 @@ RSpec.describe "Dirty state of tag names" do
49
49
  expect(article.tag_names_in_database).to eq(["pancakes"])
50
50
  end
51
51
  end
52
+
53
+ it "knows when tags have not changed" do
54
+ article.tag_names = ["pancakes"]
55
+ article.save!
56
+
57
+ article.tag_names = ["pancakes"]
58
+ expect(article.changes).to eq({})
59
+ end
52
60
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Thinkpiece < Article
4
- #
5
4
  end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,8 @@ require "bundler/setup"
4
4
 
5
5
  Bundler.require :default, :development
6
6
 
7
+ Dir["#{__dir__}/support/**/*.rb"].each { |file| require file }
8
+
7
9
  Combustion.initialize! :active_record
8
10
  ActiveSupport.run_load_hooks :gutentag unless defined?(Gutentag::Engine)
9
11
 
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+
5
+ # New versions of MySQL don't allow NULL values for primary keys, but old
6
+ # versions of Rails do. To use both at the same time, we need to update Rails'
7
+ # default primary key type to no longer have a default NULL value.
8
+ #
9
+ class PatchAdapter
10
+ def call
11
+ return unless using_mysql? && using_rails_pre_4_1?
12
+
13
+ require "active_record/connection_adapters/abstract_mysql_adapter"
14
+ ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::
15
+ NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
16
+ end
17
+
18
+ def using_mysql?
19
+ ENV.fetch("DATABASE", "sqlite") == "mysql"
20
+ end
21
+
22
+ def using_rails_pre_4_1?
23
+ ActiveRecord::VERSION::STRING.to_f < 4.1
24
+ end
25
+ end
26
+
27
+ PatchAdapter.new.call
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gutentag
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Allan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-18 00:00:00.000000000 Z
11
+ date: 2019-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -42,30 +42,30 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.7.12
47
+ version: '1.17'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.7.12
54
+ version: '1.17'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: combustion
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.8.0
61
+ version: '1.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '='
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.8.0
68
+ version: '1.1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: database_cleaner
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.52.1
117
+ version: 0.64.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.52.1
124
+ version: 0.64.0
125
125
  description: A good, simple, solid tagging extension for ActiveRecord
126
126
  email:
127
127
  - pat@freelancing-gods.com
@@ -175,6 +175,7 @@ files:
175
175
  - spec/models/gutentag/tag_spec.rb
176
176
  - spec/models/gutentag/tagging_spec.rb
177
177
  - spec/spec_helper.rb
178
+ - spec/support/mysql.rb
178
179
  homepage: https://github.com/pat/gutentag
179
180
  licenses:
180
181
  - MIT