globalize-accessors 0.1.3 → 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.
- checksums.yaml +5 -5
- data/.travis.yml +4 -4
- data/MIT-LICENSE +2 -1
- data/Rakefile +2 -2
- data/globalize-accessors.gemspec +5 -12
- data/lib/globalize-accessors.rb +15 -5
- data/lib/globalize-accessors/version.rb +4 -2
- data/readme.md +5 -3
- data/test/globalize_accessors_test.rb +51 -21
- data/test/test_helper.rb +3 -2
- metadata +29 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b24dfdcadad659639d275ef9598edd54b74623afcddc067bb3539b9379516d50
|
4
|
+
data.tar.gz: b6f234105d5bc9911feba08771b05dd82cd796fc1d767234aec5d1982a0a059b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94a313445016b3967875ac18778e52f80c344936914fe4bbef3083c2e8d596be7013f9ff55c520079ad78351ed445671ca427060957255bab4531cdc0eafd7e0
|
7
|
+
data.tar.gz: ad260c54dd05b22081f6c3ac42588c73f634952beeda208f6534584133d07d3b8f686112fd69fb2af68b5c6d401c908858628bf5b58a295baa89a64bfa07fe9d
|
data/.travis.yml
CHANGED
data/MIT-LICENSE
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
Copyright (c) 2009
|
1
|
+
Copyright (c) 2009, 2010, 2011, 2012, 2013 Tomek "Tomash" Stachewicz,
|
2
|
+
Robert Pankowecki, Chris Salzberg
|
2
3
|
|
3
4
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
5
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ require 'rake'
|
|
13
13
|
desc 'Default: run unit tests.'
|
14
14
|
task :default => :test
|
15
15
|
|
16
|
-
desc 'Test
|
16
|
+
desc 'Test globalize-accessors gem.'
|
17
17
|
Rake::TestTask.new(:test) do |t|
|
18
18
|
t.libs << 'lib'
|
19
19
|
t.libs << 'test'
|
@@ -21,7 +21,7 @@ Rake::TestTask.new(:test) do |t|
|
|
21
21
|
t.verbose = true
|
22
22
|
end
|
23
23
|
|
24
|
-
desc 'Generate documentation for
|
24
|
+
desc 'Generate documentation for globalize-accessors gem.'
|
25
25
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
26
26
|
rdoc.rdoc_dir = 'rdoc'
|
27
27
|
rdoc.title = 'EasyGlobalizeAccessors'
|
data/globalize-accessors.gemspec
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path("../lib/globalize-accessors/version", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "globalize-accessors"
|
6
|
-
s.version =
|
6
|
+
s.version = Globalize::Accessors::VERSION
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ["Tomasz Stachewicz", "Wojciech Pietrzak", "Steve Verlinden", "Robert Pankowecki", "Chris Salzberg"]
|
9
9
|
s.email = ["tomekrs@o2.pl", "steve.verlinden@gmail.com", "robert.pankowecki@gmail.com", "rpa@gavdi.com", "chrissalzberg@gmail.com"]
|
@@ -11,21 +11,14 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.summary = "Define methods for accessing translated attributes"
|
12
12
|
s.description = "Define methods for accessing translated attributes"
|
13
13
|
|
14
|
-
s.required_rubygems_version = ">= 1.3
|
14
|
+
s.required_rubygems_version = ">= 1.3"
|
15
15
|
s.rubyforge_project = "globalize-accessors"
|
16
16
|
|
17
|
-
|
18
|
-
s.add_dependency "globalize", "~> 3.0.0"
|
19
|
-
elsif ENV['RAILS_4']
|
20
|
-
s.add_dependency "globalize", "~> 4.0.0.alpha.1"
|
21
|
-
else
|
22
|
-
s.add_dependency "globalize", ">= 3"
|
23
|
-
end
|
17
|
+
s.add_dependency "globalize", ">= 5.0.0"
|
24
18
|
|
25
|
-
s.add_development_dependency "bundler", "~> 1.3.5"
|
26
|
-
s.add_development_dependency "rake", "~> 0.9.2"
|
27
19
|
s.add_development_dependency "sqlite3"
|
28
|
-
|
20
|
+
s.add_development_dependency "rake"
|
21
|
+
s.add_development_dependency "minitest", "~> 5.1"
|
29
22
|
|
30
23
|
s.files = `git ls-files`.split("\n")
|
31
24
|
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
data/lib/globalize-accessors.rb
CHANGED
@@ -11,29 +11,34 @@ module Globalize::Accessors
|
|
11
11
|
each_attribute_and_locale(options) do |attr_name, locale|
|
12
12
|
define_accessors(attr_name, locale)
|
13
13
|
end
|
14
|
+
|
15
|
+
include InstanceMethods
|
14
16
|
end
|
15
17
|
|
18
|
+
def localized_attr_name_for(attr_name, locale)
|
19
|
+
"#{attr_name}_#{locale.to_s.underscore}"
|
20
|
+
end
|
16
21
|
|
17
22
|
private
|
18
23
|
|
19
|
-
|
20
24
|
def define_accessors(attr_name, locale)
|
21
25
|
define_getter(attr_name, locale)
|
22
26
|
define_setter(attr_name, locale)
|
23
27
|
end
|
24
28
|
|
25
|
-
|
26
29
|
def define_getter(attr_name, locale)
|
27
|
-
define_method
|
28
|
-
|
30
|
+
define_method localized_attr_name_for(attr_name, locale) do
|
31
|
+
globalize.stash.contains?(locale, attr_name) ? globalize.send(:fetch_stash, locale, attr_name) : globalize.send(:fetch_attribute, locale, attr_name)
|
29
32
|
end
|
30
33
|
end
|
31
34
|
|
32
35
|
def define_setter(attr_name, locale)
|
33
|
-
localized_attr_name =
|
36
|
+
localized_attr_name = localized_attr_name_for(attr_name, locale)
|
34
37
|
|
35
38
|
define_method :"#{localized_attr_name}=" do |value|
|
39
|
+
attribute_will_change!(localized_attr_name) if value != send(localized_attr_name)
|
36
40
|
write_attribute(attr_name, value, :locale => locale)
|
41
|
+
translation_for(locale)[attr_name] = value
|
37
42
|
end
|
38
43
|
if respond_to?(:accessible_attributes) && accessible_attributes.include?(attr_name)
|
39
44
|
attr_accessible :"#{localized_attr_name}"
|
@@ -49,6 +54,11 @@ module Globalize::Accessors
|
|
49
54
|
end
|
50
55
|
end
|
51
56
|
|
57
|
+
module InstanceMethods
|
58
|
+
def localized_attr_name_for(attr_name, locale)
|
59
|
+
self.class.localized_attr_name_for(attr_name, locale)
|
60
|
+
end
|
61
|
+
end
|
52
62
|
end
|
53
63
|
|
54
64
|
ActiveRecord::Base.extend Globalize::Accessors
|
data/readme.md
CHANGED
@@ -26,7 +26,7 @@ class Product
|
|
26
26
|
end
|
27
27
|
````
|
28
28
|
|
29
|
-
Gives you access to methods: `title_pl`, `title_en`, `title_pl=`, `title_en
|
29
|
+
Gives you access to methods: `title_pl`, `title_en`, `title_pl=`, `title_en=`. These work seamlessly with Globalize (not even touching the "core" `title`, `title=` methods used by Globalize itself).
|
30
30
|
|
31
31
|
The `:locales` and `:attributes` options are optional. Their default values are:
|
32
32
|
|
@@ -70,7 +70,7 @@ If you wish to always define accessors and don't want to call the `globalize_acc
|
|
70
70
|
module TranslatesWithAccessors
|
71
71
|
|
72
72
|
def translates(*params)
|
73
|
-
options = params.extract_options!
|
73
|
+
options = params.dup.extract_options!
|
74
74
|
options.reverse_merge!(:globalize_accessors => true)
|
75
75
|
accessors = options.delete(:globalize_accessors)
|
76
76
|
super
|
@@ -82,4 +82,6 @@ end
|
|
82
82
|
|
83
83
|
## Licence
|
84
84
|
|
85
|
-
Copyright (c) 2009-2013 Tomek "Tomash" Stachewicz (http://tomash.wrug.eu),
|
85
|
+
Copyright (c) 2009-2013 Tomek "Tomash" Stachewicz (http://tomash.wrug.eu),
|
86
|
+
Robert Pankowecki (http://robert.pankowecki.pl), Chris Salzberg (http://dejimata.com)
|
87
|
+
released under the MIT license
|
@@ -17,29 +17,33 @@ class GlobalizeAccessorsTest < ActiveSupport::TestCase
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class UnitInheritedWithOptions < ActiveRecord::Base
|
20
|
+
self.table_name = :units
|
20
21
|
translates :color
|
21
22
|
globalize_accessors :locales => [:de], :attributes => [:color]
|
22
23
|
end
|
23
24
|
|
24
|
-
if ENV['RAILS_3']
|
25
|
-
class UnitWithAttrAccessible < ActiveRecord::Base
|
26
|
-
self.table_name = :units
|
27
|
-
attr_accessible :name
|
28
|
-
translates :name, :title
|
29
|
-
globalize_accessors
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
25
|
class UnitWithDashedLocales < ActiveRecord::Base
|
34
26
|
self.table_name = :units
|
35
27
|
translates :name
|
36
28
|
globalize_accessors :locales => [:"pt-BR", :"en-AU"], :attributes => [:name]
|
37
29
|
end
|
38
30
|
|
31
|
+
class UnitWithoutAccessors < ActiveRecord::Base
|
32
|
+
self.table_name = :units
|
33
|
+
end
|
34
|
+
|
39
35
|
setup do
|
40
36
|
assert_equal :en, I18n.locale
|
41
37
|
end
|
42
38
|
|
39
|
+
test "return localized attribute names" do
|
40
|
+
u = UnitWithDashedLocales.new
|
41
|
+
|
42
|
+
assert_equal "name_en", u.localized_attr_name_for(:name, :en)
|
43
|
+
assert_equal "name_pt_br", u.localized_attr_name_for(:name, :"pt-BR")
|
44
|
+
assert_equal "name_zh_cn", u.class.localized_attr_name_for(:name, :"zh-CN")
|
45
|
+
end
|
46
|
+
|
43
47
|
test "read and write on new object" do
|
44
48
|
u = Unit.new(:name_en => "Name en", :title_pl => "Title pl")
|
45
49
|
|
@@ -51,6 +55,12 @@ class GlobalizeAccessorsTest < ActiveSupport::TestCase
|
|
51
55
|
assert_nil u.title_en
|
52
56
|
end
|
53
57
|
|
58
|
+
test "build translations for a new object" do
|
59
|
+
u = Unit.new(:name_en => "Name en", :title_pl => "Title pl")
|
60
|
+
assert_equal 2, u.translations.size # size of the collection
|
61
|
+
assert_equal 0, u.translations.count # count from database
|
62
|
+
end
|
63
|
+
|
54
64
|
test "write on new object and read on saved" do
|
55
65
|
u = Unit.create!(:name_en => "Name en", :title_pl => "Title pl")
|
56
66
|
|
@@ -62,6 +72,14 @@ class GlobalizeAccessorsTest < ActiveSupport::TestCase
|
|
62
72
|
assert_nil u.title_en
|
63
73
|
end
|
64
74
|
|
75
|
+
test "updates translations for existing object" do
|
76
|
+
u = Unit.create!(:name_en => "Name en", :title_pl => "Title pl")
|
77
|
+
u.name_en = "New name en"
|
78
|
+
assert_equal "New name en", u.translations.find {|t| t.locale == :en }.name
|
79
|
+
assert_equal "Title pl", u.translations.find {|t| t.locale == :pl }.title
|
80
|
+
assert_equal 2, u.translations.count
|
81
|
+
end
|
82
|
+
|
65
83
|
test "read on existing object" do
|
66
84
|
u = Unit.create!(:name_en => "Name en", :title_pl => "Title pl")
|
67
85
|
u = Unit.find(u.id)
|
@@ -106,18 +124,6 @@ class GlobalizeAccessorsTest < ActiveSupport::TestCase
|
|
106
124
|
assert_equal "Name pl", u.name_pl
|
107
125
|
end
|
108
126
|
|
109
|
-
if ENV['RAILS_3']
|
110
|
-
test "whitelist locale accessors if the original attribute is whitelisted" do
|
111
|
-
u = UnitWithAttrAccessible.new()
|
112
|
-
u.update_attributes(:name => "Name en", :name_pl => "Name pl", :title => "Title en", :title_pl => "Title pl")
|
113
|
-
|
114
|
-
assert_equal "Name en", u.name
|
115
|
-
assert_equal "Name pl", u.name_pl
|
116
|
-
assert_nil u.title
|
117
|
-
assert_nil u.title_pl
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
127
|
test "globalize locales on class without locales specified in options" do
|
122
128
|
assert_equal [:en, :pl], Unit.globalize_locales
|
123
129
|
end
|
@@ -144,6 +150,17 @@ class GlobalizeAccessorsTest < ActiveSupport::TestCase
|
|
144
150
|
assert_equal "Name en-AU", u.name_en_au
|
145
151
|
end
|
146
152
|
|
153
|
+
test "read when fallbacks present" do
|
154
|
+
u = Unit.create!(:name_en => "Name en", :title_pl => "Title pl")
|
155
|
+
u = Unit.find(u.id)
|
156
|
+
def u.globalize_fallbacks(locale)
|
157
|
+
locale == :pl ? [:pl, :en] : [:en, :pl]
|
158
|
+
end
|
159
|
+
|
160
|
+
assert_equal "Name en", u.name
|
161
|
+
assert_nil u.title_en
|
162
|
+
end
|
163
|
+
|
147
164
|
test "globalize attribute names on class without attributes specified in options" do
|
148
165
|
assert_equal [:name_en, :name_pl, :title_en, :title_pl], Unit.globalize_attribute_names
|
149
166
|
end
|
@@ -166,4 +183,17 @@ class GlobalizeAccessorsTest < ActiveSupport::TestCase
|
|
166
183
|
assert_raise(NoMethodError) { Unit.new.globalize_attribute_names = [:name] }
|
167
184
|
assert_raise(NoMethodError) { Unit.new.globalize_locales = [:en, :de] }
|
168
185
|
end
|
186
|
+
|
187
|
+
test "instance without accessors" do
|
188
|
+
refute UnitWithoutAccessors.new.respond_to?(:localized_attr_name_for)
|
189
|
+
end
|
190
|
+
|
191
|
+
test "dirty checking" do
|
192
|
+
u = Unit.create!(:name_en => "Name en")
|
193
|
+
u.name_en = "New name en"
|
194
|
+
assert u.changed.include?("name_en")
|
195
|
+
assert ["Name en", "New name en"], u.changes["name_en"]
|
196
|
+
u.save!
|
197
|
+
assert ! u.changed.include?("name_en")
|
198
|
+
end
|
169
199
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'i18n'
|
2
2
|
I18n.available_locales = [:en, :pl]
|
3
3
|
|
4
|
-
require '
|
4
|
+
require 'minitest/autorun'
|
5
5
|
require 'active_support'
|
6
6
|
require 'active_support/test_case'
|
7
7
|
require 'logger'
|
@@ -12,6 +12,7 @@ plugin_test_dir = File.dirname(__FILE__)
|
|
12
12
|
|
13
13
|
ActiveRecord::Base.logger = Logger.new(File.join(plugin_test_dir, "debug.log"))
|
14
14
|
ActiveRecord::Base.configurations = YAML::load( IO.read( File.join(plugin_test_dir, 'db', 'database.yml') ) )
|
15
|
-
ActiveRecord::Base.establish_connection(
|
15
|
+
ActiveRecord::Base.establish_connection(:sqlite3mem)
|
16
16
|
ActiveRecord::Migration.verbose = false
|
17
|
+
ActiveSupport::TestCase.test_order = :sorted
|
17
18
|
load(File.join(plugin_test_dir, "db", "schema.rb"))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: globalize-accessors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomasz Stachewicz
|
@@ -9,67 +9,67 @@ authors:
|
|
9
9
|
- Steve Verlinden
|
10
10
|
- Robert Pankowecki
|
11
11
|
- Chris Salzberg
|
12
|
-
autorequire:
|
12
|
+
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2021-01-25 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: globalize
|
19
19
|
requirement: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- -
|
21
|
+
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 5.0.0
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version:
|
30
|
+
version: 5.0.0
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
32
|
+
name: sqlite3
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ">="
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: '0'
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
|
-
- -
|
42
|
+
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
44
|
+
version: '0'
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: rake
|
47
47
|
requirement: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
|
-
- -
|
49
|
+
- - ">="
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version: 0
|
51
|
+
version: '0'
|
52
52
|
type: :development
|
53
53
|
prerelease: false
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
|
-
- -
|
56
|
+
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: 0
|
58
|
+
version: '0'
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
|
-
name:
|
60
|
+
name: minitest
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
|
-
- -
|
63
|
+
- - "~>"
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: '
|
65
|
+
version: '5.1'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
|
-
- -
|
70
|
+
- - "~>"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: '
|
72
|
+
version: '5.1'
|
73
73
|
description: Define methods for accessing translated attributes
|
74
74
|
email:
|
75
75
|
- tomekrs@o2.pl
|
@@ -81,8 +81,8 @@ executables: []
|
|
81
81
|
extensions: []
|
82
82
|
extra_rdoc_files: []
|
83
83
|
files:
|
84
|
-
- .gitignore
|
85
|
-
- .travis.yml
|
84
|
+
- ".gitignore"
|
85
|
+
- ".travis.yml"
|
86
86
|
- Gemfile
|
87
87
|
- MIT-LICENSE
|
88
88
|
- Rakefile
|
@@ -98,24 +98,23 @@ files:
|
|
98
98
|
homepage: http://rubygems.org/gems/globalize-accessors
|
99
99
|
licenses: []
|
100
100
|
metadata: {}
|
101
|
-
post_install_message:
|
101
|
+
post_install_message:
|
102
102
|
rdoc_options: []
|
103
103
|
require_paths:
|
104
104
|
- lib
|
105
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
|
-
- -
|
107
|
+
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
|
-
- -
|
112
|
+
- - ">="
|
113
113
|
- !ruby/object:Gem::Version
|
114
|
-
version: 1.3
|
114
|
+
version: '1.3'
|
115
115
|
requirements: []
|
116
|
-
|
117
|
-
|
118
|
-
signing_key:
|
116
|
+
rubygems_version: 3.2.3
|
117
|
+
signing_key:
|
119
118
|
specification_version: 4
|
120
119
|
summary: Define methods for accessing translated attributes
|
121
120
|
test_files: []
|