arcrest 0.0.0.pre → 0.0.5

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
- SHA1:
3
- metadata.gz: 4facbf131295458bba59afadece248118b806cf9
4
- data.tar.gz: 4453da319fa914ff6a03e9b42caf6fd2c6720b6f
2
+ SHA256:
3
+ metadata.gz: 948d7b288f2b704e1437945ec175ad399e2d419edce9692c042009f36af2f072
4
+ data.tar.gz: a63cb3c9e7efacff80129324d6a3ad5f947170b6932fef3fa117bed207b0096f
5
5
  SHA512:
6
- metadata.gz: 6f78ad5e3bd3d33f9f75da848670163a8a3b1fd07c541046e8125de5f61b99723005b680dc2eaabd55674fc9b5e4c78c611039e75ee63d9f52fac42f27b2ab9a
7
- data.tar.gz: e08922265ac4e258c8ba4ac1cdd5e45a98092949f88b9398e9614637aebfc2854cd51cde97b2ccffb3100a890fb440e19dc47bcd11553f1251be8849e093c2a6
6
+ metadata.gz: bb831237a571a7928ca0736094545c4bd3ef530faad8c6d9873d7eb6c9a55718d2b5acf006586ae87850aa43f3f00de85d2e14bb197cf8a986d6a1641a6f5645
7
+ data.tar.gz: f53a0d06535c3a932571e369ffa98a429d17db3edb70cf9b7eee6ad0f09ad38c09b0c0baeed8a62bacfb6825ce2ff4c01297136bbdb03e5891160283de4fcf0e
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /bin/guard
11
+ /bin/_guard-core
@@ -0,0 +1,15 @@
1
+ ---
2
+ before_script:
3
+ - apt-get update -qq
4
+ - gem install bundler
5
+ - bundle install --jobs $(nproc) "${FLAGS[@]}"
6
+
7
+ .job_template: &job_definition
8
+ image: ruby:2.7.2
9
+
10
+ test:
11
+ <<: *job_definition
12
+ timeout: 10m
13
+ script:
14
+ - bundle exec rake spec
15
+ - bundle exec rubocop
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --format documentation
2
2
  --color
