webink 2.0.2 → 2.1.0

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.
Files changed (3) hide show
  1. data/lib/webink/database.rb +40 -15
  2. data/lib/webink/model.rb +22 -30
  3. metadata +2 -2
@@ -169,6 +169,44 @@ module Ink
169
169
  result
170
170
  end
171
171
 
172
+ # Class method
173
+ #
174
+ # Transform a value to sql representative values.
175
+ # This means quotes are escaped, nils are transformed
176
+ # and everything else is quoted.
177
+ # [param value:] Object
178
+ # [returns:] transformed String
179
+ def self.transform_to_sql(value)
180
+ if value.nil?
181
+ "NULL"
182
+ elsif value.is_a? String
183
+ "\'#{value.gsub(/'/, ''')}\'"
184
+ elsif value.is_a? Numeric
185
+ value
186
+ else
187
+ "\'#{value}\'"
188
+ end
189
+ end
190
+
191
+ # Class method
192
+ #
193
+ # Transform a value from sql to objects.
194
+ # This means nils, integer, floats and strings
195
+ # are imported correctly.
196
+ # [param value:] String
197
+ # [returns:] Object
198
+ def self.transform_from_sql(value)
199
+ if value =~ /^NULL$/
200
+ nil
201
+ elsif value =~ /^\d+$/
202
+ value.to_i
203
+ elsif value =~ /^\d+\.\d+$/
204
+ value.to_f
205
+ else
206
+ value
207
+ end
208
+ end
209
+
172
210
  # Instance method
173
211
  #
174
212
  # Send an SQL query string to the database
@@ -186,14 +224,7 @@ module Ink
186
224
  result.push type.new
187
225
  row.each_index do |i|
188
226
  k = keys[i]
189
- v = row[i]
190
- if v =~ /^[0-9]+$/
191
- v = $&.to_i
192
- elsif v =~ /^[0-9]+\.[0-9]+$/
193
- v = $&.to_f
194
- elsif v =~ /^NULL$/
195
- v = nil
196
- end
227
+ v = self.class.transform_from_sql(row[i])
197
228
  if block_given?
198
229
  yield(result[result.length-1], k, v)
199
230
  else
@@ -207,13 +238,7 @@ module Ink
207
238
  re.each do |row|
208
239
  result.push type.new
209
240
  re.columns.each_index do |i|
210
- if row[i] =~ /^[0-9]+$/
211
- row[i] = $&.to_i
212
- elsif row[i] =~ /^[0-9]+\.[0-9]+$/
213
- row[i] = $&.to_f
214
- elsif row[i] =~ /^NULL$/
215
- row[i] = nil
216
- end
241
+ row[i] = self.class.transform_from_sql(row[i])
217
242
  if block_given?
218
243
  yield(result[result.length-1], re.columns[i], row[i])
219
244
  else
@@ -163,24 +163,33 @@ module Ink
163
163
  end
164
164
  end
165
165
 
166
+ # Class method
167
+ #
168
+ # Similar to making an Object sql safe.
169
+ # Escapes quotes.
170
+ # [param value:] Object
171
+ # [returns:] safe Object
172
+ def self.make_safe(value)
173
+ if value.nil?
174
+ nil
175
+ elsif value.is_a? String
176
+ value.gsub(/'/, ''')
177
+ elsif value.is_a? Numeric
178
+ value
179
+ else
180
+ "\'#{value}\'"
181
+ end
182
+ end
183
+
166
184
  # Private instance method
167
185
  #
168
186
  # Provides an instance accessor and setter for the key. It is
169
187
  # initialized with data[key].
170
188
  # [key:] String
171
- # [data:] Hash of String => Object
189
+ # [value:] Object
172
190
  def init_field(key, value)
173
191
  raise NameError.new("Model cannot use #{key} as field, it is blocked by primary key") if key.to_s.downcase == "pk"
174
- entry = nil
175
- if value.nil?
176
- entry = nil
177
- elsif value.is_a? String
178
- entry = value.gsub(/'/, ''')
179
- elsif value.is_a? Numeric
180
- entry = value
181
- else
182
- entry = "\'#{value}\'"
183
- end
192
+ entry = self.class.make_safe(value)
184
193
  instance_variable_set("@#{key}", entry)
185
194
 
186
195
  if not self.respond_to? key
@@ -191,15 +200,7 @@ module Ink
191
200
  if self.class.primary_key != key
192
201
  if not self.respond_to? "#{key}="
193
202
  self.class.send(:define_method, "#{key}=") do |val|
194
- if val.nil?
195
- val = nil
196
- elsif val.is_a? String
197
- val = val.gsub(/'/, ''')
198
- elsif val.is_a? Numeric
199
- val = val
200
- else
201
- val = "\'#{val}\'"
202
- end
203
+ val = self.class.make_safe(val)
203
204
  instance_variable_set "@#{key}", val
204
205
  end
205
206
  end
@@ -218,16 +219,7 @@ module Ink
218
219
  # [key:] String
219
220
  # [value:] Object
220
221
  def init_no_fields(key, value)
221
- entry = nil
222
- if value.nil?
223
- entry = nil
224
- elsif value.is_a? String
225
- entry = value.gsub(/'/, ''')
226
- elsif value.is_a? Numeric
227
- entry = value
228
- else
229
- entry = "\'#{value}\'"
230
- end
222
+ entry = self.class.make_safe(value)
231
223
  instance_variable_set "@#{key}", entry
232
224
  end
233
225
  private :init_no_fields
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webink
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-30 00:00:00.000000000 Z
12
+ date: 2013-05-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fcgi