permalink 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour --format documentation
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,81 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ permalink (1.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ activemodel (3.0.5)
10
+ activesupport (= 3.0.5)
11
+ builder (~> 2.1.2)
12
+ i18n (~> 0.4)
13
+ activerecord (3.0.5)
14
+ activemodel (= 3.0.5)
15
+ activesupport (= 3.0.5)
16
+ arel (~> 2.0.2)
17
+ tzinfo (~> 0.3.23)
18
+ activesupport (3.0.5)
19
+ archive-tar-minitar (0.5.2)
20
+ arel (2.0.9)
21
+ bson (1.2.4)
22
+ bson_ext (1.2.4)
23
+ builder (2.1.2)
24
+ columnize (0.3.2)
25
+ diff-lcs (1.1.2)
26
+ i18n (0.5.0)
27
+ jnunemaker-validatable (1.8.4)
28
+ activesupport (>= 2.3.4)
29
+ linecache19 (0.5.11)
30
+ ruby_core_source (>= 0.1.4)
31
+ mongo (1.2.2)
32
+ bson (>= 1.2.2)
33
+ mongo_mapper (0.8.6)
34
+ activesupport (>= 2.3.4)
35
+ jnunemaker-validatable (~> 1.8.4)
36
+ plucky (~> 0.3.6)
37
+ mongoid (2.0.0.rc.7)
38
+ activemodel (~> 3.0)
39
+ mongo (~> 1.2)
40
+ tzinfo (~> 0.3.22)
41
+ will_paginate (~> 3.0.pre)
42
+ plucky (0.3.6)
43
+ mongo (~> 1.1)
44
+ rspec (2.5.0)
45
+ rspec-core (~> 2.5.0)
46
+ rspec-expectations (~> 2.5.0)
47
+ rspec-mocks (~> 2.5.0)
48
+ rspec-core (2.5.1)
49
+ rspec-expectations (2.5.0)
50
+ diff-lcs (~> 1.1.2)
51
+ rspec-mocks (2.5.0)
52
+ ruby-debug-base19 (0.11.24)
53
+ columnize (>= 0.3.1)
54
+ linecache19 (>= 0.5.11)
55
+ ruby_core_source (>= 0.1.4)
56
+ ruby-debug19 (0.11.6)
57
+ columnize (>= 0.3.1)
58
+ linecache19 (>= 0.5.11)
59
+ ruby-debug-base19 (>= 0.11.19)
60
+ ruby_core_source (0.1.4)
61
+ archive-tar-minitar (>= 0.5.2)
62
+ sqlite3 (1.3.3)
63
+ sqlite3-ruby (1.3.3)
64
+ sqlite3 (>= 1.3.3)
65
+ test-unit (2.2.0)
66
+ tzinfo (0.3.24)
67
+ will_paginate (3.0.pre2)
68
+
69
+ PLATFORMS
70
+ ruby
71
+
72
+ DEPENDENCIES
73
+ activerecord
74
+ bson_ext
75
+ mongo_mapper (~> 0.8.6)
76
+ mongoid (~> 2.0.0.rc.7)
77
+ permalink!
78
+ rspec (~> 2.5.0)
79
+ ruby-debug19
80
+ sqlite3-ruby
81
+ test-unit
data/README.markdown CHANGED
@@ -51,7 +51,7 @@ to generate a permalink when `before_save` callback is evaluated and the instanc
51
51
 
52
52
  ## License
53
53
 
54
- Copyright (c) 2008 Nando Vieira, released under the MIT license
54
+ Copyright (c) 2011 Nando Vieira, released under the MIT license
55
55
 
56
56
  Permission is hereby granted, free of charge, to any person obtaining
57
57
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -1,31 +1,5 @@
1
- require "rake/testtask"
2
- require File.dirname(__FILE__) + "/lib/permalink/version"
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
3
 
4
- desc "Default: run unit tests."
5
- task :default => :test
6
-
7
- desc "Run tests"
8
- Rake::TestTask.new(:test) do |t|
9
- t.libs << "lib"
10
- t.libs << "test"
11
- t.pattern = "test/**/*_test.rb"
12
- t.verbose = true
13
- end
14
-
15
- begin
16
- require "jeweler"
17
-
18
- JEWEL = Jeweler::Tasks.new do |gem|
19
- gem.name = "permalink"
20
- gem.email = "fnando.vieira@gmail.com"
21
- gem.homepage = "http://github.com/fnando/permalink"
22
- gem.authors = ["Nando Vieira"]
23
- gem.version = Permalink::Version::STRING
24
- gem.summary = "ActiveRecord plugin for automatically converting fields to permalinks."
25
- gem.files = FileList["README.markdown", "{lib,test}/**/*", "Rakefile"]
26
- end
27
-
28
- Jeweler::GemcutterTasks.new
29
- rescue LoadError => e
30
- puts "[JEWELER] You can't build a gem until you install jeweler with `gem install jeweler`"
31
- end
4
+ require "rspec/core/rake_task"
5
+ RSpec::Core::RakeTask.new
data/lib/permalink.rb CHANGED
@@ -1,92 +1,8 @@
1
1
  require "permalink/string_ext"
2
- require "active_record"
2
+ require "permalink/orm/base"
3
+ require "permalink/orm/active_record"
4
+ require "permalink/orm/mongo_mapper"
5
+ require "permalink/orm/mongoid"
3
6
 
4
- module Permalink
5
- def self.included(base)
6
- base.extend ClassMethods
7
-
8
- class << base
9
- attr_accessor :permalink_options
10
- end
11
- end
12
-
13
- module ClassMethods
14
- # permalink :title
15
- # permalink :title, :to => :custom_permalink_field
16
- # permalink :title, :to => :permalink, :to_param => [:id, :permalink]
17
- # permalink :title, :unique => true
18
- def permalink(from, options={})
19
- options = {
20
- :to => :permalink,
21
- :to_param => [:id, :permalink],
22
- :unique => false
23
- }.merge(options)
24
-
25
- self.permalink_options = {
26
- :from_column_name => from,
27
- :to_column_name => options[:to],
28
- :to_param => [options[:to_param]].flatten,
29
- :unique => options[:unique]
30
- }
31
-
32
- include InstanceMethods
33
-
34
- before_validation :create_permalink
35
- before_save :create_permalink
36
- end
37
- end
38
-
39
- module InstanceMethods
40
- def to_param
41
- to_param_option = self.class.permalink_options[:to_param]
42
-
43
- to_param_option.compact.collect do |name|
44
- if respond_to?(name)
45
- send(name).to_s
46
- else
47
- name.to_s
48
- end
49
- end.reject(&:blank?).join('-')
50
- end
51
-
52
- private
53
- def next_available_permalink(_permalink)
54
- the_permalink = _permalink
55
-
56
- if self.class.permalink_options[:unique]
57
- suffix = 2
58
-
59
- while self.class.first(:conditions => {to_permalink_name => the_permalink}, :select => self.class.primary_key)
60
- the_permalink = "#{_permalink}-#{suffix}"
61
- suffix += 1
62
- end
63
- end
64
-
65
- the_permalink
66
- end
67
-
68
- def from_permalink_name
69
- self.class.permalink_options[:from_column_name]
70
- end
71
-
72
- def to_permalink_name
73
- self.class.permalink_options[:to_column_name]
74
- end
75
-
76
- def from_permalink_value
77
- read_attribute(from_permalink_name)
78
- end
79
-
80
- def to_permalink_value
81
- read_attribute(to_permalink_name)
82
- end
83
-
84
- def create_permalink
85
- unless from_permalink_value.blank? || !to_permalink_value.blank?
86
- write_attribute(to_permalink_name, next_available_permalink(from_permalink_value.to_s.to_permalink))
87
- end
88
- end
89
- end
90
- end
91
-
92
- ActiveRecord::Base.send(:include, Permalink)
7
+ ActiveRecord::Base.send(:include, Permalink::Orm::ActiveRecord)
8
+ Mongoid::Document::ClassMethods.send(:include, Permalink::Orm::Mongoid) if defined?(Mongoid)
@@ -0,0 +1,26 @@
1
+ module Permalink
2
+ module Orm
3
+ module ActiveRecord
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ base.extend(Permalink::Orm::Base::ClassMethods)
7
+ class << base; attr_accessor :permalink_options; end
8
+ end
9
+
10
+ module ClassMethods
11
+ # permalink :title
12
+ # permalink :title, :to => :custom_permalink_field
13
+ # permalink :title, :to => :permalink, :to_param => [:id, :permalink]
14
+ # permalink :title, :unique => true
15
+ def permalink(from, options={})
16
+ include Permalink::Orm::Base::InstanceMethods
17
+ setup_permalink(
18
+ {:to_param => [:id, :permalink]},
19
+ from,
20
+ options
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,77 @@
1
+ module Permalink
2
+ module Orm
3
+ module Base
4
+ module ClassMethods
5
+ def setup_permalink(orm_options, from, options)
6
+ options.reverse_merge!(orm_options)
7
+ options.reverse_merge!({
8
+ :to => :permalink,
9
+ :unique => false
10
+ })
11
+
12
+ self.permalink_options = {
13
+ :from_column_name => from,
14
+ :to_column_name => options[:to],
15
+ :to_param => [options[:to_param]].flatten,
16
+ :unique => options[:unique]
17
+ }
18
+
19
+ before_validation :create_permalink
20
+ before_save :create_permalink
21
+ end
22
+ end
23
+
24
+ module InstanceMethods
25
+ def to_param
26
+ to_param_option = self.class.permalink_options[:to_param]
27
+
28
+ to_param_option.compact.collect do |name|
29
+ if respond_to?(name)
30
+ send(name).to_s
31
+ else
32
+ name.to_s
33
+ end
34
+ end.reject(&:blank?).join("-")
35
+ end
36
+
37
+ private
38
+ def next_available_permalink(_permalink)
39
+ the_permalink = _permalink
40
+
41
+ if self.class.permalink_options[:unique]
42
+ suffix = 2
43
+
44
+ while self.class.where(to_permalink_name => the_permalink).first
45
+ the_permalink = "#{_permalink}-#{suffix}"
46
+ suffix += 1
47
+ end
48
+ end
49
+
50
+ the_permalink
51
+ end
52
+
53
+ def from_permalink_name
54
+ self.class.permalink_options[:from_column_name]
55
+ end
56
+
57
+ def to_permalink_name
58
+ self.class.permalink_options[:to_column_name]
59
+ end
60
+
61
+ def from_permalink_value
62
+ read_attribute(from_permalink_name)
63
+ end
64
+
65
+ def to_permalink_value
66
+ read_attribute(to_permalink_name)
67
+ end
68
+
69
+ def create_permalink
70
+ unless from_permalink_value.blank? || !to_permalink_value.blank?
71
+ write_attribute(to_permalink_name, next_available_permalink(from_permalink_value.to_s.to_permalink))
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,28 @@
1
+ module Permalink
2
+ module Orm
3
+ module MongoMapper
4
+ def self.included(base)
5
+ base.extend(Permalink::Orm::Base::ClassMethods)
6
+ base.extend(ClassMethods)
7
+ class << base; attr_accessor :permalink_options; end
8
+ end
9
+
10
+ module ClassMethods
11
+ # permalink :title
12
+ # permalink :title, :to => :custom_permalink_field
13
+ # permalink :title, :to => :permalink, :to_param => [:id, :permalink]
14
+ # permalink :title, :unique => true
15
+ def permalink(from, options={})
16
+ include Permalink::Orm::Base::InstanceMethods
17
+ setup_permalink(
18
+ {:to_param => :permalink},
19
+ from,
20
+ options
21
+ )
22
+
23
+ key options[:to], String, :index => true
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ module Permalink
2
+ module Orm
3
+ module Mongoid
4
+ include Permalink::Orm::Base::ClassMethods
5
+ attr_accessor :permalink_options
6
+
7
+ # permalink :title
8
+ # permalink :title, :to => :custom_permalink_field
9
+ # permalink :title, :to => :permalink, :to_param => [:id, :permalink]
10
+ # permalink :title, :unique => true
11
+ def permalink(from, options={})
12
+ include Permalink::Orm::Base::InstanceMethods
13
+ setup_permalink(
14
+ {:to_param => :permalink},
15
+ from,
16
+ options
17
+ )
18
+
19
+ field options[:to]
20
+ key options[:to]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,7 +1,7 @@
1
1
  module Permalink
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 0
4
+ MINOR = 1
5
5
  PATCH = 0
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
data/permalink.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "permalink/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "permalink"
7
+ s.version = Permalink::Version::STRING
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Nando Vieira"]
10
+ s.email = ["fnando.vieira@gmail.com"]
11
+ s.homepage = "http://rubygems.org/gems/permalink"
12
+ s.summary = "Generate permalink attributes on ActiveRecord"
13
+ s.description = s.summary
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency "activerecord"
21
+ s.add_development_dependency "sqlite3-ruby"
22
+ s.add_development_dependency "test-unit"
23
+ s.add_development_dependency "rspec", "~> 2.5.0"
24
+ s.add_development_dependency "mongoid", "~> 2.0.0.rc.7"
25
+ s.add_development_dependency "mongo_mapper", "~> 0.8.6"
26
+ s.add_development_dependency "bson_ext"
27
+ s.add_development_dependency "ruby-debug19" if RUBY_VERSION >= "1.9"
28
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Permalink::Orm::ActiveRecord do
4
+ let(:model) { Post }
5
+ it_should_behave_like "orm"
6
+
7
+ it "should override to_param method" do
8
+ model.permalink :title
9
+
10
+ record = model.create(:title => "Some nice post")
11
+ record.to_param.should == "#{record.id}-some-nice-post"
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Permalink::Orm::MongoMapper do
4
+ let(:model) { Page }
5
+ it_should_behave_like "orm"
6
+
7
+ it "should override to_param method" do
8
+ model.permalink :title
9
+
10
+ record = model.create(:title => "Some nice post")
11
+ record.to_param.should == "some-nice-post"
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe Permalink::Orm::Mongoid do
4
+ before { pending }
5
+
6
+ let(:model) { Article }
7
+ it_should_behave_like "orm"
8
+
9
+ it "should override to_param method" do
10
+ model.permalink :title
11
+
12
+ record = model.create(:title => "Some nice post")
13
+ record.to_param.should == "some-nice-post"
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require "spec_helper"
3
+
4
+ describe "String#to_permalink" do
5
+ SAMPLES = {
6
+ 'This IS a Tripped out title!!.!1 (well/ not really)' => 'this-is-a-tripped-out-title-1-well-not-really',
7
+ '////// meph1sto r0x ! \\\\\\' => 'meph1sto-r0x',
8
+ 'āčēģīķļņū' => 'acegiklnu',
9
+ '中文測試 chinese text' => 'chinese-text',
10
+ 'some-)()()-ExtRa!/// .data==?> to \/\/test' => 'some-extra-data-to-test',
11
+ 'http://simplesideias.com.br/tags/' => 'http-simplesideias-com-br-tags',
12
+ "Don't Repeat Yourself (DRY)" => 'don-t-repeat-yourself-dry',
13
+ "Text\nwith\nline\n\n\tbreaks" => 'text-with-line-breaks'
14
+ }
15
+
16
+ it "should create permalink using to_permalink" do
17
+ SAMPLES.each do |from, to|
18
+ from.to_permalink.should == to
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ require "mongo_mapper"
2
+ # require "mongoid"
3
+ require "rspec"
4
+ require "active_record"
5
+ require "permalink"
6
+
7
+ # Setup ActiveRecord
8
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
9
+
10
+ # Setup MongoMapper
11
+ MongoMapper.connection = Mongo::Connection.new("localhost")
12
+ MongoMapper.database = "permalink"
13
+
14
+ # Setup Mongoid
15
+ # Mongoid.configure do |config|
16
+ # name = "permalink"
17
+ # host = "localhost"
18
+ # config.master = Mongo::Connection.new.db(name)
19
+ # config.persist_in_safe_mode = false
20
+ # end
21
+
22
+ load("support/schema.rb")
23
+ require "support/page"
24
+ require "support/shared"
25
+ require "support/post"
26
+ # require "support/article"
@@ -0,0 +1,4 @@
1
+ class Article
2
+ include Mongoid::Document
3
+ field :title
4
+ end
@@ -0,0 +1,5 @@
1
+ class Page
2
+ include MongoMapper::Document
3
+ include Permalink::Orm::MongoMapper
4
+ key :title, String
5
+ end
@@ -0,0 +1,2 @@
1
+ class Post < ActiveRecord::Base
2
+ end
@@ -0,0 +1,5 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+ create_table :posts do |t|
3
+ t.string :title, :permalink, :slug
4
+ end
5
+ end
@@ -0,0 +1,87 @@
1
+ shared_examples_for "orm" do
2
+ before do
3
+ model.delete_all
4
+ model.permalink :title
5
+ end
6
+
7
+ it "should respond to options" do
8
+ model.should respond_to(:permalink_options)
9
+ end
10
+
11
+ it "should use default options" do
12
+ model.permalink :title
13
+ record = model.create(:title => "Some nice post")
14
+ record.permalink.should == "some-nice-post"
15
+ end
16
+
17
+ it "should use custom attribute" do
18
+ model.permalink :title, :to => :slug
19
+ record = model.create(:title => "Some nice post")
20
+ record.slug.should == "some-nice-post"
21
+ end
22
+
23
+ it "should set permalink before_save" do
24
+ record = model.new(:title => "Some nice post")
25
+ record.permalink.should be_nil
26
+ record.valid?
27
+ record.permalink.should == "some-nice-post"
28
+ end
29
+
30
+ it "should create unique permalinks" do
31
+ model.permalink :title, :unique => true
32
+
33
+ record = model.create(:title => "Some nice post")
34
+ record.permalink.should == "some-nice-post"
35
+
36
+ record = model.create(:title => "Some nice post")
37
+ record.permalink.should == "some-nice-post-2"
38
+
39
+ record = model.create(:title => "Some nice post")
40
+ record.permalink.should == "some-nice-post-3"
41
+ end
42
+
43
+ it "should return to_param for unique permalink" do
44
+ model.permalink :title, :to_param => :permalink, :unique => true
45
+
46
+ record = model.create(:title => "Ruby")
47
+ record.to_param.should == "ruby"
48
+
49
+ record = model.create(:title => "Ruby")
50
+ record.to_param.should == "ruby-2"
51
+ end
52
+
53
+ it "should override to_param with custom fields" do
54
+ model.permalink :title, :to => :slug, :to_param => [:slug, :id, "page"]
55
+
56
+ record = model.create(:title => "Some nice post")
57
+ record.to_param.should == "some-nice-post-#{record.id}-page"
58
+ end
59
+
60
+ it "should ignore blank attributes from to_param" do
61
+ model.permalink :title, :to_param => [:id, " ", nil, "\t", :permalink]
62
+
63
+ record = model.create(:title => "Some nice post")
64
+ record.reload
65
+ record.to_param.should == "#{record.id}-some-nice-post"
66
+ end
67
+
68
+ it "should set permalink if permalink is blank" do
69
+ record = model.create(:title => "Some nice post", :permalink => " ")
70
+ record.permalink.should == "some-nice-post"
71
+ end
72
+
73
+ it "should keep defined permalink" do
74
+ record = model.create(:title => "Some nice post", :permalink => "awesome-post")
75
+ record.permalink.should == "awesome-post"
76
+ end
77
+
78
+ it "should create unique permalinks for number-ended titles" do
79
+ model.permalink :title, :unique => true
80
+
81
+ record = model.create(:title => "Rails 3")
82
+ record.permalink.should == "rails-3"
83
+
84
+ record = model.create(:title => "Rails 3")
85
+ record.permalink.should == "rails-3-2"
86
+ end
87
+ end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: permalink
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 0
8
- - 0
9
- version: 1.0.0
4
+ prerelease:
5
+ version: 1.1.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Nando Vieira
@@ -14,38 +10,138 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-10-06 00:00:00 -03:00
13
+ date: 2011-03-11 00:00:00 -03:00
18
14
  default_executable:
19
- dependencies: []
20
-
21
- description:
22
- email: fnando.vieira@gmail.com
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: activerecord
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3-ruby
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: test-unit
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rspec
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 2.5.0
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: mongoid
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.0.0.rc.7
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: mongo_mapper
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 0.8.6
80
+ type: :development
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: bson_ext
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :development
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: ruby-debug19
95
+ prerelease: false
96
+ requirement: &id008 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: "0"
102
+ type: :development
103
+ version_requirements: *id008
104
+ description: Generate permalink attributes on ActiveRecord
105
+ email:
106
+ - fnando.vieira@gmail.com
23
107
  executables: []
24
108
 
25
109
  extensions: []
26
110
 
27
- extra_rdoc_files:
28
- - README.markdown
111
+ extra_rdoc_files: []
112
+
29
113
  files:
114
+ - .gitignore
115
+ - .rspec
116
+ - Gemfile
117
+ - Gemfile.lock
30
118
  - README.markdown
31
119
  - Rakefile
32
120
  - lib/permalink.rb
121
+ - lib/permalink/orm/active_record.rb
122
+ - lib/permalink/orm/base.rb
123
+ - lib/permalink/orm/mongo_mapper.rb
124
+ - lib/permalink/orm/mongoid.rb
33
125
  - lib/permalink/string_ext.rb
34
126
  - lib/permalink/version.rb
35
- - test/models/beer.rb
36
- - test/models/donut.rb
37
- - test/models/post.rb
38
- - test/models/user.rb
39
- - test/permalink_test.rb
40
- - test/schema.rb
41
- - test/test_helper.rb
127
+ - permalink.gemspec
128
+ - spec/permalink/active_record_spec.rb
129
+ - spec/permalink/mongo_mapper_spec.rb
130
+ - spec/permalink/mongoid_spec.rb
131
+ - spec/permalink/string_spec.rb
132
+ - spec/spec_helper.rb
133
+ - spec/support/article.rb
134
+ - spec/support/page.rb
135
+ - spec/support/post.rb
136
+ - spec/support/schema.rb
137
+ - spec/support/shared.rb
42
138
  has_rdoc: true
43
- homepage: http://github.com/fnando/permalink
139
+ homepage: http://rubygems.org/gems/permalink
44
140
  licenses: []
45
141
 
46
142
  post_install_message:
47
- rdoc_options:
48
- - --charset=UTF-8
143
+ rdoc_options: []
144
+
49
145
  require_paths:
50
146
  - lib
51
147
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -53,29 +149,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
149
  requirements:
54
150
  - - ">="
55
151
  - !ruby/object:Gem::Version
56
- segments:
57
- - 0
58
152
  version: "0"
59
153
  required_rubygems_version: !ruby/object:Gem::Requirement
60
154
  none: false
61
155
  requirements:
62
156
  - - ">="
63
157
  - !ruby/object:Gem::Version
64
- segments:
65
- - 0
66
158
  version: "0"
67
159
  requirements: []
68
160
 
69
161
  rubyforge_project:
70
- rubygems_version: 1.3.7
162
+ rubygems_version: 1.6.0
71
163
  signing_key:
72
164
  specification_version: 3
73
- summary: ActiveRecord plugin for automatically converting fields to permalinks.
165
+ summary: Generate permalink attributes on ActiveRecord
74
166
  test_files:
75
- - test/models/beer.rb
76
- - test/models/donut.rb
77
- - test/models/post.rb
78
- - test/models/user.rb
79
- - test/permalink_test.rb
80
- - test/schema.rb
81
- - test/test_helper.rb
167
+ - spec/permalink/active_record_spec.rb
168
+ - spec/permalink/mongo_mapper_spec.rb
169
+ - spec/permalink/mongoid_spec.rb
170
+ - spec/permalink/string_spec.rb
171
+ - spec/spec_helper.rb
172
+ - spec/support/article.rb
173
+ - spec/support/page.rb
174
+ - spec/support/post.rb
175
+ - spec/support/schema.rb
176
+ - spec/support/shared.rb
data/test/models/beer.rb DELETED
@@ -1,3 +0,0 @@
1
- class Beer < ActiveRecord::Base
2
- permalink :name
3
- end
data/test/models/donut.rb DELETED
@@ -1,3 +0,0 @@
1
- class Donut < ActiveRecord::Base
2
- permalink :flavor, :to => :slug, :to_param => [:slug, :id, 'permalink']
3
- end
data/test/models/post.rb DELETED
@@ -1,5 +0,0 @@
1
- class Post < ActiveRecord::Base
2
- permalink :title, :unique => true, :to_param => :permalink
3
-
4
- validates_uniqueness_of :permalink
5
- end
data/test/models/user.rb DELETED
@@ -1,3 +0,0 @@
1
- class User < ActiveRecord::Base
2
- permalink :name, :to => :permalink, :to_param => [:id, " ", nil, "\t", :permalink]
3
- end
@@ -1,110 +0,0 @@
1
- # encoding: utf-8
2
- require "test_helper"
3
-
4
- class PermalinkTest < ActiveSupport::TestCase
5
- SAMPLES = {
6
- 'This IS a Tripped out title!!.!1 (well/ not really)' => 'this-is-a-tripped-out-title-1-well-not-really',
7
- '////// meph1sto r0x ! \\\\\\' => 'meph1sto-r0x',
8
- 'āčēģīķļņū' => 'acegiklnu',
9
- '中文測試 chinese text' => 'chinese-text',
10
- 'some-)()()-ExtRa!/// .data==?> to \/\/test' => 'some-extra-data-to-test',
11
- 'http://simplesideias.com.br/tags/' => 'http-simplesideias-com-br-tags',
12
- "Don't Repeat Yourself (DRY)" => 'don-t-repeat-yourself-dry',
13
- "Text\nwith\nline\n\n\tbreaks" => 'text-with-line-breaks'
14
- }
15
-
16
- test "should create permalink using to_permalink" do
17
- SAMPLES.each do |from, to|
18
- assert_equal to, from.to_permalink
19
- end
20
- end
21
-
22
- test "should create permalink" do
23
- beer = create_beer
24
- assert_equal 'duff', beer.permalink
25
- end
26
-
27
- test "should create permalink for custom field" do
28
- donut = create_donut
29
- assert_equal 'cream', donut.slug
30
- end
31
-
32
- test "should add permalink before_save" do
33
- beer = Beer.new
34
- assert_nil beer.permalink
35
- beer.update_attribute(:name, 'Duff Premium')
36
- beer.reload
37
- assert_equal 'duff-premium', beer.permalink
38
- end
39
-
40
- test "should create unique permalinks" do
41
- post1 = create_post(:title => 'Ruby is a beautiful language')
42
- assert_equal "ruby-is-a-beautiful-language", post1.permalink
43
-
44
- post2 = create_post(:title => 'Ruby is a beautiful language')
45
- assert_equal "ruby-is-a-beautiful-language-2", post2.permalink
46
-
47
- post3 = create_post(:title => 'Ruby is a beautiful language')
48
- assert_equal "ruby-is-a-beautiful-language-3", post3.permalink
49
- end
50
-
51
- test "return to_param for unique permalink" do
52
- post1 = create_post(:title => 'Ruby')
53
- assert_equal post1.to_param, 'ruby'
54
-
55
- post2 = create_post(:title => 'Ruby')
56
- assert_equal post2.to_param, 'ruby-2'
57
- end
58
-
59
- test "should override to_param method" do
60
- beer = create_beer
61
- assert_equal "#{beer.id}-#{beer.permalink}", beer.to_param
62
- end
63
-
64
- test "should override to_param with custom fields" do
65
- donut = create_donut
66
- assert_equal "#{donut.slug}-#{donut.id}-permalink", donut.to_param
67
- end
68
-
69
- test "should ignore blank attributes from to_param" do
70
- user = create_user
71
- assert_equal "1-john-doe", user.to_param
72
- end
73
-
74
- test "should set permalink if permalink is blank" do
75
- user = create_user(:permalink => " ")
76
- user.reload
77
- assert_equal "john-doe", user.permalink
78
- end
79
-
80
- test "should keep defined permalink" do
81
- user = create_beer(:permalink => "jdoe")
82
- user.reload
83
- assert_equal "jdoe", user.permalink
84
- end
85
-
86
- test "should create unique permalinks for number-ended titles" do
87
- post1 = create_post(:title => "Rails 3")
88
- assert_equal "rails-3", post1.permalink
89
-
90
- post2 = create_post(:title => "Rails 3")
91
- assert_equal "rails-3-2", post2.permalink
92
- end
93
-
94
- private
95
- def create_beer(options={})
96
- Beer.create({:name => 'Duff'}.merge(options))
97
- end
98
-
99
- def create_donut(options={})
100
- Donut.create({:flavor => 'Cream'}.merge(options))
101
- end
102
-
103
- def create_user(options={})
104
- User.create({:name => 'John Doe'}.merge(options))
105
- end
106
-
107
- def create_post(options={})
108
- Post.create({:title => 'Some nice post!'}.merge(options))
109
- end
110
- end
data/test/schema.rb DELETED
@@ -1,18 +0,0 @@
1
- ActiveRecord::Schema.define(:version => 0) do
2
- create_table :beers do |t|
3
- t.string :name, :permalink
4
- end
5
-
6
- create_table :users do |t|
7
- t.string :name, :permalink
8
- end
9
-
10
- create_table :donuts do |t|
11
- t.string :flavor, :slug
12
- end
13
-
14
- create_table :posts do |t|
15
- t.string :title
16
- t.string :permalink, :unique => true
17
- end
18
- end
data/test/test_helper.rb DELETED
@@ -1,10 +0,0 @@
1
- require "rubygems"
2
- gem "test-unit"
3
- require "test/unit"
4
- require "active_record"
5
- require "active_support/test_case"
6
- require "permalink"
7
-
8
- Dir.glob(File.dirname(__FILE__) + "/models/*.rb").each {|r| require r }
9
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
10
- load("schema.rb")