geo_monitor 0.2.3 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8aa59e208f3d1d09a9756f3c478478fc5aa21bd2
4
- data.tar.gz: 65df4b3d90e6c9df548f7ea539ffbd092e5c8704
3
+ metadata.gz: 5835f3c34e5de884e5df6a85e0f133d1f758fad2
4
+ data.tar.gz: 31f3016139b942dce0ef4470b6cb31965f9c2c18
5
5
  SHA512:
6
- metadata.gz: 1034ba899f4974e949b2e027e55b070fff277d655e64010130832e5bb08e534880ed17e951391a64e41768ea2f7d358ee8eb53222a60b2b0f00dd34623897ae3
7
- data.tar.gz: 3da4e76a03b327e3cc795954f636a28e194338dd639f58f95fab088081431958ce98d77ef44e2aa61823d54d0639a1eac02281f2feab038c62c8dfb28f2ace64
6
+ metadata.gz: 72457008a4a5ad667a99a5025ad2a7a47ab24193477713978287fa1f693dabbb164987bd2934f01d4ec5d6cba214134ac90342a5c64e452d5ef671e20f351030
7
+ data.tar.gz: 89bf2d4eafd89ab821a166e704969afe9e8ca10dde776e2dd0ee7de4aad6bd281dbde35857a8f5cb9c0fef37d5a0f7d60d68fbb7904624e581d3efd87b94524b
@@ -8,10 +8,17 @@ module GeoMonitor
8
8
  schema = JSON.parse(schema_json)
9
9
  references = JSON.parse(schema['dct_references_s'])
10
10
  find_or_create_by(slug: schema['layer_slug_s']) do |layer|
11
- layer.checktype = 'WMS'
11
+ layer.checktype =
12
+ if references['http://www.opengis.net/def/serviceType/ogc/wms']
13
+ 'WMS'
14
+ elsif references['http://iiif.io/api/image']
15
+ 'IIIF'
16
+ end
17
+ layer.institution = schema['dct_provenance_s']
18
+ layer.rights = schema['dc_rights_s']
12
19
  layer.layername = schema['layer_id_s']
13
20
  layer.bbox = schema['solr_geom']
14
- layer.url = references['http://www.opengis.net/def/serviceType/ogc/wms']
21
+ layer.url = references['http://www.opengis.net/def/serviceType/ogc/wms'] || references['http://iiif.io/api/image']
15
22
  layer.active = true
16
23
  end
17
24
  end
@@ -28,11 +35,11 @@ module GeoMonitor
28
35
  bbox: bounding_box, url: url, layers: layername
29
36
  ).tile
30
37
  end
31
- GeoMonitor::Status.from_response(response, self, time.real.to_f)
38
+ ::GeoMonitor::Status.from_response(response, self, time.real.to_f)
32
39
  end
33
40
 
34
41
  def availability_score
35
- statuses.where(res_code: '200').count.to_f / statuses.count
42
+ statuses.where(res_code: '200', content_type: 'image/png').count.to_f / statuses.count
36
43
  end
37
44
  end
38
45
  end
@@ -7,7 +7,7 @@ module GeoMonitor
7
7
  # Limits the number of statuses per layer to prevent a ballooing database
8
8
  def limit_by_layer
9
9
  statuses_by_layer = self.class.where(layer: layer).count
10
- max = GeoMonitor::Engine.config.max_status_per_layer
10
+ max = ::GeoMonitor::Engine.config.max_status_per_layer
11
11
  self.class
12
12
  .where(layer: layer)
13
13
  .last(statuses_by_layer - max + 1)
@@ -15,7 +15,7 @@ module GeoMonitor
15
15
  end
16
16
 
17
17
  ##
18
- # @param [Faraday::Resposne] response
18
+ # @param [Faraday::Response] response
19
19
  # @param [GeoMonitor::Layer] layer
20
20
  # @param [Float] time
21
21
  def self.from_response(response, layer, time)
@@ -24,7 +24,8 @@ module GeoMonitor
24
24
  res_code: response.status,
25
25
  submitted_query: response.env[:url].to_s,
26
26
  layer: layer,
27
- res_headers: response.headers
27
+ res_headers: response.headers,
28
+ content_type: response.headers.try(:[], :content_type)
28
29
  )
29
30
  end
30
31
  end
@@ -0,0 +1,5 @@
1
+ class AddContentTypeToStatus < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :geo_monitor_statuses, :content_type, :string
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddMoreLayerFields < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :geo_monitor_layers, :rights, :string
4
+ add_column :geo_monitor_layers, :institution, :string
5
+ end
6
+ end
data/lib/geo_monitor.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require "geo_monitor/engine"
2
2
 
3
3
  module GeoMonitor
4
+ extend ActiveSupport::Autoload
5
+
6
+
4
7
  # A simple structure to conform to Faraday::Response
5
8
  FailedResponse = Struct.new(:env, :status, :headers)
6
9
  end
@@ -38,10 +38,10 @@ module GeoMonitor
38
38
  lng_diff = east - west
