dm-is-localizable 0.10.1
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/.document +5 -0
- data/.gitignore +23 -0
- data/CHANGELOG +423 -0
- data/LICENSE +20 -0
- data/README.textile +260 -0
- data/Rakefile +86 -0
- data/TODO +2 -0
- data/VERSION +1 -0
- data/dm-is-localizable.gemspec +88 -0
- data/lib/dm-is-localizable/is/localizable.rb +135 -0
- data/lib/dm-is-localizable/storage/language.rb +21 -0
- data/lib/dm-is-localizable/storage/translation.rb +18 -0
- data/lib/dm-is-localizable.rb +6 -0
- data/spec/fixtures/item.rb +12 -0
- data/spec/lib/rspec_tmbundle_support.rb +35 -0
- data/spec/shared/shared_examples_spec.rb +72 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +67 -0
- data/spec/unit/auto_migrate_spec.rb +13 -0
- data/spec/unit/class_level_api_spec.rb +169 -0
- data/spec/unit/instance_level_api_spec.rb +328 -0
- data/spec/unit/is_localizable_spec.rb +28 -0
- data/spec/unit/language_spec.rb +97 -0
- data/spec/unit/translation_spec.rb +27 -0
- data/tasks/changelog.rb +18 -0
- data/tasks/install.rb +9 -0
- data/tasks/whitespace.rb +4 -0
- metadata +131 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "all available_languages providers", :shared => true do
|
4
|
+
|
5
|
+
describe "with no translations" do
|
6
|
+
|
7
|
+
it "should return 0 languages" do
|
8
|
+
@provider.available_languages.size.should == 0
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "with 1 translation in 1 language" do
|
14
|
+
|
15
|
+
before :each do
|
16
|
+
@l = Language.create :code => 'en-US', :name => 'English'
|
17
|
+
@t = ItemTranslation.create :item => @item, :language => @l, :name => "Book", :desc => "Literature"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return 1 language" do
|
21
|
+
@provider.available_languages.size.should == 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return the right language" do
|
25
|
+
@provider.available_languages.first.should == @l
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "with 2 translations in 1 language" do
|
31
|
+
|
32
|
+
before :each do
|
33
|
+
@l = Language.create :code => 'en-US', :name => 'English'
|
34
|
+
@t = ItemTranslation.create :item => @item, :language => @l, :name => "Book", :desc => "Literature"
|
35
|
+
@t = ItemTranslation.create :item => @item, :language => @l, :name => "Hook", :desc => "Tool"
|
36
|
+
@item.reload
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return 1 language" do
|
40
|
+
@provider.available_languages.size.should == 1
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return the right language" do
|
44
|
+
@provider.available_languages.first.should == @l
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "with 3 translations in 2 languages" do
|
50
|
+
|
51
|
+
before :each do
|
52
|
+
@item2 = Item.create
|
53
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
54
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
55
|
+
ItemTranslation.create :item => @item, :language => @l1, :name => "Book", :desc => "Literature"
|
56
|
+
ItemTranslation.create :item => @item, :language => @l2, :name => "Haken", :desc => "Werkzeug"
|
57
|
+
ItemTranslation.create :item => @item2, :language => @l1, :name => "Hook", :desc => "Tool"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return 2 language" do
|
61
|
+
@provider.available_languages.size.should == 2
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should return the right language" do
|
65
|
+
@provider.available_languages.size.should == 2
|
66
|
+
@provider.available_languages.should include(@l1)
|
67
|
+
@provider.available_languages.should include(@l2)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
require 'dm-core'
|
4
|
+
require 'dm-is-remixable'
|
5
|
+
require 'dm-validations'
|
6
|
+
require 'dm-accepts_nested_attributes'
|
7
|
+
|
8
|
+
# Support running specs with 'rake spec' and 'spec'
|
9
|
+
$LOAD_PATH.unshift('lib') unless $LOAD_PATH.include?('lib')
|
10
|
+
|
11
|
+
require 'dm-is-localizable'
|
12
|
+
|
13
|
+
ENV["SQLITE3_SPEC_URI"] ||= 'sqlite3::memory:'
|
14
|
+
ENV["MYSQL_SPEC_URI"] ||= 'mysql://localhost/dm-is_localizable_test'
|
15
|
+
ENV["POSTGRES_SPEC_URI"] ||= 'postgres://postgres@localhost/dm-is_localizable_test'
|
16
|
+
|
17
|
+
|
18
|
+
def setup_adapter(name, default_uri = nil)
|
19
|
+
begin
|
20
|
+
DataMapper.setup(name, ENV["#{ENV['ADAPTER'].to_s.upcase}_SPEC_URI"] || default_uri)
|
21
|
+
Object.const_set('ADAPTER', ENV['ADAPTER'].to_sym) if name.to_s == ENV['ADAPTER']
|
22
|
+
true
|
23
|
+
rescue Exception => e
|
24
|
+
if name.to_s == ENV['ADAPTER']
|
25
|
+
Object.const_set('ADAPTER', nil)
|
26
|
+
warn "Could not load do_#{name}: #{e}"
|
27
|
+
end
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# have the loggers handy
|
33
|
+
# DataObjects::Logger.new(STDOUT, :debug)
|
34
|
+
# DataObjects::Sqlite3.logger = DataObjects::Logger.new(STDOUT, :debug)
|
35
|
+
|
36
|
+
# -----------------------------------------------
|
37
|
+
# support for nice html output in rspec tmbundle
|
38
|
+
# -----------------------------------------------
|
39
|
+
|
40
|
+
USE_TEXTMATE_RSPEC_BUNDLE = true # set to false if not using textmate
|
41
|
+
|
42
|
+
if USE_TEXTMATE_RSPEC_BUNDLE
|
43
|
+
|
44
|
+
require Pathname(__FILE__).dirname.expand_path + 'lib/rspec_tmbundle_support'
|
45
|
+
|
46
|
+
# use the tmbundle logger
|
47
|
+
#RSpecTmBundleHelpers::TextmateRspecLogger.new(STDOUT, :off)
|
48
|
+
|
49
|
+
|
50
|
+
class Object
|
51
|
+
include RSpecTmBundleHelpers
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
ENV['ADAPTER'] ||= 'sqlite3'
|
57
|
+
setup_adapter(:default)
|
58
|
+
Dir[Pathname(__FILE__).dirname.to_s + "/fixtures/**/*.rb"].each { |rb| require(rb) }
|
59
|
+
|
60
|
+
|
61
|
+
Spec::Runner.configure do |config|
|
62
|
+
|
63
|
+
config.before(:each) do
|
64
|
+
DataMapper.auto_migrate!
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "DataMapper.auto_migrate!" do
|
4
|
+
|
5
|
+
it "should allow to automigrate the resource to be translated" do
|
6
|
+
lambda { Item.auto_migrate! }.should_not raise_error
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should allow to automigrate the resource where translations will be stored" do
|
10
|
+
lambda { ItemTranslation.auto_migrate! }.should_not raise_error
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'shared/shared_examples_spec'
|
3
|
+
|
4
|
+
describe "class level API:" do
|
5
|
+
|
6
|
+
describe "translation_model" do
|
7
|
+
|
8
|
+
it "should follow naming conventions" do
|
9
|
+
Item.translation_model.should == ItemTranslation
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "available_languages" do
|
15
|
+
|
16
|
+
before :each do
|
17
|
+
@item = Item.create
|
18
|
+
@provider = Item
|
19
|
+
end
|
20
|
+
|
21
|
+
it_should_behave_like "all available_languages providers"
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "nr_of_available_languages" do
|
26
|
+
|
27
|
+
describe "with 0 items" do
|
28
|
+
|
29
|
+
it "should return 0" do
|
30
|
+
Item.nr_of_available_languages.should == 0
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "with 1 item" do
|
36
|
+
|
37
|
+
before :each do
|
38
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
39
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
40
|
+
@i1 = Item.create
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "and 0 translations" do
|
44
|
+
|
45
|
+
it "should return 0" do
|
46
|
+
Item.nr_of_available_languages == 0
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "and 1 translation" do
|
52
|
+
|
53
|
+
it "should return 1" do
|
54
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
55
|
+
Item.nr_of_available_languages == 1
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "and 2 translations" do
|
61
|
+
|
62
|
+
it "should return 2" do
|
63
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
64
|
+
ItemTranslation.create :item => @i1, :language => @l2, :name => 'Book', :desc => 'Literature'
|
65
|
+
Item.nr_of_available_languages == 2
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
describe "translations_complete?" do
|
76
|
+
|
77
|
+
describe "with 0 items" do
|
78
|
+
|
79
|
+
it "should return true" do
|
80
|
+
Item.translations_complete?.should be_true
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "with 1 item" do
|
86
|
+
|
87
|
+
before :each do
|
88
|
+
@i1 = Item.create
|
89
|
+
@provider = Item
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "and 0 translations" do
|
93
|
+
|
94
|
+
it "should return true" do
|
95
|
+
Item.translations_complete?.should be_true
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "and 1 translation" do
|
101
|
+
|
102
|
+
it "should return true" do
|
103
|
+
l = Language.create :code => 'en-US', :name => 'English'
|
104
|
+
ItemTranslation.create :item => @i1, :language => l, :name => 'Book', :desc => 'Literature'
|
105
|
+
Item.translations_complete?.should be_true
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "and more than 1 translation" do
|
111
|
+
|
112
|
+
it "should return true" do
|
113
|
+
l1 = Language.create :code => 'en-US', :name => 'English'
|
114
|
+
l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
115
|
+
ItemTranslation.create :item => @i1, :language => l1, :name => 'Book', :desc => 'Literature'
|
116
|
+
ItemTranslation.create :item => @i1, :language => l2, :name => 'Buch', :desc => 'Literatur'
|
117
|
+
Item.translations_complete?.should be_true
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "with 2 items" do
|
125
|
+
|
126
|
+
before :each do
|
127
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
128
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
129
|
+
@i1 = Item.create
|
130
|
+
@i2 = Item.create
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "and not all items are translated" do
|
134
|
+
|
135
|
+
it "should return false" do
|
136
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
137
|
+
ItemTranslation.create :item => @i1, :language => @l2, :name => 'Buch', :desc => 'Literatur'
|
138
|
+
Item.translations_complete?.should be_false
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "and all items are translated" do
|
144
|
+
|
145
|
+
it "should return true" do
|
146
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
147
|
+
ItemTranslation.create :item => @i1, :language => @l2, :name => 'Buch', :desc => 'Literatur'
|
148
|
+
ItemTranslation.create :item => @i2, :language => @l1, :name => 'Hook', :desc => 'Tool'
|
149
|
+
ItemTranslation.create :item => @i2, :language => @l2, :name => 'Haken', :desc => 'Werkzeug'
|
150
|
+
Item.translations_complete?.should be_true
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "localizable_properties" do
|
160
|
+
|
161
|
+
it "should return a list of symbols reflecting the localizable properties" do
|
162
|
+
Item.localizable_properties.size.should == 2
|
163
|
+
Item.localizable_properties.should include(:name)
|
164
|
+
Item.localizable_properties.should include(:desc)
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
@@ -0,0 +1,328 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'shared/shared_examples_spec'
|
3
|
+
|
4
|
+
|
5
|
+
describe "instance level API:" do
|
6
|
+
|
7
|
+
it "should create a one_to_many association that follows naming conventions" do
|
8
|
+
Item.new.should respond_to :item_translations
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should add a translations alias to the one_to_many association" do
|
12
|
+
Item.new.should respond_to :translations
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should create a many_to_many association to languages" do
|
16
|
+
Item.new.should respond_to :languages
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "available_languages" do
|
20
|
+
|
21
|
+
before :each do
|
22
|
+
@item = Item.create
|
23
|
+
@provider = @item
|
24
|
+
end
|
25
|
+
|
26
|
+
it_should_behave_like "all available_languages providers"
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
describe "nr_of_available_languages" do
|
32
|
+
|
33
|
+
before :each do
|
34
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
35
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
36
|
+
@i1 = Item.create
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "with 0 translations" do
|
40
|
+
|
41
|
+
it "should return 0" do
|
42
|
+
@i1.nr_of_available_languages.should == 0
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "with 1 translation" do
|
48
|
+
|
49
|
+
it "should return 1" do
|
50
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
51
|
+
@i1.nr_of_available_languages == 1
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "with 2 translations in 1 language" do
|
57
|
+
|
58
|
+
it "should return 1" do
|
59
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
60
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
61
|
+
@i1.nr_of_available_languages == 1
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "with 2 translations in 2 language" do
|
67
|
+
|
68
|
+
it "should return 2" do
|
69
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
70
|
+
ItemTranslation.create :item => @i1, :language => @l2, :name => 'Book', :desc => 'Literature'
|
71
|
+
@i1.nr_of_available_languages == 2
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
describe "translations_complete?" do
|
80
|
+
|
81
|
+
describe "with 1 item" do
|
82
|
+
|
83
|
+
before :each do
|
84
|
+
@i1 = Item.create
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "and 0 translations" do
|
88
|
+
|
89
|
+
it "should return true" do
|
90
|
+
@i1.translations_complete?.should be_true
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "and 1 translation" do
|
96
|
+
|
97
|
+
it "should return true" do
|
98
|
+
l = Language.create :code => 'en-US', :name => 'English'
|
99
|
+
ItemTranslation.create :item => @i1, :language => l, :name => 'Book', :desc => 'Literature'
|
100
|
+
@i1.translations_complete?.should be_true
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "and more than 1 translation" do
|
106
|
+
|
107
|
+
it "should return true" do
|
108
|
+
l1 = Language.create :code => 'en-US', :name => 'English'
|
109
|
+
l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
110
|
+
ItemTranslation.create :item => @i1, :language => l1, :name => 'Book', :desc => 'Literature'
|
111
|
+
ItemTranslation.create :item => @i1, :language => l2, :name => 'Buch', :desc => 'Literatur'
|
112
|
+
@i1.translations_complete?.should be_true
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "with 2 items" do
|
120
|
+
|
121
|
+
before :each do
|
122
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
123
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
124
|
+
@i1 = Item.create
|
125
|
+
@i2 = Item.create
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "both having 1 translation into different languages" do
|
129
|
+
|
130
|
+
it "should return false" do
|
131
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
132
|
+
ItemTranslation.create :item => @i2, :language => @l2, :name => 'Buch', :desc => 'Literatur'
|
133
|
+
@i1.translations_complete?.should be_false
|
134
|
+
@i2.translations_complete?.should be_false
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
describe "both having 1 translation into all different languages" do
|
140
|
+
|
141
|
+
it "should return true" do
|
142
|
+
ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
143
|
+
ItemTranslation.create :item => @i1, :language => @l2, :name => 'Buch', :desc => 'Literatur'
|
144
|
+
ItemTranslation.create :item => @i2, :language => @l1, :name => 'Hook', :desc => 'Tool'
|
145
|
+
ItemTranslation.create :item => @i2, :language => @l2, :name => 'Haken', :desc => 'Werkzeug'
|
146
|
+
@i1.translations_complete?.should be_true
|
147
|
+
@i2.translations_complete?.should be_true
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "translate(attribute, language_code)" do
|
157
|
+
|
158
|
+
before :each do
|
159
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
160
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
161
|
+
@i1 = Item.create
|
162
|
+
@t1 = ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
163
|
+
@t2 = ItemTranslation.create :item => @i1, :language => @l2, :name => 'Buch', :desc => 'Literatur'
|
164
|
+
end
|
165
|
+
|
166
|
+
describe "with an existing attribute" do
|
167
|
+
|
168
|
+
describe "and an existing language_code" do
|
169
|
+
|
170
|
+
describe "passed as Symbol" do
|
171
|
+
|
172
|
+
it "should return the translated string" do
|
173
|
+
@i1.translate(:name, :en_US).should == 'Book'
|
174
|
+
@i1.translate(:desc, :en_US).should == 'Literature'
|
175
|
+
@i1.translate(:name, :de_AT).should == 'Buch'
|
176
|
+
@i1.translate(:desc, :de_AT).should == 'Literatur'
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
describe "passed as String" do
|
182
|
+
|
183
|
+
it "should return the translated string" do
|
184
|
+
@i1.translate(:name, 'en_US').should == 'Book'
|
185
|
+
@i1.translate(:desc, 'en_US').should == 'Literature'
|
186
|
+
@i1.translate(:name, 'de_AT').should == 'Buch'
|
187
|
+
@i1.translate(:desc, 'de_AT').should == 'Literatur'
|
188
|
+
end
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
describe "and a non existent language_code" do
|
195
|
+
|
196
|
+
describe "passed as Symbol" do
|
197
|
+
|
198
|
+
it "should return the translated string" do
|
199
|
+
@i1.translate(:name, :it).should be_nil
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
describe "passed as String" do
|
205
|
+
|
206
|
+
it "should return the translated string" do
|
207
|
+
@i1.translate(:name, 'it').should be_nil
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
end
|
215
|
+
|
216
|
+
describe "with a non existent attribute" do
|
217
|
+
|
218
|
+
describe "and an existing language_code" do
|
219
|
+
|
220
|
+
describe "passed as Symbol" do
|
221
|
+
|
222
|
+
it "should return the translated string" do
|
223
|
+
@i1.translate(:foo, :en_US).should be_nil
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
describe "passed as String" do
|
229
|
+
|
230
|
+
it "should return the translated string" do
|
231
|
+
@i1.translate(:foo, 'en_US').should be_nil
|
232
|
+
end
|
233
|
+
|
234
|
+
end
|
235
|
+
|
236
|
+
end
|
237
|
+
|
238
|
+
describe "and a non existent language_code" do
|
239
|
+
|
240
|
+
describe "passed as Symbol" do
|
241
|
+
|
242
|
+
it "should return the translated string" do
|
243
|
+
@i1.translate(:foo, :it).should be_nil
|
244
|
+
end
|
245
|
+
|
246
|
+
end
|
247
|
+
|
248
|
+
describe "passed as String" do
|
249
|
+
|
250
|
+
it "should return the translated string" do
|
251
|
+
@i1.translate(:foo, 'it').should be_nil
|
252
|
+
end
|
253
|
+
|
254
|
+
end
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
end
|
259
|
+
|
260
|
+
end
|
261
|
+
|
262
|
+
describe "property_name(language_code)" do
|
263
|
+
|
264
|
+
before :each do
|
265
|
+
@l1 = Language.create :code => 'en-US', :name => 'English'
|
266
|
+
@l2 = Language.create :code => 'de-AT', :name => 'Deutsch'
|
267
|
+
@i1 = Item.create
|
268
|
+
@t1 = ItemTranslation.create :item => @i1, :language => @l1, :name => 'Book', :desc => 'Literature'
|
269
|
+
@t2 = ItemTranslation.create :item => @i1, :language => @l2, :name => 'Buch', :desc => 'Literatur'
|
270
|
+
end
|
271
|
+
|
272
|
+
describe "with a nil language_code" do
|
273
|
+
|
274
|
+
it "should return nil" do
|
275
|
+
@i1.name(nil).should be_nil
|
276
|
+
end
|
277
|
+
|
278
|
+
end
|
279
|
+
|
280
|
+
describe "with a non existent language_code" do
|
281
|
+
|
282
|
+
describe "passed as Symbol" do
|
283
|
+
|
284
|
+
it "should return nil" do
|
285
|
+
@i1.name(:it).should be_nil
|
286
|
+
end
|
287
|
+
|
288
|
+
end
|
289
|
+
|
290
|
+
describe "passed as String" do
|
291
|
+
|
292
|
+
it "should return nil" do
|
293
|
+
@i1.name('it').should be_nil
|
294
|
+
end
|
295
|
+
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
describe "with an existing language_code" do
|
301
|
+
|
302
|
+
describe "passed as Symbol" do
|
303
|
+
|
304
|
+
it "should return the translated property" do
|
305
|
+
@i1.name(:en_US).should == 'Book'
|
306
|
+
@i1.desc(:en_US).should == 'Literature'
|
307
|
+
@i1.name(:de_AT).should == 'Buch'
|
308
|
+
@i1.desc(:de_AT).should == 'Literatur'
|
309
|
+
end
|
310
|
+
|
311
|
+
end
|
312
|
+
|
313
|
+
describe "passed as String" do
|
314
|
+
|
315
|
+
it "should return the translated property" do
|
316
|
+
@i1.name('en_US').should == 'Book'
|
317
|
+
@i1.desc('en_US').should == 'Literature'
|
318
|
+
@i1.name('de_AT').should == 'Buch'
|
319
|
+
@i1.desc('de_AT').should == 'Literatur'
|
320
|
+
end
|
321
|
+
|
322
|
+
end
|
323
|
+
|
324
|
+
end
|
325
|
+
|
326
|
+
end
|
327
|
+
|
328
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "is_localizable with no options" do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@i = Item.create
|
7
|
+
@l = Language.create :code => 'en', :name => 'English'
|
8
|
+
@t = ItemTranslation.new :item => @i, :language => @l
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should belong_to a resource" do
|
12
|
+
@t.respond_to?(:item).should == true
|
13
|
+
@t.item.should be_instance_of(Item)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should belong_to a language" do
|
17
|
+
@t.respond_to?(:language).should == true
|
18
|
+
@t.language.should be_instance_of(Language)
|
19
|
+
@t.language.code.should == 'en'
|
20
|
+
@t.language.name.should == 'English'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should store properties defined inside the block in the translations resource" do
|
24
|
+
@t.respond_to?(:name).should == true
|
25
|
+
@t.respond_to?(:desc).should == true
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|