armot 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -1,5 +1,3 @@
1
1
  rvm:
2
- - 1.8.7
3
- - ree
4
2
  - 1.9.2
5
3
  - 1.9.3
@@ -4,12 +4,20 @@ module Armot
4
4
  def armotize(*attributes)
5
5
  make_it_armot! unless included_modules.include?(InstanceMethods)
6
6
 
7
- mixin = Module.new
7
+ instance_mixin = Module.new
8
+ class_mixin = Module.new
8
9
 
9
10
  attributes.each do |attribute|
10
- self.instance_eval <<-RUBY
11
- def find_by_#{attribute}(value)
12
- trans = I18n::Backend::ActiveRecord::Translation.where(:locale => I18n.locale, :value => value.to_yaml)
11
+ class_mixin.module_eval do
12
+ define_method :"find_by_#{attribute}" do |value|
13
+ t = I18n::Backend::ActiveRecord::Translation.arel_table
14
+ trans = I18n::Backend::ActiveRecord::Translation.where(
15
+ :locale => I18n.locale,
16
+ :value => value.to_yaml
17
+ ).where(
18
+ t[:key].matches("armot.#{self.to_s.underscore.pluralize}%")
19
+ ).all
20
+
13
21
  return send("where", {:"#{attribute}" => value}).first if trans.empty?
14
22
 
15
23
  res = nil
@@ -18,11 +26,17 @@ module Armot
18
26
  break if res
19
27
  end
20
28
 
21
- return res
29
+ res
22
30
  end
23
31
 
24
- def find_by_#{attribute}!(value)
25
- trans = I18n::Backend::ActiveRecord::Translation.where(:locale => I18n.locale, :value => value.to_yaml)
32
+ define_method :"find_by_#{attribute}!" do |value|
33
+ t = I18n::Backend::ActiveRecord::Translation.arel_table
34
+ trans = I18n::Backend::ActiveRecord::Translation.where(
35
+ :locale => I18n.locale,
36
+ :value => value.to_yaml
37
+ ).where(
38
+ t[:key].matches("armot.#{self.to_s.underscore.pluralize}%")
39
+ ).all
26
40
 
27
41
  if trans.empty?
28
42
  original = send("where", {:"#{attribute}" => value}).first
@@ -38,37 +52,39 @@ module Armot
38
52
  res ? res : raise(ActiveRecord::RecordNotFound)
39
53
  end
40
54
  end
41
- RUBY
55
+ end
42
56
 
43
- mixin.module_eval <<-STR
44
- def #{attribute}=(value)
45
- armot_attributes[I18n.locale]['#{attribute}'] = value
57
+ instance_mixin.module_eval do
58
+ define_method :"#{attribute}=" do |value|
59
+ armot_attributes[I18n.locale]["#{attribute}"] = value
46
60
  I18n.backend.reload!
47
61
  end
48
62
 
49
- def #{attribute}
50
- return armot_attributes[I18n.locale]['#{attribute}'] if armot_attributes[I18n.locale]['#{attribute}']
63
+ define_method :"#{attribute}_changed?" do
64
+ armot_attributes[I18n.locale]["#{attribute}"].present?
65
+ end
66
+
67
+ define_method :"#{attribute}" do
68
+ return armot_attributes[I18n.locale]["#{attribute}"] if armot_attributes[I18n.locale]["#{attribute}"]
51
69
  return if new_record?
52
70
 
53
- trans = I18n.t "#{attribute}_\#{id}", :scope => "armot.\#{self.class.to_s.underscore.pluralize}.#{attribute}", :default => Armot.token
71
+ trans = I18n.t "#{attribute}_#{id}", :scope => "armot.#{self.class.to_s.underscore.pluralize}.#{attribute}", :default => Armot.token
54
72
  return trans if trans != Armot.token
55
73
 
56
74
  (I18n.available_locales - [I18n.locale]).each do |lang|
57
- trans = I18n.t "#{attribute}_\#{id}", :scope => "armot.\#{self.class.to_s.underscore.pluralize}.#{attribute}", :default => Armot.token, :locale => lang
75
+ trans = I18n.t "#{attribute}_#{id}", :scope => "armot.#{self.class.to_s.underscore.pluralize}.#{attribute}", :default => Armot.token, :locale => lang
58
76
  break if trans != Armot.token
