gutentag 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|