armot 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/armot.rb CHANGED
@@ -5,5 +5,7 @@ end
5
5
  require 'armot/railtie' if defined?(Rails)
6
6
 
7
7
  module Armot
8
+ mattr_accessor :token
9
+ @@token = "aXqvyiainsvQWivbpo13/asf/tTG27cbASBFPOQ"
8
10
  end
9
11
 
@@ -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
- find trans.key.split("_").last
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
- begin
41
- I18n.t "#{attribute}_#{id}", :scope => "armot.#{self.class.to_s.underscore.pluralize}.#{attribute}", :raise => true
42
- rescue I18n::MissingTranslationData
43
- self[attribute]
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
@@ -1,3 +1,3 @@
1
1
  module Armot
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
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
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require 'test_helper'
2
3
  require 'armot/puret_integration'
3
4
 
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
- hash: 23
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
- date: 2011-07-19 00:00:00 Z
19
- dependencies:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- hash: 3
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
- requirement: &id005 !ruby/object:Gem::Requirement
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
- hash: 3
91
- segments:
92
- - 0
93
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
94
66
  type: :development
95
- version_requirements: *id005
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
- hash: 3
135
- segments:
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ segments:
136
104
  - 0
137
- version: "0"
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
- hash: 3
144
- segments:
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ segments:
145
113
  - 0
146
- version: "0"
114
+ hash: 809272723
147
115
  requirements: []
148
-
149
116
  rubyforge_project: armot
150
- rubygems_version: 1.8.5
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
-