59
77
  end
60
78
 
61
- trans == Armot.token ? self[:#{attribute}] : trans
79
+ trans == Armot.token ? self[:"#{attribute}"] : trans
62
80
  end
63
-
64
- def #{attribute}_changed?
65
- armot_attributes[I18n.locale]['#{attribute}'].present?
66
- end
67
- STR
81
+ end
68
82
  end
69
83
 
70
- self.const_set("ArmotInstanceMethods", mixin)
71
- include self.const_get("ArmotInstanceMethods") unless self.included_modules.include?("ArmotInstanceMethods")
84
+ self.const_set("ArmotInstanceMethods", instance_mixin)
85
+ self.const_set("ArmotClassMethods", class_mixin)
86
+ include self.const_get("ArmotInstanceMethods") unless self.included_modules.map(&:to_s).include?("#{self}::ArmotInstanceMethods")
87
+ extend self.const_get("ArmotClassMethods") unless self.singleton_class.included_modules.map(&:to_s).include?("#{self}::ArmotClassMethods")
72
88
  end
73
89
 
74
90
  private
data/lib/armot/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Armot
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.0"
3
3
  end
data/test/armot_test.rb CHANGED
@@ -272,7 +272,7 @@ class ArmotTest < ActiveSupport::TestCase
272
272
  assert_equal true, foo
273
273
  end
274
274
 
275
- test "should be able to use super from an overrided setter" do
275
+ test "should be able to use super from an overrided setter for instance methods" do
276
276
  # Product class has 'name' setter redefined
277
277
  a = Product.create
278
278
 
@@ -289,6 +289,21 @@ class ArmotTest < ActiveSupport::TestCase
289
289
  assert_equal "Catalan foo customized", a.name
290
290
  I18n.locale = :en
291
291
  assert_equal "English foo customized", a.name
292
+ end
293
+
294
+ test "should be able to use super for class methods" do
295
+ a = Product.create
296
+ I18n.locale = :ca
297
+ a.name = "Catalan foo"
298
+
299
+ I18n.locale = :en
300
+ a.name = "English foo"
301
+ a.save!
302
+
303
+ a.reload
304
+ I18n.locale = :ca
292
305
 
306
+ res = Product.find_by_name("Catalan foo customized")
307
+ assert_equal "Catalan foo customized_override", res
293
308
  end
294
309
  end
data/test/test_helper.rb CHANGED
@@ -38,6 +38,10 @@ class Product < ActiveRecord::Base
38
38
  def name=(value)
39
39
  super(value + " customized")
40
40
  end
41
+
42
+ def self.find_by_name(value)
43
+ "#{super(value).try(:name)}_override"
44
+ end
41
45
  end
42
46
 
43
47
  # Puret translation model to test migration process
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: armot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-28 00:00:00.000000000 Z
12
+ date: 2012-06-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n-active_record
16
- requirement: &76322190 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 0.0.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *76322190
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.0.2
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: activerecord
27
- requirement: &76321840 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 3.0.0
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *76321840
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: activesupport
38
- requirement: &76321540 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 3.0.0
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *76321540
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.0.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rake
49
- requirement: &76321310 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *76321310
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: sqlite3
60
- requirement: &76321020 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,7 +85,12 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *76321020
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  description: translation support for your models with an I18n active-record backend
70
95
  email:
71
96
  - roger@itnig.net
@@ -101,21 +126,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
126
  - - ! '>='
102
127
  - !ruby/object:Gem::Version
103
128
  version: '0'
104
- segments:
105
- - 0
106
- hash: -304182355
107
129
  required_rubygems_version: !ruby/object:Gem::Requirement
108
130
  none: false
109
131
  requirements:
110
132
  - - ! '>='
111
133
  - !ruby/object:Gem::Version
112
134
  version: '0'
113
- segments:
114
- - 0
115
- hash: -304182355
116
135
  requirements: []
117
136
  rubyforge_project: armot
118
- rubygems_version: 1.8.10
137
+ rubygems_version: 1.8.18
119
138
  signing_key:
120
139
  specification_version: 3
121
140
  summary: translation support for your models with an I18n active-record backend