festivals_lab 0.0.3 → 0.0.4
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 +7 -0
- data/.rubocop.yml +49 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +22 -18
- data/Rakefile +3 -3
- data/festivals_lab.gemspec +9 -8
- data/lib/festivals_lab.rb +24 -25
- data/lib/festivals_lab/version.rb +1 -1
- data/test/lib/test_festivals_lab.rb +41 -45
- data/test/test_helper.rb +2 -2
- metadata +16 -29
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 67ea9c76f6dc42686fa5a358c73c565139b8408a
|
4
|
+
data.tar.gz: 79bcb08ca6fbcc5c3573a492e87ffb796091d039
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 11f091bde049e598408cd1abaa5be80e48c8cba1547e0fbbd60330f5d56f87e2fa3952cafb42e95b63dae4b2733b447b1b6fff319ceaed18e0b36e38b92d73d9
|
7
|
+
data.tar.gz: 6b1154567e1ca0707ebf74cb6657c50ec24857b85e058ceefb659567c0fa7748b4f60fdab693889bea108bfa61dff80cb0267d282a16858340b4da269f377dd9
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
AllCops:
|
2
|
+
DisplayCopNames: true
|
3
|
+
DisplayStyleGuide: true
|
4
|
+
|
5
|
+
# Relates to the indentation of if/when/(etc.) blocks when the initial keyword
|
6
|
+
# is indented as part of a variable assignment.
|
7
|
+
#
|
8
|
+
# Our preference is that the rubocop default conflicts with our 80-character
|
9
|
+
# line restriction, leaving less space for code inside nested blocks. We make
|
10
|
+
# this change at the cost of a little bit of readability.
|
11
|
+
#
|
12
|
+
# # bad (although the Rubocop default):
|
13
|
+
# thing = if x > 42
|
14
|
+
# thing!
|
15
|
+
# else
|
16
|
+
# other_thing!
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # good (preferred):
|
20
|
+
# thing = if x > 42
|
21
|
+
# thing!
|
22
|
+
# else
|
23
|
+
# other_thing!
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# # also acceptable
|
27
|
+
# thing =
|
28
|
+
# if x > 42
|
29
|
+
# thing!
|
30
|
+
# else
|
31
|
+
# other_thing!
|
32
|
+
# end
|
33
|
+
Lint/EndAlignment:
|
34
|
+
EnforcedStyleAlignWith: variable
|
35
|
+
|
36
|
+
# Passing multiple hashes to a function is messy, and clarity is good
|
37
|
+
# This is an extension of https://github.com/bbatsov/ruby-style-guide#no-braces-opts-hash
|
38
|
+
Style/BracesAroundHashParameters:
|
39
|
+
EnforcedStyle: context_dependent
|
40
|
+
StyleGuide: https://github.com/bbatsov/rubocop/issues/801
|
41
|
+
|
42
|
+
# This is one part of the style guide that doesn't express a preference, it just
|
43
|
+
# suggests you make a choice
|
44
|
+
Style/DotPosition:
|
45
|
+
EnforcedStyle: trailing
|
46
|
+
|
47
|
+
Style/StringLiterals:
|
48
|
+
EnforcedStyle: double_quotes
|
49
|
+
StyleGuide: https://www.viget.com/articles/just-use-double-quoted-ruby-strings
|
data/Gemfile
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
source
|
1
|
+
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gemspec
|
3
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,31 +1,32 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
festivals_lab (0.0.
|
4
|
+
festivals_lab (0.0.4)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
-
addressable (2.
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
minitest
|
9
|
+
addressable (2.5.1)
|
10
|
+
public_suffix (~> 2.0, >= 2.0.2)
|
11
|
+
ansi (1.5.0)
|
12
|
+
builder (3.2.3)
|
13
|
+
crack (0.4.3)
|
14
|
+
safe_yaml (~> 1.0.0)
|
15
|
+
hashdiff (0.3.2)
|
16
|
+
minitest (5.10.1)
|
17
|
+
minitest-reporters (1.1.14)
|
17
18
|
ansi
|
18
19
|
builder
|
19
|
-
minitest (>=
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
addressable (>= 2.2.7)
|
20
|
+
minitest (>= 5.0)
|
21
|
+
ruby-progressbar
|
22
|
+
public_suffix (2.0.5)
|
23
|
+
rake (12.0.0)
|
24
|
+
ruby-progressbar (1.8.1)
|
25
|
+
safe_yaml (1.0.4)
|
26
|
+
webmock (3.0.1)
|
27
|
+
addressable (>= 2.3.6)
|
28
28
|
crack (>= 0.3.2)
|
29
|
+
hashdiff
|
29
30
|
|
30
31
|
PLATFORMS
|
31
32
|
ruby
|
@@ -35,3 +36,6 @@ DEPENDENCIES
|
|
35
36
|
minitest-reporters
|
36
37
|
rake
|
37
38
|
webmock
|
39
|
+
|
40
|
+
BUNDLED WITH
|
41
|
+
1.14.6
|
data/Rakefile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require "rake/testtask"
|
2
2
|
|
3
3
|
Bundler::GemHelper.install_tasks
|
4
4
|
|
5
5
|
Rake::TestTask.new do |t|
|
6
6
|
t.libs << "test"
|
7
|
-
t.test_files = FileList[
|
7
|
+
t.test_files = FileList["test/**/test*.rb"]
|
8
8
|
t.verbose = true
|
9
9
|
end
|
10
10
|
|
11
|
-
task :
|
11
|
+
task default: [:test]
|
data/festivals_lab.gemspec
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
|
3
|
+
require File.expand_path("../lib/festivals_lab/version", __FILE__)
|
3
4
|
|
4
5
|
Gem::Specification.new do |gem|
|
5
6
|
gem.authors = ["Gareth Adams"]
|
6
7
|
gem.email = ["g@rethada.ms"]
|
7
|
-
gem.description =
|
8
|
-
gem.summary =
|
8
|
+
gem.description = "Accesses festival data from the Edinburgh Festivals Innovation Lab API"
|
9
|
+
gem.summary = "The Edinburgh Festivals API is an ambitious project which aims to create open access to the event listings data of Edinburgh’s 12 major Festivals"
|
9
10
|
gem.homepage = "https://github.com/gareth/festivals_lab"
|
10
11
|
|
11
|
-
gem.files = `git ls-files`.split(
|
12
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
13
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
13
14
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
15
|
gem.name = "festivals_lab"
|
15
16
|
gem.require_paths = ["lib"]
|
16
17
|
gem.version = FestivalsLab::VERSION
|
17
18
|
|
18
|
-
gem.add_development_dependency
|
19
|
-
gem.add_development_dependency
|
20
|
-
gem.add_development_dependency
|
19
|
+
gem.add_development_dependency "rake"
|
20
|
+
gem.add_development_dependency "webmock"
|
21
|
+
gem.add_development_dependency "minitest-reporters"
|
21
22
|
end
|
data/lib/festivals_lab.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "json"
|
2
|
+
require "net/http"
|
3
|
+
require "openssl" # Provides HMAC-SHA1
|
4
4
|
|
5
5
|
class FestivalsLab
|
6
|
-
|
7
6
|
attr_accessor :access_key, :secret_token
|
8
7
|
|
9
|
-
SCHEME = "http"
|
10
|
-
HOST = "api.
|
8
|
+
SCHEME = "http".freeze
|
9
|
+
HOST = "api.edinburghfestivalcity.com".freeze
|
11
10
|
|
12
|
-
def initialize
|
11
|
+
def initialize(access_key, secret_token)
|
13
12
|
@access_key = access_key
|
14
13
|
@secret_token = secret_token
|
15
14
|
end
|
@@ -19,36 +18,36 @@ class FestivalsLab
|
|
19
18
|
# See the API documentation at
|
20
19
|
# http://api.festivalslab.com/documentation#Querying%20the%20API for valid
|
21
20
|
# parameters
|
22
|
-
def events
|
21
|
+
def events(params = {})
|
23
22
|
params = params.dup
|
24
23
|
|
25
24
|
# Exact field options
|
26
|
-
valid_options = [
|
25
|
+
valid_options = %i[festival genre country code year]
|
27
26
|
# Fulltext search options
|
28
|
-
valid_options += [
|
27
|
+
valid_options += %i[title description artist]
|
29
28
|
# Event date options
|
30
|
-
valid_options += [
|
29
|
+
valid_options += %i[date_from date_to]
|
31
30
|
# Venue options
|
32
|
-
valid_options += [
|
31
|
+
valid_options += %i[venue_name venue_code post_code distance lat lng]
|
33
32
|
# Price options
|
34
|
-
valid_options += [
|
33
|
+
valid_options += %i[price_from price_to]
|
35
34
|
# Update options
|
36
35
|
valid_options += [:modified_from]
|
37
36
|
# Pagination options
|
38
|
-
valid_options += [
|
37
|
+
valid_options += %i[size from]
|
39
38
|
|
40
|
-
invalid_keys = params.reject { |k,
|
39
|
+
invalid_keys = params.reject { |k, _v| valid_options.include? k }.keys
|
41
40
|
|
42
|
-
raise ArgumentError, "Unexpected events parameter: #{invalid_keys.join
|
41
|
+
raise ArgumentError, "Unexpected events parameter: #{invalid_keys.join ', '}" if invalid_keys.any?
|
43
42
|
|
44
|
-
FestivalsLab.request access_key, secret_token,
|
43
|
+
FestivalsLab.request access_key, secret_token, "/events", params
|
45
44
|
end
|
46
45
|
|
47
46
|
# Returns the known data for an event based on the event's UUID
|
48
47
|
#
|
49
48
|
# The only way to obtain the UUID for an event is to extract it from the
|
50
49
|
# `url` property returned by the `events` endpoint
|
51
|
-
def event
|
50
|
+
def event(uuid)
|
52
51
|
FestivalsLab.request access_key, secret_token, "/event/#{uuid}"
|
53
52
|
end
|
54
53
|
|
@@ -56,23 +55,23 @@ class FestivalsLab
|
|
56
55
|
# Makes a signed API request to the given endpoint
|
57
56
|
#
|
58
57
|
# Requests the data in JSON format and parses the response as JSON
|
59
|
-
def request
|
58
|
+
def request(access_key, secret_token, endpoint, params = {})
|
60
59
|
uri = FestivalsLab.signed_uri access_key, secret_token, endpoint, params
|
61
60
|
Net::HTTP.start(uri.host, uri.port) do |http|
|
62
61
|
request = Net::HTTP::Get.new uri.request_uri
|
63
|
-
request[
|
62
|
+
request["Accept"] = "application/json"
|
64
63
|
response = http.request request
|
65
64
|
if Net::HTTPSuccess === response
|
66
65
|
JSON.parse(response.body)
|
67
66
|
else
|
68
|
-
raise ApiError
|
67
|
+
raise ApiError, response
|
69
68
|
end
|
70
69
|
end
|
71
70
|
end
|
72
71
|
|
73
72
|
# Returns a URI containing the correct signature for the given endpoint and
|
74
73
|
# query string parameters
|
75
|
-
def signed_uri
|
74
|
+
def signed_uri(access_key, secret_token, endpoint, params = {})
|
76
75
|
params = params.dup
|
77
76
|
raise Error, "Missing API access key" unless access_key
|
78
77
|
raise Error, "Missing API secret token" unless secret_token
|
@@ -93,8 +92,8 @@ class FestivalsLab
|
|
93
92
|
end
|
94
93
|
|
95
94
|
# Returns the correct API signature for the given URL and secret token
|
96
|
-
def signature
|
97
|
-
OpenSSL::HMAC.hexdigest
|
95
|
+
def signature(secret_token, url)
|
96
|
+
OpenSSL::HMAC.hexdigest "sha1", secret_token, url
|
98
97
|
end
|
99
98
|
end
|
100
99
|
|
@@ -103,7 +102,7 @@ class FestivalsLab
|
|
103
102
|
ApiError = Class.new(StandardError) do
|
104
103
|
attr_reader :response
|
105
104
|
|
106
|
-
def initialize
|
105
|
+
def initialize(response)
|
107
106
|
@response = response
|
108
107
|
end
|
109
108
|
end
|
@@ -1,16 +1,15 @@
|
|
1
|
-
require
|
1
|
+
require "test_helper"
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "minitest/spec"
|
4
|
+
require "webmock/minitest"
|
5
5
|
|
6
|
-
require
|
6
|
+
require "festivals_lab"
|
7
7
|
|
8
8
|
describe FestivalsLab do
|
9
|
-
|
10
9
|
before do
|
11
|
-
@api = FestivalsLab.new
|
12
|
-
@successful_response = { status: 200, body: "[{}]", headers: {
|
13
|
-
@failed_response = { status: 403, body: "", headers: {
|
10
|
+
@api = FestivalsLab.new "123", "456"
|
11
|
+
@successful_response = { status: 200, body: "[{}]", headers: { "Content-Type" => "application/json" } }
|
12
|
+
@failed_response = { status: 403, body: "", headers: { "Content-Type" => "application/json" } }
|
14
13
|
end
|
15
14
|
|
16
15
|
it "has a VERSION" do
|
@@ -32,23 +31,23 @@ describe FestivalsLab do
|
|
32
31
|
end
|
33
32
|
|
34
33
|
describe "#events" do
|
35
|
-
[
|
34
|
+
%i[festival genre country code year title description artist venue_name post_code distance].each do |param|
|
36
35
|
it "allows a string '#{param}' parameter" do
|
37
|
-
stub = stub_http_request(:get, %r{//api\.
|
38
|
-
|
39
|
-
|
36
|
+
stub = stub_http_request(:get, %r{//api\.edinburghfestivalcity\.com/events}).
|
37
|
+
with(query: hash_including(param => "value")).
|
38
|
+
to_return(@successful_response)
|
40
39
|
|
41
|
-
@api.events param =>
|
40
|
+
@api.events param => "value"
|
42
41
|
|
43
42
|
assert_requested(stub)
|
44
43
|
end
|
45
44
|
end
|
46
45
|
|
47
|
-
[
|
46
|
+
%i[venue_code price_from price_to size from lat lng].each do |param|
|
48
47
|
it "allows a numeric '#{param}' parameter" do
|
49
|
-
stub = stub_http_request(:get, %r{//api\.
|
50
|
-
|
51
|
-
|
48
|
+
stub = stub_http_request(:get, %r{//api\.edinburghfestivalcity\.com/events}).
|
49
|
+
with(query: hash_including(param => "42")).
|
50
|
+
to_return(@successful_response)
|
52
51
|
|
53
52
|
@api.events param => 42
|
54
53
|
|
@@ -56,11 +55,11 @@ describe FestivalsLab do
|
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
59
|
-
[
|
58
|
+
%i[date_from date_to modified_from].each do |param|
|
60
59
|
it "allows a date '#{param}' parameter" do
|
61
|
-
stub = stub_http_request(:get, %r{//api\.
|
62
|
-
|
63
|
-
|
60
|
+
stub = stub_http_request(:get, %r{//api\.edinburghfestivalcity\.com/events}).
|
61
|
+
with(query: hash_including(param => "1970-01-01 01:00:00")).
|
62
|
+
to_return(@successful_response)
|
64
63
|
|
65
64
|
@api.events param => Time.at(0).strftime("%F %T")
|
66
65
|
|
@@ -69,8 +68,8 @@ describe FestivalsLab do
|
|
69
68
|
end
|
70
69
|
|
71
70
|
it "returns parsed events" do
|
72
|
-
|
73
|
-
|
71
|
+
stub_http_request(:get, %r{//api\.edinburghfestivalcity\.com/events}).
|
72
|
+
to_return(@successful_response)
|
74
73
|
|
75
74
|
response = @api.events
|
76
75
|
|
@@ -86,19 +85,19 @@ describe FestivalsLab do
|
|
86
85
|
|
87
86
|
describe "#event" do
|
88
87
|
it "requests the event from the API" do
|
89
|
-
stub = stub_http_request(:get, %r{//api\.
|
90
|
-
|
88
|
+
stub = stub_http_request(:get, %r{//api\.edinburghfestivalcity\.com/event/00000000000000000000000000000000deadbeef}).
|
89
|
+
to_return(@successful_response)
|
91
90
|
|
92
|
-
|
91
|
+
@api.event "00000000000000000000000000000000deadbeef"
|
93
92
|
|
94
93
|
assert_requested(stub)
|
95
94
|
end
|
96
95
|
|
97
96
|
it "returns the parsed event" do
|
98
|
-
|
99
|
-
|
97
|
+
stub_http_request(:get, %r{//api\.edinburghfestivalcity\.com/event/00000000000000000000000000000000deadbeef}).
|
98
|
+
to_return(@successful_response)
|
100
99
|
|
101
|
-
response = @api.event
|
100
|
+
response = @api.event "00000000000000000000000000000000deadbeef"
|
102
101
|
|
103
102
|
assert_equal [{}], response
|
104
103
|
end
|
@@ -106,59 +105,56 @@ describe FestivalsLab do
|
|
106
105
|
|
107
106
|
describe "request" do
|
108
107
|
before do
|
109
|
-
@uri = "http://api.
|
108
|
+
@uri = "http://api.edinburghfestivalcity.com/events?key=123&signature=742969faae86a4ba4223c7d93d05ead4b1397c23"
|
110
109
|
end
|
111
110
|
|
112
111
|
it "makes a request to the signed endpoint URI" do
|
113
112
|
stub_request(:get, @uri).to_return(@successful_response)
|
114
113
|
|
115
|
-
FestivalsLab.request @api.access_key, @api.secret_token,
|
114
|
+
FestivalsLab.request @api.access_key, @api.secret_token, "/events"
|
116
115
|
|
117
116
|
assert_requested(:get, @uri)
|
118
117
|
end
|
119
118
|
|
120
119
|
it "parses the response as JSON" do
|
121
|
-
|
122
|
-
|
120
|
+
stub_http_request(:get, @uri).
|
121
|
+
to_return(@successful_response)
|
123
122
|
|
124
|
-
response = FestivalsLab.request @api.access_key, @api.secret_token,
|
123
|
+
response = FestivalsLab.request @api.access_key, @api.secret_token, "/events"
|
125
124
|
|
126
125
|
assert_equal [{}], response
|
127
126
|
end
|
128
127
|
|
129
128
|
it "raises FestivalsLab::ApiError on unsuccessful HTTP request" do
|
130
|
-
|
131
|
-
|
129
|
+
stub_http_request(:get, @uri).
|
130
|
+
to_return(@failed_response)
|
132
131
|
|
133
|
-
|
132
|
+
-> { FestivalsLab.request @api.access_key, @api.secret_token, "/events" }.must_raise(FestivalsLab::ApiError)
|
134
133
|
end
|
135
134
|
end
|
136
135
|
|
137
136
|
describe "signed_uri" do
|
138
137
|
it "requires an access key to be set" do
|
139
138
|
@api.secret_token = nil
|
140
|
-
|
139
|
+
-> { FestivalsLab.signed_uri(@api.access_key, @api.secret_token, "/events") }.must_raise(FestivalsLab::Error, "Missing API access key")
|
141
140
|
end
|
142
141
|
|
143
142
|
it "requires an access token to be set" do
|
144
143
|
@api.access_key = nil
|
145
|
-
|
144
|
+
-> { FestivalsLab.signed_uri(@api.access_key, @api.secret_token, "/events") }.must_raise(FestivalsLab::Error, "Missing API access token")
|
146
145
|
end
|
147
146
|
|
148
147
|
it "appends the correct signature to the request URI" do
|
149
|
-
uri = FestivalsLab.signed_uri(@api.access_key, @api.secret_token,
|
148
|
+
uri = FestivalsLab.signed_uri(@api.access_key, @api.secret_token, "/events", key: 123)
|
150
149
|
uri.must_be_kind_of(URI)
|
151
|
-
uri.to_s.must_equal
|
150
|
+
uri.to_s.must_equal "http://api.edinburghfestivalcity.com/events?key=123&signature=742969faae86a4ba4223c7d93d05ead4b1397c23"
|
152
151
|
end
|
153
152
|
end
|
154
153
|
|
155
154
|
describe "signature" do
|
156
155
|
it "calculates the HMAC-SHA1 signature based on the access key" do
|
157
156
|
## Because `OpenSSL#HMAC.hexdigest('sha1', '456', '/events?key=123')` # => '742969faae86a4ba4223c7d93d05ead4b1397c23'
|
158
|
-
FestivalsLab.signature(@api.secret_token,
|
157
|
+
FestivalsLab.signature(@api.secret_token, "/events?key=123").must_equal "742969faae86a4ba4223c7d93d05ead4b1397c23"
|
159
158
|
end
|
160
159
|
end
|
161
|
-
|
162
160
|
end
|
163
|
-
|
164
|
-
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,62 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: festivals_lab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Gareth Adams
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2017-04-17 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: webmock
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: minitest-reporters
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
description: Accesses festival data from the Edinburgh Festivals Innovation Lab API
|
@@ -66,8 +59,9 @@ executables: []
|
|
66
59
|
extensions: []
|
67
60
|
extra_rdoc_files: []
|
68
61
|
files:
|
69
|
-
- .gitignore
|
70
|
-
- .
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rubocop.yml"
|
64
|
+
- ".rvmrc"
|
71
65
|
- CONTRIBUTING.md
|
72
66
|
- Gemfile
|
73
67
|
- Gemfile.lock
|
@@ -81,33 +75,26 @@ files:
|
|
81
75
|
- test/test_helper.rb
|
82
76
|
homepage: https://github.com/gareth/festivals_lab
|
83
77
|
licenses: []
|
78
|
+
metadata: {}
|
84
79
|
post_install_message:
|
85
80
|
rdoc_options: []
|
86
81
|
require_paths:
|
87
82
|
- lib
|
88
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
84
|
requirements:
|
91
|
-
- -
|
85
|
+
- - ">="
|
92
86
|
- !ruby/object:Gem::Version
|
93
87
|
version: '0'
|
94
|
-
segments:
|
95
|
-
- 0
|
96
|
-
hash: -3698572132411797010
|
97
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
89
|
requirements:
|
100
|
-
- -
|
90
|
+
- - ">="
|
101
91
|
- !ruby/object:Gem::Version
|
102
92
|
version: '0'
|
103
|
-
segments:
|
104
|
-
- 0
|
105
|
-
hash: -3698572132411797010
|
106
93
|
requirements: []
|
107
94
|
rubyforge_project:
|
108
|
-
rubygems_version:
|
95
|
+
rubygems_version: 2.5.2
|
109
96
|
signing_key:
|
110
|
-
specification_version:
|
97
|
+
specification_version: 4
|
111
98
|
summary: The Edinburgh Festivals API is an ambitious project which aims to create
|
112
99
|
open access to the event listings data of Edinburgh’s 12 major Festivals
|
113
100
|
test_files:
|