mongoid_i18n 0.3.1 → 0.4.0
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/.rvmrc +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +5 -5
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/mongoid/i18n/localized_field.rb +44 -1
- data/lib/mongoid/i18n.rb +27 -21
- data/mongoid_i18n.gemspec +11 -14
- data/spec/integration/mongoid/i18n_spec.rb +21 -1
- metadata +23 -25
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.8.7
|
1
|
+
rvm 1.8.7
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activemodel (3.0.
|
5
|
-
activesupport (= 3.0.
|
4
|
+
activemodel (3.0.10)
|
5
|
+
activesupport (= 3.0.10)
|
6
6
|
builder (~> 2.1.2)
|
7
7
|
i18n (~> 0.5.0)
|
8
|
-
activesupport (3.0.
|
8
|
+
activesupport (3.0.10)
|
9
9
|
bson (1.3.1)
|
10
10
|
bson_ext (1.3.1)
|
11
11
|
builder (2.1.2)
|
@@ -19,7 +19,7 @@ GEM
|
|
19
19
|
mocha (0.9.12)
|
20
20
|
mongo (1.3.1)
|
21
21
|
bson (>= 1.3.1)
|
22
|
-
mongoid (2.
|
22
|
+
mongoid (2.1.8)
|
23
23
|
activemodel (~> 3.0)
|
24
24
|
mongo (~> 1.3)
|
25
25
|
tzinfo (~> 0.3.22)
|
@@ -42,5 +42,5 @@ DEPENDENCIES
|
|
42
42
|
bundler
|
43
43
|
jeweler
|
44
44
|
mocha
|
45
|
-
mongoid (>= 2.
|
45
|
+
mongoid (>= 2.1.0)
|
46
46
|
rspec
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -1,6 +1,49 @@
|
|
1
1
|
module Mongoid
|
2
2
|
module I18n
|
3
|
-
class LocalizedField
|
3
|
+
class LocalizedField
|
4
|
+
include Mongoid::Fields::Serializable
|
5
|
+
|
6
|
+
# Return translated values of field, accoring to current locale.
|
7
|
+
# If :use_default_if_empty is set, then in case when there no
|
8
|
+
# translation available for current locale, if will try to
|
9
|
+
# get translation for defalt_locale.
|
10
|
+
def deserialize(object)
|
11
|
+
lookups = [self.locale]
|
12
|
+
|
13
|
+
# TODO: Add I18n.fallbacks support instead of :use_default_if_empty
|
14
|
+
if options[:use_default_if_empty]
|
15
|
+
lookups.push ::I18n.default_locale.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
# Find first localized value in lookup path and return corresponding value
|
19
|
+
object[lookups.find{|locale| object[locale]}]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Return translations as keys. If :clear_empty_values is set to true
|
23
|
+
# pairs with empty values will be rejected
|
24
|
+
def to_hash(object)
|
25
|
+
if options[:clear_empty_values]
|
26
|
+
object.reject!{|k,v| v.blank?}
|
27
|
+
end
|
28
|
+
|
29
|
+
object
|
30
|
+
end
|
31
|
+
|
32
|
+
# Assing new translation to translation table.
|
33
|
+
def assign(object, value)
|
34
|
+
object.merge(locale => value)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Replace translation hash with new one. If :clear_empty_values is set to
|
38
|
+
# pairs with empty values will be reject
|
39
|
+
def replace(object, values)
|
40
|
+
self.to_hash(values)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Return current locale as string
|
44
|
+
def locale
|
45
|
+
::I18n.locale.to_s
|
46
|
+
end
|
4
47
|
end
|
5
48
|
end
|
6
49
|
end
|
data/lib/mongoid/i18n.rb
CHANGED
@@ -11,7 +11,7 @@ module Mongoid
|
|
11
11
|
|
12
12
|
module ClassMethods
|
13
13
|
def localized_field(name, options = {})
|
14
|
-
field name, options.merge(:type => LocalizedField, :default =>
|
14
|
+
field name, options.merge(:type => LocalizedField, :default => {})
|
15
15
|
end
|
16
16
|
|
17
17
|
def validates_default_locale(names, options = {})
|
@@ -28,30 +28,36 @@ module Mongoid
|
|
28
28
|
|
29
29
|
protected
|
30
30
|
def create_accessors(name, meth, options = {})
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
31
|
+
# Let Mongoid do all stuff
|
32
|
+
super
|
33
|
+
|
34
|
+
# Skip if create_accessors called on non LocalizedField field
|
35
|
+
return if LocalizedField != options[:type]
|
36
|
+
|
37
|
+
# Get field to retain incapsulation of LocalizedField class
|
38
|
+
field = fields[name]
|
39
|
+
|
40
|
+
generated_field_methods.module_eval do
|
41
|
+
|
42
|
+
# Redefine writer method, since it's impossible to correctly implement
|
43
|
+
# = method on field itself
|
37
44
|
define_method("#{meth}=") do |value|
|
38
|
-
|
39
|
-
|
40
|
-
else
|
41
|
-
(@attributes[name] || {}).merge(::I18n.locale.to_s => value)
|
42
|
-
end
|
43
|
-
value = value.delete_if { |key, value| value.blank? } if options[:clear_empty_values]
|
44
|
-
write_attribute(name, value)
|
45
|
+
hash = field.assign(read_attribute(name), value)
|
46
|
+
write_attribute(name, hash)
|
45
47
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
|
49
|
+
# Return list of attribute translations
|
50
|
+
define_method("#{meth}_translations") do
|
51
|
+
field.to_hash(read_attribute(name))
|
52
|
+
end
|
53
|
+
|
54
|
+
# Mass-assign translations
|
55
|
+
define_method("#{meth}_translations=") do |values|
|
56
|
+
hash = field.replace(read_attribute(name), values)
|
57
|
+
write_attribute(name, hash)
|
51
58
|
end
|
52
|
-
else
|
53
|
-
super
|
54
59
|
end
|
60
|
+
|
55
61
|
end
|
56
62
|
end
|
57
63
|
end
|
data/mongoid_i18n.gemspec
CHANGED
@@ -4,17 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "mongoid_i18n"
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rodrigo \303\201lvarez"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
|
15
|
-
It will take care of locales for you when using find or criteria.
|
16
|
-
}
|
17
|
-
s.email = %q{papipo@gmail.com}
|
12
|
+
s.date = "2011-10-06"
|
13
|
+
s.description = "This gem aims to be a transparent way to deal with localizable fields.\n Basically use localized_field() instead of field() and that's it.\n It will take care of locales for you when using find or criteria.\n "
|
14
|
+
s.email = "papipo@gmail.com"
|
18
15
|
s.extra_rdoc_files = [
|
19
16
|
"LICENSE",
|
20
17
|
"README.rdoc"
|
@@ -38,23 +35,23 @@ Gem::Specification.new do |s|
|
|
38
35
|
"spec/integration/mongoid/i18n_spec.rb",
|
39
36
|
"spec/spec_helper.rb"
|
40
37
|
]
|
41
|
-
s.homepage =
|
38
|
+
s.homepage = "http://github.com/Papipo/mongoid_i18n"
|
42
39
|
s.require_paths = ["lib"]
|
43
|
-
s.rubygems_version =
|
44
|
-
s.summary =
|
40
|
+
s.rubygems_version = "1.8.10"
|
41
|
+
s.summary = "Mongoid plugin to deal with localizable fields"
|
45
42
|
|
46
43
|
if s.respond_to? :specification_version then
|
47
44
|
s.specification_version = 3
|
48
45
|
|
49
46
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
|
-
s.add_runtime_dependency(%q<mongoid>, [">= 2.
|
47
|
+
s.add_runtime_dependency(%q<mongoid>, [">= 2.1.0"])
|
51
48
|
s.add_runtime_dependency(%q<bson_ext>, [">= 0"])
|
52
49
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
53
50
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
54
51
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
55
52
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
56
53
|
else
|
57
|
-
s.add_dependency(%q<mongoid>, [">= 2.
|
54
|
+
s.add_dependency(%q<mongoid>, [">= 2.1.0"])
|
58
55
|
s.add_dependency(%q<bson_ext>, [">= 0"])
|
59
56
|
s.add_dependency(%q<rspec>, [">= 0"])
|
60
57
|
s.add_dependency(%q<mocha>, [">= 0"])
|
@@ -62,7 +59,7 @@ Gem::Specification.new do |s|
|
|
62
59
|
s.add_dependency(%q<bundler>, [">= 0"])
|
63
60
|
end
|
64
61
|
else
|
65
|
-
s.add_dependency(%q<mongoid>, [">= 2.
|
62
|
+
s.add_dependency(%q<mongoid>, [">= 2.1.0"])
|
66
63
|
s.add_dependency(%q<bson_ext>, [">= 0"])
|
67
64
|
s.add_dependency(%q<rspec>, [">= 0"])
|
68
65
|
s.add_dependency(%q<mocha>, [">= 0"])
|
@@ -5,6 +5,8 @@ class Entry
|
|
5
5
|
include Mongoid::Document
|
6
6
|
include Mongoid::I18n
|
7
7
|
|
8
|
+
field :weight, :type => Integer, :default => 60
|
9
|
+
|
8
10
|
localized_field :title
|
9
11
|
localized_field :title_with_default, :use_default_if_empty => true
|
10
12
|
localized_field :title_without_empty_values, :clear_empty_values => true
|
@@ -173,7 +175,7 @@ describe Mongoid::I18n, 'localized field in embedded document' do
|
|
173
175
|
@entry = Entry.new
|
174
176
|
@entry.create_sub_entry(:subtitle => 'Oxford Street')
|
175
177
|
end
|
176
|
-
|
178
|
+
|
177
179
|
it "should store the title in the right locale" do
|
178
180
|
@entry.reload.sub_entry.subtitle.should == 'Oxford Street'
|
179
181
|
end
|
@@ -364,3 +366,21 @@ describe Mongoid::I18n, "localized_field with validation 'validates_all_locales'
|
|
364
366
|
end
|
365
367
|
end
|
366
368
|
end
|
369
|
+
|
370
|
+
describe Mongoid::I18n, "create_accessors" do
|
371
|
+
before do
|
372
|
+
I18n.locale = :en
|
373
|
+
@entry = Entry.new
|
374
|
+
end
|
375
|
+
|
376
|
+
it "should not affect other fields accessors" do
|
377
|
+
@entry.weight.should == 60
|
378
|
+
|
379
|
+
@entry.weight = 70
|
380
|
+
@entry.weight.should == 70
|
381
|
+
end
|
382
|
+
|
383
|
+
it "should not define own methods on for fields" do
|
384
|
+
@entry.should_not respond_to :weight_translations
|
385
|
+
end
|
386
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_i18n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Rodrigo \xC3\x81lvarez"
|
@@ -15,28 +15,25 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-10-06 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
prerelease: false
|
23
|
-
type: :runtime
|
24
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
22
|
none: false
|
26
23
|
requirements:
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
26
|
+
hash: 11
|
30
27
|
segments:
|
31
28
|
- 2
|
29
|
+
- 1
|
32
30
|
- 0
|
33
|
-
|
34
|
-
version: 2.0.0
|
35
|
-
name: mongoid
|
31
|
+
version: 2.1.0
|
36
32
|
version_requirements: *id001
|
37
|
-
|
33
|
+
name: mongoid
|
38
34
|
prerelease: false
|
39
35
|
type: :runtime
|
36
|
+
- !ruby/object:Gem::Dependency
|
40
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
38
|
none: false
|
42
39
|
requirements:
|
@@ -46,11 +43,11 @@ dependencies:
|
|
46
43
|
segments:
|
47
44
|
- 0
|
48
45
|
version: "0"
|
49
|
-
name: bson_ext
|
50
46
|
version_requirements: *id002
|
51
|
-
|
47
|
+
name: bson_ext
|
52
48
|
prerelease: false
|
53
|
-
type: :
|
49
|
+
type: :runtime
|
50
|
+
- !ruby/object:Gem::Dependency
|
54
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
55
52
|
none: false
|
56
53
|
requirements:
|
@@ -60,11 +57,11 @@ dependencies:
|
|
60
57
|
segments:
|
61
58
|
- 0
|
62
59
|
version: "0"
|
63
|
-
name: rspec
|
64
60
|
version_requirements: *id003
|
65
|
-
|
61
|
+
name: rspec
|
66
62
|
prerelease: false
|
67
63
|
type: :development
|
64
|
+
- !ruby/object:Gem::Dependency
|
68
65
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
66
|
none: false
|
70
67
|
requirements:
|
@@ -74,11 +71,11 @@ dependencies:
|
|
74
71
|
segments:
|
75
72
|
- 0
|
76
73
|
version: "0"
|
77
|
-
name: mocha
|
78
74
|
version_requirements: *id004
|
79
|
-
|
75
|
+
name: mocha
|
80
76
|
prerelease: false
|
81
77
|
type: :development
|
78
|
+
- !ruby/object:Gem::Dependency
|
82
79
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
80
|
none: false
|
84
81
|
requirements:
|
@@ -88,11 +85,11 @@ dependencies:
|
|
88
85
|
segments:
|
89
86
|
- 0
|
90
87
|
version: "0"
|
91
|
-
name: jeweler
|
92
88
|
version_requirements: *id005
|
93
|
-
|
89
|
+
name: jeweler
|
94
90
|
prerelease: false
|
95
91
|
type: :development
|
92
|
+
- !ruby/object:Gem::Dependency
|
96
93
|
requirement: &id006 !ruby/object:Gem::Requirement
|
97
94
|
none: false
|
98
95
|
requirements:
|
@@ -102,8 +99,10 @@ dependencies:
|
|
102
99
|
segments:
|
103
100
|
- 0
|
104
101
|
version: "0"
|
105
|
-
name: bundler
|
106
102
|
version_requirements: *id006
|
103
|
+
name: bundler
|
104
|
+
prerelease: false
|
105
|
+
type: :development
|
107
106
|
description: "This gem aims to be a transparent way to deal with localizable fields.\n Basically use localized_field() instead of field() and that's it.\n It will take care of locales for you when using find or criteria.\n "
|
108
107
|
email: papipo@gmail.com
|
109
108
|
executables: []
|
@@ -131,7 +130,6 @@ files:
|
|
131
130
|
- spec/.rspec
|
132
131
|
- spec/integration/mongoid/i18n_spec.rb
|
133
132
|
- spec/spec_helper.rb
|
134
|
-
has_rdoc: true
|
135
133
|
homepage: http://github.com/Papipo/mongoid_i18n
|
136
134
|
licenses: []
|
137
135
|
|
@@ -161,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
159
|
requirements: []
|
162
160
|
|
163
161
|
rubyforge_project:
|
164
|
-
rubygems_version: 1.
|
162
|
+
rubygems_version: 1.8.10
|
165
163
|
signing_key:
|
166
164
|
specification_version: 3
|
167
165
|
summary: Mongoid plugin to deal with localizable fields
|