easy_translatable 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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,6 @@
1
+ require File.expand_path '../active_record/translate.rb', __FILE__
2
+
3
+ module Translatable
4
+ module ActiveRecord
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ module Translatable
2
+ class Config
3
+ include Singleton
4
+ attr_accessor :list
5
+
6
+ def self.file= path
7
+ instance.list = YAML.load_file path
8
+ end
9
+
10
+ def self.list
11
+ instance.list
12
+ end
13
+ end
14
+ 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)
@@ -0,0 +1,3 @@
1
+ module Translatable
2
+ VERSION = '0.0.1'
3
+ end
@@ -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: []