3
+ --require spec_helper
@@ -0,0 +1,6 @@
1
+ ---
2
+ AllCops:
3
+ NewCops: enable
4
+
5
+ Metrics/BlockLength:
6
+ Enabled: false
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
  gemspec
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ notification :libnotify, transient: true, append: false, urgency: :critical
4
+
5
+ guard :rspec, cmd: 'bundle exec rspec' do
6
+ watch(%r{^lib/(.+).rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
+ watch(%r{^spec/(.+).rb$}) { |m| "spec/#{m[1]}.rb" }
8
+ watch('spec/spec_helper.rb') { 'spec' }
9
+ end
data/README.md CHANGED
@@ -1,19 +1,149 @@
1
- # Arcrest
1
+ # ArcREST
2
2
 
3
- Placeholder for arcrest Ruby Gem
3
+ Ruby Gem wrapper around the [ArcGIS REST API](https://services.arcgisonline.com/arcgis/sdk/rest/)
4
+
5
+ ## Requirements
6
+
7
+ Ruby >= 2.4
8
+
9
+
10
+ ## Current Limitations
11
+
12
+ API FeatureServer query capabilities only at present.
4
13
 
5
14
  ## Installation
6
15
 
16
+ Add this line to your application's Gemfile:
17
+
18
+ $ gem 'arcrest'
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Or install it yourself as:
25
+
7
26
  $ gem install arcrest
8
27
 
28
+
9
29
  ## Usage
10
30
 
11
- TODO: Write usage instructions here
31
+ The API defines a [resource heirarchy](http://services.arcgisonline.com/arcgis/sdk/rest/#/Resource_hierarchy) which includes a Catalog of Services (MapServer or FeatureServer). Services have one or more Layers and Layers have Features, which may be queried in various ways, including by spatial coordinates.
32
+
33
+ ```ruby
34
+ require 'arcrest'
35
+
36
+ catalog = ArcREST::Catalog.new 'https://sampleserver6.arcgisonline.com/arcgis/rest/services'
37
+ puts catalog.services
38
+ #=> {"name"=>"911CallsHotspot", "type"=>"GPServer"}
39
+ #=> {"name"=>"911CallsHotspot", "type"=>"MapServer"}
40
+ #=> {"name"=>"Census", "type"=>"MapServer"}
41
+ ...
42
+
43
+ puts catalog.folders
44
+ #=> AGP
45
+ #=> Elevation
46
+ #=> Energy
47
+ ...
48
+ ```
49
+ It is also possible to pass a Referer (or any other) header which will be added to all HTTP requests:
50
+
51
+ ```ruby
52
+ catalog = ArcREST::Catalog.new('https://gojdippmaps.azurewebsites.net/proxy.ashx?https://maps.gov.je/arcgis/rest/services', headers: {referer: 'https://www.gov.je//citizen/Planning/Pages/HistoricEnvironmentDetail.aspx'})
53
+ ```
54
+
55
+ A Service (FeatureServer) is instantiated like this:
56
+
57
+ ```ruby
58
+ service = ArcREST::Service.new 'https://sampleserver6.arcgisonline.com/arcgis/rest/services/EmergencyFacilities/FeatureServer'
59
+ puts service.layers
60
+ #=> {"id"=>0, "name"=>"Emergency Facilities", "parentLayerId"=>-1, "defaultVisibility"=>true, "subLayerIds"=>nil, "minScale"=>150000, "maxScale"=>0, "type"=>"Feature Layer", "geometryType"=>"esriGeometryPoint"}
61
+
62
+ layer = ArcREST::Layer.new "#{service.url}/0"
63
+ puts layer.name
64
+ #=> Emergency Facilities
65
+
66
+ puts layer.type
67
+ #=> Feature Layer
68
+
69
+ puts layer.max_record_count
70
+ #=> 1000 # maximum number of features that can be queried, see below
71
+
72
+ puts layer.count
73
+ #=> 16 # count of the layer's features
74
+
75
+ puts layer.object_ids.inspect
76
+ #=> [29489, 29503, 29490, 29491, 29492, 29493, 29494, 29495, 29496, 29497, 29498, 29499, 29500, 29501, 29502, 29504]
77
+
78
+ puts layer.fields
79
+ #=> {"name"=>"objectid", "type"=>"esriFieldTypeOID", "alias"=>"OBJECTID", "domain"=>nil, "editable"=>false, "nullable"=>false, "defaultValue"=>nil, "modelName"=>"System-maintained ObjectID"}
80
+ #=> {"name"=>"facilityid", "type"=>"esriFieldTypeString", "alias"=>"Emergency Facility ID", "domain"=>nil, "editable"=>true, "nullable"=>true, "length"=>20, "defaultValue"=>nil, "modelName"=>"FACILITYID"},
81
+ ...
82
+ ```
83
+
84
+ Catalog, Service and Layer have a ```json``` method which returns information from the relevant server as a Hash. In addition to the example methods above this can be parsed in the usual way - e.g:
85
+ ```ruby
86
+ puts layer.json.keys.inspect
87
+ #=> ["currentVersion", "id", "name", "type", "parentLayer", "defaultVisibility", ...
88
+ ```
89
+
90
+ Once you have a Layer object, you can perform queries on it. The [documention](https://services.arcgisonline.com/arcgis/sdk/rest/index.html#/Query_Feature_Service_Layer/02ss0000002r000000/) shows the possibilities. Here is a very simple example:
91
+
92
+ The ```query``` method returns the whole server response as a Hash:
93
+ ```ruby
94
+ puts layer.query(where: '1=0').inspect
95
+ #=> {"objectIdFieldName"=>"objectid", "globalIdFieldName"=>"globalid", "geometryType"=>"esriGeometryPoint", "spatialReference"=>{"wkid"=>4326, "latestWkid"=>4326}, "features"=>[]}
96
+ ```
97
+
98
+ If you just want the features, use the ```features``` method:
99
+ ```ruby
100
+ puts features.count
101
+ #=> 16
102
+
103
+ puts features[1]
104
+ #=> {"attributes"=>{"objectid"=>29503, "facilityid"=>"K2032", "facname"=>"Redlands Mall", "factype"=>3, ...
105
+
106
+ features = layer.features(where: "factype=3", returnGeometry: false)
107
+ puts features.size
108
+ #=> 7
109
+
110
+ puts features.first['attributes']
111
+ #=> {"objectid"=>29503, "facilityid"=>"K2032", "facname"=>"Redlands Mall", "factype"=>3, "organiz"=>"City of Redlands", ...
112
+ ```
113
+
114
+ ```query``` and ```features``` take an options hash of API call params. Invalid key values raise an error. Valid params for the server can be listed like this:
115
+ ```ruby
116
+ puts layer.valid_opts.inspect
117
+ #=> ["dbVersion", "distance", "geometry", "geometryPrecision", ... , "where"]
118
+ ```
119
+ or by consulting the [docs](https://services.arcgisonline.com/arcgis/sdk/rest/index.html#/Query_Feature_Service_Layer/02ss0000002r000000/). One default is set: ```outFields: '*'``` - which requests data for all fields.
120
+
121
+
122
+ The ```:where``` key is used with any valid SQL to query the layer fields. The default is '1=1' which returns all records (up to the ```layer.max_record_count``` value, usually 1,000). An error is raised if the server gives a 400 error of this form:
123
+ ```json
124
+ {
125
+ "error": {
126
+ "code": 400,
127
+ "message": "Unable to complete operation.",
128
+ "details": [
129
+ "Unable to perform query operation.",
130
+ "Invalid query"
131
+ ]
132
+ }
133
+ }
134
+ ```
135
+
136
+
137
+ ## Specification & Tests
138
+
139
+ Full specification documentation is available by running the test suite thus:
140
+
141
+ $ bundle exec rake spec
12
142
 
13
143
 
14
144
  ## Contributing
15
145
 
16
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/arcrest. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
146
+ Bug reports and pull requests are welcome on GitHub at https://gitlab.com/matzfan/arcrest
17
147
 
18
148
 
19
149
  ## License
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,18 +1,20 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'arcrest/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = 'arcrest'
8
9
  spec.version = ArcREST::VERSION
9
- spec.authors = ['Bruce Steedman']
10
- spec.email = ['bruce.steedman@gmail.com']
10
+ spec.authors = ['matzfan']
11
+ spec.email = ['matzfan@yandex.com']
11
12
 
12
13
  spec.summary = 'Wrapper for ArcGIS REST API'
13
14
  spec.description = 'Wrapper for ArcGIS REST API'
14
- spec.homepage = 'https://github.com/MatzFan/arcrest'
15
- spec.license = 'MIT'
15
+ spec.homepage = 'https://gitlab.com/matzfan/arcrest'
16
+ spec.required_ruby_version = '>= 2.4'
17
+ spec.license = 'MIT'
16
18
 
17
19
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
20
  f.match(%r{^(test|spec|features)/})
@@ -21,7 +23,13 @@ Gem::Specification.new do |spec|
21
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
24
  spec.require_paths = ['lib']
23
25
 
24
- spec.add_development_dependency 'bundler', '~> 1.12'
25
- spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'rspec', '~> 3.0'
26
+ spec.add_development_dependency 'bundler', '~> 2.1'
27
+ spec.add_development_dependency 'guard', '~> 2.14'
28
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
29
+ spec.add_development_dependency 'libnotify', '~> 0.9' # guard notifications
30
+ spec.add_development_dependency 'rake', '~> 13.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.10'
32
+ spec.add_development_dependency 'rubocop', '~> 1.3'
33
+
34
+ spec.add_runtime_dependency 'curb', '~> 0.9.11'
27
35
  end
@@ -1,14 +1,9 @@
1
- #!/usr/bin/env ruby
1
+ # frozen_string_literal: true
2
+
3
+ # !/usr/bin/env ruby
2
4
 
3
5
  require 'bundler/setup'
4
6
  require 'arcrest'
5
7
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
8
  require 'irb'
14
9
  IRB.start
data/bin/setup CHANGED
@@ -4,5 +4,3 @@ IFS=$'\n\t'
4
4
  set -vx
5
5
 
6
6
  bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,6 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'arcrest/attributable' # module
1
4
  require 'arcrest/version'
5
+ require 'arcrest/server'
6
+ require 'arcrest/catalog'
7
+ require 'arcrest/service'
8
+ require 'arcrest/layer'
2
9
 
3
10
  # namespace
4
- module ArcREST
5
- # Your code goes here...
6
- end
11
+ module ArcRest; end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # adds ability to dynamically set instance vars & accessors
4
+ module Attributable
5
+ def create_method(name, &block)
6
+ self.class.send(:define_method, name.to_sym, &block)
7
+ end
8
+
9
+ def create_setter(method)
10
+ create_method("#{method}=".to_sym) { |v| instance_variable_set("@#{method}", v) }
11
+ end
12
+
13
+ def create_getter(method)
14
+ create_method(method.to_sym) { instance_variable_get("@#{method}") }
15
+ end
16
+
17
+ def set_attr(method, value)
18
+ create_setter(method)
19
+ send "#{method}=".to_sym, value
20
+ create_getter(method)
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArcREST
4
+ # a catalog of services
5
+ class Catalog < Server
6
+ attr_reader :folders, :services
7
+
8
+ def initialize(url, headers = {})
9
+ super
10
+ @folders = folders_
11
+ @services = services_
12
+ end
13
+
14
+ private
15
+
16
+ def folders_
17
+ @json['folders']
18
+ end
19
+
20
+ def services_
21
+ @json['services']
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'curb'
4
+
5
+ # methods to curl a url
6
+ module Curlable
7
+ RETRIES = 5
8
+
9
+ class BadHttpResponse < StandardError; end
10
+
11
+ def curl_get(url, opts = {})
12
+ c = Curl::Easy.new(url) { |curl| configure(curl, opts[:headers] || {}) }
13
+ try(c, opts[:retries] || RETRIES)
14
+ c.perform
15
+ code = c.response_code
16
+ raise BadHttpResponse, "#{code} at #{url}" unless [2, 3].include? code / 100
17
+
18
+ c.body_str
19
+ end
20
+
21
+ private
22
+
23
+ def try(curl, tries)
24
+ curl.perform
25
+ curl.on_failure { |c, _e| try(c, tries -= 1) if tries > 1 } # recurse
26
+ end
27
+
28
+ def configure(curl, headers)
29
+ curl.follow_location = true
30
+ headers.each { |k, v| curl.headers[k.capitalize] = v }
31
+ end
32
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArcREST
4
+ class InvalidOption < StandardError; end
5
+ class BadQuery < StandardError; end
6
+ # a layer
7
+ class Layer < Server
8
+ include Attributable
9
+
10
+ DATE = 'esriFieldTypeDate'
11
+ ATTRIBUTES = %w[id name type drawing_info fields max_record_count].freeze
12
+ DEFAULT_PARAMS = { where: '1=1', outFields: '*' }.freeze
13
+ PARAMS = %w[distance geometry geometryType inSR objectIds
14
+ outFields outSR relationParam returnDistinceValues
15
+ returnIdsOnly spatialRel time where].freeze
16
+ PARAMS_SP1 = %w[returnCountOnly].freeze
17
+ PARAMS_10_1 = %w[dbVersion geometryPrecision groupByFieldsForStatistics
18
+ maxAllowableOffset multiPatchOption orderByFields
19
+ outStatistics returnGeometry returnM returnZ].freeze
20
+ PARAMS_10_3 = %w[returnExtentOnly resultOffset resultRecordCount].freeze
21
+
22
+ attr_reader :valid_params # other accessors set in constructor
23
+
24
+ def initialize(url, headers = {})
25
+ super
26
+ generate_attributes # dynamically create & assign values to attributes :)
27
+ @fields = fields
28
+ end
29
+
30
+ def count
31
+ @version > 10 ? count_only_true : object_ids.count # v10.1 onwards
32
+ end
33
+
34
+ def object_ids
35
+ query(outFields: nil, returnIdsOnly: true)['objectIds'] # care - must specify outFields to overide default '*'
36
+ end
37
+
38
+ def query(options = {})
39
+ validate(options.keys.map(&:to_s).sort)
40
+ valid_resp(DEFAULT_PARAMS.merge(options))
41
+ end
42
+
43
+ def features(options = {})
44
+ query(options)['features']
45
+ end
46
+
47
+ def valid_opts
48
+ return PARAMS if @version < 10 || @version.to_s == '10.0'
49
+ return (PARAMS + PARAMS_SP1).sort if @version < 10.1
50
+ return (PARAMS + PARAMS_SP1 + PARAMS_10_1).sort if @version < 10.2
51
+
52
+ (PARAMS + PARAMS_SP1 + PARAMS_10_1 + PARAMS_10_3).sort
53
+ end
54
+
55
+ private
56
+
57
+ def generate_attributes
58
+ ATTRIBUTES.each { |name| set_attr(name, json_value(name)) }
59
+ end
60
+
61
+ def json_value(name)
62
+ @json[camelify(name)]
63
+ end
64
+
65
+ def camelify(name)
66
+ words = name.split('_')
67
+ words[1..-1].map(&:capitalize).unshift(words.first).join
68
+ end
69
+
70
+ def valid_resp(opts)
71
+ raise BadQuery, m(opts) if (resp = parse_json(query_url, opts)).keys.include? 'error'
72
+
73
+ resp
74
+ end
75
+
76
+ def m(options)
77
+ "The following query parameters resulted in a 400 response:\n#{options}"
78
+ end
79
+
80
+ def validate(keys)
81
+ keys.all? { |k| raise InvalidOption, msg(k) unless valid_opts.include? k }
82
+ end
83
+
84
+ def msg(key)
85
+ "'#{key}' is an invalid option, valid query options are:\n#{PARAMS}"
86
+ end
87
+
88
+ def count_only_true
89
+ query(returnCountOnly: true)['count']
90
+ end
91
+
92
+ def query_url
93
+ "#{@server_url}/query"
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+ require 'open-uri'
5
+ require 'json'
6
+
7
+ require_relative 'curlable'
8
+
9
+ module ArcREST
10
+ # superclass
11
+ class Server
12
+ include Curlable # for #curl_get
13
+
14
+ ENDPOINT_REGEX = %r{/arcgis/rest/services/?}i.freeze
15
+ BAD_ENDPOINT = 'Invalid ArcGIS endpoint'
16
+
17
+ attr_reader :url, :json, :version
18
+
19
+ def initialize(url, headers = {})
20
+ @url = url
21
+ @headers = headers
22
+ validate_endpoint_url
23
+ @server_url = server_url
24
+ @json = json_
25
+ @version = version_
26
+ end
27
+
28
+ protected
29
+
30
+ def server_url
31
+ @url[-1] == '/' ? @url[0..-2] : @url
32
+ end
33
+
34
+ def json_
35
+ parse_json
36
+ end
37
+
38
+ def version_
39
+ parse_json['currentVersion'] # subclasses use server uri
40
+ end
41
+
42
+ def parse_json(url = @server_url, options = {})
43
+ JSON.parse get(url, options)
44
+ end
45
+
46
+ def validate_endpoint_url
47
+ raise ArgumentError, BAD_ENDPOINT unless @url =~ ENDPOINT_REGEX
48
+ end
49
+
50
+ def add_json_param_to(hash)
51
+ { f: 'json' }.merge(hash)
52
+ end
53
+
54
+ def get(url, options = {})
55
+ curl_get(query_string(url, options), @headers)
56
+ end
57
+
58
+ def query_string(url, options)
59
+ "#{url}?#{URI.encode_www_form(add_json_param_to(options))}"
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArcREST
4
+ # a FeatureService or a MapService
5
+ class Service < Server
6
+ attr_reader :max_record_count, :capabilities, :layers
7
+
8
+ def initialize(url, headers = {})
9
+ super
10
+ @max_record_count = max_record_count_
11
+ @capabilities = capabilities_
12
+ @layers = layers_
13
+ end
14
+
15
+ private
16
+
17
+ def max_record_count_
18
+ @json['maxRecordCount']
19
+ end
20
+
21
+ def capabilities_
22
+ @json['capabilities'] ? @json['capabilities'].split(',') : nil
23
+ end
24
+
25
+ def layers_
26
+ @json['layers']
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ArcREST
2
- VERSION = '0.0.0.pre'.freeze
4
+ VERSION = '0.0.5'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arcrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.pre
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
- - Bruce Steedman
7
+ - matzfan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-27 00:00:00.000000000 Z
11
+ date: 2020-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,53 +16,125 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.12'
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: guard
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.14'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.14'
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard-rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '4.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '4.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: libnotify
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: rake
29
71
  requirement: !ruby/object:Gem::Requirement
30
72
  requirements:
31
73
  - - "~>"
32
74
  - !ruby/object:Gem::Version
33
- version: '10.0'
75
+ version: '13.0'
34
76
  type: :development
35
77
  prerelease: false
36
78
  version_requirements: !ruby/object:Gem::Requirement
37
79
  requirements:
38
80
  - - "~>"
39
81
  - !ruby/object:Gem::Version
40
- version: '10.0'
82
+ version: '13.0'
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: rspec
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
87
  - - "~>"
46
88
  - !ruby/object:Gem::Version
47
- version: '3.0'
89
+ version: '3.10'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.10'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.3'
48
104
  type: :development
49
105
  prerelease: false
50
106
  version_requirements: !ruby/object:Gem::Requirement
51
107
  requirements:
52
108
  - - "~>"
53
109
  - !ruby/object:Gem::Version
54
- version: '3.0'
110
+ version: '1.3'
111
+ - !ruby/object:Gem::Dependency
112
+ name: curb
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.11
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.11
55
125
  description: Wrapper for ArcGIS REST API
56
126
  email:
57
- - bruce.steedman@gmail.com
127
+ - matzfan@yandex.com
58
128
  executables: []
59
129
  extensions: []
60
130
  extra_rdoc_files: []
61
131
  files:
62
132
  - ".gitignore"
133
+ - ".gitlab-ci.yml"
63
134
  - ".rspec"
64
- - ".travis.yml"
135
+ - ".rubocop.yml"
65
136
  - Gemfile
137
+ - Guardfile
66
138
  - LICENSE.txt
67
139
  - README.md
68
140
  - Rakefile
@@ -70,8 +142,14 @@ files:
70
142
  - bin/console
71
143
  - bin/setup
72
144
  - lib/arcrest.rb
145
+ - lib/arcrest/attributable.rb
146
+ - lib/arcrest/catalog.rb
147
+ - lib/arcrest/curlable.rb
148
+ - lib/arcrest/layer.rb
149
+ - lib/arcrest/server.rb
150
+ - lib/arcrest/service.rb
73
151
  - lib/arcrest/version.rb
74
- homepage: https://github.com/MatzFan/arcrest
152
+ homepage: https://gitlab.com/matzfan/arcrest
75
153
  licenses:
76
154
  - MIT
77
155
  metadata: {}
@@ -83,15 +161,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
161
  requirements:
84
162
  - - ">="
85
163
  - !ruby/object:Gem::Version
86
- version: '0'
164
+ version: '2.4'
87
165
  required_rubygems_version: !ruby/object:Gem::Requirement
88
166
  requirements:
89
- - - ">"
167
+ - - ">="
90
168
  - !ruby/object:Gem::Version
91
- version: 1.3.1
169
+ version: '0'
92
170
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.6.2
171
+ rubygems_version: 3.1.4
95
172
  signing_key:
96
173
  specification_version: 4
97
174
  summary: Wrapper for ArcGIS REST API
@@ -1,11 +0,0 @@
1
- sudo: false
2
- language: ruby
3
-
4
- rvm:
5
- - 2.3.0
6
- - 2.2.0
7
- - 2.1
8
-
9
- before_install: gem install bundler -v 1.12.5
10
-
11
- script: bundle exec rspec spec