sequel_sluggable 0.0.2 → 0.0.3

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 CHANGED
@@ -15,6 +15,7 @@ tmtags
15
15
 
16
16
  ## PROJECT::GENERAL
17
17
  coverage
18
+ doc
18
19
  rdoc
19
20
  pkg
20
21
 
data/README.rdoc CHANGED
@@ -1,8 +1,67 @@
1
1
  = sequel_sluggable
2
2
 
3
- Description goes here.
3
+ == Install
4
4
 
5
- == Note on Patches/Pull Requests
5
+ Add gemcutter.org source if you don't have it:
6
+ gem source http://gemcutter.org
7
+
8
+ Install:
9
+ [sudo] gem install sequel_sluggable
10
+
11
+ == Usage
12
+
13
+ This plug-in provide functionality to allow Sequel::Model to have a slug.
14
+ Slug is created in the *before_save* hook which is called when you're
15
+ *creating* or *updating* your model.
16
+
17
+ To use plug-in you add plug-in to your model:
18
+
19
+ class MyModel < Sequel::Model
20
+ plugin :sluggable, :source => :name
21
+ end
22
+
23
+ You can use following options:
24
+ *source*:: Column which value will be used to generate slug.
25
+ *target*:: Column where slug will be written, defaults to *:slug*.
26
+ *sluggator*:: Proc or Symbol to call to create slug.
27
+
28
+ Options *target* and *sluggator* are optional.
29
+
30
+ == Algorithm customization
31
+
32
+ You can customize algorithm of the slug creation in several places.
33
+ If you provide _:sluggator_ Proc or Symbol the sluggator will be called:
34
+
35
+ class MyModel < Sequel::Model
36
+ plugin :sluggable,
37
+ :source => :name,
38
+ :sluggator => Proc.new {|value, model| do_something }
39
+ end
40
+
41
+ OR
42
+
43
+ class MyModel < Sequel::Model
44
+ plugin :sluggable,:source => :name, :sluggator => :my_to_slug
45
+ end
46
+
47
+ If you don't provide _:sluggator_ sequel_sluggable will try to use
48
+ <b>Model#to_slug(value)</b>. So if you have in your model this method
49
+ it will be used:
50
+
51
+ class MyModel < Sequel::Model
52
+ plugin :sluggable, :source => :name
53
+
54
+ def to_slug(value)
55
+ value.upcase
56
+ end
57
+ end
58
+
59
+ If you don't define <b>Model#to_slug</b> or *:sluggator* sequel_sluggable
60
+ will use it's own default implementation which does following:
61
+
62
+ model.source_column.chomp.downcase.gsub(/[^a-z0-9]+/,'-')
63
+
64
+ = Note on Patches/Pull Requests
6
65
 
7
66
  * Fork the project.
8
67
  * Make your feature addition or bug fix.
data/Rakefile CHANGED
@@ -13,7 +13,7 @@ begin
13
13
  gem.email = "pavel.kunc@gmail.com"
14
14
  gem.homepage = "http://github.com/pk/sequel_sluggable"
15
15
  gem.authors = ["Pavel Kunc"]
16
- gem.add_dependency "sequel"
16
+ gem.add_dependency "sequel", ">= 3.0.0"
17
17
  gem.add_development_dependency "sqlite3-ruby"
18
18
  gem.add_development_dependency "rspec"
19
19
  gem.add_development_dependency "yard"
@@ -35,14 +35,13 @@ module Sequel
35
35
  #
36
36
  # Options:
37
37
  # @param [Hash] plugin options
38
- # @option source [Symbol] :Column to get value to be slugged from.
38
+ # @option source [Symbol] :Column to get value to be slugged from.
39
39
  # @option target [Symbol] :Column to write value of the slug to.
40
- # @option sluggator [Proc] :Algorithm to convert string to slug.
40
+ # @option sluggator [Proc, Symbol] :Algorithm to convert string to slug.
41
41
  def sluggable_options=(options)
42
42
  raise ArgumentError, "You must provide :source column" unless options[:source]
43
- if options[:sluggator] &&
44
- !options[:sluggator].is_a?(Symbol) &&
45
- !options[:sluggator].respond_to?(:call)
43
+ sluggator = options[:sluggator]
44
+ if sluggator && !sluggator.is_a?(Symbol) && !sluggator.respond_to?(:call)
46
45
  raise ArgumentError, "If you provide :sluggator it must be Symbol or callable."
47
46
  end
48
47
  options[:source] = options[:source].to_sym
@@ -69,12 +68,11 @@ module Sequel
69
68
  #
70
69
  # @param [String] String to be slugged
71
70
  # @return [String]
