i18n_backend_database_rails3 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.textile +125 -0
- data/Rakefile +1 -0
- data/data/locales.yml +4 -0
- data/generators/i18n_backend_database/i18n_backend_database_generator.rb +8 -0
- data/generators/i18n_backend_database/templates/migrate/create_i18n_tables.rb +19 -0
- data/i18n_backend_database.gemspec +24 -0
- data/init.rb +1 -0
- data/lib/controllers/locales_controller.rb +86 -0
- data/lib/controllers/translations_controller.rb +141 -0
- data/lib/ext/i18n.rb +68 -0
- data/lib/google_language.rb +30 -0
- data/lib/i18n_backend_database.rb +9 -0
- data/lib/i18n_backend_database/database.rb +263 -0
- data/lib/i18n_backend_database/version.rb +7 -0
- data/lib/i18n_util.rb +148 -0
- data/lib/models/locale.rb +67 -0
- data/lib/models/translation.rb +46 -0
- data/lib/models/translation_option.rb +26 -0
- data/lib/public/images/custom1_bar.gif +0 -0
- data/lib/public/images/custom1_box.gif +0 -0
- data/lib/public/images/percentImage.png +0 -0
- data/lib/public/images/percentImage_back.png +0 -0
- data/lib/public/images/percentImage_back1.png +0 -0
- data/lib/public/images/percentImage_back2.png +0 -0
- data/lib/public/images/percentImage_back3.png +0 -0
- data/lib/public/images/percentImage_back4.png +0 -0
- data/lib/public/javascripts/jsProgressBarHandler.js +509 -0
- data/lib/routing.rb +15 -0
- data/lib/views/layouts/translations.html.haml +16 -0
- data/lib/views/locales/edit.html.haml +16 -0
- data/lib/views/locales/index.html.haml +14 -0
- data/lib/views/locales/new.html.haml +14 -0
- data/lib/views/locales/show.html.haml +10 -0
- data/lib/views/translations/asset_translations.html.haml +23 -0
- data/lib/views/translations/edit.html.haml +24 -0
- data/lib/views/translations/index.html.haml +21 -0
- data/lib/views/translations/new.html.haml +14 -0
- data/lib/views/translations/show.html.haml +21 -0
- data/lib/views/translations/translations.html.haml +20 -0
- data/lib/views/translations/update.rjs +7 -0
- data/routes.rb +3 -0
- data/spec/assets/public/es/favicons/favicon1.gif +0 -0
- data/spec/assets/public/es/images/icons/icon1.gif +0 -0
- data/spec/assets/public/es/images/image1.gif +0 -0
- data/spec/assets/public/favicons/favicon1.gif +0 -0
- data/spec/assets/public/favicons/favicon2.gif +0 -0
- data/spec/assets/public/images/icons/icon1.gif +0 -0
- data/spec/assets/public/images/icons/icon2.gif +0 -0
- data/spec/assets/public/images/image1.gif +0 -0
- data/spec/assets/public/images/image2.gif +0 -0
- data/spec/assets/public/images/promo/sfc08_140x400_3.gif +0 -0
- data/spec/assets/views/test_view1.html.erb +1 -0
- data/spec/assets/views/test_view2.html.erb +30 -0
- data/spec/caching_spec.rb +87 -0
- data/spec/controllers/locales_controller_spec.rb +173 -0
- data/spec/controllers/locales_routing_spec.rb +59 -0
- data/spec/controllers/translations_controller_spec.rb +189 -0
- data/spec/controllers/translations_routing_spec.rb +59 -0
- data/spec/database_spec.rb +199 -0
- data/spec/i18n_ext_spec.rb +40 -0
- data/spec/localize_spec.rb +66 -0
- data/spec/localize_text_spec.rb +76 -0
- data/spec/models/locale_spec.rb +111 -0
- data/spec/models/translation_spec.rb +44 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/translate_asset_spec.rb +57 -0
- data/spec/translate_spec.rb +546 -0
- data/tasks/i18n.rake +60 -0
- metadata +143 -0
data/lib/routing.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module I18n
|
2
|
+
module BackendDatabase
|
3
|
+
module Routing
|
4
|
+
# Loads the set of routes from within a plugin and
|
5
|
+
# evaluates them at this point within an application’s
|
6
|
+
# main routes.rb file.
|
7
|
+
def from_plugin(name)
|
8
|
+
map = self # to make 'map' available within the plugin route file
|
9
|
+
plugin_root = File.join(RAILS_ROOT, 'vendor', 'plugins')
|
10
|
+
routes_path = File.join(plugin_root, name.to_s, 'routes.rb')
|
11
|
+
eval(IO.read(routes_path), binding, routes_path) if File.file?(routes_path)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
!!!
|
2
|
+
%html{:lang => "en", "xml:lang" => "en", :xmlns => "http://www.w3.org/1999/xhtml"}
|
3
|
+
%head
|
4
|
+
%meta{:content => "text/html;charset=UTF-8", "http-equiv" => "content-type"}/
|
5
|
+
%title
|
6
|
+
Translation Administration: #{controller.action_name}
|
7
|
+
= stylesheet_link_tag 'scaffold'
|
8
|
+
= javascript_include_tag :defaults
|
9
|
+
= javascript_include_tag 'jsProgressBarHandler.js'
|
10
|
+
%body
|
11
|
+
%p
|
12
|
+
= link_to 'Textual Translations', translations_url
|
13
|
+
\· #{link_to 'Asset Translations', asset_translations_url}
|
14
|
+
%body.content
|
15
|
+
.content
|
16
|
+
= yield
|
@@ -0,0 +1,16 @@
|
|
1
|
+
%h1 Editing locale
|
2
|
+
- form_for(@locale) do |f|
|
3
|
+
= f.error_messages
|
4
|
+
%p
|
5
|
+
= f.label :code
|
6
|
+
%br/
|
7
|
+
= f.text_field :code
|
8
|
+
%p
|
9
|
+
= f.label :name
|
10
|
+
%br/
|
11
|
+
= f.text_field :name
|
12
|
+
%p
|
13
|
+
= f.submit "Update"
|
14
|
+
= link_to 'Show', @locale
|
15
|
+
|
|
16
|
+
\#{link_to 'Back', locales_path}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
%h1 Listing locales
|
2
|
+
%table
|
3
|
+
%tr
|
4
|
+
%th Code
|
5
|
+
%th Name
|
6
|
+
- for locale in @locales
|
7
|
+
%tr
|
8
|
+
%td= h locale.code
|
9
|
+
%td= h locale.name
|
10
|
+
%td= link_to 'Show', locale
|
11
|
+
%td= link_to 'Edit', edit_locale_path(locale)
|
12
|
+
%td= link_to 'Destroy', locale, :confirm => 'Are you sure?', :method => :delete
|
13
|
+
%br/
|
14
|
+
= link_to 'New locale', new_locale_path
|
@@ -0,0 +1,23 @@
|
|
1
|
+
- form_tag asset_translations_url do
|
2
|
+
= select_tag :locale_id, options_from_collection_for_select(Locale.all, :code, :name, @locale.code)
|
3
|
+
= select_tag :translation_option, options_from_collection_for_select(TranslationOption.all, :code, :description, @translation_option.code)
|
4
|
+
= submit_tag 'Go'
|
5
|
+
:javascript
|
6
|
+
Event.observe(window, 'load', function() {
|
7
|
+
myJsProgressBarHandler = new JS_BRAMUS.jsProgressBar($('translate_progress'), 0);
|
8
|
+
}, false);
|
9
|
+
%p
|
10
|
+
Asset Translation progress:
|
11
|
+
%span#translate_progress.progressBar= @percentage_translated
|
12
|
+
%h2
|
13
|
+
= @translation_option.description
|
14
|
+
\: #{@locale.name}
|
15
|
+
- if @asset_translations.empty?
|
16
|
+
%h3 No records for this criteria.
|
17
|
+
- for asset in @asset_translations
|
18
|
+
%p
|
19
|
+
= image_tag(asset, :size => "50x50")
|
20
|
+
= link_to(asset, image_path(asset))
|
21
|
+
- if !@locale.default_locale? && @translation_option == TranslationOption.translated
|
22
|
+
= image_tag(I18n.ta(asset, :locale => @locale.code), :size => "50x50")
|
23
|
+
= link_to(asset, image_path(I18n.ta(asset, :locale => @locale.code)))
|
@@ -0,0 +1,24 @@
|
|
1
|
+
%h1
|
2
|
+
Editing translation for #{@locale.code}
|
3
|
+
%p
|
4
|
+
%b Key:
|
5
|
+
= h @translation.key
|
6
|
+
%p
|
7
|
+
%b Raw Key:
|
8
|
+
= h @translation.raw_key
|
9
|
+
%p
|
10
|
+
%b Pluralization Index:
|
11
|
+
= h @translation.pluralization_index
|
12
|
+
%p
|
13
|
+
%b Default Locale Value:
|
14
|
+
= h @translation.default_locale_value
|
15
|
+
- form_for([@locale, @translation]) do |f|
|
16
|
+
= f.error_messages
|
17
|
+
= f.label :value
|
18
|
+
%br/
|
19
|
+
= f.text_field :value
|
20
|
+
%p
|
21
|
+
= f.submit "Update"
|
22
|
+
= link_to 'Show', locale_translation_path(@locale, @translation)
|
23
|
+
|
|
24
|
+
\#{link_to 'Back', locale_translations_path}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
%h1
|
2
|
+
Listing translations for #{@locale.code}
|
3
|
+
%table
|
4
|
+
%tr
|
5
|
+
%th Key
|
6
|
+
%th Raw Key
|
7
|
+
%th Value
|
8
|
+
%th Default Locale Value
|
9
|
+
- for translation in @translations
|
10
|
+
%tr
|
11
|
+
%td= h translation.key
|
12
|
+
%td= h translation.raw_key
|
13
|
+
%td= h translation.value
|
14
|
+
%td= h translation.default_locale_value
|
15
|
+
%td= link_to 'Show', locale_translation_path(@locale, translation)
|
16
|
+
%td= link_to 'Edit', edit_locale_translation_path(@locale, translation)
|
17
|
+
%td= link_to 'Destroy', locale_translation_path(@locale, translation), :confirm => 'Are you sure?', :method => :delete
|
18
|
+
%br/
|
19
|
+
= link_to 'New translation', new_locale_translation_path
|
20
|
+
|
|
21
|
+
\#{link_to 'Back', locales_path}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
%h1 New translation
|
2
|
+
- form_for([@locale, @translation]) do |f|
|
3
|
+
= f.error_messages
|
4
|
+
%p
|
5
|
+
= f.label :key
|
6
|
+
%br/
|
7
|
+
= f.text_field :key
|
8
|
+
%p
|
9
|
+
= f.label :value
|
10
|
+
%br/
|
11
|
+
= f.text_field :value
|
12
|
+
%p
|
13
|
+
= f.submit "Create"
|
14
|
+
= link_to 'Back', locale_translations_path
|
@@ -0,0 +1,21 @@
|
|
1
|
+
%p
|
2
|
+
%b Locale:
|
3
|
+
= h @locale.code
|
4
|
+
%p
|
5
|
+
%b Key:
|
6
|
+
= h @translation.key
|
7
|
+
%p
|
8
|
+
%b Raw Key:
|
9
|
+
= h @translation.raw_key
|
10
|
+
%p
|
11
|
+
%b Pluralization Index:
|
12
|
+
= h @translation.pluralization_index
|
13
|
+
%p
|
14
|
+
%b Default Locale Value:
|
15
|
+
= h @translation.default_locale_value
|
16
|
+
%p
|
17
|
+
%b Value:
|
18
|
+
= h @translation.value
|
19
|
+
= link_to 'Edit', edit_locale_translation_path(@locale, @translation)
|
20
|
+
|
|
21
|
+
\#{link_to 'Back', locale_translations_path}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
- form_tag translations_url do
|
2
|
+
= select_tag :locale_id, options_from_collection_for_select(Locale.all, :code, :name, @locale.code)
|
3
|
+
= select_tag :translation_option, options_from_collection_for_select(TranslationOption.all, :code, :description, @translation_option.code)
|
4
|
+
= submit_tag 'Go'
|
5
|
+
%p
|
6
|
+
Textual Translation progress:
|
7
|
+
%span#translate_progress.progressBar= @locale.percentage_translated
|
8
|
+
%h2
|
9
|
+
= @translation_option.description
|
10
|
+
\: #{@locale.name}
|
11
|
+
- if @translations.empty?
|
12
|
+
%h3 No records for this criteria.
|
13
|
+
- for translation in @translations
|
14
|
+
%div{:id => "translation_#{translation.class}_#{translation.id}"}
|
15
|
+
- remote_form_for([@locale, translation]) do |f|
|
16
|
+
%p= h translation.default_locale_value || translation.raw_key
|
17
|
+
%p
|
18
|
+
= f.text_field :value, :size => 128
|
19
|
+
= f.submit "Update"
|
20
|
+
%hr/
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# update the percentage and remove the translated record if translated for first time otherwise highlight change
|
2
|
+
if @first_time_translating
|
3
|
+
page.call 'myJsProgressBarHandler.setPercentage', 'translate_progress', @locale.percentage_translated
|
4
|
+
page.remove("translation_#{@translation.class}_#{@translation.id}")
|
5
|
+
else
|
6
|
+
page.visual_effect :highlight, "translation_#{@translation.class}_#{@translation.id}"
|
7
|
+
end
|
data/routes.rb
ADDED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<div class="promo-ad"><%= link_to (translated_image_tag(I18n.ta("promo/sfc08_140x400_3.gif")), "http://streak.espn.go.com/") %></div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<h1>Listing people</h1>
|
2
|
+
<%= image_tag(I18n.ta('image1.gif')) %>
|
3
|
+
<%= image_tag(I18n.ta('image2.gif')) %>
|
4
|
+
<%= image_tag(I18n.ta('image2.gif')) %> <!-- test duplicate tag ... image should only appear once -->
|
5
|
+
<%= image_tag(I18n.ta('icons/icon1.gif')) %>
|
6
|
+
<%= image_tag(I18n.ta('icons/icon2.gif')) %>
|
7
|
+
<%= image_tag(I18n.ta('/favicons/favicon1.gif')) image_tag(I18n.ta('/favicons/favicon2.gif')) %> <!-- should find tags on same line -->
|
8
|
+
|
9
|
+
<table>
|
10
|
+
<tr>
|
11
|
+
<th>Name</th>
|
12
|
+
<th>City</th>
|
13
|
+
<th>Age</th>
|
14
|
+
</tr>
|
15
|
+
|
16
|
+
<% for person in @people %>
|
17
|
+
<tr>
|
18
|
+
<td><%=h person.name %></td>
|
19
|
+
<td><%=h person.city %></td>
|
20
|
+
<td><%=h person.age %></td>
|
21
|
+
<td><%= link_to 'Show', person %></td>
|
22
|
+
<td><%= link_to 'Edit', edit_person_path(person) %></td>
|
23
|
+
<td><%= link_to 'Destroy', person, :confirm => 'Are you sure?', :method => :delete %></td>
|
24
|
+
</tr>
|
25
|
+
<% end %>
|
26
|
+
</table>
|
27
|
+
|
28
|
+
<br />
|
29
|
+
|
30
|
+
<%= link_to 'New person', new_person_path(:locale => I18n.locale) %>
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe I18n::Backend::Database do
|
4
|
+
before(:each) do
|
5
|
+
@backend = I18n::Backend::Database.new
|
6
|
+
I18n.backend = @backend
|
7
|
+
end
|
8
|
+
|
9
|
+
after(:each) do
|
10
|
+
@backend.cache_store.clear
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "with default locale en" do
|
14
|
+
before(:each) do
|
15
|
+
I18n.default_locale = "en"
|
16
|
+
@english_locale = Locale.create!(:code => "en")
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "and locale en" do
|
20
|
+
before(:each) do
|
21
|
+
I18n.locale = "en"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should cache translations" do
|
25
|
+
@english_locale.translations.create!(:key => 'activerecord.errors.messages.blank', :value => 'is blank moron!')
|
26
|
+
|
27
|
+
options = {:attribute=>"Locale", :value=>nil,
|
28
|
+
:scope=>[:activerecord, :errors], :default=>[:"models.translation.blank", :"messages.blank"], :model=>"Translation"}
|
29
|
+
|
30
|
+
@backend.translate("en", :"models.translation.attributes.locale.blank", options).should == "is blank moron!"
|
31
|
+
|
32
|
+
@backend.cache_store.exist?("en:#{Translation.hk("activerecord.errors.models.translation.attributes.locale.blank")}").should be_true
|
33
|
+
@backend.cache_store.exist?("en:#{Translation.hk("activerecord.errors.models.translation.blank")}").should be_true
|
34
|
+
@backend.cache_store.exist?("en:#{Translation.hk("activerecord.errors.messages.blank")}").should be_true
|
35
|
+
|
36
|
+
@backend.cache_store.read("en:#{Translation.hk("activerecord.errors.models.translation.attributes.locale.blank")}").should == nil
|
37
|
+
@backend.cache_store.read("en:#{Translation.hk("activerecord.errors.models.translation.blank")}").should == nil
|
38
|
+
@backend.cache_store.read("en:#{Translation.hk("activerecord.errors.messages.blank")}").should == "is blank moron!"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should update a cache record if the translation record changes" do
|
42
|
+
hash_key = Translation.hk("blah")
|
43
|
+
@backend.translate("en", "blah")
|
44
|
+
@backend.cache_store.read("en:#{hash_key}").should == "blah"
|
45
|
+
|
46
|
+
translation = @english_locale.translations.find_by_key(Translation.hk("blah"))
|
47
|
+
translation.value.should == "blah"
|
48
|
+
|
49
|
+
translation.update_attribute(:value, "foo")
|
50
|
+
translation.value.should == "foo"
|
51
|
+
@backend.cache_store.read("en:#{hash_key}").should == "foo"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "and locale es" do
|
56
|
+
before(:each) do
|
57
|
+
I18n.locale = "es"
|
58
|
+
@spanish_locale = Locale.create!(:code => 'es')
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should cache translations" do
|
62
|
+
@english_locale.translations.create!(:key => 'activerecord.errors.messages.blank', :value => 'is blank moron!')
|
63
|
+
|
64
|
+
options = {:attribute=>"Locale", :value=>nil,
|
65
|
+
:scope=>[:activerecord, :errors], :default=>[:"models.translation.blank", :"messages.blank"], :model=>"Translation"}
|
66
|
+
|
67
|
+
@backend.translate("es", :"models.translation.attributes.locale.blank", options).should == "is blank moron!"
|
68
|
+
|
69
|
+
@backend.cache_store.exist?("es:#{Translation.hk("activerecord.errors.models.translation.attributes.locale.blank")}").should be_true
|
70
|
+
@backend.cache_store.exist?("es:#{Translation.hk("activerecord.errors.models.translation.blank")}").should be_true
|
71
|
+
@backend.cache_store.exist?("es:#{Translation.hk("activerecord.errors.messages.blank")}").should be_true
|
72
|
+
|
73
|
+
@backend.cache_store.read("es:#{Translation.hk("activerecord.errors.models.translation.attributes.locale.blank")}").should == nil
|
74
|
+
@backend.cache_store.read("es:#{Translation.hk("activerecord.errors.models.translation.blank")}").should == nil
|
75
|
+
@backend.cache_store.read("es:#{Translation.hk("activerecord.errors.messages.blank")}").should == "is blank moron!"
|
76
|
+
|
77
|
+
@backend.cache_store.exist?("en:#{Translation.hk("activerecord.errors.models.translation.attributes.locale.blank")}").should be_true
|
78
|
+
@backend.cache_store.exist?("en:#{Translation.hk("activerecord.errors.models.translation.blank")}").should be_true
|
79
|
+
@backend.cache_store.exist?("en:#{Translation.hk("activerecord.errors.messages.blank")}").should be_true
|
80
|
+
|
81
|
+
@backend.cache_store.read("en:#{Translation.hk("activerecord.errors.models.translation.attributes.locale.blank")}").should == nil
|
82
|
+
@backend.cache_store.read("en:#{Translation.hk("activerecord.errors.models.translation.blank")}").should == nil
|
83
|
+
@backend.cache_store.read("en:#{Translation.hk("activerecord.errors.messages.blank")}").should == "is blank moron!"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe LocalesController do
|
4
|
+
|
5
|
+
def mock_locale(stubs={})
|
6
|
+
@mock_locale ||= mock_model(Locale, stubs)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "responding to GET index" do
|
10
|
+
|
11
|
+
it "should expose all locales as @locales" do
|
12
|
+
Locale.should_receive(:find).with(:all).and_return([mock_locale])
|
13
|
+
get :index
|
14
|
+
assigns[:locales].should == [mock_locale]
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "with mime type of xml" do
|
18
|
+
|
19
|
+
it "should render all locales as xml" do
|
20
|
+
request.env["HTTP_ACCEPT"] = "application/xml"
|
21
|
+
Locale.should_receive(:find).with(:all).and_return(locales = mock("Array of Locales"))
|
22
|
+
locales.should_receive(:to_xml).and_return("generated XML")
|
23
|
+
get :index
|
24
|
+
response.body.should == "generated XML"
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "responding to GET show" do
|
32
|
+
|
33
|
+
it "should expose the requested locale as @locale" do
|
34
|
+
Locale.should_receive(:find_by_code).with("en").and_return(mock_locale)
|
35
|
+
get :show, :id => "en"
|
36
|
+
assigns[:locale].should equal(mock_locale)
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "with mime type of xml" do
|
40
|
+
|
41
|
+
it "should render the requested locale as xml" do
|
42
|
+
request.env["HTTP_ACCEPT"] = "application/xml"
|
43
|
+
Locale.should_receive(:find_by_code).with("en").and_return(mock_locale)
|
44
|
+
mock_locale.should_receive(:to_xml).and_return("generated XML")
|
45
|
+
get :show, :id => "en"
|
46
|
+
response.body.should == "generated XML"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "responding to GET new" do
|
54
|
+
|
55
|
+
it "should expose a new locale as @locale" do
|
56
|
+
Locale.should_receive(:new).and_return(mock_locale)
|
57
|
+
get :new
|
58
|
+
assigns[:locale].should equal(mock_locale)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "responding to GET edit" do
|
64
|
+
|
65
|
+
it "should expose the requested locale as @locale" do
|
66
|
+
Locale.should_receive(:find_by_code).with("en").and_return(mock_locale)
|
67
|
+
get :edit, :id => "en"
|
68
|
+
assigns[:locale].should equal(mock_locale)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "responding to POST create" do
|
74
|
+
|
75
|
+
describe "with valid params" do
|
76
|
+
|
77
|
+
it "should expose a newly created locale as @locale" do
|
78
|
+
Locale.should_receive(:new).with({'these' => 'params'}).and_return(mock_locale(:save => true))
|
79
|
+
post :create, :locale => {:these => 'params'}
|
80
|
+
assigns(:locale).should equal(mock_locale)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should redirect to the created locale" do
|
84
|
+
Locale.stub!(:new).and_return(mock_locale(:save => true))
|
85
|
+
post :create, :locale => {}
|
86
|
+
response.should redirect_to(locale_url(mock_locale))
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "with invalid params" do
|
92
|
+
|
93
|
+
it "should expose a newly created but unsaved locale as @locale" do
|
94
|
+
Locale.stub!(:new).with({'these' => 'params'}).and_return(mock_locale(:save => false))
|
95
|
+
post :create, :locale => {:these => 'params'}
|
96
|
+
assigns(:locale).should equal(mock_locale)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should re-render the 'new' template" do
|
100
|
+
Locale.stub!(:new).and_return(mock_locale(:save => false))
|
101
|
+
post :create, :locale => {}
|
102
|
+
response.should render_template('new')
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "responding to PUT udpate" do
|
110
|
+
|
111
|
+
describe "with valid params" do
|
112
|
+
|
113
|
+
it "should update the requested locale" do
|
114
|
+
Locale.should_receive(:find_by_code).with("en").and_return(mock_locale)
|
115
|
+
mock_locale.should_receive(:update_attributes).with({'these' => 'params'})
|
116
|
+
put :update, :id => "en", :locale => {:these => 'params'}
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should expose the requested locale as @locale" do
|
120
|
+
Locale.stub!(:find_by_code).and_return(mock_locale(:update_attributes => true))
|
121
|
+
put :update, :id => "en"
|
122
|
+
assigns(:locale).should equal(mock_locale)
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should redirect to the locale" do
|
126
|
+
Locale.stub!(:find).and_return(mock_locale(:update_attributes => true))
|
127
|
+
put :update, :id => "1"
|
128
|
+
response.should redirect_to(locale_url(mock_locale))
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "with invalid params" do
|
134
|
+
|
135
|
+
it "should update the requested locale" do
|
136
|
+
Locale.should_receive(:find_by_code).with("en").and_return(mock_locale)
|
137
|
+
mock_locale.should_receive(:update_attributes).with({'these' => 'params'})
|
138
|
+
put :update, :id => "en", :locale => {:these => 'params'}
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should expose the locale as @locale" do
|
142
|
+
Locale.stub!(:find_by_code).and_return(mock_locale(:update_attributes => false))
|
143
|
+
put :update, :id => "en"
|
144
|
+
assigns(:locale).should equal(mock_locale)
|
145
|
+
end
|
146
|
+
|
147
|
+
it "should re-render the 'edit' template" do
|
148
|
+
Locale.stub!(:find_by_code).and_return(mock_locale(:update_attributes => false))
|
149
|
+
put :update, :id => "en"
|
150
|
+
response.should render_template('edit')
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
describe "responding to DELETE destroy" do
|
158
|
+
|
159
|
+
it "should destroy the requested locale" do
|
160
|
+
Locale.should_receive(:find_by_code).with("en").and_return(mock_locale)
|
161
|
+
mock_locale.should_receive(:destroy)
|
162
|
+
delete :destroy, :id => "en"
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should redirect to the locales list" do
|
166
|
+
Locale.stub!(:find_by_code).and_return(mock_locale(:destroy => true))
|
167
|
+
delete :destroy, :id => "en"
|
168
|
+
response.should redirect_to(locales_url)
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|