acts_as_sluggable 0.0.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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in acts_as_sluggable.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,37 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ acts_as_sluggable (0.0.1)
5
+ mongoid (>= 2.0.0.beta.17)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activemodel (3.0.1)
11
+ activesupport (= 3.0.1)
12
+ builder (~> 2.1.2)
13
+ i18n (~> 0.4.1)
14
+ activesupport (3.0.1)
15
+ bson (1.1.1)
16
+ bson_ext (1.1.1)
17
+ builder (2.1.2)
18
+ i18n (0.4.2)
19
+ mongo (1.0.9)
20
+ bson (>= 1.0.5)
21
+ mongoid (2.0.0.beta.19)
22
+ activemodel (~> 3.0)
23
+ mongo (= 1.0.9)
24
+ tzinfo (~> 0.3.22)
25
+ will_paginate (~> 3.0.pre)
26
+ shoulda (2.11.3)
27
+ tzinfo (0.3.23)
28
+ will_paginate (3.0.pre2)
29
+
30
+ PLATFORMS
31
+ ruby
32
+
33
+ DEPENDENCIES
34
+ acts_as_sluggable!
35
+ bson_ext (~> 1.1.1)
36
+ mongoid (>= 2.0.0.beta.17)
37
+ shoulda (~> 2.11.3)
data/README.markdown ADDED
@@ -0,0 +1,74 @@
1
+ # acts_as_sluggable
2
+
3
+ Whenever you use MongoDB and Mongoid, there's a high chance you will end up preparing your urls
4
+ with a slug instead of the traditional ids because MongoDB ids are ugly.
5
+
6
+ This gem will help you generate slugs in an easy way
7
+
8
+ ## Compatibility
9
+
10
+ So far it works with the Rails 3 version of Mongoid.
11
+
12
+ # Installation
13
+
14
+ ## Rails 3
15
+
16
+ Include it in your Gemfile:
17
+
18
+ gem 'acts_as_sluggable'
19
+
20
+ And run bundler
21
+
22
+ bundle install
23
+
24
+ # Usage
25
+
26
+ To use it, all you have to do is call *acts_as_sluggable* in your Mongoid::Document
27
+
28
+ class Project
29
+ include Mongoid::Document
30
+
31
+ acts_as_sluggable
32
+ end
33
+
34
+ By default, this will declare a field on the Document called :slug and will try to generate the slug from
35
+ a field called :name.
36
+
37
+ ## Options
38
+
39
+ ### :generate_from
40
+
41
+ If you want to change the field to generate the slug you can use the :generate_from option:
42
+
43
+ class Organization
44
+ include Mongoid::Document
45
+
46
+ field :alternative_name
47
+ acts_as_sluggable :generate_from => :alternative_name
48
+ end
49
+
50
+ This will generate the slug form a field called :alternative_name.
51
+
52
+ ### :store_as
53
+
54
+ If you want to change the field where the slug is stored you can use the :store_as option:
55
+
56
+ class Organization
57
+ include Mongoid::Document
58
+
59
+ field :name
60
+ acts_as_sluggable :store_as => :alternative_slug
61
+ end
62
+
63
+ Now it will store the slug in a field called :alternative_slug. If the specified field is not defined
64
+ on the Document it will be automatically declared, so adding:
65
+
66
+ field :alternative_slug
67
+
68
+ is optional.
69
+
70
+ # About the Author
71
+
72
+ [Crowd Interactive](http://www.crowdint.com) is an American web design and development company that happens to work in Colima, Mexico.
73
+ We specialize in building and growing online retail stores. We don’t work with everyone – just companies we believe in. Call us today to see if there’s a fit.
74
+ Find more info [here](http://www.crowdint.com)!
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+ Rake::TestTask.new(:test) do |test|
6
+ test.libs << 'lib' << 'test'
7
+ test.pattern = 'test/**/test_*.rb'
8
+ test.verbose = true
9
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "acts_as_sluggable/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "acts_as_sluggable"
7
+ s.version = Acts::Sluggable::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["David Padilla"]
10
+ s.email = ["david@crowdint.com"]
11
+ s.homepage = "http://rubygems.org/gems/acts_as_sluggable"
12
+ s.summary = %q{Create a slug for mongoid documents}
13
+ s.description = %q{Create a slug for mongoid documents}
14
+
15
+ s.add_dependency('mongoid', '>= 2.0.0.beta.17')
16
+ s.add_development_dependency('shoulda', '~>2.11.3')
17
+ s.add_development_dependency('bson_ext', '~>1.1.1')
18
+
19
+ s.rubyforge_project = "acts_as_sluggable"
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ end
@@ -0,0 +1,6 @@
1
+ require 'acts_as_sluggable/acts/sluggable'
2
+
3
+ #
4
+ # Include it in Mongoid::Document
5
+ #
6
+ Mongoid::Document.send(:include, Acts::Sluggable)
@@ -0,0 +1,47 @@
1
+ module Acts
2
+ module Sluggable
3
+ module ClassMethods
4
+ #
5
+ # Adds the logic to generate the slug
6
+ #
7
+ # Options:
8
+ #
9
+ # :generate_from
10
+ # The name of the field used to generate the slug
11
+ #
12
+ # :store_as
13
+ # The name of the field where the slug will be stored
14
+ #
15
+ def acts_as_sluggable(options = {})
16
+ options = {
17
+ :generate_from => :name,
18
+ :store_as => :slug
19
+ }.merge(options)
20
+
21
+ class_eval do
22
+ before_save do
23
+ generate_slug(options[:generate_from], options[:store_as])
24
+ end
25
+ field(options[:store_as], :type => String) unless self.respond_to?(options[:store_as])
26
+ index(options[:store_as])
27
+ alias_method :to_param!, :to_param
28
+ end
29
+
30
+ define_method("to_param") do
31
+ self.send(options[:store_as])
32
+ end
33
+ end
34
+ end
35
+
36
+ module InstanceMethods
37
+ def generate_slug(method, slug_field_name)
38
+ self.send("#{slug_field_name.to_s}=", self.send(method).parameterize)
39
+ end
40
+ end
41
+
42
+ def self.included(receiver)
43
+ receiver::ClassMethods.send :include, ClassMethods
44
+ receiver.send :include, InstanceMethods
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,5 @@
1
+ module Acts
2
+ module Sluggable
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'bundler/setup'
4
+ require 'shoulda'
5
+ require 'mongoid'
6
+
7
+ require 'acts_as_sluggable'
8
+
9
+ # $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
10
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -0,0 +1,65 @@
1
+ require 'test_helper'
2
+
3
+ class Project
4
+ include Mongoid::Document
5
+
6
+ acts_as_sluggable
7
+
8
+ field :name, :type => String
9
+ end
10
+
11
+ class Organization
12
+ include Mongoid::Document
13
+
14
+ acts_as_sluggable :generate_from => :alternative_name, :store_as => :alternative_slug
15
+
16
+ field :alternative_name, :type => String
17
+ field :alternative_slug, :type => String
18
+ end
19
+
20
+ class TestActsAsSluggable < Test::Unit::TestCase
21
+ def setup
22
+ ::Mongoid.configure do |config|
23
+ name = "acts_as_sluggable_test"
24
+ host = "localhost"
25
+ config.master = Mongo::Connection.new.db(name)
26
+ config.logger = nil
27
+ end
28
+ end
29
+
30
+ context "default parameters" do
31
+ setup do
32
+ @project = Project.create(:name => 'Some name')
33
+ end
34
+
35
+ should "create a slug" do
36
+ assert_equal('some-name', @project.slug)
37
+ end
38
+
39
+ context :to_param do
40
+ should "return the slug too" do
41
+ assert_equal('some-name', @project.to_param)
42
+ end
43
+ end
44
+ end
45
+
46
+ context "custom parameters" do
47
+ setup do
48
+ @organization = Organization.create(:alternative_name => 'Some Other Name')
49
+ end
50
+
51
+ should "create a slug using the custom field and store it on the custom slug field" do
52
+ assert_equal('some-other-name', @organization.alternative_slug)
53
+ end
54
+
55
+ context :to_param do
56
+ should "return the slug too" do
57
+ assert_equal('some-other-name', @organization.to_param)
58
+ end
59
+ end
60
+ end
61
+
62
+ def teardown
63
+ ::Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
64
+ end
65
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_sluggable
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - David Padilla
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-27 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: mongoid
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 62196417
30
+ segments:
31
+ - 2
32
+ - 0
33
+ - 0
34
+ - beta
35
+ - 17
36
+ version: 2.0.0.beta.17
37
+ type: :runtime
38
+ version_requirements: *id001
39
+ - !ruby/object:Gem::Dependency
40
+ name: shoulda
41
+ prerelease: false
42
+ requirement: &id002 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ hash: 37
48
+ segments:
49
+ - 2
50
+ - 11
51
+ - 3
52
+ version: 2.11.3
53
+ type: :development
54
+ version_requirements: *id002
55
+ - !ruby/object:Gem::Dependency
56
+ name: bson_ext
57
+ prerelease: false
58
+ requirement: &id003 !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ~>
62
+ - !ruby/object:Gem::Version
63
+ hash: 17
64
+ segments:
65
+ - 1
66
+ - 1
67
+ - 1
68
+ version: 1.1.1
69
+ type: :development
70
+ version_requirements: *id003
71
+ description: Create a slug for mongoid documents
72
+ email:
73
+ - david@crowdint.com
74
+ executables: []
75
+
76
+ extensions: []
77
+
78
+ extra_rdoc_files: []
79
+
80
+ files:
81
+ - .gitignore
82
+ - Gemfile
83
+ - Gemfile.lock
84
+ - README.markdown
85
+ - Rakefile
86
+ - acts_as_sluggable.gemspec
87
+ - lib/acts_as_sluggable.rb
88
+ - lib/acts_as_sluggable/acts/sluggable.rb
89
+ - lib/acts_as_sluggable/version.rb
90
+ - test/test_helper.rb
91
+ - test/unit/test_as_sluggable.rb
92
+ has_rdoc: true
93
+ homepage: http://rubygems.org/gems/acts_as_sluggable
94
+ licenses: []
95
+
96
+ post_install_message:
97
+ rdoc_options: []
98
+
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ requirements: []
120
+
121
+ rubyforge_project: acts_as_sluggable
122
+ rubygems_version: 1.3.7
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Create a slug for mongoid documents
126
+ test_files:
127
+ - test/test_helper.rb
128
+ - test/unit/test_as_sluggable.rb