translatable 0.3.1 → 1.2.2

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.
metadata CHANGED
@@ -1,60 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: translatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
5
- prerelease:
4
+ version: 1.2.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - E-Max
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-16 00:00:00.000000000 Z
11
+ date: 2014-01-31 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activerecord
16
- requirement: &70443110 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: !binary |-
20
+ NC4wLjA=
22
21
  type: :runtime
23
22
  prerelease: false
24
- version_requirements: *70443110
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ! '>='
26
+ - !ruby/object:Gem::Version
27
+ version: !binary |-
28
+ NC4wLjA=
25
29
  - !ruby/object:Gem::Dependency
26
30
  name: activesupport
27
- requirement: &70441740 !ruby/object:Gem::Requirement
28
- none: false
31
+ requirement: !ruby/object:Gem::Requirement
29
32
  requirements:
30
33
  - - ! '>='
31
34
  - !ruby/object:Gem::Version
32
35
  version: '0'
33
36
  type: :runtime
34
37
  prerelease: false
35
- version_requirements: *70441740
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
36
43
  - !ruby/object:Gem::Dependency
37
44
  name: i18n
38
- requirement: &70440960 !ruby/object:Gem::Requirement
39
- none: false
45
+ requirement: !ruby/object:Gem::Requirement
40
46
  requirements:
41
47
  - - ! '>='
42
48
  - !ruby/object:Gem::Version
43
49
  version: '0'
44
50
  type: :runtime
45
51
  prerelease: false
46
- version_requirements: *70440960
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
47
57
  - !ruby/object:Gem::Dependency
48
58
  name: jeweler
49
- requirement: &70598430 !ruby/object:Gem::Requirement
50
- none: false
59
+ requirement: !ruby/object:Gem::Requirement
51
60
  requirements:
52
61
  - - ~>
53
62
  - !ruby/object:Gem::Version
54
- version: 1.8.0
63
+ version: !binary |-
64
+ MS44LjA=
55
65
  type: :development
56
66
  prerelease: false
57
- version_requirements: *70598430
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ~>
70
+ - !ruby/object:Gem::Version
71
+ version: !binary |-
72
+ MS44LjA=
58
73
  description: This game was build to make whole proccess of working with translation
59
74
  for DM to be almost invisble. That was THE AIM.
60
75
  email: max@studentify.nl
@@ -64,7 +79,8 @@ extra_rdoc_files:
64
79
  - LICENSE.txt
65
80
  - README.rdoc
66
81
  files:
67
- - .document
82
+ - .ruby-gemset
83
+ - .ruby-version
68
84
  - .travis.yml
69
85
  - Gemfile
70
86
  - Gemfile.lock
@@ -75,10 +91,12 @@ files:
75
91
  - lib/generators/translatable/model_generator.rb
76
92
  - lib/generators/translatable/translation_generator.rb
77
93
  - lib/translatable.rb
78
- - lib/translatable/active_record.rb
94
+ - lib/translatable/base.rb
79
95
  - lib/translatable/engine.rb
80
96
  - lib/translatable/generator_helper.rb
81
- - test/cases/translatable_test.rb
97
+ - lib/translatable/orm/active_record.rb
98
+ - test/cases/active_record_test.rb
99
+ - test/cases/base_test.rb
82
100
  - test/generators/model_generator_test.rb
83
101
  - test/generators/translation_generator_test.rb
84
102
  - test/support/active_record.rb
@@ -91,29 +109,25 @@ files:
91
109
  homepage: http://github.com/kot-begemot/translatable
92
110
  licenses:
93
111
  - MIT
112
+ metadata: {}
94
113
  post_install_message:
95
114
  rdoc_options: []
96
115
  require_paths:
97
116
  - lib
98
117
  required_ruby_version: !ruby/object:Gem::Requirement
99
- none: false
100
118
  requirements:
101
119
  - - ! '>='
102
120
  - !ruby/object:Gem::Version
103
121
  version: '0'
104
- segments:
105
- - 0
106
- hash: -740240291
107
122
  required_rubygems_version: !ruby/object:Gem::Requirement
108
- none: false
109
123
  requirements:
110
124
  - - ! '>='
111
125
  - !ruby/object:Gem::Version
112
126
  version: '0'
113
127
  requirements: []
114
128
  rubyforge_project:
115
- rubygems_version: 1.8.10
129
+ rubygems_version: 2.2.1
116
130
  signing_key:
