sluggi 0.3.0 → 0.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ecaade4de3ad956da896972e7506e70bbdad8fb1
4
- data.tar.gz: c65446d72980b88825ea24cb7e698359bfa1bb59
3
+ metadata.gz: 72a92d30f09969e63089958da3e197a5ffa57146
4
+ data.tar.gz: f95fc4c7371e7c2f6ae64524e01a0372fc584163
5
5
  SHA512:
6
- metadata.gz: 354149487f88bf268e4bb13edddd4a68dffbe025fb5fa4bc0cacb1780f0be4d69ff056007ef7d8605831b2e5207a23d9be3b067ce0f8222bad54bcba5d4e481b
7
- data.tar.gz: 057eb42b298de8d0216766b717c38a22b0d80ac1f01cb58f2ac49ee29409b054660c7194c7a7e7b21b8a1b763c50d1542135fafcfcfe5122fc57845a743e7dd1
6
+ metadata.gz: fe12fe4a76145b87e21e9a093524213fa8666dc8c7e2a06e53900431c58ee34508876e90f7205dd374f443d7097dbb117ae93bf12a36e067cc3d806eb0b877ae
7
+ data.tar.gz: 090fb62d93291fa03f7b41ee6b76c9da9ad7d23ce48d946095aa1cfed185bd00e83920aa9bd28220e002994967245c3ee4ad6e872d601e13a8c703cfd9eea043
@@ -1,14 +1,13 @@
1
- require 'rails/generators'
2
- require 'rails/generators/active_record'
1
+ require "rails/generators"
2
+ require "rails/generators/active_record"
3
3
 
4
4
  # Copy the migration to create the slugs table.
5
5
  class SluggiGenerator < ActiveRecord::Generators::Base
6
- argument :name, type: :string, default: 'required_but_not_used'
7
- source_root File.expand_path('../../migrations', __FILE__)
6
+ argument :name, type: :string, default: "required_but_not_used"
7
+ source_root File.expand_path("../../migrations", __FILE__)
8
8
 
9
9
  # Copy the migration template to db/migrate.
10
10
  def copy_files
11
- migration_template 'create_slugs.rb', 'db/migrate/create_slugs.rb'
11
+ migration_template "create_slugs.rb", "db/migrate/create_slugs.rb"
12
12
  end
13
-
14
13
  end
@@ -4,8 +4,8 @@ module Sluggi
4
4
 
5
5
  included do
6
6
  has_many :slugs,
7
- -> { order('slugs.id DESC') },
8
- class_name: 'Sluggi::Slug',
7
+ -> { order("slugs.id DESC") },
8
+ class_name: "Sluggi::Slug",
9
9
  as: :sluggable,
10
10
  dependent: :destroy
11
11
 
@@ -16,7 +16,7 @@ module Sluggi
16
16
  def find_slug!(slug)
17
17
  object = where(slug: slug).first || find_slugs(slug).first.try(:sluggable)
18
18
  unless object.is_a?(self)
19
- raise ActiveRecord::RecordNotFound, "Couldn't find #{self.name} with 'slug'='#{slug}'"
19
+ raise ActiveRecord::RecordNotFound, "Couldn't find #{name} with 'slug'='#{slug}'"
20
20
  end
21
21
  object
22
22
  end
@@ -30,7 +30,7 @@ module Sluggi
30
30
  end
31
31
  end
32
32
 
33
- private
33
+ private
34
34
 
35
35
  def create_slug
36
36
  value = clean_slug(slug_value)
@@ -39,6 +39,5 @@ module Sluggi
39
39
  self.class.find_slugs(value).delete_all # revert to previous slug & put first
40
40
  slugs.create(slug: value)
41
41
  end
42
-
43
42
  end
44
43
  end
@@ -1,12 +1,12 @@
1
1
  class CreateSlugs < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :slugs do |t|
4
- t.string :slug, null: false
5
- t.integer :sluggable_id, null: false
6
- t.string :sluggable_type, null: false
4
+ t.string :slug, null: false
5
+ t.integer :sluggable_id, null: false
6
+ t.string :sluggable_type, null: false
7
7
  t.datetime :created_at
8
8
  end
9
-
9
+
10
10
  add_index :slugs, [:slug, :sluggable_type], unique: true
