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.
- data/lib/webink/database.rb +40 -15
- data/lib/webink/model.rb +22 -30
- metadata +2 -2
data/lib/webink/database.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/webink/model.rb
CHANGED
@@ -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
|
-
# [
|
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 =
|
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
|
-
|
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 =
|
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
|
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-
|
12
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fcgi
|