localizable_db 2.0.1 → 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8851747cbe050ed8abd9f3919016e134a018017ee513b251ee0456cd055f3dd7
4
- data.tar.gz: f21e56eb227d9b54368f561d3d6d877fb8b5956e2dc22e554990c9d1a08558c3
3
+ metadata.gz: 72d05a5d0122ca0e6cefa8dbd9a57b177f576be071f19d6085f9b13eb5725ca1
4
+ data.tar.gz: b725681ea0b45ae0aeec763ca20cec927d92b66ebbf7c41d788e3c5e13ac3645
5
5
  SHA512:
6
- metadata.gz: aec940e4ecc875b7f10e8b67934d8c80f5338f7b4afba2f33003cdee2f8b15b84040afcb6a4dd91a6bcf49ff32a08bbf4940fef1f5dd7cfe479dce08e6ac0984
7
- data.tar.gz: d8b3cb2ebd7f9e0189d639d7ac58dee6415c851c469629ba323fd2ee77d06021709d482e554280e94858385514ebee57c88ca38d8f3294e8846bdff9e197f175
6
+ metadata.gz: 2cd13ae434121fbeee9daaae6fb14499c6d998e5513a901739c5d6e1980dca255a205a64705bb4d9ff5ccb7a9ae2700c2783238ccf860e18ef7beaf54ea239c6
7
+ data.tar.gz: 67026c758080e081e83d0a8151dba7093f5e5668baa92cdb370f0cc188d59d099c98de68c68b18a830bf3daf89f361e9eb76b1617fe812eccdd83fab9825765c
@@ -79,9 +79,8 @@ module LocalizableDb
79
79
  language = languages.first
80
80
  return one_language(language)
81
81
  else
82
- languages = languages.keep_if do |language|
83
- LocalizableDb::Languages::NOT_DEFAULT.include? language
84
- end
82
+ languages = languages.keep_if do |language|
83
+ LocalizableDb::Languages::NOT_DEFAULT.include? language end
85
84
  return multiple_languages(languages)
86
85
  end
87
86
  else
@@ -95,60 +94,68 @@ module LocalizableDb
95
94
 
96
95
  def one_language(language)
97
96
  attrs_to_select = single_languege_attrs_to_select_conf(language)
