diff --git a/Rakefile b/Rakefile
index 7d03146..93b3e16 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,6 +1,6 @@
#!/usr/bin/env rake
-require 'bundler/gem_tasks'
-require 'rspec/core/rake_task'
+require "bundler/gem_tasks"
+require "rspec/core/rake_task"
RSpec::Core::RakeTask.new(:spec)
diff --git a/lib/slugtastic.rb b/lib/slugtastic.rb
index e108ebf..6e36a79 100644
--- a/lib/slugtastic.rb
+++ b/lib/slugtastic.rb
@@ -1,12 +1,12 @@
-require 'slugtastic/version'
-require 'slugtastic/model_additions'
-require 'slugtastic/railtie' if defined? Rails
+require "slugtastic/version"
+require "slugtastic/model_additions"
+require "slugtastic/railtie" if defined? Rails
module Slugtastic
def self.generate_slug(string, delimiter = nil)
return if string.nil?
slug = string.parameterize
- slug.gsub!('-', delimiter) if delimiter
+ slug.gsub!("-", delimiter) if delimiter
slug
end
end
diff --git a/lib/slugtastic/model_additions.rb b/lib/slugtastic/model_additions.rb
index e7bf34d..d8be2cd 100644
--- a/lib/slugtastic/model_additions.rb
+++ b/lib/slugtastic/model_additions.rb
@@ -2,8 +2,8 @@ module Slugtastic
module ModelAdditions
# To generate a slug from another value, call has_slug in any
# ActiveRecord model and pass in the name of the slug attribute.
- # By default the slug will be generated from the title attribute, but
- # you can specify by adding :from => {attribute}.
+ # By default the slug will be generated from the title attribute,
+ # but you can specify by adding :from => {attribute}.
#
# class Article < ActiveRecord::Base
# has_slug :slug, :from => :title
@@ -11,17 +11,15 @@ module Slugtastic
#
def slug(name, options = {})
options.reverse_merge!(from: :title)
+
before_validation do
if send(name).nil? || send(name).blank?
- send("#{name}=", Slugtastic.generate_slug(send(options[:from]), options[:delimiter]))
+ send(
+ "#{name}=",
+ Slugtastic.generate_slug(send(options[:from]), options[:delimiter]),
+ )
end
end
end
-
- def has_slug(name, options = {})
- $stderr.puts '[deprecated] Slugtastic: `has_slug` has been renamed `slug` and will likely '\
- 'be removed in a future version.'
- slug(name, options)
- end
end
end
diff --git a/lib/slugtastic/railtie.rb b/lib/slugtastic/railtie.rb
index 97c1b22..f597cc0 100644
--- a/lib/slugtastic/railtie.rb
+++ b/lib/slugtastic/railtie.rb
@@ -1,6 +1,6 @@
module Slugtastic
class Railtie < Rails::Railtie
- initializer 'slugtastic.model_additions' do
+ initializer "slugtastic.model_additions" do
ActiveSupport.on_load :active_record do
extend ModelAdditions
end
diff --git a/lib/slugtastic/version.rb b/lib/slugtastic/version.rb
index 669f9ff..e77c7c3 100644
--- a/lib/slugtastic/version.rb
+++ b/lib/slugtastic/version.rb
@@ -1,3 +1,3 @@
module Slugtastic
- VERSION = '1.3.0'.freeze
+ VERSION = "1.3.0".freeze
end
diff --git a/slugtastic.gemspec b/slugtastic.gemspec
index b7ea25f..ce9d9b9 100644
--- a/slugtastic.gemspec
+++ b/slugtastic.gemspec
@@ -1,22 +1,24 @@
# -*- encoding: utf-8 -*-
-require File.expand_path('../lib/slugtastic/version', __FILE__)
+
+require File.expand_path("lib/slugtastic/version", __dir__)
Gem::Specification.new do |gem|
gem.authors = ["Dan Barber"]
gem.email = ["danbee@gmail.com"]
- gem.licenses = ['MIT']
- gem.description = %q{A simple slug string generator for ActiveRecord. Will populate a slug attribute from another attribute.}
- gem.summary = %q{A simple slug string generator for ActiveRecord.}
+ gem.licenses = ["MIT"]
+ gem.description = "A simple slug string generator for ActiveRecord. " \
+ "Will populate a slug attribute from another attribute."
+ gem.summary = "A simple slug string generator for ActiveRecord."
gem.homepage = "http://danbarber.me/slugtastic"
gem.files = `git ls-files`.split($\)
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
gem.name = "slugtastic"
gem.require_paths = ["lib"]
gem.version = Slugtastic::VERSION
- gem.add_development_dependency "rake", "~> 11.1"
- gem.add_development_dependency "rspec", "~> 3.4"
- gem.add_development_dependency "supermodel", "~> 0"
+ gem.add_development_dependency "activemodel", "~> 5"
+ gem.add_development_dependency "rake", "~> 12.3"
+ gem.add_development_dependency "rspec", "~> 3.7"
end
diff --git a/spec/slugtastic/model_additions_spec.rb b/spec/slugtastic/model_additions_spec.rb
index 5c66243..968130a 100644
--- a/spec/slugtastic/model_additions_spec.rb
+++ b/spec/slugtastic/model_additions_spec.rb
@@ -1,9 +1,27 @@
# encoding: utf-8
-require 'spec_helper'
-class BaseModel < SuperModel::Base
+require "spec_helper"
+require "active_support/core_ext/hash/reverse_merge"
+require "active_model"
+
+class BaseModel
include ActiveModel::Validations::Callbacks
extend Slugtastic::ModelAdditions
+
+ def initialize(attrs = {})
+ attrs.each do |key, value|
+ instance_variable_set(:"@#{key}", value)
+ end
+ end
+
+ def self.create!(attrs)
+ new(attrs).save
+ end
+
+ def save
+ _run_validation_callbacks
+ self
+ end
end
class Model < BaseModel
@@ -18,37 +36,30 @@ end
class ModelDelimiter < BaseModel
attr_accessor :slug, :title
- slug :slug, delimiter: '_'
-end
-
-class ModelAlias < BaseModel
- attr_accessor :slug, :title
- has_slug :slug
+ slug :slug, delimiter: "_"
end
describe Slugtastic::ModelAdditions do
- it 'generates a slug from the name' do
- expect(Model.create!(name: 'A Simple Name').slug).to eq 'a-simple-name'
+ it "generates a slug from the name" do
+ expect(Model.create!(name: "A Simple Name").slug).to eq "a-simple-name"
end
- it 'defaults to generating the slug from title' do
- expect(ModelDefault.create!(title: 'A Simple Title').slug).to eq 'a-simple-title'
+ it "defaults to generating the slug from title" do
+ expect(ModelDefault.create!(title: "A Simple Title").slug)
+ .to eq "a-simple-title"
end
- it 'generates a slug from the title with delimiter substitutions' do
- expect(ModelDelimiter.create!(title: 'A Simple Title').slug).to eq 'a_simple_title'
+ it "generates a slug from the title with delimiter substitutions" do
+ expect(ModelDelimiter.create!(title: "A Simple Title").slug)
+ .to eq "a_simple_title"
end
it "doesn't regenerate the slug if it already exists" do
- model = Model.create!(name: 'A Simple Name')
- expect(model.slug).to eq 'a-simple-name'
+ model = Model.create!(name: "A Simple Name")
+ expect(model.slug).to eq "a-simple-name"
- model.title = 'A new title'
+ model.name = "A new title"
model.save
- expect(model.slug).to eq 'a-simple-name'
- end
-
- it 'aliases slug to has_slug for backwards compatibility' do
- expect(ModelAlias.create!(title: 'A Simple Title').slug).to eq 'a-simple-title'
+ expect(model.slug).to eq "a-simple-name"
end
end
diff --git a/spec/slugtastic_spec.rb b/spec/slugtastic_spec.rb
index f2a3e53..13b75aa 100644
--- a/spec/slugtastic_spec.rb
+++ b/spec/slugtastic_spec.rb
@@ -1,35 +1,43 @@
# encoding: utf-8
-require 'spec_helper'
+
+require "spec_helper"
describe Slugtastic do
- describe '.generate_slug' do
- it 'returns empty if the input string is empty' do
- expect(Slugtastic.generate_slug('')).to eq ''
+ describe ".generate_slug" do
+ it "returns empty if the input string is empty" do
+ expect(Slugtastic.generate_slug("")).to eq ""
end
- it 'generates a slug from a simple string' do
- expect(Slugtastic.generate_slug('A simple string.')).to eq 'a-simple-string'
+ it "generates a slug from a simple string" do
+ expect(Slugtastic.generate_slug("A simple string."))
+ .to eq "a-simple-string"
end
- it 'substitutes hyphens for delimiter if specified' do
- expect(Slugtastic.generate_slug('A simple string.', '_')).to eq 'a_simple_string'
+ it "substitutes hyphens for delimiter if specified" do
+ expect(Slugtastic.generate_slug("A simple string.", "_"))
+ .to eq "a_simple_string"
end
- it 'generates a slug from a string with numbers' do
- expect(Slugtastic.generate_slug('Slugtastic was built in 2012.')).to eq 'slugtastic-was-built-in-2012'
+ it "generates a slug from a string with numbers" do
+ expect(Slugtastic.generate_slug("Slugtastic was built in 2012."))
+ .to eq "slugtastic-was-built-in-2012"
end
- it 'handles strings with hypens in them' do
- expect(Slugtastic.generate_slug('A string - with Hyphens')).to eq 'a-string-with-hyphens'
+ it "handles strings with hypens in them" do
+ expect(Slugtastic.generate_slug("A string - with Hyphens"))
+ .to eq "a-string-with-hyphens"
end
- it 'handles strings with other characters in them' do
- expect(Slugtastic.generate_slug('A string, with /All sorts!')).to eq 'a-string-with-all-sorts'
+ it "handles strings with other characters in them" do
+ expect(Slugtastic.generate_slug("A string, with /All sorts!"))
+ .to eq "a-string-with-all-sorts"
end
- it 'handles basic transliteration' do
- expect(Slugtastic.generate_slug('Un été À la maison.')).to eq 'un-ete-a-la-maison'
- expect(Slugtastic.generate_slug('Ātri brūna lapsa')).to eq 'atri-bruna-lapsa'
+ it "handles basic transliteration" do
+ expect(Slugtastic.generate_slug("Un été À la maison."))
+ .to eq "un-ete-a-la-maison"
+ expect(Slugtastic.generate_slug("Ātri brūna lapsa"))
+ .to eq "atri-bruna-lapsa"
end
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 25053aa..34a0a94 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,2 +1 @@
-require 'slugtastic'
-require 'supermodel'
+require "slugtastic"