11
11
  add_index :slugs, :sluggable_id
12
12
  end
data/lib/sluggi/model.rb CHANGED
@@ -13,7 +13,7 @@ module Sluggi
13
13
  slug_was
14
14
  end
15
15
 
16
- private
16
+ private
17
17
 
18
18
  def clean_slug(value)
19
19
  value.try :parameterize
@@ -1,3 +1,3 @@
1
1
  module Sluggi
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sluggi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tee Parham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-10 00:00:00.000000000 Z
11
+ date: 2015-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -87,12 +87,8 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - ".gitignore"
91
- - ".travis.yml"
92
- - Gemfile
93
90
  - LICENSE.txt
94
91
  - README.md
95
- - Rakefile
96
92
  - lib/sluggi.rb
97
93
  - lib/sluggi/generators/sluggi_generator.rb
98
94
  - lib/sluggi/history.rb
@@ -104,16 +100,6 @@ files:
104
100
  - lib/sluggi/validate_presence.rb
105
101
  - lib/sluggi/validate_uniqueness.rb
106
102
  - lib/sluggi/version.rb
107
- - sluggi.gemspec
108
- - test/generator_test.rb
109
- - test/history_test.rb
110
- - test/model_test.rb
111
- - test/slug_test.rb
112
- - test/slugged_test.rb
113
- - test/test_helper.rb
114
- - test/validate_presence_test.rb
115
- - test/validate_uniqueness_test.rb
116
- - test/validates_exclusion_of_test.rb
117
103
  homepage: https://github.com/neighborland/sluggi
118
104
  licenses:
119
105
  - MIT
@@ -134,17 +120,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
120
  version: '0'
135
121
  requirements: []
136
122
  rubyforge_project:
137
- rubygems_version: 2.4.8
123
+ rubygems_version: 2.5.1
138
124
  signing_key:
139
125
  specification_version: 4
140
126
  summary: Rails Slug Generator