72
- def slug=(v)
73
- slug = if self.class.sluggable_options[:sluggator]
74
- self.class.sluggable_options[:sluggator].call(v, self)
75
- else
76
- to_slug(v)
77
- end
71
+ def slug=(value)
72
+ sluggator = self.class.sluggable_options[:sluggator]
73
+ slug = sluggator.call(value, self) if sluggator.respond_to?(:call)
74
+ slug ||= self.send(sluggator, value) if sluggator
75
+ slug ||= to_slug(value)
78
76
  super(slug)
79
77
  end
80
78
 
@@ -82,8 +80,8 @@ module Sequel
82
80
  #
83
81
  # @param [String] String to be slugged
84
82
  # @return [String]
85
- def to_slug(v)
86
- v.chomp.downcase.gsub(/[^a-z0-9]+/,'-')
83
+ def to_slug(value)
84
+ value.chomp.downcase.gsub(/[^a-z0-9]+/,'-')
87
85
  end
88
86
 
89
87
  end # InstanceMethods
data/lib/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Sequel
2
2
  module Plugins
3
3
  module Sluggable
4
- VERSION = '0.0.2'.freeze
4
+ VERSION = '0.0.3'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -5,17 +5,16 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sequel_sluggable}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Pavel Kunc"]
12
- s.date = %q{2010-02-14}
12
+ s.date = %q{2010-02-15}
13
13
  s.description = %q{Sequel plugin which provides Slug functionality for model.}
14
14
  s.email = %q{pavel.kunc@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc",
18
- "TODO"
17
+ "README.rdoc"
19
18
  ]
20
19
  s.files = [
21
20
  ".document",
@@ -23,8 +22,6 @@ Gem::Specification.new do |s|
23
22
  "LICENSE",
24
23
  "README.rdoc",
25
24
  "Rakefile",
26
- "TODO",
27
- "VERSION",
28
25
  "lib/sequel_sluggable.rb",
29
26
  "lib/sluggable_rspec_helper.rb",
30
27
  "lib/version.rb",
@@ -48,18 +45,18 @@ Gem::Specification.new do |s|
48
45
  s.specification_version = 3
49
46
 
50
47
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
- s.add_runtime_dependency(%q<sequel>, [">= 0"])
48
+ s.add_runtime_dependency(%q<sequel>, [">= 3.0.0"])
52
49
  s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
53
50
  s.add_development_dependency(%q<rspec>, [">= 0"])
54
51
  s.add_development_dependency(%q<yard>, [">= 0"])
55
52
  else
56
- s.add_dependency(%q<sequel>, [">= 0"])
53
+ s.add_dependency(%q<sequel>, [">= 3.0.0"])
57
54
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
58
55
  s.add_dependency(%q<rspec>, [">= 0"])
59
56
  s.add_dependency(%q<yard>, [">= 0"])
60
57
  end
61
58
  else
62
- s.add_dependency(%q<sequel>, [">= 0"])
59
+ s.add_dependency(%q<sequel>, [">= 3.0.0"])
63
60
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
64
61
  s.add_dependency(%q<rspec>, [">= 0"])
65
62
  s.add_dependency(%q<yard>, [">= 0"])
@@ -122,6 +122,19 @@ describe "SequelSluggable" do
122
122
  :sluggator => Proc.new {|value, model| value.chomp.downcase.gsub(/[^a-z0-9]+/,'_')}
123
123
  Item.create(:name => 'Pavel Kunc').slug.should eql 'pavel_kunc'
124
124
  end
125
+
126
+ it "should use only :sluggator Symbol if defined" do
127
+ Item.plugin :sluggable,
128
+ :source => :name,
129
+ :target => :slug,
130
+ :sluggator => :my_custom_sluggator
131
+ Item.class_eval do
132
+ def my_custom_sluggator(v)
133
+ v.chomp.upcase.gsub(/[^a-zA-Z0-9]+/,'-')
134
+ end
135
+ end
136
+ Item.create(:name => 'Pavel Kunc').slug.should eql 'PAVEL-KUNC'
137
+ end
125
138
  end
126
139
 
127
140
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel_sluggable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kunc
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-14 00:00:00 +00:00
12
+ date: 2010-02-15 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: "0"
23
+ version: 3.0.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sqlite3-ruby
@@ -61,15 +61,12 @@ extensions: []
61
61
  extra_rdoc_files:
62
62
  - LICENSE
63
63
  - README.rdoc
64
- - TODO
65
64
  files:
66
65
  - .document
67
66
  - .gitignore
68
67
  - LICENSE
69
68
  - README.rdoc
70
69
  - Rakefile
71
- - TODO
72
- - VERSION
73
70
  - lib/sequel_sluggable.rb
74
71
  - lib/sluggable_rspec_helper.rb
75
72
  - lib/version.rb
data/TODO DELETED
@@ -1,3 +0,0 @@
1
- == TODO
2
- * Add posibility to configure algorithm how slug is generated
3
- * Add posibility to donfigure field which holds slug
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.0.1