simple_model_translations 0.1.0 → 0.1.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/Gemfile +7 -5
- data/Gemfile.lock +10 -13
- data/README.rdoc +2 -1
- data/Rakefile +5 -7
- data/VERSION +1 -1
- data/lib/simple_model_translations/base.rb +6 -2
- data/lib/simple_model_translations/class_methods.rb +24 -0
- data/simple_model_translations.gemspec +40 -43
- data/spec/class_methods_spec.rb +25 -0
- metadata +52 -56
- data/.gitignore +0 -24
data/Gemfile
CHANGED
@@ -3,10 +3,12 @@ source :rubygems
|
|
3
3
|
gem 'activerecord', '>= 3.0.0'
|
4
4
|
|
5
5
|
group :test do
|
6
|
-
gem 'database_cleaner'
|
7
|
-
gem 'ruby
|
8
|
-
gem '
|
9
|
-
gem 'shoulda'
|
10
|
-
gem 'factory_girl'
|
6
|
+
gem 'database_cleaner', '>= 0.5.2'
|
7
|
+
gem 'sqlite3-ruby', '>= 1.3.1'
|
8
|
+
gem 'shoulda', '>= 2.11.3'
|
11
9
|
gem 'rspec', '>= 2.0.0'
|
12
10
|
end
|
11
|
+
|
12
|
+
group :console do
|
13
|
+
gem 'jeweler', '>= 1.5.0.pre5'
|
14
|
+
end
|
data/Gemfile.lock
CHANGED
@@ -14,12 +14,15 @@ GEM
|
|
14
14
|
arel (1.0.1)
|
15
15
|
activesupport (~> 3.0.0)
|
16
16
|
builder (2.1.2)
|
17
|
-
columnize (0.3.1)
|
18
17
|
database_cleaner (0.5.2)
|
19
18
|
diff-lcs (1.1.2)
|
20
|
-
|
19
|
+
git (1.2.5)
|
21
20
|
i18n (0.4.1)
|
22
|
-
|
21
|
+
jeweler (1.5.0.pre5)
|
22
|
+
bundler (~> 1.0.0)
|
23
|
+
git (>= 1.2.5)
|
24
|
+
rake
|
25
|
+
rake (0.8.7)
|
23
26
|
rspec (2.0.0)
|
24
27
|
rspec-core (= 2.0.0)
|
25
28
|
rspec-expectations (= 2.0.0)
|
@@ -30,11 +33,6 @@ GEM
|
|
30
33
|
rspec-mocks (2.0.0)
|
31
34
|
rspec-core (= 2.0.0)
|
32
35
|
rspec-expectations (= 2.0.0)
|
33
|
-
ruby-debug (0.10.3)
|
34
|
-
columnize (>= 0.1)
|
35
|
-
ruby-debug-base (~> 0.10.3.0)
|
36
|
-
ruby-debug-base (0.10.3)
|
37
|
-
linecache (>= 0.3)
|
38
36
|
shoulda (2.11.3)
|
39
37
|
sqlite3-ruby (1.3.1)
|
40
38
|
tzinfo (0.3.23)
|
@@ -44,9 +42,8 @@ PLATFORMS
|
|
44
42
|
|
45
43
|
DEPENDENCIES
|
46
44
|
activerecord (>= 3.0.0)
|
47
|
-
database_cleaner
|
48
|
-
|
45
|
+
database_cleaner (>= 0.5.2)
|
46
|
+
jeweler (>= 1.5.0.pre5)
|
49
47
|
rspec (>= 2.0.0)
|
50
|
-
|
51
|
-
|
52
|
-
sqlite3-ruby
|
48
|
+
shoulda (>= 2.11.3)
|
49
|
+
sqlite3-ruby (>= 1.3.1)
|
data/README.rdoc
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
= SimpleModelTranslations
|
2
2
|
|
3
|
-
Yet another implementation of ActiveRecord translations. Created for zn.ua, because globalize3 was too
|
3
|
+
Yet another implementation of ActiveRecord translations. Created for zn.ua, because globalize3 was too uncomfortable to use.
|
4
|
+
It borrows some things from globalize3[http://github.com/svenfuchs/globalize3] and puret[http://github.com/jo/puret].
|
4
5
|
|
5
6
|
== Basic Usage
|
6
7
|
|
data/Rakefile
CHANGED
@@ -10,18 +10,16 @@ begin
|
|
10
10
|
gem.email = "fxposter@gmail.com"
|
11
11
|
gem.homepage = "http://github.com/fxposter/simple_model_translations"
|
12
12
|
gem.authors = ["Pavel Forkert"]
|
13
|
-
gem.add_dependency "activerecord", '>= 3.0.0'
|
14
13
|
|
15
|
-
gem.add_development_dependency 'database_cleaner'
|
16
|
-
gem.add_development_dependency 'ruby
|
17
|
-
gem.add_development_dependency '
|
18
|
-
gem.add_development_dependency 'shoulda'
|
19
|
-
gem.add_development_dependency 'factory_girl'
|
14
|
+
gem.add_development_dependency 'database_cleaner', '>= 0.5.2'
|
15
|
+
gem.add_development_dependency 'sqlite3-ruby', '>= 1.3.1'
|
16
|
+
gem.add_development_dependency 'shoulda', '>= 2.11.3'
|
20
17
|
gem.add_development_dependency 'rspec', '>= 2.0.0'
|
18
|
+
gem.add_development_dependency 'jeweler', '>= 1.5.0.pre5'
|
21
19
|
end
|
22
20
|
Jeweler::GemcutterTasks.new
|
23
21
|
rescue LoadError
|
24
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler --pre"
|
25
23
|
end
|
26
24
|
|
27
25
|
require 'rspec/core/rake_task'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -42,15 +42,19 @@ module SimpleModelTranslations
|
|
42
42
|
def configure_translations(options)
|
43
43
|
raise 'You can call #translates method only once per model!' if included_modules.include?(SimpleModelTranslations::InstanceMethods)
|
44
44
|
|
45
|
+
(class << self; self; end).send :define_method, :translation_options do
|
46
|
+
options
|
47
|
+
end
|
48
|
+
|
45
49
|
include SimpleModelTranslations::InstanceMethods
|
46
50
|
include SimpleModelTranslations::Attributes
|
51
|
+
extend SimpleModelTranslations::ClassMethods
|
47
52
|
|
48
|
-
class_name = options[:class_name] || "#{self.name}Translation"
|
49
53
|
# unless Kernel.const_get(class_name)
|
50
54
|
# klass = Kernel.const_set(class_name.to_sym, Class.new(ActiveRecord::Base))
|
51
55
|
# klass.translation_for(self.name.underscore.to_sym)
|
52
56
|
# end
|
53
|
-
has_many :translations, :class_name =>
|
57
|
+
has_many :translations, :class_name => translation_class_name, :dependent => :destroy, :autosave => true
|
54
58
|
|
55
59
|
if options[:accepts_nested_attributes]
|
56
60
|
accepts_nested_attributes_for :translations, :allow_destroy => true
|
@@ -1,2 +1,26 @@
|
|
1
1
|
module SimpleModelTranslations
|
2
|
+
module ClassMethods
|
3
|
+
def with_translations
|
4
|
+
includes(:translations).where("#{translated_column_name(:id)} IS NOT NULL")
|
5
|
+
end
|
6
|
+
|
7
|
+
def translation_class
|
8
|
+
Module.const_get(translation_class_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def translation_class_name
|
12
|
+
class_name = translation_options[:class_name] || "#{self.name}Translation"
|
13
|
+
end
|
14
|
+
|
15
|
+
def translated_column_name(name)
|
16
|
+
"#{translation_class.table_name}.#{name}".to_sym
|
17
|
+
end
|
18
|
+
|
19
|
+
def with_translated_attribute(name, value, locales = nil)
|
20
|
+
with_translations.where(
|
21
|
+
translated_column_name(name) => value,
|
22
|
+
translated_column_name(:locale) => Array(locales).map(&:to_s)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
2
26
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{simple_model_translations}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Pavel Forkert"]
|
@@ -14,43 +14,43 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.email = %q{fxposter@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
23
|
+
"LICENSE",
|
24
|
+
"README.rdoc",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"lib/simple_model_translations.rb",
|
28
|
+
"lib/simple_model_translations/attributes.rb",
|
29
|
+
"lib/simple_model_translations/base.rb",
|
30
|
+
"lib/simple_model_translations/class_methods.rb",
|
31
|
+
"lib/simple_model_translations/instance_methods.rb",
|
32
|
+
"lib/simple_model_translations/validations.rb",
|
33
|
+
"simple_model_translations.gemspec",
|
34
|
+
"spec/attributes_spec.rb",
|
35
|
+
"spec/class_methods_spec.rb",
|
36
|
+
"spec/data/models.rb",
|
37
|
+
"spec/data/schema.rb",
|
38
|
+
"spec/simple_model_translations_spec.rb",
|
39
|
+
"spec/spec_helper.rb",
|
40
|
+
"spec/validations_spec.rb"
|
41
41
|
]
|
42
42
|
s.homepage = %q{http://github.com/fxposter/simple_model_translations}
|
43
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
44
43
|
s.require_paths = ["lib"]
|
45
44
|
s.rubygems_version = %q{1.3.7}
|
46
45
|
s.summary = %q{Simple ActiveRecord translations for Rails 3}
|
47
46
|
s.test_files = [
|
48
47
|
"spec/attributes_spec.rb",
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
"spec/class_methods_spec.rb",
|
49
|
+
"spec/data/models.rb",
|
50
|
+
"spec/data/schema.rb",
|
51
|
+
"spec/simple_model_translations_spec.rb",
|
52
|
+
"spec/spec_helper.rb",
|
53
|
+
"spec/validations_spec.rb"
|
54
54
|
]
|
55
55
|
|
56
56
|
if s.respond_to? :specification_version then
|
@@ -59,29 +59,26 @@ Gem::Specification.new do |s|
|
|
59
59
|
|
60
60
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
61
61
|
s.add_runtime_dependency(%q<activerecord>, [">= 3.0.0"])
|
62
|
-
s.add_development_dependency(%q<database_cleaner>, [">= 0"])
|
63
|
-
s.add_development_dependency(%q<ruby
|
64
|
-
s.add_development_dependency(%q<
|
65
|
-
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
66
|
-
s.add_development_dependency(%q<factory_girl>, [">= 0"])
|
62
|
+
s.add_development_dependency(%q<database_cleaner>, [">= 0.5.2"])
|
63
|
+
s.add_development_dependency(%q<sqlite3-ruby>, [">= 1.3.1"])
|
64
|
+
s.add_development_dependency(%q<shoulda>, [">= 2.11.3"])
|
67
65
|
s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
|
66
|
+
s.add_development_dependency(%q<jeweler>, [">= 1.5.0.pre5"])
|
68
67
|
else
|
69
68
|
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
70
|
-
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
71
|
-
s.add_dependency(%q<ruby
|
72
|
-
s.add_dependency(%q<
|
73
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
74
|
-
s.add_dependency(%q<factory_girl>, [">= 0"])
|
69
|
+
s.add_dependency(%q<database_cleaner>, [">= 0.5.2"])
|
70
|
+
s.add_dependency(%q<sqlite3-ruby>, [">= 1.3.1"])
|
71
|
+
s.add_dependency(%q<shoulda>, [">= 2.11.3"])
|
75
72
|
s.add_dependency(%q<rspec>, [">= 2.0.0"])
|
73
|
+
s.add_dependency(%q<jeweler>, [">= 1.5.0.pre5"])
|
76
74
|
end
|
77
75
|
else
|
78
76
|
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
79
|
-
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
80
|
-
s.add_dependency(%q<ruby
|
81
|
-
s.add_dependency(%q<
|
82
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
83
|
-
s.add_dependency(%q<factory_girl>, [">= 0"])
|
77
|
+
s.add_dependency(%q<database_cleaner>, [">= 0.5.2"])
|
78
|
+
s.add_dependency(%q<sqlite3-ruby>, [">= 1.3.1"])
|
79
|
+
s.add_dependency(%q<shoulda>, [">= 2.11.3"])
|
84
80
|
s.add_dependency(%q<rspec>, [">= 2.0.0"])
|
81
|
+
s.add_dependency(%q<jeweler>, [">= 1.5.0.pre5"])
|
85
82
|
end
|
86
83
|
end
|
87
84
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Article do
|
4
|
+
it 'should be able to return only records which have translations' do
|
5
|
+
first_article = Article.create!(:slug => 'hello')
|
6
|
+
second_article = Article.create!(:slug => 'world', :name => 'WORLD')
|
7
|
+
Article.with_translations.to_a.should == [second_article]
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should be able to return translation class' do
|
11
|
+
Article.translation_class.should == ArticleTranslation
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should be able to return translated column name' do
|
15
|
+
Article.translated_column_name(:name).should == :'article_translations.name'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should be able to search by specific column names and locales' do
|
19
|
+
first_article = Article.create!(:slug => 'hello', :locale => :en, :name => 'hello')
|
20
|
+
second_article = Article.create!(:slug => 'world', :name => 'WORLD')
|
21
|
+
third_article = Article.create!(:slug => 'hello')
|
22
|
+
fourth_article = Article.create!(:slug => 'world', :name => 'WORLD', :locale => :en)
|
23
|
+
Article.with_translated_attribute(:name, ['hello'], :en).should == [first_article]
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_model_translations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Pavel Forkert
|
@@ -19,9 +19,10 @@ date: 2010-10-14 00:00:00 +03:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name: activerecord
|
23
22
|
prerelease: false
|
24
|
-
|
23
|
+
type: :runtime
|
24
|
+
name: activerecord
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
26
|
none: false
|
26
27
|
requirements:
|
27
28
|
- - ">="
|
@@ -32,94 +33,88 @@ dependencies:
|
|
32
33
|
- 0
|
33
34
|
- 0
|
34
35
|
version: 3.0.0
|
35
|
-
|
36
|
-
version_requirements: *id001
|
36
|
+
requirement: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
name: database_cleaner
|
39
38
|
prerelease: false
|
40
|
-
|
39
|
+
type: :development
|
40
|
+
name: database_cleaner
|
41
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
42
|
none: false
|
42
43
|
requirements:
|
43
44
|
- - ">="
|
44
45
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
46
|
+
hash: 15
|
46
47
|
segments:
|
47
48
|
- 0
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
- 5
|
50
|
+
- 2
|
51
|
+
version: 0.5.2
|
52
|
+
requirement: *id002
|
51
53
|
- !ruby/object:Gem::Dependency
|
52
|
-
name: ruby-debug
|
53
54
|
prerelease: false
|
54
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
|
-
requirements:
|
57
|
-
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
hash: 3
|
60
|
-
segments:
|
61
|
-
- 0
|
62
|
-
version: "0"
|
63
55
|
type: :development
|
64
|
-
version_requirements: *id003
|
65
|
-
- !ruby/object:Gem::Dependency
|
66
56
|
name: sqlite3-ruby
|
67
|
-
|
68
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
57
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
69
58
|
none: false
|
70
59
|
requirements:
|
71
60
|
- - ">="
|
72
61
|
- !ruby/object:Gem::Version
|
73
|
-
hash:
|
62
|
+
hash: 25
|
74
63
|
segments:
|
75
|
-
-
|
76
|
-
|
77
|
-
|
78
|
-
|
64
|
+
- 1
|
65
|
+
- 3
|
66
|
+
- 1
|
67
|
+
version: 1.3.1
|
68
|
+
requirement: *id003
|
79
69
|
- !ruby/object:Gem::Dependency
|
80
|
-
name: shoulda
|
81
70
|
prerelease: false
|
82
|
-
|
71
|
+
type: :development
|
72
|
+
name: shoulda
|
73
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
83
74
|
none: false
|
84
75
|
requirements:
|
85
76
|
- - ">="
|
86
77
|
- !ruby/object:Gem::Version
|
87
|
-
hash:
|
78
|
+
hash: 37
|
88
79
|
segments:
|
89
|
-
-
|
90
|
-
|
91
|
-
|
92
|
-
|
80
|
+
- 2
|
81
|
+
- 11
|
82
|
+
- 3
|
83
|
+
version: 2.11.3
|
84
|
+
requirement: *id004
|
93
85
|
- !ruby/object:Gem::Dependency
|
94
|
-
name: factory_girl
|
95
86
|
prerelease: false
|
96
|
-
|
87
|
+
type: :development
|
88
|
+
name: rspec
|
89
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
97
90
|
none: false
|
98
91
|
requirements:
|
99
92
|
- - ">="
|
100
93
|
- !ruby/object:Gem::Version
|
101
|
-
hash:
|
94
|
+
hash: 15
|
102
95
|
segments:
|
96
|
+
- 2
|
103
97
|
- 0
|
104
|
-
|
105
|
-
|
106
|
-
|
98
|
+
- 0
|
99
|
+
version: 2.0.0
|
100
|
+
requirement: *id005
|
107
101
|
- !ruby/object:Gem::Dependency
|
108
|
-
name: rspec
|
109
102
|
prerelease: false
|
110
|
-
|
103
|
+
type: :development
|
104
|
+
name: jeweler
|
105
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
111
106
|
none: false
|
112
107
|
requirements:
|
113
108
|
- - ">="
|
114
109
|
- !ruby/object:Gem::Version
|
115
|
-
hash:
|
110
|
+
hash: -1876988220
|
116
111
|
segments:
|
117
|
-
-
|
118
|
-
-
|
112
|
+
- 1
|
113
|
+
- 5
|
119
114
|
- 0
|
120
|
-
|
121
|
-
|
122
|
-
|
115
|
+
- pre5
|
116
|
+
version: 1.5.0.pre5
|
117
|
+
requirement: *id006
|
123
118
|
description: Simple ActiveRecord translations for Rails 3
|
124
119
|
email: fxposter@gmail.com
|
125
120
|
executables: []
|
@@ -131,7 +126,6 @@ extra_rdoc_files:
|
|
131
126
|
- README.rdoc
|
132
127
|
files:
|
133
128
|
- .document
|
134
|
-
- .gitignore
|
135
129
|
- Gemfile
|
136
130
|
- Gemfile.lock
|
137
131
|
- LICENSE
|
@@ -146,6 +140,7 @@ files:
|
|
146
140
|
- lib/simple_model_translations/validations.rb
|
147
141
|
- simple_model_translations.gemspec
|
148
142
|
- spec/attributes_spec.rb
|
143
|
+
- spec/class_methods_spec.rb
|
149
144
|
- spec/data/models.rb
|
150
145
|
- spec/data/schema.rb
|
151
146
|
- spec/simple_model_translations_spec.rb
|
@@ -156,8 +151,8 @@ homepage: http://github.com/fxposter/simple_model_translations
|
|
156
151
|
licenses: []
|
157
152
|
|
158
153
|
post_install_message:
|
159
|
-
rdoc_options:
|
160
|
-
|
154
|
+
rdoc_options: []
|
155
|
+
|
161
156
|
require_paths:
|
162
157
|
- lib
|
163
158
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -187,6 +182,7 @@ specification_version: 3
|
|
187
182
|
summary: Simple ActiveRecord translations for Rails 3
|
188
183
|
test_files:
|
189
184
|
- spec/attributes_spec.rb
|
185
|
+
- spec/class_methods_spec.rb
|
190
186
|
- spec/data/models.rb
|
191
187
|
- spec/data/schema.rb
|
192
188
|
- spec/simple_model_translations_spec.rb
|
data/.gitignore
DELETED