geoblacklight 0.10.0 → 0.10.1
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.
- checksums.yaml +4 -4
- data/lib/geoblacklight.rb +1 -0
- data/lib/geoblacklight/bounding_box.rb +44 -0
- data/lib/geoblacklight/exceptions.rb +2 -0
- data/lib/geoblacklight/search_builder.rb +24 -2
- data/lib/geoblacklight/version.rb +1 -1
- data/spec/features/search_bar_spec.rb +1 -1
- data/spec/lib/geoblacklight/bounding_box_spec.rb +27 -0
- data/spec/lib/geoblacklight/search_builder_spec.rb +16 -3
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb161150e767dc710a684cfc1b1ce58c50fdb432
|
4
|
+
data.tar.gz: 8d6fee0b74b5b103065a504f2d0e2c10d6ef0ee2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33ee645d8ed2522561f4fdc9614bde529c0ad3d02dbce805a0969f1427486222f63d874cb8070ac3e8661ebed69849999a8ebeadbd17457c0c2a4f7f2a4edfb1
|
7
|
+
data.tar.gz: 25d38f1a47e47bb05901a0720069a83266a5514c8797d69e1fff4bc65427539bada76dfe1dfa98c1ece3d073ee4539b3f021087dde7be74125b3f31d47d00b8b
|
data/lib/geoblacklight.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Geoblacklight
|
2
|
+
##
|
3
|
+
# Transforms and parses a bounding box for various formats
|
4
|
+
class BoundingBox
|
5
|
+
##
|
6
|
+
# @param [String, Integer, Float] west
|
7
|
+
# @param [String, Integer, Float] south
|
8
|
+
# @param [String, Integer, Float] east
|
9
|
+
# @param [String, Integer, Float] north
|
10
|
+
def initialize(west, south, east, north)
|
11
|
+
@west = west
|
12
|
+
@south = south
|
13
|
+
@east = east
|
14
|
+
@north = north
|
15
|
+
# TODO: check for valid Geometry and raise if not
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Returns a bounding box in ENVELOPE syntax
|
20
|
+
# @return [String]
|
21
|
+
def to_envelope
|
22
|
+
"ENVELOPE(#{west}, #{east}, #{north}, #{south})"
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# Create a Geoblacklight::BoundingBox from a Solr rectangle syntax
|
27
|
+
# @param [String] bbox as "W S E N"
|
28
|
+
# @return [Geoblacklight::BoundingBox]
|
29
|
+
def self.from_rectangle(rectangle)
|
30
|
+
rectangle_array = rectangle.split(' ')
|
31
|
+
fail Geoblacklight::Exceptions::WrongBoundingBoxFormat, 'Bounding box should be a string in Solr rectangle syntax e.g."W S E N"' if rectangle_array.count != 4
|
32
|
+
new(
|
33
|
+
rectangle_array[0],
|
34
|
+
rectangle_array[1],
|
35
|
+
rectangle_array[2],
|
36
|
+
rectangle_array[3]
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
attr_reader :west, :south, :east, :north
|
43
|
+
end
|
44
|
+
end
|
@@ -7,14 +7,36 @@ module Geoblacklight
|
|
7
7
|
@processor_chain += [:add_spatial_params] unless @processor_chain.include?(:add_spatial_params)
|
8
8
|
end
|
9
9
|
|
10
|
+
##
|
11
|
+
# Adds spatial parameters to a Solr query if :bbox is present.
|
12
|
+
# @param [Blacklight::Solr::Request] solr_params :bbox should be in Solr
|
13
|
+
# :bbox should be passed in using Solr lat-lon rectangle format e.g.
|
14
|
+
# "minX minY maxX maxY"
|
15
|
+
# @return [Blacklight::Solr::Request]
|
10
16
|
def add_spatial_params(solr_params)
|
11
17
|
if blacklight_params[:bbox]
|
12
18
|
solr_params[:bq] ||= []
|
13
|
-
solr_params[:bq] = ["#{Settings.GEOMETRY_FIELD}:\"IsWithin(#{
|
19
|
+
solr_params[:bq] = ["#{Settings.GEOMETRY_FIELD}:\"IsWithin(#{envelope_bounds})\"^10"]
|
14
20
|
solr_params[:fq] ||= []
|
15
|
-
solr_params[:fq] << "#{Settings.GEOMETRY_FIELD}:\"Intersects(#{
|
21
|
+
solr_params[:fq] << "#{Settings.GEOMETRY_FIELD}:\"Intersects(#{envelope_bounds})\""
|
16
22
|
end
|
17
23
|
solr_params
|
24
|
+
rescue Geoblacklight::Exceptions::WrongBoundingBoxFormat
|
25
|
+
# TODO: Potentially delete bbox params here so that its not rendered as search param
|
26
|
+
solr_params
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# @return [String]
|
31
|
+
def envelope_bounds
|
32
|
+
bounding_box.to_envelope
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Returns a Geoblacklight::BoundingBox built from the blacklight_params
|
37
|
+
# @return [Geoblacklight::BoundingBox]
|
38
|
+
def bounding_box
|
39
|
+
Geoblacklight::BoundingBox.from_rectangle(blacklight_params[:bbox])
|
18
40
|
end
|
19
41
|
end
|
20
42
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
feature 'search bar' do
|
4
4
|
scenario 'present on a spatial search' do
|
5
|
-
visit catalog_index_path(bbox: '25
|
5
|
+
visit catalog_index_path(bbox: '25 3 75 35')
|
6
6
|
expect(page).to have_css '#search-navbar'
|
7
7
|
end
|
8
8
|
scenario 'present on a text search' do
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Geoblacklight::BoundingBox do
|
4
|
+
describe '#initialize' do
|
5
|
+
it 'handles multiple input types as arguments' do
|
6
|
+
expect(Geoblacklight::BoundingBox.new('1', '1', '1', '1')).to be_an Geoblacklight::BoundingBox
|
7
|
+
expect(Geoblacklight::BoundingBox.new(1, 2, 3, 3)).to be_an Geoblacklight::BoundingBox
|
8
|
+
expect(Geoblacklight::BoundingBox.new(1.1, 2.1, 3.1, 3.1)).to be_an Geoblacklight::BoundingBox
|
9
|
+
end
|
10
|
+
end
|
11
|
+
describe '#to_envelope' do
|
12
|
+
let(:example_box) { Geoblacklight::BoundingBox.new(-160, -80, 120, 70) }
|
13
|
+
it 'creates an envelope syntax version of the bounding box' do
|
14
|
+
expect(example_box.to_envelope).to eq 'ENVELOPE(-160, 120, 70, -80)'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
describe '#from_rectangle' do
|
18
|
+
let(:example_box) { Geoblacklight::BoundingBox.from_rectangle('-160 -80 120 70') }
|
19
|
+
it 'parses and creates a Geoblacklight::BoundingBox from a Solr lat-lon' do
|
20
|
+
expect(example_box).to be_an Geoblacklight::BoundingBox
|
21
|
+
expect(example_box.to_envelope).to eq 'ENVELOPE(-160, 120, 70, -80)'
|
22
|
+
end
|
23
|
+
it 'checks for valididity' do
|
24
|
+
expect { Geoblacklight::BoundingBox.from_rectangle('-160 -80 120') }.to raise_error Geoblacklight::Exceptions::WrongBoundingBoxFormat
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -36,10 +36,23 @@ describe Geoblacklight::SearchBuilder do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'should return a spatial search if bbox is given' do
|
39
|
-
params = { :
|
39
|
+
params = { bbox: '-180 -80 120 80' }
|
40
40
|
subject.with(params)
|
41
|
-
expect(subject.add_spatial_params(solr_params)[:fq].to_s).to include(
|
41
|
+
expect(subject.add_spatial_params(solr_params)[:fq].to_s).to include('Intersects')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
describe '#envelope_bounds' do
|
45
|
+
it 'calls to_envelope on the bounding box' do
|
46
|
+
bbox = double('bbox', to_envelope: 'test')
|
47
|
+
expect(subject).to receive(:bounding_box).and_return bbox
|
48
|
+
expect(subject.envelope_bounds).to eq 'test'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
describe '#bounding_box' do
|
52
|
+
it 'creates a bounding box from a Solr lat-lon rectangle format' do
|
53
|
+
params = { bbox: '-120 -80 120 80' }
|
54
|
+
subject.with(params)
|
55
|
+
expect(subject.bounding_box).to be_an Geoblacklight::BoundingBox
|
42
56
|
end
|
43
57
|
end
|
44
58
|
end
|
45
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geoblacklight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Graves
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-
|
14
|
+
date: 2015-06-01 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: blacklight
|
@@ -343,6 +343,7 @@ files:
|
|
343
343
|
- lib/generators/geoblacklight/templates/geoblacklight.js
|
344
344
|
- lib/generators/geoblacklight/templates/settings.yml
|
345
345
|
- lib/geoblacklight.rb
|
346
|
+
- lib/geoblacklight/bounding_box.rb
|
346
347
|
- lib/geoblacklight/catalog_helper_override.rb
|
347
348
|
- lib/geoblacklight/config.rb
|
348
349
|
- lib/geoblacklight/constants.rb
|
@@ -395,6 +396,7 @@ files:
|
|
395
396
|
- spec/fixtures/solr_documents/public_polygon_mit.json
|
396
397
|
- spec/fixtures/solr_documents/restricted-line.json
|
397
398
|
- spec/helpers/geoblacklight_helpers_spec.rb
|
399
|
+
- spec/lib/geoblacklight/bounding_box_spec.rb
|
398
400
|
- spec/lib/geoblacklight/controller_override_spec.rb
|
399
401
|
- spec/lib/geoblacklight/download/geojson_download_spec.rb
|
400
402
|
- spec/lib/geoblacklight/download/geotiff_download_spec.rb
|
@@ -473,6 +475,7 @@ test_files:
|
|
473
475
|
- spec/fixtures/solr_documents/public_polygon_mit.json
|
474
476
|
- spec/fixtures/solr_documents/restricted-line.json
|
475
477
|
- spec/helpers/geoblacklight_helpers_spec.rb
|
478
|
+
- spec/lib/geoblacklight/bounding_box_spec.rb
|
476
479
|
- spec/lib/geoblacklight/controller_override_spec.rb
|
477
480
|
- spec/lib/geoblacklight/download/geojson_download_spec.rb
|
478
481
|
- spec/lib/geoblacklight/download/geotiff_download_spec.rb
|