stringex 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -6,6 +6,7 @@ Some [hopefully] useful extensions to Ruby's String class. It is made up of thre
6
6
 
7
7
  This library is designed to create URI-friendly representations of an attribute, for use in generating urls from your attributes. Basic usage is just calling the method:
8
8
 
9
+ # Inside your model
9
10
  acts_as_url :title
10
11
 
11
12
  which will populate the <tt>url</tt> attribute on the object with the converted contents of the <tt>title</tt> attribute. This behavior can be customized by adding the following options to the arguments of the <tt>acts_as_url</tt> method:
@@ -20,6 +21,7 @@ which will populate the <tt>url</tt> attribute on the object with the converted
20
21
 
21
22
  In order to use the generated url attribute, you will probably want to override <tt>to_param</tt> like so, in your Model:
22
23
 
24
+ # Inside your model
23
25
  def to_param
24
26
  url # or whatever you set :url_attribute to
25
27
  end
@@ -69,6 +71,12 @@ You probably won't ever need to run Unidecoder by itself. StringExtensions adds
69
71
 
70
72
  A collection of extensions on Ruby's String class. Please see the documentation for string_extensions module for more information. There's not much to explain about them really.
71
73
 
74
+ == Note to users of Devise
75
+
76
+ You'll need to add a <tt>:find_by => :url</tt> to your <tt>load_and_authorize_resource</tt>. Here's an example:
77
+
78
+ load_and_authorize_resource :class => "Whatever", :message => "Not authorized", :find_by => :url
79
+
72
80
  == Thanks & Acknowledgements
73
81
 
74
82
  If it's not obvious, some of the code for ActsAsUrl is based on Rick Olsen's permalink_fu[http://svn.techno-weenie.net/projects/plugins/permalink_fu/] plugin. Unidecoder is a Ruby port of Sean Burke's Text::Unidecode[http://interglacial.com/~sburke/tpj/as_html/tpj22.html] module for Perl. And, finally, the bulk of strip_html_tags[link:classes/LuckySneaks/StringExtensions.html#M000005] in StringExtensions was stolen from Tobias Lütke's Regex in Typo[http://typosphere.org/].
data/Rakefile CHANGED
@@ -212,7 +212,7 @@ begin
212
212
  }
213
213
  gem.rdoc_options = %w{--main README.rdoc --charset utf-8 --line-numbers}
214
214
  gem.extra_rdoc_files = %w{MIT-LICENSE README.rdoc}
215
- gem.version = "1.2.2"
215
+ gem.version = "1.3.0"
216
216
  end
217
217
 
218
218
  Jeweler::GemcutterTasks.new
@@ -34,7 +34,7 @@ module LuckySneaks
34
34
  cattr_accessor :duplicate_count_separator
35
35
 
36
36
  if options[:sync_url]
37
- before_validation :ensure_unique_url
37
+ before_validation(:ensure_unique_url)
38
38
  else
39
39
  if defined?(ActiveModel::Callbacks)
40
40
  before_validation(:ensure_unique_url, :on => :create)
@@ -48,6 +48,16 @@ module LuckySneaks
48
48
  self.url_attribute = options[:url_attribute] || "url"
49
49
  self.only_when_blank = options[:only_when_blank] || false
50
50
  self.duplicate_count_separator = options[:duplicate_count_separator] || "-"
51
+
52
+ class_eval <<-"END"
53
+ def #{url_attribute}
54
+ if !new_record? && errors[attribute_to_urlify].present?
55
+ self.class.find(id).send(url_attribute)
56
+ else
57
+ read_attribute(url_attribute)
58
+ end
59
+ end
60
+ END
51
61
  end
52
62
 
53
63
  # Initialize the url fields for the records that need it. Designed for people who add
@@ -66,6 +76,7 @@ module LuckySneaks
66
76
  end
67
77
 
68
78
  private
79
+
69
80
  def ensure_unique_url
70
81
  url_attribute = self.class.url_attribute
71
82
  separator = self.class.duplicate_count_separator
@@ -154,7 +154,8 @@ module LuckySneaks
154
154
  /\s*\*\s*/ => "star",
155
155
  /\s*%\s*/ => "percent",
156
156
  /\s*(\\|\/)\s*/ => "slash",
157
- /(\s*=\s*)/ => " equals "
157
+ /(\s*=\s*)/ => " equals ",
158
+ /\s*\+\s*/ => "plus"
158
159
  }.each do |found, replaced|
159
160
  replaced = " #{replaced} " unless replaced =~ /\\1/
160
161
  dummy.gsub!(found, replaced)
@@ -1,5 +1,5 @@
1
1
  ---
2
- - "\z"
2
+ - "\x00"
3
3
  - "\x01"
4
4
  - "\x02"
5
5
  - "\x03"
