4
4
require 'active_support/all'
5
5
require 'cgi'
6
6
require 'overpass_parser/visitor'
7
+ require 'overpass_parser/nodes/query_objects'
8
+ require 'overpass_parser/nodes/selectors'
7
9
8
10
require 'sorbet-runtime'
9
11
@@ -73,12 +75,12 @@ def initialize(job_id, destination_id, name, settings)
73
75
end
74
76
75
77
def deep_select ( object , &block )
76
- if object . is_a? ( Array )
77
- object . collect { |o |
78
+ if object . is_a? ( OverpassParser ::Nodes ::QueryObjects )
79
+ object . selectors &.to_overpass
80
+ elsif object . is_a? ( OverpassParser ::Nodes ::Request ) || object . is_a? ( OverpassParser ::Nodes ::QueryUnion )
81
+ object . queries . collect { |o |
78
82
deep_select ( o , &block )
79
83
} . flatten ( 1 ) . compact
80
- elsif object . is_a? ( Hash )
81
- deep_select ( object . values , &block ) + ( block . call ( object ) ? [ object ] : [ ] )
82
84
end
83
85
end
84
86
@@ -88,18 +90,13 @@ def osm_tags
88
90
89
91
if @selectors . blank?
90
92
tree = OverpassParser . tree ( @settings . query )
91
- tags_all = { }
92
- selects = deep_select ( tree ) { |o | o [ :type ] == :query_object } . select { |query_object |
93
- query_object [ :selectors ] . present?
94
- } . collect { |query_object |
95
- query_object [ :selectors ] . to_overpass
96
- }
93
+ selects = deep_select ( tree [ 0 ] )
97
94
98
95
super ( ) . deep_merge_array ( {
99
96
'data' => selects . collect { |select |
100
97
{
101
98
'select' => [ select ] ,
102
- 'interest' => tags_all . merge ( @settings . interest &.to_h { |key | [ key , nil ] } || { } ) ,
99
+ 'interest' => @settings . interest &.to_h { |key | [ key , nil ] } || { } ,
103
100
'sources' => [ @job_id , @destination_id ] . uniq
104
101
}
105
102
}
0 commit comments