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 +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
|