the_force 0.3.5 → 0.3.6

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/Rakefile CHANGED
@@ -7,7 +7,7 @@ exclude_file_globs = []
7
7
 
8
8
  spec = Gem::Specification.new do |s|
9
9
  s.name = "the_force"
10
- s.version = '0.3.5'
10
+ s.version = '0.3.6'
11
11
  s.author = "Ryan Ziegler"
12
12
  s.email = "info@symbolforce.com"
13
13
  s.homepage = "http://www.symbolforce.com"
@@ -0,0 +1,21 @@
1
+ # CRZ - given a name to slug-ize, and either a list or a table and column, make a unique slug
2
+ # - There's are inherent race conditions here, naturally.
3
+ # - Should go like "b" -> "b_1"
4
+ # e.g. TheForce.unique_slug("My Gallery", Gallery, :permalink)
5
+ # e.g. TheForce.unique_slug("My Gallery", ["My_Gallery", "MY GALLERY"])
6
+ # e.g. before_validate 'self.permaslug = TheForce.unique_slug self.title, Article, :permaslug'
7
+ # e.g. before_validate 'self.permaslug = TheForce.unique_slug self.heading, Section.find_all_by_article_id(self.article.id).map {|s| s.heading}'
8
+ module TheForce
9
+ def self.unique_slug(title, *others)
10
+ arr = others[0].find(:all).map { |e| e.send(others[1]) } if others.length == 2
11
+ arr = others.first if others.length == 1
12
+
13
+ base = title.strip.downcase.gsub(/\s+/, '_').gsub(/[^a-zA-Z0-9_]+/, '')
14
+ slug, suffix = base, "1"
15
+ while arr.include?(slug) do
16
+ suffix.succ!
17
+ slug = "#{base}_#{suffix}"
18
+ end
19
+ slug
20
+ end
21
+ end
data/lib/the_force.rb CHANGED
@@ -3,6 +3,7 @@ require File.join(ROOT, 'ruby_version')
3
3
  require File.join(ROOT, 'keep_trying')
4
4
  require File.join(ROOT, 'thread_pool')
5
5
  require File.join(ROOT, 'timer')
6
+ require File.join(ROOT, 'slugs')
6
7
  #require File.join(ROOT, 'object_support')
7
8
  require File.join(ROOT, 'remote_includes')
8
9
  true
@@ -0,0 +1,35 @@
1
+ require 'the_force/slugs'
2
+
3
+ class TestSlugs < Test::Unit::TestCase
4
+ def test_returns_original_slug_if_not_present_in_collection
5
+ assert_equal 'a', TheForce.unique_slug('a', [])
6
+ end
7
+
8
+ def test_replaces_spaces_with_underscores
9
+ assert_equal 'a_b', TheForce.unique_slug('a b', [])
10
+ end
11
+
12
+ def test_strips_before_changing
13
+ assert_equal 'a_b', TheForce.unique_slug(' a b ', [])
14
+ end
15
+
16
+ def test_strips_before_comparing
17
+ assert_equal 'a_b_2', TheForce.unique_slug(' a b ', ['a_b'])
18
+ end
19
+
20
+ def test_removes_non_alphanumerics
21
+ assert_equal 'ab', TheForce.unique_slug('a\'b%', [])
22
+ end
23
+
24
+ def test_adds_numeric_suffix_of_2_if_present_in_collection
25
+ assert_equal 'a_2', TheForce.unique_slug('a', ['a'])
26
+ end
27
+
28
+ def test_increments_numeric_suffix_until_not_present_in_collection
29
+ assert_equal 'a_4', TheForce.unique_slug('a', ['a', 'a_1', 'a_2', 'a_3'])
30
+ end
31
+
32
+ def test_implicit_collect_column
33
+ assert_equal false, "PENDING -- TheForce.unique_slug('super title', Gallery, :permalink)"
34
+ end
35
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the_force
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 5
10
- version: 0.3.5
9
+ - 6
10
+ version: 0.3.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Ziegler
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-13 00:00:00 -04:00
18
+ date: 2011-01-24 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -40,6 +40,7 @@ files:
40
40
  - lib/the_force/rails_support.rb
41
41
  - lib/the_force/remote_includes.rb
42
42
  - lib/the_force/ruby_version.rb
43
+ - lib/the_force/slugs.rb
43
44
  - lib/the_force/thread_pool.rb
44
45
  - lib/the_force/timer.rb
45
46
  - lib/the_force.rb
@@ -49,6 +50,7 @@ files:
49
50
  - test/unit/test_object_support.rb
50
51
  - test/unit/test_rails_support.rb
51
52
  - test/unit/test_ruby_version.rb
53
+ - test/unit/test_slugs.rb
52
54
  has_rdoc: true
53
55
  homepage: http://www.symbolforce.com
54
56
  licenses: []
@@ -91,3 +93,4 @@ test_files:
91
93
  - test/unit/test_object_support.rb
92
94
  - test/unit/test_rails_support.rb
93
95
  - test/unit/test_ruby_version.rb
96
+ - test/unit/test_slugs.rb