swapir 1.0.2
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/Gemfile +12 -0
- data/lib/swapir/resource_api.rb +27 -0
- data/lib/swapir/resource_list_api.rb +21 -0
- data/lib/swapir/resource_search_api.rb +21 -0
- data/lib/swapir/swapi_resources.rb +1 -0
- data/lib/swapir.rb +49 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 18c95e1ca571300b653917f602650125b7e54a6b
|
4
|
+
data.tar.gz: e4881bda1b9697b3e0d95633c6469d462e5d2655
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c84db503a2f972d766193f9e73551a1e3c6752be15d86ce2a9610465d0f1a560e7a310589af52b6b90d96bf7ab80b91f577607723d177ee3c046cd2b66ea44df
|
7
|
+
data.tar.gz: 6a9e30478c1d333338191636b170ee3117153b164aaf4357bb672bd1149eb634e78304d81a9eced7866a5a054ff8fdb25f72a2040b1b7db01ae7e9f1431bbd38
|
data/Gemfile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
## Query the Star Wars Api for the details of a specific resource
|
2
|
+
#
|
3
|
+
require "swapir/swapi_resources"
|
4
|
+
|
5
|
+
module ResourceApi
|
6
|
+
def self.included(klass)
|
7
|
+
# 'included' callback adds the ClassMethods module methods
|
8
|
+
# as class methods to the calling class
|
9
|
+
klass.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
STAR_WARS_API_RESOURCES.each do |resource|
|
14
|
+
resource_name = case resource
|
15
|
+
when "people" then "person"
|
16
|
+
when "species" then resource
|
17
|
+
else resource.slice(0...-1)
|
18
|
+
end
|
19
|
+
|
20
|
+
# define_method creates a closure which can hold references
|
21
|
+
# to large objects that will never be garbage collected
|
22
|
+
define_method("find_#{resource_name}") do |id|
|
23
|
+
decode(request("#{resource}/#{id}/"))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
## Retrieve a collection of resources from the Star Wars Api
|
2
|
+
#
|
3
|
+
require "swapir/swapi_resources"
|
4
|
+
|
5
|
+
module ResourceListApi
|
6
|
+
def self.included(klass)
|
7
|
+
# 'included' callback adds the ClassMethods module methods
|
8
|
+
# as class methods to the calling class
|
9
|
+
klass.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
STAR_WARS_API_RESOURCES.each do |resource|
|
14
|
+
# define_method creates a closure which can hold references
|
15
|
+
# to large objects that will never be garbage collected
|
16
|
+
define_method("get_all_#{resource}") do
|
17
|
+
decode_results(request(resource))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
## Search the Star Wars Api for a resource
|
2
|
+
#
|
3
|
+
require "swapir/swapi_resources"
|
4
|
+
|
5
|
+
module ResourceSearchApi
|
6
|
+
def self.included(klass)
|
7
|
+
# 'included' callback adds the ClassMethods module methods
|
8
|
+
# as class methods to the calling class
|
9
|
+
klass.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
STAR_WARS_API_RESOURCES.each do |resource|
|
14
|
+
# define_method creates a closure which can hold references
|
15
|
+
# to large objects that will never be garbage collected
|
16
|
+
define_method("search_#{resource}") do |query|
|
17
|
+
decode_results(request("#{resource}/?search=#{query}"))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
STAR_WARS_API_RESOURCES = %w(films people planets species starships vehicles)
|
data/lib/swapir.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
## Star Wars API Request Service
|
2
|
+
# resources: people, planets, species, starships, and vehicles
|
3
|
+
# actions: list, find by id, and search by resource
|
4
|
+
#
|
5
|
+
|
6
|
+
# external gem dependencies
|
7
|
+
require "rest-client"
|
8
|
+
require "json"
|
9
|
+
require "byebug"
|
10
|
+
|
11
|
+
# internal dependencies
|
12
|
+
require "swapir/resource_api"
|
13
|
+
require "swapir/resource_list_api"
|
14
|
+
require "swapir/resource_search_api"
|
15
|
+
|
16
|
+
class Swapir
|
17
|
+
include ResourceListApi
|
18
|
+
include ResourceApi
|
19
|
+
include ResourceSearchApi
|
20
|
+
|
21
|
+
def self.api_base_url
|
22
|
+
# base Star Wars public api url
|
23
|
+
"http://swapi.co/api/"
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.api_available?
|
27
|
+
# allow an exception to be raised if the request fails
|
28
|
+
# handle the raised exception
|
29
|
+
RestClient.get(api_base_url).code == 200
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.request(resource)
|
33
|
+
# call the Star Wars Api endpoint
|
34
|
+
# returns the api response
|
35
|
+
RestClient.get(api_base_url + resource)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.decode(response)
|
39
|
+
# convert the Star Wars Api response body
|
40
|
+
# return the data in a Ruby Hash
|
41
|
+
JSON.parse(response.body)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.decode_results(response)
|
45
|
+
# convert the Star Wars Api response body collection
|
46
|
+
# return the data collection in a Ruby Hash
|
47
|
+
JSON.parse(response.body)["results"]
|
48
|
+
end
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: swapir
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Riana Ferreira
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-06-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: byebug
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '9.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '9.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
55
|
+
description: A wrapper gem that handles interactions with the Star Wars Api
|
56
|
+
email:
|
57
|
+
- rianaferreira@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- Gemfile
|
63
|
+
- lib/swapir.rb
|
64
|
+
- lib/swapir/resource_api.rb
|
65
|
+
- lib/swapir/resource_list_api.rb
|
66
|
+
- lib/swapir/resource_search_api.rb
|
67
|
+
- lib/swapir/swapi_resources.rb
|
68
|
+
homepage: https://github.com/RianaFerreira/swapir
|
69
|
+
licenses:
|
70
|
+
- MIT
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.6.11
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Star Wars Api wrapper
|
92
|
+
test_files: []
|