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 +0 -2
- data/lib/armot/active_record_extensions.rb +39 -23
- data/lib/armot/version.rb +1 -1
- data/test/armot_test.rb +16 -1
- data/test/test_helper.rb +4 -0
- metadata +38 -19
@@ -4,12 +4,20 @@ module Armot
|
|
4
4
|
def armotize(*attributes)
|
5
5
|
make_it_armot! unless included_modules.include?(InstanceMethods)
|
6
6
|
|
7
|
-
|
7
|
+
instance_mixin = Module.new
|
8
|
+
class_mixin = Module.new
|
8
9
|
|
9
10
|
attributes.each do |attribute|
|
10
|
-
|
11
|
-
|
12
|
-
|
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
|
-
|
29
|
+
res
|
22
30
|
end
|
23
31
|
|
24
|
-
|
25
|
-
|
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
|
-
|
55
|
+
end
|
42
56
|
|
43
|
-
|
44
|
-
|
45
|
-
armot_attributes[I18n.locale][
|
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
|
-
|
50
|
-
|
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}_
|
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}_
|
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[
|
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",
|
71
|
-
|
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
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
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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
|