39
39
  max_diff = [lat_diff, lng_diff].max
40
40
 
41
- if max_diff < ::GeoMonitor::DEGREES_IN_CIRCLE / 2**20
41
+ if max_diff < ::GeoMonitor::Constants::DEGREES_IN_CIRCLE / 2**20
42
42
  zoom = 21
43
43
  else
44
- zoom = -1 * ((Math.log(max_diff) / Math.log(2)) - (Math.log(::GeoMonitor::DEGREES_IN_CIRCLE) / Math.log(2)))
44
+ zoom = -1 * ((Math.log(max_diff) / Math.log(2)) - (Math.log(::GeoMonitor::Constants::DEGREES_IN_CIRCLE) / Math.log(2)))
45
45
  zoom = 1 if zoom < 1
46
46
  end
47
47
  zoom.ceil
@@ -52,7 +52,7 @@ module GeoMonitor
52
52
  def tile_number
53
53
  lat_rad = south / 180 * Math::PI
54
54
  n = 2.0**zoom_level
55
- x = ((west + 180.0) / ::GeoMonitor::DEGREES_IN_CIRCLE * n).to_i
55
+ x = ((west + 180.0) / ::GeoMonitor::Constants::DEGREES_IN_CIRCLE * n).to_i
56
56
  y = ((1.0 - Math.log(Math.tan(lat_rad) + (1 / Math.cos(lat_rad))) / Math::PI) / 2.0 * n)
57
57
  y = if y.infinite?.nil?
58
58
  y.to_i
@@ -0,0 +1,6 @@
1
+ module GeoMonitor
2
+ module Constants
3
+ R = 6_378_137 # Radius of Earth in meters
4
+ DEGREES_IN_CIRCLE = 360.0
5
+ end
6
+ end
@@ -1,16 +1,15 @@
1
1
  require 'rails/all'
2
2
  require 'faraday'
3
- require 'geo_monitor/bounding_box'
4
- require 'geo_monitor/lat_lng_point'
5
- require 'geo_monitor/requests/wms'
6
3
 
7
4
  module GeoMonitor
8
- R = 6_378_137 # Radius of Earth in meters
9
- DEGREES_IN_CIRCLE = 360.0
10
-
11
5
  ##
12
6
  # Top level Rails Engine class
13
7
  class Engine < ::Rails::Engine
8
+ require 'geo_monitor/constants'
9
+ require 'geo_monitor/bounding_box'
10
+ require 'geo_monitor/lat_lng_point'
11
+ require 'geo_monitor/requests/wms'
12
+
14
13
  isolate_namespace GeoMonitor
15
14
 
16
15
  GeoMonitor::Engine.config.max_status_per_layer = 5
@@ -14,8 +14,8 @@ module GeoMonitor
14
14
  max = 1 - 1E-15
15
15
  sin = [[Math.sin(lng * d), max].min, -max].max
16
16
  self.class.new(
17
- lat: GeoMonitor::R * lat * d,
18
- lng: GeoMonitor::R * Math.log((1 + sin) / (1 - sin)) / 2
17
+ lat: ::GeoMonitor::Constants::R * lat * d,
18
+ lng: ::GeoMonitor::Constants::R * Math.log((1 + sin) / (1 - sin)) / 2
19
19
  )
20
20
  end
21
21
 
@@ -34,7 +34,7 @@ module GeoMonitor
34
34
  # Request the tile.
35
35
  def tile
36
36
  unless url.present?
37
- return GeoMonitor::FailedResponse.new(
37
+ return ::GeoMonitor::FailedResponse.new(
38
38
  { url: url }, 'No URL provided', {}
39
39
  )
40
40
  end
@@ -46,7 +46,7 @@ module GeoMonitor
46
46
  request.options.open_timeout = 10
47
47
  end
48
48
  rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
49
- GeoMonitor::FailedResponse.new(
49
+ ::GeoMonitor::FailedResponse.new(
50
50
  { url: conn.url_prefix.to_s },
51
51
  e.class,
52
52
  nil
@@ -1,3 +1,3 @@
1
1
  module GeoMonitor
2
- VERSION = '0.2.3'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geo_monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Reed
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-11 00:00:00.000000000 Z
11
+ date: 2018-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -119,9 +119,12 @@ files:
119
119
  - config/routes.rb
120
120
  - db/migrate/20171212180244_create_geo_monitor_layers.rb
121
121
  - db/migrate/20171212181423_create_geo_monitor_statuses.rb
122
+ - db/migrate/20180112220603_add_content_type_to_status.rb
123
+ - db/migrate/20180116150504_add_more_layer_fields.rb
122
124
  - lib/generators/geo_monitor/install_generator.rb
123
125
  - lib/geo_monitor.rb
124
126
  - lib/geo_monitor/bounding_box.rb
127
+ - lib/geo_monitor/constants.rb
125
128
  - lib/geo_monitor/engine.rb
126
129
  - lib/geo_monitor/lat_lng_point.rb
127
130
  - lib/geo_monitor/requests/wms.rb