localizable 1.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.
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: []