armot 0.2.5 → 0.3.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.
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