gutentag 1.0.0 → 1.1.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 +42 -1
- data/gutentag.gemspec +1 -1
- data/lib/gutentag/tag_validations.rb +3 -0
- data/spec/models/gutentag/tag_spec.rb +17 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a26cb66caf12d398610c04fd395478ad28b1274d
|
4
|
+
data.tar.gz: 14ee875c010f87bb3f2fafe5e4bc4076210ae7a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b6c6f02542b419644cdc30e07d776227a98aef5479528d7aa80be05fa45757fc7f6eaeacd298a64df20d72cae62b63bd9e3846d1e460a13a871faabe8c9007a
|
7
|
+
data.tar.gz: 6d58adf70948425b4dacb24284392bbd9faf8b84c5108fffb15b042e2edd0277cfb77d78675c4c23aefa624dc3d7e401405862534d8d6f8ab34d160c8c62ce58
|
data/README.md
CHANGED
@@ -13,6 +13,7 @@ This was built partly as a proof-of-concept, and partly to see how a tagging gem
|
|
13
13
|
* [Usage](#usage)
|
14
14
|
* [Installation](#installation)
|
15
15
|
* [Upgrading](#upgrading)
|
16
|
+
* [Configuration](#configuration)
|
16
17
|
* [Contribution](#contribution)
|
17
18
|
* [Licence](#licence)
|
18
19
|
|
@@ -68,7 +69,7 @@ Article.tagged_with(:ids => [tag_a.id, tag_b.id], :match => :all)
|
|
68
69
|
Get it into your Gemfile - and don't forget the version constraint!
|
69
70
|
|
70
71
|
```Ruby
|
71
|
-
gem 'gutentag', '~> 1.
|
72
|
+
gem 'gutentag', '~> 1.1.0'
|
72
73
|
```
|
73
74
|
|
74
75
|
Next: your tags get persisted to your database, so let's import and run the migrations to get the tables set up:
|
@@ -105,6 +106,12 @@ add_index :gutentag_tags, :taggings_count
|
|
105
106
|
|
106
107
|
<h2 id="upgrading">Upgrading</h2>
|
107
108
|
|
109
|
+
### 1.1.0
|
110
|
+
|
111
|
+
No breaking changes.
|
112
|
+
|
113
|
+
Thanks to [Robin](https://github.com/rmehner), Gutentag::Tag#name will now validate default database column lengths ([#41](https://github.com/pat/gutentag/pull/41)).
|
114
|
+
|
108
115
|
### 1.0.0
|
109
116
|
|
110
117
|
Behaviour that was deprecated in 0.9.0 (`has_many_tags`, `tagged_with` arguments) have now been removed.
|
@@ -139,6 +146,40 @@ rename_table :tags, :gutentag_tags
|
|
139
146
|
rename_table :taggings, :gutentag_taggings
|
140
147
|
```
|
141
148
|
|
149
|
+
<h2 id="configuration">Configuration</h2>
|
150
|
+
|
151
|
+
Gutentag tries to take a convention-over-configuration approach, while also striving to be modular enough to allow changes to behaviour in certain cases.
|
152
|
+
|
153
|
+
### Tag validations
|
154
|
+
|
155
|
+
The default validations on `Gutentag::Tag` are:
|
156
|
+
|
157
|
+
* presence of the tag name.
|
158
|
+
* case-insensitive uniqueness of the tag name.
|
159
|
+
* maximum length of the tag name (if the column has a limit).
|
160
|
+
|
161
|
+
You can view the logic for this in [`Gutentag::TagValidations`](lib/gutentag/tag_validations.rb), and you can set an alternative if you wish:
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
Gutentag.tag_validations = CustomTagValidations
|
165
|
+
```
|
166
|
+
|
167
|
+
The supplied value must respond to `call`, and the argument supplied is the model.
|
168
|
+
|
169
|
+
### Tag normalisation
|
170
|
+
|
171
|
+
Tag normalisation is used to convert supplied tag values consistently into string tag names. [The default](lib/gutentag.rb#L15) is to convert the value into a string, and then to lower-case.
|
172
|
+
|
173
|
+
If you want to do something different, provide an object that responds to call and accepts a single value to `Gutentag.normaliser`:
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
Gutentag.normaliser = lambda { |value| value.to_s.upcase }
|
177
|
+
```
|
178
|
+
|
179
|
+
### Case-sensitive tags
|
180
|
+
|
181
|
+
Gutentag ignores case by default, but can be customised to be case-sensitive by supplying your own validations and normaliser, as outlined by [Robin Mehner](https://github.com/rmehner) in [issue 42](https://github.com/pat/gutentag/issues/42). Further changes may be required for your schema though, depending on your database.
|
182
|
+
|
142
183
|
<h2 id="contribution">Contribution</h2>
|
143
184
|
|
144
185
|
Please note that this project now has a [Contributor Code of Conduct](http://contributor-covenant.org/version/1/0/0/). By participating in this project you agree to abide by its terms.
|
data/gutentag.gemspec
CHANGED
@@ -13,6 +13,9 @@ class Gutentag::TagValidations
|
|
13
13
|
klass.validates :name,
|
14
14
|
:presence => true,
|
15
15
|
:uniqueness => {:case_sensitive => false}
|
16
|
+
|
17
|
+
limit = klass.columns_hash["name"].limit
|
18
|
+
klass.validates_length_of :name, :maximum => limit if limit.present?
|
16
19
|
end
|
17
20
|
|
18
21
|
private
|
@@ -63,5 +63,22 @@ describe Gutentag::Tag, :type => :model do
|
|
63
63
|
tag = Gutentag::Tag.create(:name => "Pancakes")
|
64
64
|
expect(tag.errors[:name].length).to eq(1)
|
65
65
|
end
|
66
|
+
|
67
|
+
if ENV["DATABASE"] == "mysql" || (
|
68
|
+
Gem::Version.new(Rails.version) < Gem::Version.new("4.2.0")
|
69
|
+
)
|
70
|
+
# When using MySQL or Rails before 4.2, string columns convert to
|
71
|
+
# VARCHAR(255), therefore the column has a limit of 255, even though we
|
72
|
+
# did not specify a limit
|
73
|
+
it "validates the length of the name" do
|
74
|
+
tag = Gutentag::Tag.create(:name => "a" * 256)
|
75
|
+
expect(tag.errors[:name].length).to eq(1)
|
76
|
+
end
|
77
|
+
else
|
78
|
+
it "does not validate the length if the column has no limit" do
|
79
|
+
tag = Gutentag::Tag.create(:name => "a" * 256)
|
80
|
+
expect(tag.errors[:name].length).to eq(0)
|
81
|
+
end
|
82
|
+
end
|
66
83
|
end
|
67
84
|
end
|
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: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pat Allan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -174,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
174
|
version: '0'
|
175
175
|
requirements: []
|
176
176
|
rubyforge_project:
|
177
|
-
rubygems_version: 2.6.
|
177
|
+
rubygems_version: 2.6.14
|
178
178
|
signing_key:
|
179
179
|
specification_version: 4
|
180
180
|
summary: Good Tags
|