spiderfw 0.6.18 → 0.6.19
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/CHANGELOG +4 -0
- data/VERSION +1 -1
- data/apps/core/components/assets.rb +1 -1
- data/lib/spiderfw/config/configuration_editor.rb +4 -2
- data/lib/spiderfw/http/adapters/rack.rb +5 -1
- data/lib/spiderfw/model/condition.rb +5 -5
- data/lib/spiderfw/model/mappers/db_mapper.rb +30 -11
- data/lib/spiderfw/model/mappers/mapper.rb +21 -13
- data/lib/spiderfw/templates/layout.rb +2 -2
- metadata +4 -4
data/CHANGELOG
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.19
|
@@ -43,7 +43,7 @@ Spider::Template.define_named_asset 'jquery-ui-core', [
|
|
43
43
|
[:js, 'js/jquery/jquery-ui-1.8.11/ui/jquery.ui.mouse.js', Spider::Components],
|
44
44
|
[:js, 'js/jquery/jquery-ui-1.8.11/ui/jquery.ui.position.js', Spider::Components],
|
45
45
|
[:css, 'js/jquery/jquery-ui-1.8.11/css/Aristo/jquery-ui.custom.css', Spider::Components]
|
46
|
-
]
|
46
|
+
], :depends => ['jquery']
|
47
47
|
|
48
48
|
Spider::Template.define_named_asset 'jquery-ui-draggable', [
|
49
49
|
[:js, 'js/jquery/jquery-ui-1.8.11/ui/jquery.ui.draggable.js', Spider::Components]
|
@@ -113,7 +113,7 @@ module Spider
|
|
113
113
|
end
|
114
114
|
add_next = nil
|
115
115
|
end
|
116
|
-
if line =~
|
116
|
+
if line =~ /^(\s*)(\w[^:]+):\s*(.+)?$/
|
117
117
|
indent = $1
|
118
118
|
key = $2
|
119
119
|
value = $3
|
@@ -175,6 +175,8 @@ module Spider
|
|
175
175
|
end
|
176
176
|
curr = data
|
177
177
|
res << line
|
178
|
+
elsif line =~ /^\s*#/
|
179
|
+
res << line
|
178
180
|
else # value line
|
179
181
|
curr_val << line
|
180
182
|
end
|
@@ -200,4 +202,4 @@ module Spider
|
|
200
202
|
|
201
203
|
end
|
202
204
|
|
203
|
-
end
|
205
|
+
end
|
@@ -34,7 +34,7 @@ module Spider; module Model
|
|
34
34
|
return c
|
35
35
|
end
|
36
36
|
|
37
|
-
@comparison_operators = %w{= > < >= <= <>
|
37
|
+
@comparison_operators = %w{= > < >= <= <> like}
|
38
38
|
@comparison_operators_regexp = @comparison_operators.inject('') do |str, op|
|
39
39
|
str += '|' unless str.empty?
|
40
40
|
str += Regexp.quote(op)
|
@@ -173,11 +173,11 @@ module Spider; module Model
|
|
173
173
|
value = value.to_a
|
174
174
|
end
|
175
175
|
if value.is_a?(Array) && comparison != 'between'
|
176
|
-
|
176
|
+
multi_cond = comparison == '<>' ? self.class.and : self.class.or
|
177
177
|
value.uniq.each do |v|
|
178
|
-
|
178
|
+
multi_cond.set(field, comparison, v)
|
179
179
|
end
|
180
|
-
@subconditions <<
|
180
|
+
@subconditions << multi_cond
|
181
181
|
return self
|
182
182
|
end
|
183
183
|
parts = []
|
@@ -454,7 +454,7 @@ module Spider; module Model
|
|
454
454
|
:== => '=',
|
455
455
|
:not => '<>'
|
456
456
|
}
|
457
|
-
if
|
457
|
+
if replace[op]
|
458
458
|
op = replace[op]
|
459
459
|
end
|
460
460
|
op = op.to_s
|
@@ -494,7 +494,7 @@ module Spider; module Model; module Mappers
|
|
494
494
|
cond[:values] = []
|
495
495
|
|
496
496
|
|
497
|
-
|
497
|
+
# Returns an hash of elements that need an "inner" join
|
498
498
|
def get_join_info(model, condition)
|
499
499
|
join_info = {}
|
500
500
|
condition.each_with_comparison do |k, v, comp|
|
@@ -503,31 +503,50 @@ module Spider; module Model; module Mappers
|
|
503
503
|
next unless element
|
504
504
|
next unless model.mapper.mapped?(element)
|
505
505
|
next unless element.model?
|
506
|
-
join_info[k.to_s] =
|
506
|
+
join_info[k.to_s] = if v.nil?
|
507
|
+
comp == '<>' ? true : false
|
508
|
+
else
|
509
|
+
comp == '<>' ? false : true
|
510
|
+
end
|
507
511
|
if v.is_a?(Spider::Model::Condition)
|
508
512
|
el_join_info = get_join_info(element.model, v)
|
513
|
+
has_true = false
|
514
|
+
has_false = false
|
509
515
|
el_join_info.each do |jk, jv|
|
510
516
|
join_info["#{k}.#{jk}"] = jv
|
517
|
+
has_true = true if jv
|
518
|
+
has_false = true unless jv
|
519
|
+
end
|
520
|
+
if (v.conjunction == :and && has_true) || (has_true && !has_false)
|
521
|
+
join_info[k.to_s] = true
|
522
|
+
elsif (v.conjunction == :or && has_false) || (has_false && !has_true)
|
523
|
+
join_info[k.to_s] = false
|
511
524
|
end
|
512
525
|
end
|
513
526
|
end
|
527
|
+
sub = {}
|
514
528
|
condition.subconditions.each do |sub_cond|
|
529
|
+
next if sub_cond.empty?
|
515
530
|
sub_join_info = get_join_info(model, sub_cond)
|
516
|
-
|
517
|
-
|
518
|
-
|
531
|
+
sub_join_info.each_key do |k|
|
532
|
+
if condition.conjunction == :or
|
533
|
+
sub[k] = true if sub_join_info[k] && sub[k] != false
|
534
|
+
sub[k] = false unless sub_join_info
|
535
|
+
else
|
536
|
+
sub[k] = true if sub_join_info[k]
|
519
537
|
end
|
520
|
-
else
|
521
|
-
join_info.merge!(sub_join_info)
|
522
538
|
end
|
523
539
|
end
|
540
|
+
join_info.merge!(sub)
|
524
541
|
join_info
|
525
542
|
end
|
543
|
+
|
544
|
+
|
526
545
|
|
527
546
|
join_info = options[:join_info]
|
528
547
|
join_info ||= get_join_info(@model, condition)
|
529
548
|
|
530
|
-
|
549
|
+
|
531
550
|
condition.each_with_comparison do |k, v, comp|
|
532
551
|
if k.is_a?(QueryFuncs::Function)
|
533
552
|
field = prepare_queryfunc(k)
|
@@ -541,7 +560,7 @@ module Spider; module Model; module Mappers
|
|
541
560
|
el_join_info = {}
|
542
561
|
join_info.each do |jk, jv|
|
543
562
|
if jk.index(k.to_s+'.') == 0
|
544
|
-
el_join_info[jk[k.to_s.length..-1]] = jv
|
563
|
+
el_join_info[jk[k.to_s.length+1..-1]] = jv
|
545
564
|
end
|
546
565
|
end
|
547
566
|
if (v && model.mapper.have_references?(element.name) && v.select{ |key, value|
|
@@ -557,7 +576,7 @@ module Spider; module Model; module Mappers
|
|
557
576
|
end
|
558
577
|
cond[:values] << element_cond
|
559
578
|
else
|
560
|
-
if
|
579
|
+
if element.storage == model.mapper.storage
|
561
580
|
join_type = join_info[element.name.to_s] ? :inner : :left
|
562
581
|
sub_join = model.mapper.get_join(element, join_type)
|
563
582
|
# FIXME! cleanup, and apply the check to joins acquired in other places, too (maybe pass the current joins to get_join)
|
@@ -566,6 +585,7 @@ module Spider; module Model; module Mappers
|
|
566
585
|
had_join = false
|
567
586
|
existent.each do |j|
|
568
587
|
if sub_join[:to] == j[:to] && sub_join[:keys] == j[:keys] && sub_join[:conditions] == j[:conditions]
|
588
|
+
# if any condition allows a left join, then a left join should be used here as well
|
569
589
|
j[:type] = :left if sub_join[:type] == :left
|
570
590
|
sub_join = j
|
571
591
|
had_join = true
|
@@ -595,7 +615,6 @@ module Spider; module Model; module Mappers
|
|
595
615
|
end
|
596
616
|
cond[:values] << element_cond
|
597
617
|
elsif v
|
598
|
-
v = element.model.mapper.preprocess_condition(v)
|
599
618
|
sub_condition, sub_joins = element.mapper.prepare_condition(v, :table => sub_join[:as], :joins => joins, :join_info => el_join_info)
|
600
619
|
sub_condition[:table] = sub_join[:as] if sub_join[:as]
|
601
620
|
joins = sub_joins
|
@@ -345,7 +345,7 @@ module Spider; module Model
|
|
345
345
|
if element.attributes[:junction_id]
|
346
346
|
val.each do |row|
|
347
347
|
next unless row_id = row.get(element.attributes[:junction_id])
|
348
|
-
condition.set(:
|
348
|
+
condition.set(element.attributes[:junction_id], '<>', row_id)
|
349
349
|
end
|
350
350
|
end
|
351
351
|
element.model.mapper.delete(condition)
|
@@ -930,25 +930,33 @@ module Spider; module Model
|
|
930
930
|
condition.conditions_array.each do |k, v, c|
|
931
931
|
next if k.is_a?(Spider::QueryFuncs::Function)
|
932
932
|
next unless element = model.elements[k]
|
933
|
-
|
934
|
-
|
935
|
-
integrated_from = element.integrated_from
|
936
|
-
integrated_from_element = element.integrated_from_element
|
937
|
-
condition.set("#{integrated_from.name}.#{integrated_from_element}", c, v)
|
938
|
-
elsif (element.junction? && !v.is_a?(BaseModel) && !v.is_a?(Hash) && !v.nil?) # conditions on junction id don't make sense
|
939
|
-
condition.delete(k)
|
940
|
-
condition.set("#{k}.#{element.attributes[:junction_their_element]}", c, v)
|
941
|
-
end
|
942
|
-
if (element.type < Spider::DataType && !v.is_a?(element.type))
|
933
|
+
changed_v = false
|
934
|
+
if element.type < Spider::DataType && !v.is_a?(element.type)
|
943
935
|
condition.delete(k)
|
944
936
|
begin
|
945
|
-
|
937
|
+
v = element.type.from_value(v)
|
938
|
+
changed_v = true
|
946
939
|
rescue TypeError => exc
|
947
940
|
raise TypeError, "Can't convert #{v} to #{element.type} for element #{k} (#{exc.message})"
|
948
941
|
end
|
949
942
|
elsif element.type == DateTime && v && !v.is_a?(Date) && !v.is_a?(Time)
|
943
|
+
v = DateTime.parse(v)
|
944
|
+
changed_v = true
|
945
|
+
elsif element.model? && v.is_a?(Spider::Model::Condition)
|
946
|
+
v = element.mapper.preprocess_condition(v)
|
947
|
+
changed_v = true
|
948
|
+
end
|
949
|
+
if element.integrated?
|
950
|
+
condition.delete(k)
|
951
|
+
integrated_from = element.integrated_from
|
952
|
+
integrated_from_element = element.integrated_from_element
|
953
|
+
condition.set("#{integrated_from.name}.#{integrated_from_element}", c, v)
|
954
|
+
elsif element.junction? && !v.is_a?(BaseModel) && !v.is_a?(Hash) && !v.nil? # conditions on junction id don't make sense
|
955
|
+
condition.delete(k)
|
956
|
+
condition.set("#{k}.#{element.attributes[:junction_their_element]}", c, v)
|
957
|
+
elsif changed_v
|
950
958
|
condition.delete(k)
|
951
|
-
condition.set(k, c,
|
959
|
+
condition.set(k, c, v)
|
952
960
|
end
|
953
961
|
end
|
954
962
|
end
|
@@ -233,8 +233,8 @@ module Spider
|
|
233
233
|
curr = Dir.glob(pub_dest+"/._#{name}.*.js")
|
234
234
|
unless curr.empty?
|
235
235
|
curr.each do |f|
|
236
|
-
|
237
|
-
if
|
236
|
+
currname = File.basename(f)
|
237
|
+
if currname =~ /(\d+)\.js$/
|
238
238
|
version = $1.to_i if $1.to_i > version
|
239
239
|
File.unlink(f)
|
240
240
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spiderfw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 33
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 19
|
10
|
+
version: 0.6.19
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ivan Pirlik
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-09-
|
18
|
+
date: 2011-09-21 00:00:00 +02:00
|
19
19
|
default_executable: spider
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|