armot 0.2.0 → 0.2.1
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/lib/armot.rb +2 -0
- data/lib/armot/active_record_extensions.rb +16 -5
- data/lib/armot/version.rb +1 -1
- data/test/armot_test.rb +44 -0
- data/test/puret_migration_test.rb +1 -0
- metadata +61 -95
data/lib/armot.rb
CHANGED
@@ -10,7 +10,7 @@ module Armot
|
|
10
10
|
trans = I18n::Backend::ActiveRecord::Translation.find_by_locale_and_value(I18n.locale, value.to_yaml)
|
11
11
|
return send("where", {:"#{attribute}" => value}).first if trans.nil?
|
12
12
|
|
13
|
-
|
13
|
+
find_by_id trans.key.split("_").last
|
14
14
|
end
|
15
15
|
|
16
16
|
define_method "find_by_#{attribute}!" do |value|
|
@@ -37,11 +37,19 @@ module Armot
|
|
37
37
|
return armot_attributes[I18n.locale][attribute] if armot_attributes[I18n.locale][attribute]
|
38
38
|
return if new_record?
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
trans = I18n.t "#{attribute}_#{id}", :scope => "armot.#{self.class.to_s.underscore.pluralize}.#{attribute}", :default => Armot.token
|
41
|
+
return trans if trans != Armot.token
|
42
|
+
|
43
|
+
(I18n.available_locales - [I18n.locale]).each do |lang|
|
44
|
+
trans = I18n.t "#{attribute}_#{id}", :scope => "armot.#{self.class.to_s.underscore.pluralize}.#{attribute}", :default => Armot.token, :locale => lang
|
45
|
+
break if trans != Armot.token
|
44
46
|
end
|
47
|
+
|
48
|
+
trans == Armot.token ? self[attribute] : trans
|
49
|
+
end
|
50
|
+
|
51
|
+
define_method "#{attribute}_changed?" do
|
52
|
+
armot_attributes[I18n.locale][attribute].present?
|
45
53
|
end
|
46
54
|
end
|
47
55
|
end
|
@@ -67,12 +75,15 @@ module Armot
|
|
67
75
|
# called after save
|
68
76
|
def update_translations!
|
69
77
|
return if armot_attributes.blank?
|
78
|
+
|
70
79
|
armot_attributes.each do |locale, attributes|
|
71
80
|
attributes.each do |k, v|
|
72
81
|
translation = I18n::Backend::ActiveRecord::Translation.find_or_initialize_by_locale_and_key(locale.to_s, "armot.#{self.class.to_s.underscore.pluralize}.#{k}.#{k}_#{id}")
|
73
82
|
translation.update_attribute(:value, v)
|
74
83
|
end
|
75
84
|
end
|
85
|
+
|
86
|
+
armot_attributes.clear
|
76
87
|
end
|
77
88
|
|
78
89
|
def remove_i18n_entries
|
data/lib/armot/version.rb
CHANGED
data/test/armot_test.rb
CHANGED
@@ -100,6 +100,16 @@ class ArmotTest < ActiveSupport::TestCase
|
|
100
100
|
assert_equal "original title", Post.first.title
|
101
101
|
end
|
102
102
|
|
103
|
+
test "should look for translations in other languages before fail" do
|
104
|
+
post = Post.first
|
105
|
+
I18n::Backend::ActiveRecord::Translation.delete_all
|
106
|
+
I18n.locale = :ca
|
107
|
+
post.title = "Catalan title"
|
108
|
+
post.save!
|
109
|
+
I18n.locale = :it
|
110
|
+
assert_equal "Catalan title", post.title
|
111
|
+
end
|
112
|
+
|
103
113
|
test "should find by translated title in database as a translation" do
|
104
114
|
post = Post.first
|
105
115
|
I18n.locale = :ca
|
@@ -131,6 +141,27 @@ class ArmotTest < ActiveSupport::TestCase
|
|
131
141
|
assert_equal nil, foo
|
132
142
|
end
|
133
143
|
|
144
|
+
test "should return nil when finding for an existant value but incompatible with the current scope" do
|
145
|
+
post = Post.first
|
146
|
+
I18n.locale = :ca
|
147
|
+
post.title = "Catalan title"
|
148
|
+
post.save!
|
149
|
+
|
150
|
+
foo = Post.where("title != 'Catalan title'").find_by_title "Catalan title"
|
151
|
+
assert_equal nil, foo
|
152
|
+
end
|
153
|
+
|
154
|
+
test "should raise a RecordNotFound error when finding for an existant value but incompatible with the current scope with bang!" do
|
155
|
+
post = Post.first
|
156
|
+
I18n.locale = :ca
|
157
|
+
post.title = "Catalan title"
|
158
|
+
post.save!
|
159
|
+
|
160
|
+
assert_raise(ActiveRecord::RecordNotFound) do
|
161
|
+
Post.where("title != 'Catalan title'").find_by_title! "Catalan title"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
134
165
|
test "should raise exception with bang version" do
|
135
166
|
assert_raise(ActiveRecord::RecordNotFound) do
|
136
167
|
Post.find_by_title! "Non existant"
|
@@ -173,4 +204,17 @@ class ArmotTest < ActiveSupport::TestCase
|
|
173
204
|
Post.find_by_title! "Non existant"
|
174
205
|
end
|
175
206
|
end
|
207
|
+
|
208
|
+
test "_changed? method should work as expected" do
|
209
|
+
post = Post.first
|
210
|
+
post.title = "Other title"
|
211
|
+
|
212
|
+
assert_equal true, post.title_changed?
|
213
|
+
|
214
|
+
post.save!
|
215
|
+
assert_equal false, post.title_changed?
|
216
|
+
|
217
|
+
post.title = "Another change"
|
218
|
+
assert_equal true, post.title_changed?
|
219
|
+
end
|
176
220
|
end
|
metadata
CHANGED
@@ -1,108 +1,78 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: armot
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 0
|
10
|
-
version: 0.2.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Roger Campos
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-09-27 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: i18n-active_record
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &83553980 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 27
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 0
|
32
|
-
- 2
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.0.2
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: activerecord
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: *83553980
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activerecord
|
27
|
+
requirement: &83553730 !ruby/object:Gem::Requirement
|
40
28
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 7
|
45
|
-
segments:
|
46
|
-
- 3
|
47
|
-
- 0
|
48
|
-
- 0
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
49
32
|
version: 3.0.0
|
50
33
|
type: :development
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: activesupport
|
54
34
|
prerelease: false
|
55
|
-
|
35
|
+
version_requirements: *83553730
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: activesupport
|
38
|
+
requirement: &83553500 !ruby/object:Gem::Requirement
|
56
39
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
hash: 7
|
61
|
-
segments:
|
62
|
-
- 3
|
63
|
-
- 0
|
64
|
-
- 0
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
65
43
|
version: 3.0.0
|
66
44
|
type: :development
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: rake
|
70
45
|
prerelease: false
|
71
|
-
|
46
|
+
version_requirements: *83553500
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: &83553310 !ruby/object:Gem::Requirement
|
72
50
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
segments:
|
78
|
-
- 0
|
79
|
-
version: "0"
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
80
55
|
type: :development
|
81
|
-
version_requirements: *id004
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: sqlite3
|
84
56
|
prerelease: false
|
85
|
-
|
57
|
+
version_requirements: *83553310
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: sqlite3
|
60
|
+
requirement: &83553080 !ruby/object:Gem::Requirement
|
86
61
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
segments:
|
92
|
-
- 0
|
93
|
-
version: "0"
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
94
66
|
type: :development
|
95
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *83553080
|
96
69
|
description: translation support for your models with an I18n active-record backend
|
97
|
-
email:
|
70
|
+
email:
|
98
71
|
- roger@itnig.net
|
99
72
|
executables: []
|
100
|
-
|
101
73
|
extensions: []
|
102
|
-
|
103
74
|
extra_rdoc_files: []
|
104
|
-
|
105
|
-
files:
|
75
|
+
files:
|
106
76
|
- .gitignore
|
107
77
|
- Gemfile
|
108
78
|
- README.md
|
@@ -120,36 +90,32 @@ files:
|
|
120
90
|
- test/test_helper.rb
|
121
91
|
homepage: https://github.com/rogercampos/armot
|
122
92
|
licenses: []
|
123
|
-
|
124
93
|
post_install_message:
|
125
94
|
rdoc_options: []
|
126
|
-
|
127
|
-
require_paths:
|
95
|
+
require_paths:
|
128
96
|
- lib
|
129
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
98
|
none: false
|
131
|
-
requirements:
|
132
|
-
- -
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
|
135
|
-
segments:
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
segments:
|
136
104
|
- 0
|
137
|
-
|
138
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
hash: 809272723
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
107
|
none: false
|
140
|
-
requirements:
|
141
|
-
- -
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
|
144
|
-
segments:
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
segments:
|
145
113
|
- 0
|
146
|
-
|
114
|
+
hash: 809272723
|
147
115
|
requirements: []
|
148
|
-
|
149
116
|
rubyforge_project: armot
|
150
|
-
rubygems_version: 1.8.
|
117
|
+
rubygems_version: 1.8.6
|
151
118
|
signing_key:
|
152
119
|
specification_version: 3
|
153
120
|
summary: translation support for your models with an I18n active-record backend
|
154
121
|
test_files: []
|
155
|
-
|