translated_attribute_value 0.0.2.1 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 032902799c2bf6bf02e8b6a6a41d6c2f2a92d47a
4
- data.tar.gz: e77cfae303cef3461e03bc30ff09965931085625
3
+ metadata.gz: 31a6be9205a66efb82e4bf15e9b6877cf8404c46
4
+ data.tar.gz: 3a98796b26dc5986a4211754bffe986a5c31c153
5
5
  SHA512:
6
- metadata.gz: ea6f3d547f259019878255068cd0a368a40698f4306c9685426916e3a5f7eb7fc0741a3593312014d56212cd7aa5bb1262cbabc128a9ae517d9d671b46e86da5
7
- data.tar.gz: c9954a1fe428e6c063e78afb327f2486a5afd0be0bda5f920ce94ece7785bdbca2694f4d8b0546bde86e6f566142762fe02a40db7130918c51eb3c6fa26c590a
6
+ metadata.gz: 9aceaabdae2f290eda9ef5f65b9a388792c0f23a9f5042d88e03425f86769af1cf0f5a0651f2368b1b526591264366db2f8d10525bcc26f2126df053144b920e
7
+ data.tar.gz: d001ceb8cd5298343e75df32b504e021d2dc66d0e04ed276a24d36c12d8217ef8e39d3bdc8aca13b0a718961fb555955b6ca50652169175dad891741d1476886
data/README.md CHANGED
@@ -1,15 +1,10 @@
1
1
  # How to use
2
- In your model (activerecord or mongo):
2
+ If you are using ActiveRecord or Mongoid, translated attribute value will be included by default, else you have to include TranslatedAttributeValue::Base in your model class:
3
3
 
4
4
  ```ruby
5
5
  class User
6
6
  include TranslatedAttributeValue::Base
7
-
8
- # if you have a field called status
9
- translate_value_for :status
10
-
11
- # more field
12
- translate_value_for :payments_status, :rule_status
7
+ # model related code
13
8
  end
14
9
  ```
15
10
 
@@ -52,4 +47,5 @@ Anywhere in your code you can call
52
47
  user = User.new
53
48
  user.status = 'value1'
54
49
  user.status_translated
