easy_translatable 0.0.2
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 +7 -0
- data/lib/translatable/active_record/translate.rb +62 -0
- data/lib/translatable/active_record.rb +6 -0
- data/lib/translatable/config.rb +14 -0
- data/lib/translatable/default.rb +57 -0
- data/lib/translatable/version.rb +3 -0
- data/lib/translatable.rb +1 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 59d10660673553256751f645a2c04f5b3d75ca6e
|
4
|
+
data.tar.gz: b4695ed4cccf9f9cd9667e093c7c401fbe0473a3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7b4fff6219c1bca91c6d82202af8f7366ec001110e35ede6b4c09e3e2ad4320f07bd72f3492ab07b509ae2af589851f081e85a7c451c21798bb537f1267bc52a
|
7
|
+
data.tar.gz: b2a8ab70f95686caa786a42430f2ed0edf65e50c978e8caf8447d7df31fef0445db063cbb8c291718b289964f090b2c1215ee2219d1382064752378b8fe322e7
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Translatable
|
2
|
+
module ActiveRecord
|
3
|
+
module Translate
|
4
|
+
def translate(*attr_names, lang)
|
5
|
+
|
6
|
+
model = self.table_name
|
7
|
+
if Translatable::Config.list.has_key? model and self.column_names.include? 'group_id'
|
8
|
+
|
9
|
+
if attr_names.length == 0
|
10
|
+
to_translate = Translatable::Config.list[model]
|
11
|
+
q = has_select_values? ? self : self.select("#{model}.*")
|
12
|
+
else
|
13
|
+
to_translate = attr_names
|
14
|
+
q = self
|
15
|
+
end
|
16
|
+
|
17
|
+
index = 0
|
18
|
+
to_translate.each do |attr|
|
19
|
+
|
20
|
+
if is_in_scope? attr
|
21
|
+
p "in_scope? attr : #{is_in_scope? attr}"
|
22
|
+
index += 1
|
23
|
+
if Translatable::Config.list[model].include?(attr.to_s)
|
24
|
+
q = q.joins("LEFT JOIN snippets sn#{index} ON sn#{index}.record_id = #{model}.id AND sn#{index}.scope = '#{model}' AND sn#{index}.group_id = #{model}.group_id AND sn#{index}.lang = '#{lang}' AND sn#{index}.key = '#{attr}'").
|
25
|
+
select("COALESCE(sn#{index}.value, '') AS #{attr}")
|
26
|
+
else
|
27
|
+
q = q.select("#{model}.#{attr}")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
q.scoped
|
34
|
+
else
|
35
|
+
self.scoped
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def has_select_values?
|
43
|
+
self.scoped.select_values.length > 0
|
44
|
+
end
|
45
|
+
|
46
|
+
def is_in_scope?(attr)
|
47
|
+
|
48
|
+
if has_select_values?
|
49
|
+
select_values = self.scoped.select_values
|
50
|
+
select_values.select{ |value| value.is_a?(String) && value.split('.').last == '*' }.length > 0 ||
|
51
|
+
select_values.include?(attr) ||
|
52
|
+
select_values.include?(attr.to_sym) ||
|
53
|
+
select_values.select{ |value| value.is_a?(String) && value.split('.').last == attr }.length > 0
|
54
|
+
else
|
55
|
+
true
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.expand_path '../config.rb', __FILE__
|
2
|
+
require File.expand_path '../active_record.rb', __FILE__
|
3
|
+
|
4
|
+
module Translatable
|
5
|
+
class Base
|
6
|
+
|
7
|
+
include Singleton
|
8
|
+
attr_accessor :models, :clicrdv_models
|
9
|
+
|
10
|
+
CLICRDV_TYPES = %w(model customfield preprosition)
|
11
|
+
|
12
|
+
def self.is_a_customfield?(str)
|
13
|
+
str.match(/\Acustomfields/)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.is_a_preposition?(str)
|
17
|
+
str.match(/\Apreposition/)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.is_an_ar_model?(str)
|
21
|
+
is_it = false
|
22
|
+
begin
|
23
|
+
model = str.singularize.camelize.constantize
|
24
|
+
is_it = true unless model.superclass.name == 'ActiveRecord::base'
|
25
|
+
rescue NameError
|
26
|
+
end
|
27
|
+
is_it
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.type str
|
31
|
+
if is_model str
|
32
|
+
'model'
|
33
|
+
elsif is_customfield str
|
34
|
+
'customfield'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get all translatables models
|
39
|
+
# @param array of things to translate
|
40
|
+
# @return an array of three elements : ARModels, Customfields and Preprositions
|
41
|
+
def self.clicrdv_models(hash=nil)
|
42
|
+
if hash.nil? || hash.empty?
|
43
|
+
process_me = Config.list
|
44
|
+
else
|
45
|
+
process_me = hash
|
46
|
+
end
|
47
|
+
# Don't remove the v in the block parameters |k,v| this because of Ruby 1.8.7
|
48
|
+
ar_models = process_me.reject{ |k,v| !is_an_ar_model?(k) }
|
49
|
+
customfields = process_me.reject{ |k,v| !is_a_customfield?(k) }
|
50
|
+
prepositions = process_me.reject{ |k,v| !is_a_preposition?(k) }
|
51
|
+
|
52
|
+
[ar_models, customfields, prepositions]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
ActiveRecord::Base.extend(Translatable::ActiveRecord::Translate)
|
data/lib/translatable.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'translatable/default.rb')
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: easy_translatable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Paul Bonaud
|
8
|
+
- Charly Poly
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '3.0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '3.0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: coveralls
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
description: Handle translations for AR models into a single table. And provide a
|
57
|
+
helper to select translated values.
|
58
|
+
email: paul.bonaud@clicrdv.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- lib/translatable.rb
|
64
|
+
- lib/translatable/active_record.rb
|
65
|
+
- lib/translatable/active_record/translate.rb
|
66
|
+
- lib/translatable/config.rb
|
67
|
+
- lib/translatable/default.rb
|
68
|
+
- lib/translatable/version.rb
|
69
|
+
homepage: http://rubygems.org/gems/single_translatable
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 2.2.0
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: Handle translations for AR models into a single table
|
93
|
+
test_files: []
|