@@ -44,7 +44,7 @@
44
44
  - '*'
45
45
  - +
46
46
  - ','
47
- - -
47
+ - '-'
48
48
  - .
49
49
  - /
50
50
  - 0
@@ -60,7 +60,7 @@
60
60
  - ':'
61
61
  - ;
62
62
  - <
63
- - =
63
+ - '='
64
64
  - '>'
65
65
  - '?'
66
66
  - '@'
@@ -174,7 +174,7 @@
174
174
  - '!'
175
175
  - ''
176
176
  - (r)
177
- - -
177
+ - '-'
178
178
  - deg
179
179
  - +-
180
180
  - 2
@@ -186,7 +186,7 @@
186
186
  - y
187
187
  - "'"
188
188
  - '"'
189
- - `
189
+ - '`'
190
190
  - "'"
191
191
  - '`'
192
192
  - '`'
@@ -200,7 +200,7 @@
200
200
  - '^'
201
201
  - V
202
202
  - "'"
203
- - -
203
+ - '-'
204
204
  - /
205
205
  - '`'
206
206
  - ','
@@ -214,7 +214,7 @@
214
214
  - '^'
215
215
  - V
216
216
  - +
217
- - -
217
+ - '-'
218
218
  - V
219
219
  - .
220
220
  - '@'
@@ -236,7 +236,7 @@
236
236
  - ''
237
237
  - ''
238
238
  - V
239
- - =
239
+ - '='
240
240
  - '"'
241
241
  - '[?]'
242
242
  - '[?]'
@@ -22,7 +22,7 @@
22
22
  - '[?]'
23
23
  - '/'
24
24
  - '\'
25
- - *
25
+ - '*'
26
26
  - '[?]'
27
27
  - '[?]'
28
28
  - '[?]'
data/stringex.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{stringex}
8
- s.version = "1.2.2"
8
+ s.version = "1.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Russell Norris"]
12
- s.date = %q{2011-07-06}
12
+ s.date = %q{2011-08-08}
13
13
  s.description = %q{Some [hopefully] useful extensions to Ruby's String class. Stringex is made up of three libraries: ActsAsUrl [permalink solution with better character translation], Unidecoder [Unicode to Ascii transliteration], and StringExtensions [miscellaneous helper methods for the String class].}
14
14
  s.email = %q{rsl@luckysneaks.com}
15
15
  s.extra_rdoc_files = [
@@ -45,6 +45,10 @@ ActiveRecord::Schema.define(:version => 1) do
45
45
  create_table :duplicateuments, :force => true do |t|
46
46
  t.string :title, :url, :other
47
47
  end
48
+
49
+ create_table :validatuments, :force => true do |t|
50
+ t.string :title, :url, :other
51
+ end
48
52
  end
49
53
  ActiveRecord::Migration.verbose = true
50
54
 
@@ -80,6 +84,11 @@ class Duplicateument < ActiveRecord::Base
80
84
  acts_as_url :title, :duplicate_count_separator => "---"
81
85
  end
82
86
 
87
+ class Validatument < ActiveRecord::Base
88
+ acts_as_url :title, :sync_url => true
89
+ validates_presence_of :title
90
+ end
91
+
83
92
  class ActsAsUrlTest < Test::Unit::TestCase
84
93
  def test_should_create_url
85
94
  @doc = Document.create(:title => "Let's Make a Test Title, <em>Okay</em>?")
@@ -204,4 +213,11 @@ class ActsAsUrlTest < Test::Unit::TestCase
204
213
  assert_equal "unique", @doc.url
205
214
  assert_equal "unique---1", @other_doc.url
206
215
  end
216
+
217
+ def test_should_only_update_url_if_model_is_valid
218
+ @doc = Validatument.create!(:title => "Initial")
219
+ @doc.title = nil
220
+ assert !@doc.valid?
221
+ assert_equal "initial", @doc.url
222
+ end
207
223
  end
@@ -127,7 +127,8 @@ class StringExtensionsTest < Test::Unit::TestCase
127
127
  "100% of yr love" => "100 percent of yr love",
128
128
  "Kisses are $3.25 each" => "Kisses are 3 dollars 25 cents each",
129
129
  "That CD is £3.25 plus tax" => "That CD is 3 pounds 25 pence plus tax",
130
- "This CD is ¥1000 instead" => "This CD is 1000 yen instead"
130
+ "This CD is ¥1000 instead" => "This CD is 1000 yen instead",
131
+ "Food+Drink" => "Food plus Drink"
131
132
  }.each do |misc, plain|
132
133
  assert_equal plain, misc.convert_misc_characters
133
134
  end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 2
9
- - 2
10
- version: 1.2.2
8
+ - 3
9
+ - 0
10
+ version: 1.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Russell Norris
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-06 00:00:00 -04:00
18
+ date: 2011-08-08 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21