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 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,12 @@
1
+ # manage the gem dependencies with bundler
2
+ source "https://rubygems.org"
3
+
4
+ # gem dependencies in swapir.gemspec
5
+ gemspec :name => "swapir"
6
+
7
+ gem "rest-client"
8
+ gem "json"
9
+
10
+ group :development do
11
+ gem "byebug"
12
+ end
@@ -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: []