sluggify 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in sluggify.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require File.join(File.dirname(__FILE__), '/lib/sluggify/version')
4
+
5
+ require 'rake'
6
+ require 'rspec'
7
+ require 'rspec/core/rake_task'
8
+
9
+ RSpec::Core::RakeTask.new(:spec) do |spec|
10
+ spec.rspec_opts = %w[--format progress]
11
+ spec.pattern = "spec/unit/**/*_spec.rb"
12
+ end
13
+
14
+ task :default => :spec
data/lib/sluggify.rb ADDED
@@ -0,0 +1,2 @@
1
+ require "sluggify/version"
2
+ require "sluggify/sluggify"
@@ -0,0 +1,34 @@
1
+ module Sluggify
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ cattr_accessor :slug_field
6
+ end
7
+
8
+ def generate_slug
9
+ new_slug = self.send(self.class.slug_field).downcase.strip.gsub(/[\W]+/,"-")
10
+ new_slug_base = new_slug
11
+ if self.class.exists?(:slug_base => new_slug_base)
12
+ existing_slug = self.class.where(:slug_base => new_slug_base).sort(:created_at).last.slug
13
+ if (existing_slug.split("-").last.to_i == 0)
14
+ self.slug = new_slug + "-1"
15
+ else
16
+ new_slug_index = (existing_slug.split("-").last.to_i) + 1
17
+ new_slug_index = new_slug_index.to_s
18
+ self.slug = new_slug + "-" + new_slug_index
19
+ end
20
+ else
21
+ self.slug = new_slug
22
+ end
23
+ self.slug_base = new_slug_base
24
+ end
25
+
26
+ module ClassMethods
27
+ def sluggify(field_name,options)
28
+ self.slug_field=field_name
29
+ options[:on].each do |cb|
30
+ self.send(:"before_#{cb}", :generate_slug)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ module Sluggify
2
+ VERSION = "0.0.1"
3
+ end
data/sluggify.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "sluggify/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sluggify"
7
+ s.version = Sluggify::VERSION
8
+ s.authors = ["Deepak Prasanna"]
9
+ s.email = ["deepaksrm@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{It create a slug for your models}
12
+ s.description = %q{It create a slug for your models}
13
+
14
+ s.rubyforge_project = "sluggify"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency "mysql2"
23
+ s.add_development_dependency "rspec"
24
+
25
+ s.add_runtime_dependency "activesupport"
26
+ s.add_runtime_dependency "activerecord"
27
+ end
@@ -0,0 +1,5 @@
1
+ test:
2
+ adapter: mysql2
3
+ username: root
4
+ password: password
5
+ database: sluggify_test
@@ -0,0 +1,4 @@
1
+ class User < ActiveRecord::Base
2
+ include Sluggify
3
+ sluggify :name, :on=>[:create]
4
+ end
@@ -0,0 +1,16 @@
1
+ require 'active_record'
2
+ require 'sluggify'
3
+
4
+ config = YAML.load_file('spec/config/database.yml')
5
+ ActiveRecord::Base.establish_connection(config['test'])
6
+ ActiveRecord::Base.connection.drop_database config['test']['database']
7
+ ActiveRecord::Base.connection.create_database config['test']['database']
8
+ ActiveRecord::Base.establish_connection(config['test'])
9
+ ActiveRecord::Base.connection.create_table 'users', {:force => true} do |table|
10
+ table.column :name, :string
11
+ table.column :age, :integer
12
+ table.column :slug, :string
13
+ table.column :slug_base, :string
14
+ end
15
+
16
+ require 'models/user'
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe User do
4
+ let(:user) { User.create(:name => 'test') }
5
+
6
+ it 'should respond to generate_slug method' do
7
+ user.should respond_to(:generate_slug)
8
+ user.slug.should eq('test')
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sluggify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Deepak Prasanna
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-16 00:00:00.000000000 +05:30
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: mysql2
17
+ requirement: &83793880 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *83793880
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ requirement: &83793670 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *83793670
37
+ - !ruby/object:Gem::Dependency
38
+ name: activesupport
39
+ requirement: &83793450 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *83793450
48
+ - !ruby/object:Gem::Dependency
49
+ name: activerecord
50
+ requirement: &83793240 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *83793240
59
+ description: It create a slug for your models
60
+ email:
61
+ - deepaksrm@gmail.com
62
+ executables: []
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - .gitignore
67
+ - .swp
68
+ - Gemfile
69
+ - Rakefile
70
+ - lib/sluggify.rb
71
+ - lib/sluggify/sluggify.rb
72
+ - lib/sluggify/version.rb
73
+ - sluggify.gemspec
74
+ - spec/config/database.yml
75
+ - spec/models/user.rb
76
+ - spec/spec_helper.rb
77
+ - spec/unit/sluggify_spec.rb
78
+ has_rdoc: true
79
+ homepage: ''
80
+ licenses: []
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project: sluggify
99
+ rubygems_version: 1.6.2
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: It create a slug for your models
103
+ test_files: []