ixtlan-gettext 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ require 'ixtlan/remote/rest'
2
+ require 'ixtlan/gettext/manager'
3
+ module Ixtlan
4
+ module Remote
5
+
6
+ class Railtie < Rails::Railtie
7
+
8
+ config.rest = Ixtlan::Remote::Rest.new
9
+
10
+ config.gettext = Ixtlan::Gettext::Manager.new
11
+
12
+ rake_tasks do
13
+ load 'ixtlan/gettext/translation.rake'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,120 @@
1
+ require 'dm-migrations'
2
+ require 'dm-validations'
3
+ require 'dm-timestamps'
4
+ require 'dm-sqlite-adapter'
5
+ require 'ixtlan/gettext/models'
6
+ require 'ixtlan/gettext/manager'
7
+
8
+
9
+ describe Ixtlan::Gettext::Manager do
10
+
11
+ include FastGettext::Translation
12
+
13
+ subject { Ixtlan::Gettext::Manager.new }
14
+
15
+ let( :en ) { @en }
16
+ let( :de ) { @de }
17
+
18
+ let( :test ) { @test }
19
+
20
+ let( :key ) { @key }
21
+
22
+ let( :word ) { @word }
23
+ let( :wort ) { @wort }
24
+ let( :word_test ) { @word_test }
25
+ let( :wort_test ) { @wort_test }
26
+
27
+ before do
28
+ DataMapper.setup(:default, "sqlite::memory:")
29
+ DataMapper.auto_migrate!
30
+ # setup DB :)
31
+ date = DateTime.now( 0 )
32
+ @en = Ixtlan::Gettext::Locale.first_or_create( :code => 'en',
33
+ :updated_at => date )
34
+ @de = Ixtlan::Gettext::Locale.first_or_create( :code => 'de',
35
+ :updated_at => date )
36
+ @test = Ixtlan::UserManagement::Domain.first_or_create( :name => 'test',
37
+ :updated_at => date )
38
+ @key = Ixtlan::Gettext::TranslationKey.first_or_create( :name => 'word',
39
+ :updated_at => date )
40
+ @word = Ixtlan::Gettext::Translation.first_or_create( :text => 'word_en_default',
41
+ :updated_at => date,
42
+ :translation_key => key,
43
+ :locale => @en )
44
+ @word_test = Ixtlan::Gettext::Translation.first_or_create( :text => 'word_en_test',
45
+ :updated_at => date,
46
+ :translation_key => key,
47
+ :domain => @test,
48
+ :locale => @en )
49
+ @wort = Ixtlan::Gettext::Translation.first_or_create( :text => 'wort_de_default',
50
+ :updated_at => date,
51
+ :translation_key => key,
52
+ :locale => @de )
53
+ @wort_test = Ixtlan::Gettext::Translation.first_or_create( :text => 'wort_de_test',
54
+ :updated_at => date,
55
+ :translation_key => key,
56
+ :domain => @test,
57
+ :locale => @de )
58
+
59
+ FastGettext.default_locale = en.code
60
+ end
61
+
62
+ it 'lookup' do
63
+ subject.use( en.code )
64
+ _('word').must_equal "word_en_default"
65
+ subject.use( en.code, test.name )
66
+ _('word').must_equal "word_en_test"
67
+ subject.use( de.code )
68
+ _('word').must_equal "wort_de_default"
69
+ subject.use( de.code, test.name )
70
+ _('word').must_equal "wort_de_test"
71
+
72
+ wort_test.reload.destroy!
73
+ subject.flush_caches
74
+
75
+ subject.use( en.code )
76
+ _('word').must_equal "word_en_default"
77
+ subject.use( en.code, test.name )
78
+ _('word').must_equal "word_en_test"
79
+ subject.use( de.code )
80
+ _('word').must_equal "wort_de_default"
81
+ subject.use( de.code, test.name )
82
+ _('word').must_equal "wort_de_default"
83
+
84
+ wort.destroy!
85
+ subject.flush_caches
86
+
87
+ subject.use( en.code )
88
+ _('word').must_equal "word_en_default"
89
+ subject.use( en.code, test.name )
90
+ _('word').must_equal "word_en_test"
91
+ subject.use( de.code )
92
+ _('word').must_equal "word"
93
+ subject.use( de.code, test.name )
94
+ _('word').must_equal "word"
95
+
96
+ word.destroy!
97
+ subject.flush_caches
98
+
99
+ subject.use( en.code )
100
+ _('word').must_equal 'word'
101
+ subject.use( en.code, test.name )
102
+ _('word').must_equal "word_en_test"
103
+ subject.use( de.code )
104
+ _('word').must_equal 'word'
105
+ subject.use( de.code, test.name )
106
+ _('word').must_equal "word"
107
+
108
+ word_test.destroy!
109
+ subject.flush_caches
110
+
111
+ subject.use( en.code )
112
+ _('word').must_equal 'word'
113
+ subject.use( en.code, test.name )
114
+ _('word').must_equal 'word'
115
+ subject.use( de.code )
116
+ _('word').must_equal 'word'
117
+ subject.use( de.code, test.name )
118
+ _('word').must_equal 'word'
119
+ end
120
+ end
@@ -0,0 +1,68 @@
1
+ require 'dm-migrations'
2
+ require 'dm-validations'
3
+ require 'dm-timestamps'
4
+ require 'dm-sqlite-adapter'
5
+ require 'ixtlan/gettext/models'
6
+ require 'ixtlan/gettext/manager'
7
+
8
+ DataMapper.setup(:default, "sqlite::memory:")
9
+ DataMapper.auto_migrate!
10
+
11
+ describe Ixtlan::Gettext::Manager do
12
+
13
+ include FastGettext::Translation
14
+
15
+ subject { Ixtlan::Gettext::Manager.new }
16
+
17
+ let( :date ) { DateTime.now( 0 ) }
18
+
19
+ let( :en ) { Ixtlan::Gettext::Locale.first_or_create( :code => 'en',
20
+ :updated_at => date ) }
21
+ let( :de ) { Ixtlan::Gettext::Locale.first_or_create( :code => 'de',
22
+ :updated_at => date ) }
23
+
24
+ let( :test ) { Ixtlan::UserManagement::Domain.first_or_create( :name => 'test',
25
+ :updated_at => date ) }
26
+
27
+ let( :key ) { Ixtlan::Gettext::TranslationKey.first_or_create( :name => 'word',
28
+ :updated_at => date ) }
29
+
30
+ let( :word ) { Ixtlan::Gettext::Translation.first_or_create( :text => 'word_en_default',
31
+ :updated_at => date,
32
+ :translation_key => key,
33
+ :locale => en ) }
34
+ let( :wort ) { Ixtlan::Gettext::Translation.first_or_create( :text => 'wort_de_default',
35
+ :updated_at => date,
36
+ :translation_key => key,
37
+ :locale => de ) }
38
+ let( :word_test ) { Ixtlan::Gettext::Translation.first_or_create( :text => 'word_en_test',
39
+ :updated_at => date,
40
+ :translation_key => key,
41
+ :domain => test,
42
+ :locale => en ) }
43
+ let( :wort_test ) { Ixtlan::Gettext::Translation.first_or_create( :text => 'wort_de_test',
44
+ :updated_at => date,
45
+ :translation_key => key,
46
+ :domain => test,
47
+ :locale => de ) }
48
+ before do
49
+ # setup DB :)
50
+ en
51
+ de
52
+ test
53
+ word
54
+ word_test
55
+ wort
56
+ wort_test
57
+ end
58
+
59
+ it 'd' do
60
+ # p Ixtlan::Gettext::TranslationKey.all
61
+ # p Ixtlan::Gettext::Translation.all
62
+ # p Ixtlan::Gettext::Locale.all
63
+ # p Ixtlan::UserManagement::Domain.all
64
+ subject.use( en.code )
65
+ puts "ads"
66
+ p _('word')
67
+ end
68
+ end
@@ -0,0 +1,83 @@
1
+ require 'ixtlan/remote/sync'
2
+ require 'ixtlan/remote/rest'
3
+ require 'dm-aggregates'
4
+ require 'dm-migrations'
5
+ require 'dm-sqlite-adapter'
6
+ require 'webmock/minitest'
7
+
8
+ class Locale
9
+ include DataMapper::Resource
10
+
11
+ property :id, Serial
12
+ property :name, String
13
+ property :updated_at, DateTime
14
+ end
15
+ DataMapper.setup(:default, "sqlite::memory:")
16
+ Locale.auto_migrate!
17
+
18
+ describe Ixtlan::Remote::Sync do
19
+
20
+ subject do
21
+ s = Ixtlan::Remote::Sync.new( restserver)
22
+ s.register( Locale )
23
+ s
24
+ end
25
+
26
+ let( :baseurl ) { 'http://www.example.com' }
27
+ let( :restserver ) do
28
+ factory = Ixtlan::Remote::Rest.new
29
+ factory.server( :trans ) do |s|
30
+ s.url = baseurl
31
+ s.add_model( Locale )
32
+ end
33
+ factory
34
+ end
35
+ let( :headers ) { { 'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'Content-Type'=>'application/json' }}#, 'User-Agent'=>'Ruby' } }
36
+ let( :url ) { baseurl + "/locales" }
37
+
38
+ before { Locale.all.destroy }
39
+
40
+ it 'sync all' do
41
+
42
+ stub_request(:get, /#{url}\/last_changes.*00:00:00.*/).with(:headers => headers).to_return( :status => 200, :body => '[{"id": 111, "name": "bla", "updated_at":"2011-07-20 11:11:11.000000+0:00" }]' )
43
+
44
+ subject.do_it.to_s.must_equal "update Locale - total: 1 success: 1 failures: 0"
45
+
46
+ Locale.count.must_equal 1
47
+
48
+ stub_request(:get, /#{url}\/last_changes.*11:11:11.*/).with(:headers => headers).to_return( :status => 200, :body => '[{"id": 111, "name": "blabla", "updated_at":"2011-07-20 11:11:12.000000+0:00" }]' )
49
+
50
+ subject.do_it( Locale ).to_s.must_equal "update Locale - total: 1 success: 1 failures: 0"
51
+
52
+ Locale.count.must_equal 1
53
+ Locale.first.name.must_equal 'blabla'
54
+
55
+ stub_request(:get, /#{url}\/last_changes.*11:11:12.*/).with(:headers => headers).to_return( :status => 200, :body => '[]' )
56
+
57
+ subject.do_it.to_s.must_equal "update Locale - total: 0 success: 0 failures: 0"
58
+
59
+ Locale.count.must_equal 1
60
+ end
61
+
62
+ it 'sync Locale' do
63
+
64
+ stub_request(:get, /#{url}\/last_changes.*00:00:00.*/).with(:headers => headers).to_return( :status => 200, :body => '[{"id": 111, "name": "bla", "updated_at":"2011-07-20 10:10:10.000000+0:00" }]' )
65
+
66
+ subject.do_it( Locale ).to_s.must_equal "update Locale - total: 1 success: 1 failures: 0"
67
+
68
+ Locale.count.must_equal 1
69
+
70
+ stub_request(:get, /#{url}\/last_changes.*10:10:10.*/).with(:headers => headers).to_return( :status => 200, :body => '[{"id": 111, "name": "blabla", "updated_at":"2011-07-20 10:10:11.000000+0:00" }]' )
71
+
72
+ subject.do_it( Locale ).to_s.must_equal "update Locale - total: 1 success: 1 failures: 0"
73
+
74
+ Locale.count.must_equal 1
75
+ Locale.first.name.must_equal 'blabla'
76
+
77
+ stub_request(:get, /#{url}\/last_changes.*10:10:11.*/).with(:headers => headers).to_return( :status => 200, :body => '[]' )
78
+
79
+ subject.do_it( Locale ).to_s.must_equal "update Locale - total: 0 success: 0 failures: 0"
80
+
81
+ Locale.count.must_equal 1
82
+ end
83
+ end
metadata ADDED
@@ -0,0 +1,236 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ixtlan-gettext
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Christian Meier
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-12-31 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: ixtlan-remote
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 9
29
+ segments:
30
+ - 0
31
+ - 1
32
+ version: "0.1"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: fast_gettext
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 7
44
+ segments:
45
+ - 0
46
+ - 6
47
+ version: "0.6"
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rake
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 75
59
+ segments:
60
+ - 10
61
+ - 0
62
+ - 2
63
+ version: 10.0.2
64
+ type: :development
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: minitest
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 51
75
+ segments:
76
+ - 4
77
+ - 3
78
+ - 0
79
+ version: 4.3.0
80
+ type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: dm-sqlite-adapter
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - "="
89
+ - !ruby/object:Gem::Version
90
+ hash: 31
91
+ segments:
92
+ - 1
93
+ - 2
94
+ - 0
95
+ version: 1.2.0
96
+ type: :development
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: dm-migrations
100
+ prerelease: false
101
+ requirement: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - "="
105
+ - !ruby/object:Gem::Version
106
+ hash: 31
107
+ segments:
108
+ - 1
109
+ - 2
110
+ - 0
111
+ version: 1.2.0
112
+ type: :development
113
+ version_requirements: *id006
114
+ - !ruby/object:Gem::Dependency
115
+ name: dm-validations
116
+ prerelease: false
117
+ requirement: &id007 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - "="
121
+ - !ruby/object:Gem::Version
122
+ hash: 31
123
+ segments:
124
+ - 1
125
+ - 2
126
+ - 0
127
+ version: 1.2.0
128
+ type: :development
129
+ version_requirements: *id007
130
+ - !ruby/object:Gem::Dependency
131
+ name: dm-timestamps
132
+ prerelease: false
133
+ requirement: &id008 !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - "="
137
+ - !ruby/object:Gem::Version
138
+ hash: 31
139
+ segments:
140
+ - 1
141
+ - 2
142
+ - 0
143
+ version: 1.2.0
144
+ type: :development
145
+ version_requirements: *id008
146
+ - !ruby/object:Gem::Dependency
147
+ name: copyright-header
148
+ prerelease: false
149
+ requirement: &id009 !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ~>
153
+ - !ruby/object:Gem::Version
154
+ hash: 15
155
+ segments:
156
+ - 1
157
+ - 0
158
+ version: "1.0"
159
+ type: :development
160
+ version_requirements: *id009
161
+ description: helper to use fast_gettext with datamapper/ixtlan
162
+ email:
163
+ - m.kristian@web.de
164
+ executables: []
165
+
166
+ extensions: []
167
+
168
+ extra_rdoc_files: []
169
+
170
+ files:
171
+ - lib/ixtlan-gettext.rb
172
+ - lib/fast_gettext/translation_repository/ixtlan.rb
173
+ - lib/fast_gettext/translation_repository/ixtlan.rb~
174
+ - lib/ixtlan-gettext.rb~
175
+ - lib/ixtlan/gettext.rb
176
+ - lib/ixtlan/gettext.rb~
177
+ - lib/ixtlan/gettext/translation_models.rb~
178
+ - lib/ixtlan/gettext/locale_serializer.rb
179
+ - lib/ixtlan/gettext/controller.rb
180
+ - lib/ixtlan/gettext/rails_controller.rb~
181
+ - lib/ixtlan/gettext/crawler.rb
182
+ - lib/ixtlan/gettext/models.rb~
183
+ - lib/ixtlan/gettext/controller.rb~
184
+ - lib/ixtlan/gettext/locale.rb~
185
+ - lib/ixtlan/gettext/manager.rb
186
+ - lib/ixtlan/gettext/locale_resource.rb~
187
+ - lib/ixtlan/gettext/crawler.rb~
188
+ - lib/ixtlan/gettext/translation.rake
189
+ - lib/ixtlan/gettext/railtie.rb~
190
+ - lib/ixtlan/gettext/manager.rb~
191
+ - lib/ixtlan/gettext/models.rb
192
+ - lib/ixtlan/gettext/railtie.rb
193
+ - lib/ixtlan/gettext/locale_resource.rb
194
+ - lib/ixtlan/gettext/translation.rake~
195
+ - lib/ixtlan/railtie.rb~
196
+ - spec/manager_spec.rb~
197
+ - spec/sync_spec.rb~
198
+ - spec/manager_spec.rb
199
+ - agpl-3.0.txt
200
+ - README.md
201
+ - Gemfile
202
+ homepage: https://github.com/mkristian/ixtlan-gettext
203
+ licenses:
204
+ - AGPL3
205
+ post_install_message:
206
+ rdoc_options: []
207
+
208
+ require_paths:
209
+ - lib
210
+ required_ruby_version: !ruby/object:Gem::Requirement
211
+ none: false
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ hash: 3
216
+ segments:
217
+ - 0
218
+ version: "0"
219
+ required_rubygems_version: !ruby/object:Gem::Requirement
220
+ none: false
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ hash: 3
225
+ segments:
226
+ - 0
227
+ version: "0"
228
+ requirements: []
229
+
230
+ rubyforge_project:
231
+ rubygems_version: 1.8.15
232
+ signing_key:
233
+ specification_version: 3
234
+ summary: ""
235
+ test_files:
236
+ - spec/manager_spec.rb