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