50
+ #=> 'Translation for value1'
55
51
  ```
data/db/schema.rb ADDED
@@ -0,0 +1,4 @@
1
+ # This is being used by NullDB to configure it's database, so we don't need to have a database connection
2
+ # to test Active Record
3
+ ActiveRecord::Schema.define do
4
+ end
@@ -3,3 +3,12 @@ require "translated_attribute_value/version"
3
3
 
4
4
  module TranslatedAttributeValue
5
5
  end
6
+
7
+
8
+ ActiveSupport.on_load(:active_record) do
9
+ ActiveRecord::Base.send(:include, TranslatedAttributeValue::Base)
10
+ end
11
+
12
+ ActiveSupport.on_load(:mongoid) do
13
+ Mongoid::Document.send(:include, TranslatedAttributeValue::Base)
14
+ end
@@ -1,32 +1,48 @@
1
- require 'active_support/inflector'
2
-
3
1
  module TranslatedAttributeValue
4
2
  module Base
5
3
  def self.included(base)
6
- base.send(:extend, ClassMethods)
4
+ if defined?(Mongoid::Document) && base.ancestors.include?(Mongoid::Document)
5
+ Mongoid::Document.send(:include, InstanceMethods)
6
+ Mongoid::Document::ClassMethods.send(:include, ClassMethods)
7
+ else
8
+ base.send(:include, InstanceMethods)
9
+ base.send(:extend, ClassMethods)
10
+ end
11
+ end
12
+
13
+ module InstanceMethods
14
+ def method_missing(name, *args, &block)
15
+ attribute_name = name.to_s.gsub!(/_translated$/, '') # this will return nil or the modified string
16
+ if (attribute_name) && self.respond_to?(attribute_name)
17
+ self.class.translated_value_for(attribute_name)
18
+ self.send(name)
19
+ else
20
+ super
21
+ end
22
+ end
7
23
  end
8
24
 
9
25
  module ClassMethods
10
26
  def translated_value_for(*args)
11
27
  args.each do |attribute_name|
12
- if defined?(ActiveRecord::Base)
28
+ if defined?(ActiveRecord::Base) && self.ancestors.include?(ActiveRecord::Base)
13
29
  self.send(:define_method, "#{attribute_name}_translated") do
14
30
  attribute_value = self.send(attribute_name)
15
- I18n.t("activerecord.attributes.#{self.class.to_s.underscore}.#{attribute_name}_translation.#{attribute_value}")
31
+ I18n.t("activerecord.attributes.#{self.class.to_s.downcase}.#{attribute_name}_translation.#{attribute_value}")
16
32
  end
17
- elsif defined?(Mongoid::Document)
33
+ elsif defined?(Mongoid::Document) && self.ancestors.include?(Mongoid::Document)
18
34
  self.send(:define_method, "#{attribute_name}_translated") do
19
35
  attribute_value = self.send(attribute_name)
20
- I18n.t("mongoid.attributes.#{self.class.to_s.underscore}.#{attribute_name}_translation.#{attribute_value}")
36
+ I18n.t("mongoid.attributes.#{self.class.to_s.downcase}.#{attribute_name}_translation.#{attribute_value}")
21
37
  end
22
38
  else
23
39
  self.send(:define_method, "#{attribute_name}_translated") do
24
40
  attribute_value = self.send(attribute_name)
25
- I18n.t("translated_attribute_value.#{self.class.to_s.underscore}.#{attribute_name}_translation.#{attribute_value}")
41
+ I18n.t("translated_attribute_value.#{self.class.to_s.downcase}.#{attribute_name}_translation.#{attribute_value}")
26
42
  end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
43
+ end # of if chain
44
+ end # of each
45
+ end # of translated_value_for
46
+ end # of ClassMethods
47
+ end # of Base module
48
+ end # of TranslatedAttributeValue module
@@ -1,3 +1,3 @@
1
1
  module TranslatedAttributeValue
2
- VERSION = "0.0.2.1"
2
+ VERSION = "0.0.3"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,15 @@
1
- ENV["RAILS_ENV"] ||= 'test'
1
+ ENV["RAILS_ENV"] = 'test'
2
2
  require 'rubygems'
3
3
  require 'bundler/setup'
4
+ require 'active_support'
5
+ require 'active_record'
6
+ require 'mongoid'
7
+ require 'nulldb_rspec'
4
8
  require 'translated_attribute_value'
9
+ require 'debugger'
10
+ include NullDB::RSpec::NullifiedDatabase
5
11
 
6
12
  Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |f| require f }
13
+
14
+ NullDB.configure {|ndb| def ndb.project_root;'./';end}
15
+ ActiveRecord::Base.establish_connection :adapter => :nulldb
@@ -2,57 +2,116 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe TranslatedAttributeValue::Base do
5
- let(:test_model) { Class.new do
6
- include TranslatedAttributeValue::Base
7
- translated_value_for :status
8
- def self.to_s
9
- "NomeClasse"
10
- end
11
- end.new
12
- }
13
-
14
5
  before(:each) do
15
- stub_const("I18n", double)
6
+ stub_i18n = Object.new
7
+ stub_i18n.stub("t")
8
+ stub_const("I18n", stub_i18n)
16
9
  end
17
10
 
18
11
  describe "translated_value_for" do
19
12
  describe 'ActiveRecord' do
20
- before(:each) do
21
- stub_const("I18n", Object.new)
22
- stub_const("ActiveRecord::Base", Object.new)
13
+ let(:test_model_instance) {
14
+ Class.new ActiveRecord::Base do
15
+
16
+ def status
17
+ 'my_value'
18
+ end
19
+
20
+ def self.to_s
21
+ "nome_classe"
22
+ end
23
+
24
+ end.new
25
+ }
26
+
27
+ specify "I can call translated_value_for in the model" do
28
+ expect(test_model_instance.class).to respond_to(:translated_value_for)
23
29
  end
24
30
 
25
- specify do
26
- test_model.stub(:status).and_return('my_value')
27
- expect(I18n).to receive(:t).with("activerecord.attributes.nome_classe.status_translation.my_value")
28
- test_model.status_translated
31
+ describe "I can call a attribute with attribute_translated without defining it" do
32
+ specify "the translation must be called" do
33
+ expect(I18n).to receive(:t).with("activerecord.attributes.nome_classe.status_translation.my_value")
34
+ test_model_instance.status_translated
35
+ end
36
+
37
+ specify "the method should be defined" do
38
+ test_model_instance.status_translated
39
+ expect(test_model_instance).to respond_to(:status_translated)
40
+ end
29
41
  end
30
42
 
31
43
  end
44
+
32
45
  describe 'Mongoid' do
33
- before(:each) do
34
- stub_const("I18n", Object.new)
35
- stub_const("Mongoid::Document", Object.new)
46
+ let(:test_model_instance) {
47
+ Class.new do
48
+ include Mongoid::Document
49
+
50
+ def status
51
+ 'my_value'
52
+ end
53
+
54
+ def self.to_s
55
+ "nome_classe"
56
+ end
57
+
58
+ end.new
59
+ }
60
+
61
+ specify "I can call translated_value_for in the model" do
62
+ expect(test_model_instance.class).to respond_to(:translated_value_for)
36
63
  end
37
64
 
38
- specify do
39
- test_model.stub(:status).and_return('my_value')
40
- expect(I18n).to receive(:t).with("mongoid.attributes.nome_classe.status_translation.my_value")
41
- test_model.status_translated
65
+
66
+ describe "I can call a attribute with attribute_translated without defining it" do
67
+ specify "the translation must be called" do
68
+ expect(I18n).to receive(:t).with("mongoid.attributes.nome_classe.status_translation.my_value")
69
+ test_model_instance.status_translated
70
+ end
71
+
72
+ specify "the method should be defined" do
73
+ test_model_instance.status_translated
74
+ expect(test_model_instance).to respond_to(:status_translated)
75
+ end
42
76
  end
43
77
 
78
+
44
79
  end
45
- describe 'Mongoid' do
46
- before(:each) do
47
- stub_const("I18n", Object.new)
80
+
81
+ describe 'without ActiveRecord or Mongoid' do
82
+ let(:test_model_instance) {
83
+ Class.new do
84
+ include TranslatedAttributeValue::Base
85
+
86
+ def status
87
+ 'my_value'
88
+ end
89
+
90
+ def self.to_s
91
+ "nome_classe"
92
+ end
93
+
94
+ end.new
95
+ }
96
+
97
+ specify "I can call translated_value_for in the model" do
98
+ expect(test_model_instance.class).to respond_to(:translated_value_for)
48
99
  end
49
100
 
50
- specify do
51
- test_model.stub(:status).and_return('my_value')
52
- expect(I18n).to receive(:t).with("translated_attribute_value.nome_classe.status_translation.my_value")
53
- test_model.status_translated
101
+
102
+ describe "I can call a attribute with attribute_translated without defining it" do
103
+ specify "the translation must be called" do
104
+ expect(I18n).to receive(:t).with("translated_attribute_value.nome_classe.status_translation.my_value")
105
+ test_model_instance.status_translated
106
+ end
107
+
108
+ specify "the method should be defined" do
109
+ test_model_instance.status_translated
110
+ expect(test_model_instance).to respond_to(:status_translated)
111
+ end
54
112
  end
55
113
 
114
+
56
115
  end
57
116
 
58
117
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: translated_attribute_value
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vinícius Oyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-15 00:00:00.000000000 Z
11
+ date: 2014-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -32,6 +32,7 @@ extra_rdoc_files: []
32
32
  files:
33
33
  - README.md
34
34
  - Rakefile
35
+ - db/schema.rb
35
36
  - lib/translated_attribute_value.rb
36
37
  - lib/translated_attribute_value/base.rb
37
38
  - lib/translated_attribute_value/version.rb