has_foreign_language 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/form_fix.rb ADDED
@@ -0,0 +1,19 @@
1
+ module ActionView
2
+ module Helpers
3
+ class InstanceTag
4
+ class << self
5
+ def value(object, method_name)
6
+ method_name += "_#{I18n.locale}" if I18n.locale != I18n.default_locale && object.class.columns.select {|c| c.name == "#{method_name}_#{I18n.locale}"}.length > 0
7
+ object.send method_name unless object.nil?
8
+ end
9
+
10
+ def value_before_type_cast(object, method_name)
11
+ unless object.nil?
12
+ method_name += "_#{I18n.locale}" if I18n.locale != I18n.default_locale && object.class.columns.select {|c| c.name == "#{method_name}_#{I18n.locale}"}.length > 0
13
+ return object.respond_to?(method_name + "_before_type_cast") ? object.send(method_name + "_before_type_cast") :object.send(method_name)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,44 @@
1
+ # HasForeignLanguage
2
+ module Factore
3
+ module HasForeignLanguage
4
+ def self.included(mod)
5
+ mod.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+
10
+ def has_foreign_language(*args)
11
+ args.each do |field|
12
+ # Define the Getter
13
+ define_method(field.to_s) do
14
+ if I18n.locale != I18n.default_locale && self.class.columns.select {|c| c.name == "#{field}_#{I18n.locale}"}.length > 0
15
+ result = self.send("#{field}_#{I18n.locale}".to_sym)
16
+ result.blank? ? super : self.send("#{field}_#{I18n.locale}".to_sym) #falling back to default if requested locale is nil
17
+ else
18
+ super
19
+ end
20
+ end
21
+
22
+ # Define the Setter
23
+ define_method("#{field}=") do |val|
24
+ if I18n.locale != I18n.default_locale && self.class.columns.select {|c| c.name == "#{field}_#{I18n.locale}"}.length > 0
25
+ self["#{field}_#{I18n.locale}".to_sym] = val
26
+ else
27
+ self[field.to_sym] = val
28
+ end
29
+ end
30
+
31
+ # Define the Default Getter
32
+ define_method("#{field}_#{I18n.default_locale}") do
33
+ self.send(field.to_sym)
34
+ end
35
+
36
+ # Define the Default Setter
37
+ define_method("#{field}_#{I18n.default_locale}=") do |val|
38
+ self[field.to_sym] = val
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+ require 'i18n'
3
+
4
+ # Define some classes so we don't have to load Rails
5
+ class Object
6
+ def blank?
7
+ respond_to?(:empty?) ? empty? : !self
8
+ end
9
+ end
10
+
11
+ class Column
12
+ attr_accessor :name
13
+ def initialize(name)
14
+ @name = name
15
+ end
16
+ end
17
+
18
+ class FakeAR
19
+ include Factore::HasForeignLanguage
20
+ attr_accessor :title, :title_fr, :title_de
21
+
22
+ def initialize(title, title_fr, title_de)
23
+ @title, @title_fr, @title_de = title, title_fr, title_de
24
+ end
25
+
26
+ def []=(key,val)
27
+ self.send("#{key}=", val)
28
+ end
29
+
30
+ def self.columns
31
+ %w{title title_de title_fr}.inject([]) {|sum, memo| sum << Column.new(memo) }
32
+ end
33
+ end
34
+
35
+ class Company < FakeAR
36
+ has_foreign_language :title
37
+ end
38
+
39
+ describe Company do
40
+ describe "With a default locale of English" do
41
+ before do
42
+ I18n.default_locale = :en
43
+ @company = Company.new("English", "French", "German")
44
+ end
45
+
46
+ it ".title should return 'English'" do
47
+ @company.title.should == "English"
48
+ end
49
+
50
+ it ".title should return 'French' when the locale is set to :fr" do
51
+ I18n.locale = :fr
52
+ @company.title.should == "French"
53
+ end
54
+
55
+ it ".title should return 'German' when the locale is set to :de" do
56
+ I18n.locale = :de
57
+ @company.title.should == "German"
58
+ end
59
+
60
+ it ".title_en should be the same as .title" do
61
+ @company.title_en.should == @company.title
62
+ end
63
+ end
64
+
65
+ describe "With a default locale of Swedish" do
66
+ before do
67
+ I18n.default_locale = :sw
68
+ Company.send(:has_foreign_language, :title) # Have to send it again since default_locale has changed
69
+ @company = Company.new("Swedish", "French", "German")
70
+ end
71
+
72
+ it ".title should return 'Swedish'" do
73
+ @company.title = "Swedish"
74
+ @company.title.should == "Swedish"
75
+ end
76
+
77
+ it ".title should return 'French' when the locale is set to :fr" do
78
+ I18n.locale = :fr
79
+ @company.title.should == "French"
80
+ end
81
+
82
+ it ".title should return 'German' when the locale is set to :de" do
83
+ I18n.locale = :de
84
+ @company.title.should == "German"
85
+ end
86
+
87
+ it ".title_sw should be the same as .title" do
88
+ @company.title_sw.should == @company.title
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,7 @@
1
+ require 'rspec'
2
+ require 'has_foreign_language'
3
+
4
+ RSpec.configure do |config|
5
+ config.color_enabled = true
6
+ config.formatter = 'documentation'
7
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: has_foreign_language
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Sean Roberts
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-04-11 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Easy database internationalization gem for Ruby on Rails
22
+ email:
23
+ - sean@factore.ca
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/form_fix.rb
32
+ - lib/has_foreign_language.rb
33
+ has_rdoc: true
34
+ homepage: http://github.com/factore/has_foreign_language
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options: []
39
+
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ requirements: []
57
+
58
+ rubyforge_project:
59
+ rubygems_version: 1.3.6
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Easy database internationalization gem for Ruby on Rails
63
+ test_files:
64
+ - spec/models/has_foreign_language_spec.rb
65
+ - spec/spec_helper.rb