diff --git a/README.rdoc b/README.rdoc
index ef7b173c..a4fe5410 100644
--- a/README.rdoc
+++ b/README.rdoc
@@ -46,7 +46,10 @@ In order to use the generated url attribute, you will probably want to override
Routing called via named routes like foo_path(@foo) will automatically use the url. In your controllers you will need to call Foo.find_by_url(params[:id]) instead of the regular find. Don't look for params[:url] unless you set it explicitly in the routing, to_param will generate params[:id].
-Note that if you add acts_as_url to an existing model, the url database column will initially be blank. To set this column for your existing instances, you can use the initialize_urls method. So if your class is Post, just say Post.initialize_urls.
+Note that if you add acts_as_url to an existing model, the url database column will initially be blank.
+To set this column for your existing instances, you can use the initialize_urls method. So if your class is Post, just say Post.initialize_urls.
+
+To update the existing url database column which has data, you can use reinitialize_urls method. So if your class is Post, just say Post.reinitialize_urls.
Unlike other permalink solutions, ActsAsUrl doesn't rely on Iconv (which is inconsistent across platforms and doesn't provide great transliteration as is) but instead uses a transliteration scheme (see the code for Unidecoder) which produces much better results for Unicode characters. It also mixes in some custom helpers to translate common characters into a more URI-friendly format rather than just dump them completely. Examples:
@@ -130,7 +133,7 @@ If you don't want to use the Stringex built-in translations, you can force Strin
You'll need to add a :find_by => :url to your load_and_authorize_resource. Here's an example:
load_and_authorize_resource :class => "Whatever", :message => "Not authorized", :find_by => :url
-
+
== Semantic Versioning
This project conforms to [semver](http://semver.org/). As a result of this policy, you can (and should) specify a dependency on this gem using the [Pessimistic Version Constraint](http://guides.rubygems.org/patterns/) with two digits of precision. For example:
diff --git a/lib/stringex/acts_as_url.rb b/lib/stringex/acts_as_url.rb
index 67fdcdd2..2b51e201 100644
--- a/lib/stringex/acts_as_url.rb
+++ b/lib/stringex/acts_as_url.rb
@@ -96,6 +96,13 @@ def included(base = nil, &block)
def initialize_urls
acts_as_url_configuration.adapter.initialize_urls! self
end
+
+ # Renitialize the url fields for the all records. Designed for people who
+ # want to update acts_as_url support once there's already
+ # development/production data they'd like to keep around.
+ def reinitialize_urls
+ acts_as_url_configuration.adapter.reinitialize_urls! self
+ end
end
module ActsAsUrlInstanceMethods
diff --git a/lib/stringex/acts_as_url/adapter/base.rb b/lib/stringex/acts_as_url/adapter/base.rb
index 0c51c7a6..b3f56b6c 100644
--- a/lib/stringex/acts_as_url/adapter/base.rb
+++ b/lib/stringex/acts_as_url/adapter/base.rb
@@ -33,6 +33,12 @@ def initialize_urls!(klass)
end
end
+ def reinitialize_urls!(klass)
+ self.klass = klass
+ klass.update_all(settings.url_attribute => nil)
+ initialize_urls!(klass)
+ end
+
def url_attribute(instance)
# Retrieve from database record if there are errors on attribute_to_urlify
if !is_new?(instance) && is_present?(instance.errors[settings.attribute_to_urlify])
diff --git a/test/unit/acts_as_url_integration_test.rb b/test/unit/acts_as_url_integration_test.rb
index 20ae2220..a09cf4ba 100644
--- a/test/unit/acts_as_url_integration_test.rb
+++ b/test/unit/acts_as_url_integration_test.rb
@@ -224,6 +224,21 @@ def test_should_mass_initialize_urls
assert_equal "subsequent", @other_doc.url
end
+ def test_should_mass_reinitialize_urls
+ @doc = Document.create(title: "Initial")
+ @other_doc = Document.create(title: "Subsequent")
+ # Just making sure this got set before the reinitialize urls test
+ assert_equal "initial", @doc.url
+ assert_equal "subsequent", @other_doc.url
+
+ Document.reinitialize_urls
+
+ @doc.reload
+ @other_doc.reload
+ assert_equal "initial", @doc.url
+ assert_equal "subsequent", @other_doc.url
+ end
+
def test_should_mass_initialize_urls_with_custom_url_attribute
Document.class_eval do
# Manually undefining the url method on Document which, in a real class not reused for tests,