snusnu-dm-is-localizable 0.0.5

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.
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../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,159 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../shared/shared_examples_spec')
3
+
4
+ describe "class level API:" do
5
+
6
+ describe "translation_class" do
7
+
8
+ it "should follow naming conventions" do
9
+ Item.translation_class.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
+ end
@@ -0,0 +1,156 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/../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
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../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
@@ -0,0 +1,64 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Language" do
4
+
5
+ describe "with valid attributes" do
6
+
7
+ it "should be valid" do
8
+ Language.new(:code => "en-US", :name => "English").should be_valid
9
+ end
10
+
11
+ it "should store unique locale string codes" do
12
+ Language.create(:code => "en-US", :name => "English").should_not be_new_record
13
+ Language.create(:code => "en-US", :name => "English").should be_new_record
14
+ end
15
+
16
+ end
17
+
18
+ describe "with incomplete attributes" do
19
+
20
+ before :each do
21
+ @l = Language.new
22
+ end
23
+
24
+ it "should require a code" do
25
+ @l.name = "English"
26
+ @l.should_not be_valid
27
+ @l.errors.size.should == 1
28
+ @l.errors.on(:code).should_not be_empty
29
+ end
30
+
31
+ it "should require a name" do
32
+ @l.code = "en-US"
33
+ @l.should_not be_valid
34
+ @l.errors.size.should == 1
35
+ @l.errors.on(:name).should_not be_empty
36
+ end
37
+
38
+ end
39
+
40
+ describe "with invalid attributes" do
41
+
42
+ it "should not accept invalid locale strings" do
43
+ Language.new(:code => 'foo', :name => "English").should_not be_valid
44
+ Language.new(:code => 'foo-bar', :name => "English").should_not be_valid
45
+ Language.new(:code => 'foo-BAR', :name => "English").should_not be_valid
46
+ Language.new(:code => 'FOO-bar', :name => "English").should_not be_valid
47
+ Language.new(:code => 'FOO-BAR', :name => "English").should_not be_valid
48
+ Language.new(:code => 'en-us', :name => "English").should_not be_valid
49
+ Language.new(:code => 'EN-us', :name => "English").should_not be_valid
50
+ Language.new(:code => 'EN-US', :name => "English").should_not be_valid
51
+ end
52
+
53
+ it "should only allow unique locale string codes" do
54
+ l1 = Language.create(:code => 'en-US', :name => "English")
55
+ l1.should_not be_new_record
56
+ l2 = Language.create(:code => 'en-US', :name => "English")
57
+ l2.should be_new_record
58
+ l2.errors.on(:code).should_not be_empty
59
+ l2.errors.size.should == 1
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "the remixed translation resource" do
4
+
5
+ it "should store unique languages for every resource to translate" do
6
+ l = Language.create :code => 'en-US', :name => 'English'
7
+ i = Item.create
8
+ t1 = ItemTranslation.create(:item => i, :language => l)
9
+ t1.should_not be_new_record
10
+ t2 = ItemTranslation.create(:item => i, :language => l)
11
+ t2.should be_new_record
12
+ t2.errors.should_not be_empty
13
+ t2.errors.size.should == 1
14
+ end
15
+
16
+ end
@@ -0,0 +1,18 @@
1
+ desc 'update changelog'
2
+ task :changelog do
3
+ File.open('CHANGELOG', 'w+') do |changelog|
4
+ `git log -z --abbrev-commit`.split("\0").each do |commit|
5
+ next if commit =~ /^Merge: \d*/
6
+ ref, author, time, _, title, _, message = commit.split("\n", 7)
7
+ ref = ref[/commit ([0-9a-f]+)/, 1]
8
+ author = author[/Author: (.*)/, 1].strip
9
+ time = Time.parse(time[/Date: (.*)/, 1]).utc
10
+ title.strip!
11
+
12
+ changelog.puts "[#{ref} | #{time}] #{author}"
13
+ changelog.puts '', " * #{title}"
14
+ changelog.puts '', message.rstrip if message
15
+ changelog.puts
16
+ end
17
+ end
18
+ end