141
- test_files:
142
- - test/generator_test.rb
143
- - test/history_test.rb
144
- - test/model_test.rb
145
- - test/slug_test.rb
146
- - test/slugged_test.rb
147
- - test/test_helper.rb
148
- - test/validate_presence_test.rb
149
- - test/validate_uniqueness_test.rb
150
- - test/validates_exclusion_of_test.rb
127
+ test_files: []
128
+ has_rdoc:
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- .ruby-version
2
- Gemfile.lock
3
- coverage
4
- pkg
5
- tmp
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- sudo: false
4
- rvm:
5
- - 2.2
6
- - 2.1
7
- - 2.0.0
8
- - 1.9.3
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- task default: [:test]
5
-
6
- Rake::TestTask.new(:test) do |t|
7
- t.libs << 'test'
8
- t.test_files = %w(test/**/*.rb)
9
- t.verbose = false
10
- end
data/sluggi.gemspec DELETED
@@ -1,25 +0,0 @@
1
- require './lib/sluggi/version'
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = "sluggi"
5
- spec.version = Sluggi::VERSION
6
- spec.authors = ["Tee Parham"]
7
- spec.email = ["tee@neighborland.com"]
8
- spec.summary = %q{Rails Slug Generator}
9
- spec.description = %q{A Rails slug generator inspired by friendly_id}
10
- spec.homepage = "https://github.com/neighborland/sluggi"
11
- spec.license = "MIT"
12
-
13
- spec.files = `git ls-files`.split($/)
14
- spec.test_files = spec.files.grep(%r{^(test)/})
15
- spec.require_paths = ["lib"]
16
-
17
- spec.required_ruby_version = ">= 1.9.3"
18
-
19
- spec.add_dependency "activerecord", "~> 4.0"
20
- spec.add_dependency "railties", "~> 4.0"
21
-
22
- spec.add_development_dependency "rake", "~> 10.4"
23
- spec.add_development_dependency "sqlite3", "~> 1.3"
24
- spec.add_development_dependency "mocha", "~> 1.0"
25
- end
@@ -1,17 +0,0 @@
1
- require 'test_helper'
2
- require 'rails/generators/test_case'
3
-
4
- class GeneratorTest < Rails::Generators::TestCase
5
- tests ::SluggiGenerator
6
- destination File.expand_path("../../tmp", __FILE__)
7
- setup :prepare_destination
8
-
9
- test "generate a migration" do
10
- begin
11
- run_generator
12
- assert_migration "db/migrate/create_slugs"
13
- ensure
14
- FileUtils.rm_rf self.destination_root
15
- end
16
- end
17
- end
data/test/history_test.rb DELETED
@@ -1,123 +0,0 @@
1
- require 'test_helper'
2
-
3
- class HistoryTest < MiniTest::Spec
4
- class ::Cat < ActiveRecord::Base
5
- include Sluggi::Slugged
6
- include Sluggi::History
7
-
8
- def slug_value
9
- name
10
- end
11
-
12
- def slug_value_changed?
13
- name_changed?
14
- end
15
- end
16
-
17
- class ::Dog < ActiveRecord::Base
18
- include Sluggi::Slugged
19
- include Sluggi::History
20
-
21
- def slug_value
22
- name
23
- end
24
-
25
- def slug_value_changed?
26
- name_changed?
27
- end
28
- end
29
-
30
- class ::BigDog < ::Dog
31
- end
32
-
33
- class ::LittleDog < ::Dog
34
- end
35
-
36
- before do
37
- Cat.delete_all
38
- Sluggi::Slug.delete_all
39
- end
40
-
41
- describe ".find_slug!" do
42
- it "finds current slug" do
43
- cat = Cat.create(name: 'Tsim Tung Brother Cream')
44
- assert_equal cat, Cat.find_slug!('tsim-tung-brother-cream')
45
- end
46
-
47
- it "finds both current and historical slug" do
48
- cat = Cat.create(name: 'Tsim Tung Brother Cream')
49
- cat.name = 'Cream Aberdeen'
50
- cat.save!
51
- assert_equal cat, Cat.find_slug!('tsim-tung-brother-cream')
52
- assert_equal cat, Cat.find_slug!('cream-aberdeen')
53
- end
54
-
55
- it "raises when not found" do
56
- assert_raises(ActiveRecord::RecordNotFound) do
57
- Cat.find_slug! 'garfield'
58
- end
59
- end
60
-
61
- it "finds STI classes" do
62
- big_dog = BigDog.create(name: 'Snoop')
63
- assert_equal big_dog, Dog.find_slug!('snoop')
64
- assert_equal big_dog, BigDog.find_slug!('snoop')
65
- error = assert_raises(ActiveRecord::RecordNotFound) do
66
- LittleDog.find_slug!('snoop')
67
- end
68
- assert_equal "Couldn't find LittleDog with 'slug'='snoop'", error.message
69
- end
70
- end
71
-
72
- describe ".slug_exists?" do
73
- it "exists" do
74
- Cat.create(name: 'Tsim Tung Brother Cream')
75
- assert Cat.slug_exists?('tsim-tung-brother-cream')
76
- end
77
-
78
- it "does not exist" do
79
- refute Cat.slug_exists?('tsim-tung-brother-cream')
80
- end
81
- end
82
-
83
- describe ".find_slugs" do
84
- it "is empty" do
85
- assert_empty Cat.find_slugs('garfield')
86
- end
87
-
88
- it "finds historical slug" do
89
- cat = Cat.create(name: 'Tsim Tung Brother Cream')
90
- slugs = Cat.find_slugs('tsim-tung-brother-cream')
91
- assert_equal 1, slugs.size
92
- slug = slugs.first
93
- assert_equal 'tsim-tung-brother-cream', slug.slug
94
- assert_equal 'Cat', slug.sluggable_type
95
- assert_equal cat.id, slug.sluggable_id
96
- end
97
- end
98
-
99
- describe ".after_save" do
100
- it "creates a slug when model is created" do
101
- cat = Cat.create(name: 'Tsim Tung Brother Cream')
102
- assert_equal 1, cat.slugs.size
103
- assert_equal 'tsim-tung-brother-cream', cat.slugs.first.slug
104
- end
105
-
106
- it "creates a slug when model slug changes" do
107
- cat = Cat.create(name: 'Tsim Tung Brother Cream')
108
- cat.name = 'Cream Aberdeen'
109
- cat.save!
110
- assert_equal 2, cat.slugs.size
111
- assert_equal ['cream-aberdeen', 'tsim-tung-brother-cream'], cat.slugs.map(&:slug)
112
- end
113
-
114
- it "does not create a slug when model slug is unchanged" do
115
- cat = Cat.create(name: 'Tsim Tung Brother Cream')
116
- cat.factoid = 'aka Cream Aberdeen'
117
- cat.save!
118
- assert_equal 1, cat.slugs.size
119
- assert_equal 'tsim-tung-brother-cream', cat.slugs.first.slug
120
- end
121
- end
122
-
123
- end
data/test/model_test.rb DELETED
@@ -1,73 +0,0 @@
1
- require "test_helper"
2
-
3
- class ModelTest < MiniTest::Spec
4
- class IncompleteCat < ActiveRecord::Base
5
- self.table_name = 'cats'
6
- include Sluggi::Model
7
- end
8
-
9
- class Cat < ActiveRecord::Base
10
- include Sluggi::Model
11
-
12
- def slug_value
13
- name
14
- end
15
-
16
- def slug_value_changed?
17
- name_changed?
18
- end
19
- end
20
-
21
- class CandidateCat < ActiveRecord::Base
22
- self.table_name = 'cats'
23
- include Sluggi::Model
24
-
25
- def slug_candidates
26
- [nil, name]
27
- end
28
-
29
- def slug_value_changed?
30
- name_changed?
31
- end
32
- end
33
-
34
- it "raises when slug_value is not implemented" do
35
- assert_raises(NotImplementedError) do
36
- IncompleteCat.new.valid?
37
- end
38
- end
39
-
40
- describe "#to_param" do
41
- before do
42
- Cat.delete_all
43
- @cat = Cat.new(name: 'Tuxedo Stan')
44
- end
45
-
46
- it "is nil when new" do
47
- assert_nil @cat.to_param
48
- end
49
-
50
- it "is the slug when persisted" do
51
- @cat.save!
52
- assert_equal 'tuxedo-stan', @cat.to_param
53
- end
54
-
55
- it "is the old slug when changed but not saved" do
56
- @cat.save!
57
- @cat.slug = 'ketzel'
58
- assert_equal 'tuxedo-stan', @cat.to_param
59
- end
60
- end
61
-
62
- it "sets slug from candidates on validation" do
63
- cat = CandidateCat.new(name: 'Smokey')
64
- assert cat.valid?
65
- assert_equal 'smokey', cat.slug
66
- end
67
-
68
- it "sets slug on validation" do
69
- cat = Cat.new(name: 'Prince Chunk')
70
- assert cat.valid?
71
- assert_equal 'prince-chunk', cat.slug
72
- end
73
- end
data/test/slug_test.rb DELETED
@@ -1,35 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Sluggi
4
- class SlugTest < MiniTest::Spec
5
- describe "validation" do
6
- it "is not valid" do
7
- slug = Slug.new
8
- refute slug.valid?
9
- end
10
-
11
- it "is valid" do
12
- slug = Slug.new(sluggable_type: 'Cat', sluggable_id: 1, slug: 'garfield')
13
- assert slug.valid?
14
- end
15
- end
16
-
17
- describe ".find_type" do
18
- it "finds" do
19
- slug = Slug.create(sluggable_type: 'Cat', sluggable_id: 1, slug: 'garfield')
20
- assert_equal slug, Slug.find_type('garfield', 'Cat').first
21
- end
22
- end
23
-
24
- describe "#to_param" do
25
- it "is nil" do
26
- assert_nil Slug.new.to_param
27
- end
28
-
29
- it "is slug" do
30
- assert_equal 'meow', Slug.new(slug: 'meow').to_param
31
- end
32
- end
33
-
34
- end
35
- end
data/test/slugged_test.rb DELETED
@@ -1,31 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SluggedTest < MiniTest::Spec
4
- class Cat < ActiveRecord::Base
5
- include Sluggi::Slugged
6
-
7
- def slug_value
8
- name
9
- end
10
-
11
- def slug_value_changed?
12
- name_changed?
13
- end
14
- end
15
-
16
- it "includes ValidatePresence" do
17
- assert Cat.new.is_a? Sluggi::ValidatePresence
18
- end
19
-
20
- it "includes ValidateUniqueness" do
21
- assert Cat.new.is_a? Sluggi::ValidateUniqueness
22
- end
23
-
24
- it "includes ValidateExclusionOf" do
25
- assert Cat.new.is_a? Sluggi::ValidateExclusionOf
26
- end
27
-
28
- it "includes Model" do
29
- assert Cat.new.is_a? Sluggi::Model
30
- end
31
- end
data/test/test_helper.rb DELETED
@@ -1,48 +0,0 @@
1
- #require 'coveralls'
2
- #Coveralls.wear!
3
-
4
- require 'minitest/autorun'
5
- require 'active_support'
6
- require 'active_record'
7
- require 'sqlite3'
8
- require 'sluggi'
9
- require 'mocha/setup'
10
-
11
- ActiveRecord::Base.logger = Logger.new(STDERR) if ENV["VERBOSE"]
12
-
13
- ActiveRecord::Base.establish_connection(
14
- adapter: "sqlite3",
15
- database: ":memory:"
16
- )
17
-
18
- unless ActiveRecord::Base.connection.tables.include?('cats')
19
- ActiveRecord::Schema.define do
20
- create_table :cats do |t|
21
- t.datetime :created_at
22
- t.string :factoid
23
- t.string :name
24
- t.string :slug
25
- end
26
-
27
- create_table :slugs do |t|
28
- t.string :slug, null: false
29
- t.integer :sluggable_id, null: false
30
- t.string :sluggable_type
31
- t.datetime :created_at
32
- end
33
-
34
- create_table :dogs do |t|
35
- t.datetime :created_at
36
- t.string :type
37
- t.string :name
38
- t.string :slug
39
- end
40
- end
41
- end
42
-
43
- I18n.enforce_available_locales = true
44
-
45
- # suppress deprecation warning
46
- ActiveSupport.test_order = :random
47
-
48
- # Thanks to this List of Cats: http://en.wikipedia.org/wiki/List_of_cats
@@ -1,12 +0,0 @@
1
- require "test_helper"
2
-
3
- class ValidatePresenceTest < MiniTest::Spec
4
- class Cat < ActiveRecord::Base
5
- include Sluggi::ValidatePresence
6
- end
7
-
8
- it "validates presence of slug" do
9
- refute Cat.new(slug: '').valid?
10
- assert Cat.new(slug: 'foo').valid?
11
- end
12
- end
@@ -1,32 +0,0 @@
1
- require "test_helper"
2
-
3
- class ValidateUniquenessTest < MiniTest::Spec
4
- class Cat < ActiveRecord::Base
5
- include Sluggi::Model
6
- include Sluggi::ValidateUniqueness
7
-
8
- def slug_value
9
- name
10
- end
11
-
12
- def slug_value_changed?
13
- name_changed?
14
- end
15
- end
16
-
17
- it "validates slug is unique" do
18
- Cat.create(slug: "mrs-chippy")
19
- cat = Cat.new(name: "Mrs. Chippy")
20
- refute cat.valid?
21
- assert_equal "has already been taken", cat.errors[:slug].first
22
- assert_nil cat.to_param
23
- end
24
-
25
- it "does not validate uniqueness when slug is unchanged" do
26
- cat = Cat.create(slug: "garfield")
27
- cat.factoid = "factoid"
28
- refute cat.slug_value_changed?
29
- ActiveRecord::Validations::UniquenessValidator.any_instance.expects(:validate_each).never
30
- assert cat.valid?
31
- end
32
- end
@@ -1,25 +0,0 @@
1
- require "test_helper"
2
-
3
- class ValidatesExclusionOfTest < MiniTest::Spec
4
- class Cat < ActiveRecord::Base
5
- include Sluggi::ValidateExclusionOf
6
- end
7
-
8
- describe ".reserved_slugs" do
9
- %w(create login users).each do |word|
10
- it "includes #{word}" do
11
- assert_includes Cat.reserved_slugs, word
12
- end
13
- end
14
-
15
- it "does not include valid slug" do
16
- refute_includes Cat.reserved_slugs, 'something'
17
- end
18
- end
19
-
20
- describe "validation" do
21
- it "ensures slug is not a reserved word" do
22
- refute Cat.new(slug: 'edit').valid?
23
- end
24
- end
25
- end