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 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: []