117
- specification_version: 3
131
+ specification_version: 4
118
132
  summary: An esay way to manage the translations for datamapper
119
133
  test_files: []
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
@@ -1,254 +0,0 @@
1
- require 'active_record'
2
- require 'i18n'
3
-
4
- module Translatable
5
- ###
6
- # In order to made the model Translatable, an additional fields should
7
- # should be added first to it. Here is an example of it might be implemented:
8
- #
9
- # Examples:
10
- #
11
- # class Author < ActiveRecord::Base
12
- # validates :name, :presence => true
13
- # end
14
- #
15
- # class TranslatableNews < ActiveRecord::Base #
16
- # attr_accessible :title, :content
17
- # end
18
- #
19
- # class News < ActiveRecord::Base
20
- #
21
- # belongs_to :author
22
- #
23
- # translatable do
24
- # translatable :title, :presence => true, :uniqueness => true
25
- # translatable :content, :presence => true
26
- # translatable_model "TranslatedNews"
27
- # translatable_origin :origin_id
28
- # end
29
- #
30
- # attr_accessible :author_id, :author
31
- # end
32
- #
33
- # An example of application:
34
- #
35
- # news = News.create :translations_attributes => [{title: "Resent News", content: "That is where the text goes", locale: "en"}]
36
- # news.translations.create title: "Заголовок", content: "Содержание",locale: "ru"
37
- #
38
- # news.content
39
- # # => "That is where the text goes"
40
- #
41
- # ::I18n.locale = "ru"
42
- # news.content
43
- # # => "Сюди идет текст"
44
- #
45
- # ::I18n.locale = "de"
46
- # news.content
47
- # # => nil
48
- #
49
- # ::I18n.locale = ::I18n.default_locale
50
- # news.content
51
- # # => "That is where the text goes"
52
- #
53
- module ActiveRecord
54
-
55
- def translatable
56
- extend Translatable::ActiveRecord::ClassMethods
57
- include Translatable::ActiveRecord::InstanceMethods
58
-
59
- translatable_define_hash
60
- yield
61
- translatable_register
62
- end
63
-
64
- module ClassMethods
65
-
66
- protected
67
-
68
- ###
69
- # Fields that are translatable.
70
- # Those fields should be defined in the original model including all the related params.
71
- # Examples:
72
- #
73
- # translatable_property :title, String, required: true, unique: true
74
- # translatable_property :content, Text
75
- #
76
- # NB! Will raise an error if there was no fields specified
77
- #
78
- def translatable *args
79
- (@translatable[:properties] ||= []) << args
80
- end
81
-
82
- ###
83
- # Defines model that will be treated as translation handler.
84
- # Model can be defined as String, Symbol or Constant.
85
- # Examples:
86
- #
87
- # translated_model TranslatedNews
88
- # translated_model "TranslatedNews"
89
- # translated_model :TranslatedNews
90
- #
91
- # Default: Translatable<ModelName>
92
- #
93
- def translatable_model model_name
94
- @translatable[:model] = translatable_model_prepared model_name
95
- end
96
-
97
- ###
98
- # Define the key that the translation will be used for belongs_to association,
99
- # to communicate with original model
100
- # Example:
101
- #
102
- # translatable_origin :news
103
- #
104
- # Default: :origin
105
- #
106
- def translatable_origin origin_key
107
- @translatable[:origin] = translatable_origin_prepared origin_key
108
- end
109
-
110
- ###
111
- # Will not register the attributes as accessible.
112
- # IMPORTANT: Translatable block will be evaluated on the model after it
113
- # was loaded, so it will modify certain thing on final version. Hence this thing is needed.
114
- # Examples:
115
- #
116
- # translatable_attr_protected
117
- #
118
- # Default: false
119
- #
120
- def translatable_attr_protected
121
- @translatable[:attr_accessible] = false
122
- end
123
-
124
- ###
125
- # Will not register the attributes as accessible.
126
- # IMPORTANT: Translatable block will be evaluated on the model after it
127
- # was loaded, so it will modify certain thing on final version. Hence this thing is needed.
128
- # Examples:
129
- #
130
- # translatable_attr_protected
131
- #
132
- # Default: false
133
- #
134
- def translatable_attr_accessible
135
- @translatable[:attr_accessible] = true
136
- end
137
-
138
- ###
139
- # Define the key that the translation will be used for belongs_to association,
140
- # to communicate with original model
141
- # Example:
142
- #
143
- # translatable_origin :language
144
- #
145
- # Default: :locale
146
- #
147
- def translatable_locale locale_attr
148
- @translatable[:locale] = translatable_locale_prepared locale_attr
149
- end
150
-
151
- ###
152
- # Returns Model as a constant that deals with translations
153
- def translatable_model_prepared model_name = nil
154
- model_constant = model_name
155
- model_constant ||= "Translatable#{self.name}"
156
- model_constant.to_s.constantize
157
- end
158
-
159
-
160
- def translatable_origin_prepared origin_key = nil
161
- origin_key || "origin"
162
- end
163
-
164
- def translatable_locale_prepared locale = nil
165
- locale || "locale"
166
- end
167
-
168
- ###
169
- # Define hash that contains all the translations
170
- def translatable_define_hash
171
- @translatable = {}
172
- end
173
-
174
- ###
175
- # Handles all the registring routine, defining methods,
176
- # properties, and everything else
177
- def translatable_register
178
- raise ArgumentError.new("At least one property should be defined") if [nil, []].include?(@translatable[:properties])
179
- [:model,:origin,:locale].each { |hash_key| @translatable[hash_key] ||= send "translatable_#{hash_key}_prepared" }
180
-
181
- translatable_register_properties_for_origin
182
- translatable_register_properties_for_translatable
183
- end
184
-
185
- ###
186
- # Handle the routine to define all th required stuff on the original maodel
187
- def translatable_register_properties_for_origin
188
- has_many :translations, :class_name => @translatable[:model].name, :foreign_key => :"#{@translatable[:origin]}_id"
189
- accepts_nested_attributes_for :translations
190
- attr_accessible :translations_attributes
191
-
192
- @translatable[:properties].each do |p|
193
- accessible_as = (p.last.delete(:as) || p.first rescue p.first)
194
- self.module_eval <<-RUBY, __FILE__, __LINE__ + 1
195
- def #{accessible_as}
196
- current_translation.try(:#{p.first})
197
- end
198
- RUBY
199
- end
200
-
201
- self.module_eval <<-RUBY, __FILE__, __LINE__ + 1
202
- def translatable_set_current(locale = ::I18n.locale)
203
- locale = @translatable_locale = locale.to_s
204
- @current_translation = if translations.loaded?
205
- translations.select { |t| t.send(:"#{@translatable[:locale]}") == locale }
206
- else
207
- translations.where(:"#{@translatable[:locale]}" => locale)
208
- end.first
209
- end
210
- alias_method :set_current_translation, :translatable_set_current
211
- RUBY
212
- end
213
-
214
- def translatable_register_properties_for_translatable
215
- @translatable[:model].module_eval <<-RUBY, __FILE__, __LINE__ + 1
216
- validates :#{@translatable[:locale]}, :presence => true
217
- validates :#{@translatable[:locale]}, :format => { :with => /[a-z]{2}/}, :if => Proc.new {|record| !record.#{@translatable[:locale]}.blank? }
218
- validates :#{@translatable[:locale]}, :uniqueness => { :scope => :#{@translatable[:origin]}_id }
219
-
220
- belongs_to :#{@translatable[:origin]}, :class_name => "#{self.name}"
221
- RUBY
222
-
223
- unless @translatable[:attr_accessible].nil?
224
- @translatable[:model].module_eval <<-RUBY, __FILE__, __LINE__ + 1
225
- attr_#{!!@translatable[:attr_accessible] ? "accessible" : "protected" } :#{@translatable[:locale]}, :#{@translatable[:origin]}_id
226
- RUBY
227
- end
228
-
229
- @translatable[:properties].each do |p|
230
- if p.size > 1
231
- @translatable[:model].module_eval <<-RUBY, __FILE__, __LINE__ + 1
232
- validates :#{p.first}, #{p.last.inspect}
233
- RUBY
234
- end
235
- end
236
- end
237
- end
238
-
239
- module InstanceMethods
240
- def current_translation
241
- update_current_translation unless @translatable_locale
242
- @current_translation
243
- end
244
-
245
- def update_current_translation
246
- translatable_set_current(@translatable_locale = ::I18n.locale.to_s)
247
- end
248
-
249
- def other_translations
250
- translations - [current_translation]
251
- end
252
- end
253
- end
254
- end