localizable 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README +50 -0
  2. data/lib/localizable.rb +95 -0
  3. metadata +46 -0
data/README ADDED
@@ -0,0 +1,50 @@
1
+ Localizable gives you an easy way to define localizable fields in your
2
+ MongoMapper::Document or MongoMapper::EmbeddedDocument.
3
+
4
+ Example class definition:
5
+
6
+ class Dummy
7
+
8
+ include MongoMapper::Document
9
+ include Localizable
10
+
11
+ localized_key :fieldname
12
+ localized_key :integer_field, Integer
13
+
14
+
15
+ end
16
+
17
+ Assignment and fetching:
18
+
19
+ obj = Dummy.new
20
+ obj.fieldname = {
21
+ 'en' => 'test 1',
22
+ 'nl' => 'test 2'
23
+ }
24
+
25
+ obj.fieldname('en)' # returns 'test 1'
26
+ obj.fieldname('nl') # returns 'test 2'
27
+
28
+ obj.integer_field = {
29
+ 'en => '1',
30
+ 'nl' => '2'
31
+ }
32
+
33
+ obj.integer_field('en') # returns 1
34
+ obj.integer_field('nl') # returns 2
35
+
36
+ You can define how to fetch the default locale and how to convert the locale
37
+ to a string (it assumes that string is given in the assignment)
38
+
39
+ Localizable.fetch_default_locale = Proc.new do
40
+ Locale.first({ :default => true })
41
+ end
42
+
43
+ Localizable.locale_to_string = Proc.new do |locale|
44
+ locale.slug # assuming this is a string value
45
+ end
46
+
47
+ obj.fieldname # returns 'test 1' when Locale.first({ :default => true }).slug == 'en'
48
+
49
+
50
+
@@ -0,0 +1,95 @@
1
+ module Localizable
2
+
3
+ def self.reset
4
+ @default_locale_fetcher = nil
5
+ @locale_to_string = Proc.new do |l|
6
+ l.to_s
7
+ end
8
+ end
9
+
10
+ def self.fetch_default_locale= (default_locale_fetcher)
11
+ @default_locale_fetcher = default_locale_fetcher
12
+ end
13
+
14
+ def self.fetch_default_locale
15
+ raise 'no default locale fetcher defined' unless @default_locale_fetcher
16
+ @default_locale_fetcher.call
17
+ end
18
+
19
+ def self.locale_to_string (locale)
20
+ @locale_to_string ||= Proc.new do |l|
21
+ l.to_s
22
+ end
23
+
24
+ @locale_to_string.call(locale)
25
+ end
26
+
27
+ def self.locale_to_string= (locale_to_string)
28
+ @locale_to_string = locale_to_string
29
+ end
30
+
31
+ def self.included(model)
32
+
33
+ model.class_eval do
34
+ extend ClassMethods
35
+ include InstanceMethods
36
+ end
37
+
38
+ end
39
+
40
+ module ClassMethods
41
+
42
+ def localized_key (fieldname, type = String)
43
+ key "#{fieldname}_values".to_sym, Hash
44
+ localized_type[fieldname] = type
45
+
46
+ self.class_eval <<-end_eval
47
+
48
+ def #{fieldname} (locale = nil, default_text = '')
49
+ fetch_localized_value :#{fieldname}, locale, default_text
50
+ end
51
+
52
+ def #{fieldname}= (mapping)
53
+ store_localized_values :#{fieldname}, mapping
54
+ end
55
+
56
+ end_eval
57
+
58
+ end
59
+
60
+ def localized_type
61
+ @localized_type ||= {}
62
+ end
63
+
64
+ end
65
+
66
+ module InstanceMethods
67
+
68
+ def fetch_localized_value (fieldname, locale, default_text)
69
+ field = "#{fieldname}_values".to_sym
70
+ locale ||= Localizable.fetch_default_locale
71
+ locale_str = Localizable.locale_to_string(locale)
72
+
73
+ if self[field].key?(locale_str)
74
+ localized_type[fieldname].from_mongo(self[field][locale_str])
75
+ else
76
+ default_text
77
+ end
78
+ end
79
+
80
+ def store_localized_values (fieldname, mapping)
81
+ field = "#{fieldname}_values".to_sym
82
+
83
+ mapping.each do |locale, value|
84
+ self[field][locale] = localized_type[fieldname].to_mongo(value)
85
+ end
86
+ end
87
+
88
+ def localized_type
89
+ self.class.localized_type
90
+ end
91
+
92
+
93
+ end
94
+
95
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: localizable
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Stefaan Colman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-18 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: An easy way to localize fields of MongoMapper::Document classes
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/localizable.rb
21
+ - README
22
+ homepage:
23
+ licenses: []
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 1.8.11
43
+ signing_key:
44
+ specification_version: 3
45
+ summary: Localize your models
46
+ test_files: []