98
- from("#{self.localized_table_name}").joins("
99
- JOIN (
100
- SELECT #{self.table_name}.id, #{attrs_to_select.join(',')}
101
- FROM #{self.localized_table_name}, #{self.table_name}
102
- WHERE #{self.localized_table_name}.locale = '#{language.to_s}'
103
- AND #{self.localized_table_name}.localizable_object_id = #{self.table_name}.id
104
- ) AS #{self.table_name}
105
- ON #{self.localized_table_name}.locale = '#{language.to_s}'
106
- AND #{self.localized_table_name}.localizable_object_id = #{self.table_name}.id
97
+ case_selects = []
98
+ case_index = 0
99
+ self.localizable_attributes.each do |attribute|
100
+ case_selects << "CASE "
101
+ case_selects[case_index] += "WHEN #{self.localized_table_name}.#{attribute.to_s} IS NULL "
102
+ case_selects[case_index] += "THEN #{self.table_name}.#{attribute.to_s} "
103
+ case_selects[case_index] += "ELSE #{self.localized_table_name}.#{attribute.to_s} "
104
+ case_selects[case_index] += "END AS #{attribute} "
105
+ case_index += 1
106
+ end
107
+ from("
108
+ (SELECT #{self.table_name}.id, #{attrs_to_select.join(', ')}, #{case_selects.join(', ')}
109
+ FROM #{self.table_name}
110
+ LEFT OUTER JOIN (
111
+ SELECT * FROM #{self.localized_table_name}
112
+ WHERE #{self.localized_table_name}.locale = '#{language}'
113
+ ) AS #{self.localized_table_name}
114
+ ON #{self.localized_table_name}.locale = '#{language}'
115
+ ) AS #{self.table_name}
107
116
  ")
108
117
  end
109
118
 
110
119
  def multiple_languages(languages)
111
- attrs_to_select = (self.attribute_names - ["id"]).map do |attribute|
120
+ attrs_to_select = (self.attribute_names - ["id"] - self.localizable_attributes).map do |attribute|
112
121
  "#{self.table_name}.#{attribute.to_s}"
113
122
  end
114
123
  tables_to_select = ""
115
- conditions_to_select = ""
116
124
  languages.each do |language|
117
125
  attrs_to_select = attrs_to_select | self.localizable_attributes.map do |attribute|
118
126
  "#{language.to_s}_#{self.localized_table_name}.#{attribute.to_s} as #{language.to_s}_#{attribute.to_s}"
119
127
  end
120
- tables_to_select += "," if language != languages.first
121
- tables_to_select += "#{self.localized_table_name} as #{language.to_s}_#{self.localized_table_name}"
122
- conditions_to_select += "#{language.to_s}_#{self.localized_table_name}.locale = '#{language.to_s}'"
123
- conditions_to_select += " AND #{language.to_s}_#{self.localized_table_name}.localizable_object_id = #{self.table_name}.id"
124
- conditions_to_select += " AND " if language != languages.last
128
+ tables_to_select += "LEFT OUTER JOIN (
129
+ SELECT *
130
+ FROM #{self.localized_table_name}
131
+ WHERE #{self.localized_table_name}.locale = '#{language.to_s}'
132
+ ) AS #{language.to_s}_#{self.localized_table_name}
133
+ ON #{language.to_s}_#{self.localized_table_name}.locale = '#{language.to_s}'"
125
134
  end
126
- from("#{tables_to_select}").joins("
127
- JOIN (
128
- SELECT #{self.table_name}.id, #{attrs_to_select.join(',')}
129
- FROM #{self.table_name}, #{tables_to_select}
130
- WHERE #{conditions_to_select}
131
- ) AS #{self.table_name}
132
- ON #{conditions_to_select}
133
- ")
135
+ from("
136
+ (SELECT #{self.table_name}.id, #{attrs_to_select.join(', ')}
137
+ FROM #{self.table_name}
138
+ #{tables_to_select}
139
+ ) AS #{self.table_name}")
134
140
  end
135
141
 
136
142
  def single_languege_attrs_to_select_conf(language = nil)
137
143
  if LocalizableDb.configuration.attributes_integration
138
- attrs_to_select = self.attribute_names - ["id"] - self.localizable_attributes.map do |attribute|
139
- attribute.to_s
140
- end
141
- attrs_to_select = attrs_to_select | self.localizable_attributes.map do |attribute|
144
+ attrs_to_select = (self.attribute_names - ["id"] - self.localizable_attributes).map do |attribute|
145
+ "#{self.table_name}.#{attribute.to_s}"
146
+ end - self.localizable_attributes.map do |attribute|
147
+ "#{self.table_name}.#{attribute.to_s}"
148
+ end | self.localizable_attributes.map do |attribute|
142
149
  ["#{self.localized_table_name}.#{attribute.to_s}","#{self.localized_table_name}.#{attribute.to_s} as #{language}_#{attribute}"]
143
- end
144
- attrs_to_select.flatten!
150
+ end
151
+ attrs_to_select.flatten!
145
152
  else
146
- attrs_to_select = self.attribute_names - ["id"]
147
- attrs_to_select = attrs_to_select.map do |attribute|
148
- "#{self.table_name}.#{attribute}"
149
- end | self.localizable_attributes.map do |attribute|
150
- "#{self.localized_table_name}.#{attribute.to_s} as #{language}_#{attribute}"
151
- end
153
+ attrs_to_select = self.attribute_names - ["id"]
154
+ attrs_to_select = attrs_to_select.map do |attribute|
155
+ "#{self.table_name}.#{attribute}"
156
+ end | self.localizable_attributes.map do |attribute|
157
+ "#{self.localized_table_name}.#{attribute.to_s} as #{language}_#{attribute}"
158
+ end
152
159
  end
153
160
  attrs_to_select
154
161
  end
@@ -1,3 +1,3 @@
1
1
  module LocalizableDb
2
- VERSION = '2.0.1'
2
+ VERSION = '2.0.8'
3
3
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: localizable_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
- - yonga9121
7
+ - Yonga9121
8
8
  - Nevinyrral
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-02-19 00:00:00.000000000 Z
12
+ date: 2018-02-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -26,7 +26,7 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: 5.0.0
28
28
  - !ruby/object:Gem::Dependency
29
- name: sqlite3
29
+ name: pg
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
@@ -42,9 +42,7 @@ dependencies:
42
42
  description: If your application manage something like products or services that can
43
43
  be created dynamically, and you have to support multiple languages you may need
44
44
  to localize your database. LocalizableDb allow you to do that in a simple way.
45
- email:
46
- - jorgeggayon@gmail.com
47
- - montanor@javeriana.edu.co
45
+ email: jorgeggayon@gmail.com
48
46
  executables: []
49
47
  extensions: []
50
48
  extra_rdoc_files: []
@@ -70,7 +68,8 @@ files:
70
68
  homepage: https://yonga9121.github.io/localizable_db
71
69
  licenses:
72
70
  - MIT
73
- metadata: {}
71
+ metadata:
72
+ source_code_uri: https://github.com/yonga9121/localizable_db
74
73
  post_install_message:
75
74
  rdoc_options: []
76
75
  require_paths:
@@ -90,5 +89,5 @@ rubyforge_project:
90
89
  rubygems_version: 2.7.3
91
90
  signing_key:
92
91
  specification_version: 4
93
- summary: Rails gem to localize your database
92
+ summary: Rails gem to localize your database.
94
93
  test_files: []