simple_slugs 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_slugs
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sven Fuchs
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-20 00:00:00 +02:00
18
+ date: 2010-08-31 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -124,12 +124,8 @@ extensions: []
124
124
 
125
125
  extra_rdoc_files: []
126
126
 
127
- files:
128
- - lib/simple_slugs.rb
129
- - lib/simple_slugs/act_macro.rb
130
- - lib/simple_slugs/slug.rb
131
- - lib/simple_slugs/slugger.rb
132
- - lib/simple_slugs/version.rb
127
+ files: []
128
+
133
129
  has_rdoc: true
134
130
  homepage: http://github.com/svenfuchs/simple_slugs
135
131
  licenses: []
data/lib/simple_slugs.rb DELETED
@@ -1,15 +0,0 @@
1
- require 'active_record'
2
-
3
- module SimpleSlugs
4
- autoload :Slug, 'simple_slugs/slug'
5
- autoload :Slugger, 'simple_slugs/slugger'
6
- autoload :ActMacro, 'simple_slugs/act_macro'
7
- end
8
-
9
- class String
10
- def to_slug
11
- SimpleSlugs::Slug.new(self)
12
- end
13
- end
14
-
15
- ActiveRecord::Base.extend(SimpleSlugs::ActMacro)
@@ -1,12 +0,0 @@
1
- module SimpleSlugs
2
- module ActMacro
3
- def has_slug(options = {})
4
- return if respond_to?(:slugger)
5
-
6
- before_validation lambda { |record| record.slugger.unique_slug!(record) }
7
-
8
- class_inheritable_accessor :slugger
9
- self.slugger = Slugger.new(self, options)
10
- end
11
- end
12
- end
@@ -1,28 +0,0 @@
1
- module SimpleSlugs
2
- class Slug < String
3
- def initialize(string)
4
- super
5
- normalize
6
- end
7
-
8
- def normalize
9
- transliterate
10
- spacify
11
- strip!
12
- downcase!
13
- dasherize
14
- end
15
-
16
- def transliterate
17
- replace(I18n.transliterate(self))
18
- end
19
-
20
- def spacify
21
- gsub!(/[\W_]/, ' ')
22
- end
23
-
24
- def dasherize
25
- gsub!(' ', '-')
26
- end
27
- end
28
- end
@@ -1,68 +0,0 @@
1
- require 'active_support/ordered_options'
2
- require 'active_support/core_ext/hash/reverse_merge'
3
-
4
- module SimpleSlugs
5
- class Slugger < ActiveSupport::InheritableOptions
6
- DEFAULTS = {
7
- :slug_name => :slug,
8
- :on_blank => true,
9
- :scope => nil,
10
- :separator => '-'
11
- }
12
-
13
- attr_reader :model
14
-
15
- def initialize(model, options)
16
- @model = model
17
- super(options.reverse_merge(DEFAULTS))
18
- end
19
-
20
- def unique_slug!(record)
21
- if record.send(slug_name).blank? || !on_blank
22
- source = record.send(self.source)
23
- record.slug = ensure_unique_slug(record, source.to_slug) if source
24
- end
25
- end
26
-
27
- protected
28
-
29
- def ensure_unique_slug(record, base)
30
- slug, taken, n = base, self.taken_slugs(record, base), 0
31
- slug = [base, separator, n += 1].join while taken.include?(slug)
32
- slug
33
- end
34
-
35
- def taken_slugs(record, slug)
36
- scope = translated? ? with_translated_slug(record, slug) : with_slug(record, slug)
37
- scope.map(&:slug)
38
- end
39
-
40
- def slug_scope(record)
41
- scope ? model.where(scope => record.send(scope)) : model.scoped
42
- end
43
-
44
- def with_slug(record, slug)
45
- condition = model.arel_table[:slug].matches("#{slug}%")
46
- slug_scope(record).where(condition)
47
- end
48
-
49
- def with_translated_slug(record, slug)
50
- condition = model.translation_class.arel_table[:slug].matches("#{slug}%")
51
- slug_scope(record) & model.with_translations.where(condition)
52
- end
53
-
54
- def source
55
- @source ||= self[:source] || %w(name title).detect { |s| column_names.include?(s) }
56
- end
57
-
58
- def column_names
59
- names = model.column_names
60
- names = names + model.translation_class.column_names if model.respond_to?(:translation_class)
61
- names
62
- end
63
-
64
- def translated?
65
- model.respond_to?(:translated?) ? model.translated?(:slug) : false
66
- end
67
- end
68
- end
@@ -1,3 +0,0 @@
1
- module SimpleSlugs
2
- VERSION = "0.0.4"
3
- end