diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fa51f2..496abe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,9 @@ ### 1.0.1 (next) +* [#45](https://github.com/rodolfobandeira/spacex/pull/45): Implement History endpoint [@invacuo](http://github.com/invacuo). * Your contribution here. ### 1.0.0 (2018/10/15) - * [#41](https://github.com/rodolfobandeira/spacex/pull/41): General Refactor cleaning endpoint classes [@invacuo](http://github.com/invacuo). * [#44](https://github.com/rodolfobandeira/spacex/pull/44): Add flickr_images key into rockets endpoint [@Dfenniak](https://github.com/Dfenniak). * [#42](https://github.com/rodolfobandeira/spacex/pull/42): Add pry gem to debug - [@Dfenniak](https://github.com/Dfenniak). diff --git a/README.md b/README.md index 556cc88..77c8387 100644 --- a/README.md +++ b/README.md @@ -177,6 +177,27 @@ dragon_capsules.first.wikipedia # "https://en.wikipedia.org/wiki/SpaceX_Dragon" dragon_capsules.first.description # "Dragon is a reusable spacecraft developed by SpaceX, an American private space transportation company based in Hawthorne, California. Dragon is launched into space by the SpaceX Falcon 9 two-stage-to-orbit launch vehicle. The Dragon spacecraft was originally designed for human travel, but so far has only been used to deliver cargo to the International Space Station (ISS)." ``` +### History + +- Get information for all historical events: `SPACEX::History.info` +- Get information about a specific historical event: (e.g., `4`: `SPACEX::History.info('4')` + +```ruby +require 'spacex' +historical_events = SPACEX::History.info + +first_event = historical_events.first +first_event.id # 1 +first_event.title # Falcon 1 Makes History +first_event.event_date_utc # 2008-09-28T23:15:00Z +first_event.event_date_unix # 1222643700 +first_event.flight_number # 4 +first_event.details # Falcon 1 becomes the first privately developed liquid fuel rocket to reach Earth orbit. +first_event.links['reddit'] # nil +first_event.links['article'] # http://www.spacex.com/news/2013/02/11/flight-4-launch-update-0 +first_event.links['wikipedia'] # https://en.wikipedia.org/wiki/Falcon_1 +``` + ### Launches - Get information on all launches: `SPACEX::Launches.info` @@ -184,7 +205,7 @@ dragon_capsules.first.description # "Dragon is a reusable spacecraft developed b - Get the latest launch information: `SPACEX::Launches.latest` The following code snippet shows the latest launch information and the data fields available on the Launch object: - + ```ruby require 'spacex' latest_launch = SPACEX::Launches.latest diff --git a/lib/spacex.rb b/lib/spacex.rb index 5317de1..1eae010 100644 --- a/lib/spacex.rb +++ b/lib/spacex.rb @@ -4,13 +4,14 @@ require 'hashie' require_relative 'spacex/base_request' -require_relative 'spacex/version' -require_relative 'spacex/launches' +require_relative 'spacex/capsules' require_relative 'spacex/company_info' -require_relative 'spacex/roadster' +require_relative 'spacex/cores' require_relative 'spacex/dragon_capsules' -require_relative 'spacex/ships' +require_relative 'spacex/history' +require_relative 'spacex/launches' require_relative 'spacex/missions' +require_relative 'spacex/roadster' require_relative 'spacex/rockets' -require_relative 'spacex/capsules' -require_relative 'spacex/cores' +require_relative 'spacex/ships' +require_relative 'spacex/version' diff --git a/lib/spacex/history.rb b/lib/spacex/history.rb new file mode 100644 index 0000000..53e3964 --- /dev/null +++ b/lib/spacex/history.rb @@ -0,0 +1,7 @@ +module SPACEX + module History + def self.info(id = nil) + SPACEX::BaseRequest.info("history/#{id}") + end + end +end diff --git a/spec/fixtures/spacex/history/info.yml b/spec/fixtures/spacex/history/info.yml new file mode 100644 index 0000000..d61749c --- /dev/null +++ b/spec/fixtures/spacex/history/info.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: get + uri: https://api.spacexdata.com/v3/history/ + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Faraday v0.15.3 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 16 Oct 2018 02:39:03 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Set-Cookie: + - __cfduid=d9de20e41d3db5772f4d955e6b09a65b81539657543; expires=Wed, 16-Oct-19 + 02:39:03 GMT; path=/; domain=.spacexdata.com; HttpOnly; Secure + Vary: + - Accept-Encoding, Origin + X-Dns-Prefetch-Control: + - 'off' + X-Frame-Options: + - SAMEORIGIN + Strict-Transport-Security: + - max-age=15552000; includeSubDomains + X-Download-Options: + - noopen + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Access-Control-Allow-Origin: + - "*" + X-Response-Time: + - 40ms + Expect-Ct: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Server: + - cloudflare + Cf-Ray: + - 46a7271e795d2438-IAD + body: + encoding: ASCII-8BIT + string: !binary |- + W3siaWQiOjEsInRpdGxlIjoiRmFsY29uIDEgTWFrZXMgSGlzdG9yeSIsImV2ZW50X2RhdGVfdXRjIjoiMjAwOC0wOS0yOFQyMzoxNTowMFoiLCJldmVudF9kYXRlX3VuaXgiOjEyMjI2NDM3MDAsImZsaWdodF9udW1iZXIiOjQsImRldGFpbHMiOiJGYWxjb24gMSBiZWNvbWVzIHRoZSBmaXJzdCBwcml2YXRlbHkgZGV2ZWxvcGVkIGxpcXVpZCBmdWVsIHJvY2tldCB0byByZWFjaCBFYXJ0aCBvcmJpdC4iLCJsaW5rcyI6eyJyZWRkaXQiOm51bGwsImFydGljbGUiOiJodHRwOi8vd3d3LnNwYWNleC5jb20vbmV3cy8yMDEzLzAyLzExL2ZsaWdodC00LWxhdW5jaC11cGRhdGUtMCIsIndpa2lwZWRpYSI6Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhbGNvbl8xIn19LHsiaWQiOjIsInRpdGxlIjoiU3BhY2VYIFdpbnMgJDEuNkIgQ1JTIENvbnRyYWN0IiwiZXZlbnRfZGF0ZV91dGMiOiIyMDA4LTEyLTIzVDAxOjAwOjAwWiIsImV2ZW50X2RhdGVfdW5peCI6MTIyOTk5NDAwMCwiZmxpZ2h0X251bWJlciI6bnVsbCwiZGV0YWlscyI6Ik5BU0EgYXdhcmRzIFNwYWNlWCAkMS42QiBDb21tZXJjaWFsIFJlc3VwcGx5IFNlcnZpY2VzIChDUlMpIGNvbnRyYWN0LiIsImxpbmtzIjp7InJlZGRpdCI6bnVsbCwiYXJ0aWNsZSI6Imh0dHBzOi8vd3d3Lm5hc2FzcGFjZWZsaWdodC5jb20vMjAwOC8xMi9zcGFjZXgtYW5kLW9yYml0YWwtd2luLWh1Z2UtY3JzLWNvbnRyYWN0LWZyb20tbmFzYS8iLCJ3aWtpcGVkaWEiOiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21tZXJjaWFsX1Jlc3VwcGx5X1NlcnZpY2VzIn19LHsiaWQiOjMsInRpdGxlIjoiRmFsY29uIDEgRmxpZ2h0IDUgTWFrZXMgSGlzdG9yeSIsImV2ZW50X2RhdGVfdXRjIjoiMjAwOS0wNy0xM1QwMzozNTowMFoiLCJldmVudF9kYXRlX3VuaXgiOjEyNDc0NTYxMDAsImZsaWdodF9udW1iZXIiOjUsImRldGFpbHMiOiJGYWxjb24gMSBGbGlnaHQgNSBtYWtlcyBoaXN0b3J5LCBiZWNvbWluZyB0aGUgZmlyc3QgcHJpdmF0ZWx5IGRldmVsb3BlZCBsaXF1aWQgZnVlbCByb2NrZXQgdG8gZGVsaXZlciBhIGNvbW1lcmNpYWwgc2F0ZWxsaXRlIHRvIEVhcnRoIG9yYml0LiIsImxpbmtzIjp7InJlZGRpdCI6bnVsbCwiYXJ0aWNsZSI6Imh0dHA6Ly93d3cuc3BhY2V4LmNvbS9uZXdzLzIwMTMvMDIvMTIvZmFsY29uLTEtZmxpZ2h0LTUiLCJ3aWtpcGVkaWEiOiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GYWxjb25fMSJ9fSx7ImlkIjo0LCJ0aXRsZSI6IkZhbGNvbiA5IEZpcnN0IEZsaWdodCIsImV2ZW50X2RhdGVfdXRjIjoiMjAxMC0wNi0wNFQxODo0NTowMFoiLCJldmVudF9kYXRlX3VuaXgiOjEyNzU2NzcxMDAsImZsaWdodF9udW1iZXIiOjYsImRldGFpbHMiOiJNZXQgMTAwJSBvZiBtaXNzaW9uIG9iamVjdGl2ZXMgb24gdGhlIGZpcnN0IGZsaWdodCEiLCJsaW5rcyI6eyJyZWRkaXQiOm51bGwsImFydGljbGUiOiJodHRwOi8vd3d3LmJiYy5jb20vbmV3cy8xMDIwOTcwNCIsIndpa2lwZWRpYSI6Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RyYWdvbl9TcGFjZWNyYWZ0X1F1YWxpZmljYXRpb25fVW5pdCJ9fSx7ImlkIjo1LCJ0aXRsZSI6IkRyYWdvbiBSZXR1cm5zIEZyb20gRWFydGggT3JiaXQiLCJldmVudF9kYXRlX3V0YyI6IjIwMTAtMTItMDhUMTU6NDM6MDBaIiwiZXZlbnRfZGF0ZV91bml4IjoxMjkxODIyOTgwLCJmbGlnaHRfbnVtYmVyIjo3LCJkZXRhaWxzIjoiT24gRGVjZW1iZXIgOCwgMjAxMCwgRHJhZ29uIGJlY2FtZSB0aGUgZmlyc3QgcHJpdmF0ZWx5IGRldmVsb3BlZCBzcGFjZWNyYWZ0IGluIGhpc3RvcnkgdG8gcmUtZW50ZXIgZnJvbSBsb3ctRWFydGggb3JiaXQuIiwibGlua3MiOnsicmVkZGl0IjpudWxsLCJhcnRpY2xlIjoiaHR0cDovL3d3dy5jbm4uY29tLzIwMTAvVVMvMTIvMDgvc3BhY2UuZmxpZ2h0L2luZGV4Lmh0bWwiLCJ3aWtpcGVkaWEiOiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGFjZVhfQ09UU19EZW1vX0ZsaWdodF8xIn19LHsiaWQiOjYsInRpdGxlIjoiRmlyc3QgRHJhZ29uIFZpc2l0IHRvIFNwYWNlIFN0YXRpb24iLCJldmVudF9kYXRlX3V0YyI6IjIwMTItMTAtMDhUMDA6MzU6MDBaIiwiZXZlbnRfZGF0ZV91bml4IjoxMzQ5NjU2NTAwLCJmbGlnaHRfbnVtYmVyIjo5LCJkZXRhaWxzIjoiRHJhZ29uIGJlY29tZXMgdGhlIGZpcnN0IHByaXZhdGUgc3BhY2VjcmFmdCBpbiBoaXN0b3J5IHRvIHZpc2l0IHRoZSBzcGFjZSBzdGF0aW9uLiIsImxpbmtzIjp7InJlZGRpdCI6bnVsbCwiYXJ0aWNsZSI6Imh0dHA6Ly90aGVzcGFjZXJldmlldy5jb20vYXJ0aWNsZS8yMTY4LzEiLCJ3aWtpcGVkaWEiOiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGFjZVhfQ1JTLTEifX0seyJpZCI6NywidGl0bGUiOiJHcmFzc2hvcHBlciBDb21wbGV0ZXMgSGFsZi1NaWxlIEZsaWdodCIsImV2ZW50X2RhdGVfdXRjIjoiMjAxMy0xMC0wN1QwMTowMDowMFoiLCJldmVudF9kYXRlX3VuaXgiOjEzODExMDc2MDAsImZsaWdodF9udW1iZXIiOm51bGwsImRldGFpbHMiOiJUaGUgR3Jhc3Nob3BwZXIgcHJvZ3JhbSBmaW5pc2hlZCB3aXRoIGEgNzQ0bSBmbGlnaHQsIGhvdmVyLCBhbmQgbGFuZGluZy4iLCJsaW5rcyI6eyJyZWRkaXQiOm51bGwsImFydGljbGUiOiJodHRwOi8vc3BhY2VuZXdzLmNvbS8zNzc0MHNwYWNleC1yZXRpcmVzLWdyYXNzaG9wcGVyLW5ldy10ZXN0LXJpZy10by1mbHktaW4tZGVjZW1iZXIvIiwid2lraXBlZGlhIjoiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3Jhc3Nob3BwZXJfKHJvY2tldCkifX0seyJpZCI6OCwidGl0bGUiOiJGaXJzdCBGbGlnaHQgb2YgRmFsY29uIDkgdG8gR1RPIiwiZXZlbnRfZGF0ZV91dGMiOiIyMDEzLTEyLTAzVDIyOjQxOjAwWiIsImV2ZW50X2RhdGVfdW5peCI6MTM4NjExMDQ2MCwiZmxpZ2h0X251bWJlciI6MTIsImRldGFpbHMiOiJGYWxjb24gOSByZWFjaGVzIEdlb3N5bmNocm9ub3VzIFRyYW5zZmVyIE9yYml0IiwibGlua3MiOnsicmVkZGl0IjpudWxsLCJhcnRpY2xlIjoiaHR0cDovL3d3dy5uZXdzcGFjZWpvdXJuYWwuY29tLzIwMTMvMDMvMjcvYWZ0ZXItZHJhZ29uLXNwYWNleHMtZm9jdXMtcmV0dXJucy10by1mYWxjb24vIiwid2lraXBlZGlhIjoiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU0VTLTgifX0seyJpZCI6OSwidGl0bGUiOiJGaXJzdCBTdGFnZSBMYW5kaW5nIiwiZXZlbnRfZGF0ZV91dGMiOiIyMDE0LTA0LTE4VDE5OjI1OjAwWiIsImV2ZW50X2RhdGVfdW5peCI6MTM5Nzg0OTEwMCwiZmxpZ2h0X251bWJlciI6MTQsImRldGFpbHMiOiJGYWxjb24gOSBmaXJzdCBzdGFnZSBzdWNjZXNzZnVsbHkgbGFuZHMgaW4gQXRsYW50aWMgT2NlYW4uIiwibGlua3MiOnsicmVkZGl0IjpudWxsLCJhcnRpY2xlIjoiaHR0cHM6Ly93d3cuc3BhY2UuY29tLzI1NTYyLXNwYWNleC1mYWxjb24tOS1yZXVzYWJsZS1yb2NrZXQtdGVzdC5odG1sIiwid2lraXBlZGlhIjoiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BhY2VYX0NSUy0zIn19LHsiaWQiOjEwLCJ0aXRsZSI6IkZhbGNvbiA5IFJldXNhYmxlIFRlc3QgVmVoaWNsZSBGbGllcyAxMDAwTSIsImV2ZW50X2RhdGVfdXRjIjoiMjAxNC0wNS0wMlQwMTowMDowMFoiLCJldmVudF9kYXRlX3VuaXgiOjEzOTg5OTI0MDAsImZsaWdodF9udW1iZXIiOm51bGwsImRldGFpbHMiOiJWZWhpY2xlIGNvbXBsZXRlcyBoaWdoZXN0IGxlYXAgdG8gZGF0ZSwgbGFuZHMgc2FmZWx5LiIsImxpbmtzIjp7InJlZGRpdCI6bnVsbCwiYXJ0aWNsZSI6Imh0dHA6Ly93d3cucGFyYWJvbGljYXJjLmNvbS8yMDE0LzA1LzAyL2ZhbGNvbi05LXJldXNhYmxlLXZlaGljbGUtZmxpZXMtMTAwMC1tZXRlcnMvIiwid2lraXBlZGlhIjpudWxsfX0seyJpZCI6MTEsInRpdGxlIjoiU3BhY2VYIEF3YXJkZWQgQ29tbWVyY2lhbCBDcmV3IENvbnRyYWN0IiwiZXZlbnRfZGF0ZV91dGMiOiIyMDE0LTA5LTE2VDAxOjAwOjAwWiIsImV2ZW50X2RhdGVfdW5peCI6MTQxMDgyOTIwMCwiZmxpZ2h0X251bWJlciI6bnVsbCwiZGV0YWlscyI6Ik5BU0EgYXdhcmRzICQyLjYgYmlsbGlvbiBTcGFjZVggY29udHJhY3QgdG8gZmx5IEFtZXJpY2FuIGFzdHJvbmF1dHMuIiwibGlua3MiOnsicmVkZGl0IjpudWxsLCJhcnRpY2xlIjoiaHR0cHM6Ly93d3cud2FzaGluZ3RvbnBvc3QuY29tL25ld3MvdGhlLXN3aXRjaC93cC8yMDE0LzA5LzE2L25hc2EtYXdhcmRzLXNwYWNlLWNvbnRyYWN0LXRvLWJvZWluZy1hbmQtc3BhY2V4Lz91dG1fdGVybT0uZDYzODgzOTBkMDcxIiwid2lraXBlZGlhIjpudWxsfX0seyJpZCI6MTIsInRpdGxlIjoiRHJvbmUgU2hpcCBMYW5kaW5ncyIsImV2ZW50X2RhdGVfdXRjIjoiMjAxNS0wMS0xMFQwOTo0NzowMFoiLCJldmVudF9kYXRlX3VuaXgiOjE0MjA4ODMyMjAsImZsaWdodF9udW1iZXIiOjE5LCJkZXRhaWxzIjoiU3BhY2VYIGJlZ2lucyBzZXJpZXMgb2YgZmlyc3Qgc3RhZ2UgbGFuZGluZyBhdHRlbXB0cyBvbiBhbiBhdXRvbm9tb3VzIHNwYWNlcG9ydCBkcm9uZSBzaGlwLiIsImxpbmtzIjp7InJlZGRpdCI6Imh0dHA6Ly93d3cucmVkZGl0LmNvbS9yL3NwYWNleC9jb21tZW50cy8ycnJkaGEiLCJhcnRpY2xlIjoiaHR0cHM6Ly9zcGFjZWZsaWdodG5vdy5jb20vMjAxNS8wMS8xMC9kcmFnb24tc3VjY2Vzc2Z1bGx5LWxhdW5jaGVkLXJvY2tldC1yZWNvdmVyeS1kZW1vLWNyYXNoLWxhbmRzLyIsIndpa2lwZWRpYSI6Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NwYWNlWF9DUlMtNSJ9fSx7ImlkIjoxMywidGl0bGUiOiJQYWQgQWJvcnQgVGVzdCIsImV2ZW50X2RhdGVfdXRjIjoiMjAxNS0wNS0wNlQxMzowMDowMFoiLCJldmVudF9kYXRlX3VuaXgiOjE0MzA5MTcyMDAsImZsaWdodF9udW1iZXIiOm51bGwsImRldGFpbHMiOiJDcmV3IERyYWdvbiB0ZXN0cyBsYXVuY2ggYWJvcnQgc3lzdGVtLCB3aGljaCBjYW4gcHJvdmlkZSBhc3Ryb25hdXRzIHdpdGggZXNjYXBlIGNhcGFiaWxpdHkgYWxsIHRoZSB3YXkgdG8gb3JiaXQuIiwibGlua3MiOnsicmVkZGl0IjoiaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL3NwYWNleC9jb21tZW50cy8zNTI3enYvb2ZmaWNpYWxfdmlkZW9fcGFkX2Fib3J0X3Rlc3RfMjAxNS8iLCJhcnRpY2xlIjoiaHR0cHM6Ly9zcGFjZWZsaWdodG5vdy5jb20vMjAxNS8wNC8yMS9kcmFnb24tcGFkLWFib3J0LXRlc3Qtc2V0LWZvci1lYXJseS1tYXkvIiwid2lraXBlZGlhIjoiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGFkX2Fib3J0X3Rlc3QifX0seyJpZCI6MTQsInRpdGxlIjoiRmlyc3QgTGFuZCBMYW5kaW5nIiwiZXZlbnRfZGF0ZV91dGMiOiIyMDE1LTEyLTIyVDAxOjI5OjAwWiIsImV2ZW50X2RhdGVfdW5peCI6MTQ1MDc0Nzc0MCwiZmxpZ2h0X251bWJlciI6MjUsImRldGFpbHMiOiJPbiBEZWNlbWJlciAyMSwgMjAxNSwgdGhlIEZhbGNvbiA5IHJvY2tldCBkZWxpdmVyZWQgMTEgY29tbXVuaWNhdGlvbnMgc2F0ZWxsaXRlcyB0byBvcmJpdCwgYW5kIHRoZSBmaXJzdCBzdGFnZSByZXR1cm5lZCBhbmQgbGFuZGVkIGF0IExhbmRpbmcgWm9uZSAxIC3igJMgdGhlIGZpcnN0LWV2ZXIgb3JiaXRhbCBjbGFzcyByb2NrZXQgbGFuZGluZy4iLCJsaW5rcyI6eyJyZWRkaXQiOiJodHRwczovL3d3dy5yZWRkaXQuY29tL3Ivc3BhY2V4L2NvbW1lbnRzLzN4Z3hoNS9yc3BhY2V4X29yYmNvbW1fb2cyX2xhdW5jaF8yX29mZmljaWFsX2xhdW5jaC8iLCJhcnRpY2xlIjoiaHR0cHM6Ly9zcGFjZWZsaWdodG5vdy5jb20vMjAxNS8xMi8yMi9yb3VuZC10cmlwLXJvY2tldC1mbGlnaHQtZ2l2ZXMtc3BhY2V4LWEtdHJpZmVjdGEtb2Ytc3VjY2Vzc2VzLyIsIndpa2lwZWRpYSI6Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZhbGNvbl85X2ZsaWdodF8yMCJ9fSx7ImlkIjoxNSwidGl0bGUiOiJEcm9uZXNoaXAgTGFuZGluZyIsImV2ZW50X2RhdGVfdXRjIjoiMjAxNi0wNC0wOFQyMDo0MzowMFoiLCJldmVudF9kYXRlX3VuaXgiOjE0NjAxNDgxODAsImZsaWdodF9udW1iZXIiOjI4LCJkZXRhaWxzIjoiT24gQXByaWwgOCwgMjAxNiwgdGhlIEZhbGNvbiA5IHJvY2tldCBsYXVuY2hlZCB0aGUgRHJhZ29uIHNwYWNlY3JhZnQgdG8gdGhlIEludGVybmF0aW9uYWwgU3BhY2UgU3RhdGlvbiwgYW5kIHRoZSBmaXJzdCBzdGFnZSByZXR1cm5lZCBhbmQgbGFuZGVkIG9uIHRoZSBPZiBDb3Vyc2UgSSBTdGlsbCBMb3ZlIFlvdSBkcm9uZXNoaXAuIiwibGlua3MiOnsicmVkZGl0IjoiaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL3NwYWNleC9jb21tZW50cy80ZHRvbHkvcnNwYWNleF9zcGFjZXhfY3JzOF9vZmZpY2lhbF9sYXVuY2hfZGlzY3Vzc2lvbi8iLCJhcnRpY2xlIjoiaHR0cHM6Ly9zcGFjZWZsaWdodG5vdy5jb20vMjAxNi8wNC8wOC9zcGFjZXgtbGFuZHMtcm9ja2V0LW9uLWZsb2F0aW5nLXBsYXRmb3JtLWFmdGVyLXN0YXRpb24tcmVzdXBwbHktbGF1bmNoLyIsIndpa2lwZWRpYSI6Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NwYWNlWF9DUlMtOCJ9fSx7ImlkIjoxNiwidGl0bGUiOiJGaXJzdCBSZWZsaWdodCIsImV2ZW50X2RhdGVfdXRjIjoiMjAxNy0wMy0zMFQyMjoyNzowMFoiLCJldmVudF9kYXRlX3VuaXgiOjE0OTA5MTI4MjAsImZsaWdodF9udW1iZXIiOjM4LCJkZXRhaWxzIjoiT24gTWFyY2ggMzAsIDIwMTcsIFNwYWNlWCBhY2hpZXZlZCB0aGUgd29ybGQncyBmaXJzdCByZWZsaWdodCBvZiBhbiBvcmJpdGFsIGNsYXNzIHJvY2tldC4gRm9sbG93aW5nIGRlbGl2ZXJ5IG9mIHRoZSBwYXlsb2FkLCB0aGUgRmFsY29uIDkgZmlyc3Qgc3RhZ2UgcmV0dXJuZWQgdG8gRWFydGggZm9yIHRoZSBzZWNvbmQgdGltZS4iLCJsaW5rcyI6eyJyZWRkaXQiOiJodHRwczovL3d3dy5yZWRkaXQuY29tL3Ivc3BhY2V4L2NvbW1lbnRzLzYyYXFpNy9yc3BhY2V4X3NlczEwX29mZmljaWFsX2xhdW5jaF9kaXNjdXNzaW9uX3VwZGF0ZXMvIiwiYXJ0aWNsZSI6Imh0dHBzOi8vc3BhY2VmbGlnaHRub3cuY29tLzIwMTcvMDMvMzEvc3BhY2V4LWZsaWVzLXJvY2tldC1mb3Itc2Vjb25kLXRpbWUtaW4taGlzdG9yaWMtdGVzdC1vZi1jb3N0LWN1dHRpbmctdGVjaG5vbG9neS8iLCJ3aWtpcGVkaWEiOiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TRVMtMTAifX0seyJpZCI6MTcsInRpdGxlIjoiRmlyc3QgRHJhZ29uIFJlZmxpZ2h0IiwiZXZlbnRfZGF0ZV91dGMiOiIyMDE3LTA2LTAzVDIxOjA3OjAwWiIsImV2ZW50X2RhdGVfdW5peCI6MTQ5NjUyNDAyMCwiZmxpZ2h0X251bWJlciI6NDEsImRldGFpbHMiOiJUaGlzIERyYWdvbiByZXN1cHBseSBtaXNzaW9uIHJlcHJlc2VudGVkIHRoZSBmaXJzdCByZWZsaWdodCBvZiBhIGNvbW1lcmNpYWwgc3BhY2VjcmFmdCB0byBhbmQgZnJvbSB0aGUgSW50ZXJuYXRpb25hbCBTcGFjZSBTdGF0aW9uLiIsImxpbmtzIjp7InJlZGRpdCI6Imh0dHBzOi8vd3d3LnJlZGRpdC5jb20vci9zcGFjZXgvY29tbWVudHMvNmVrdGt0L3dlbGNvbWVfdG9fdGhlX3JzcGFjZXhfY3JzMTFfb2ZmaWNpYWxfbGF1bmNoLyIsImFydGljbGUiOiJodHRwczovL3NwYWNlZmxpZ2h0bm93LmNvbS8yMDE3LzA2LzAzL3JldXNlZC1kcmFnb24tY2FyZ28tY2Fwc3VsZS1sYXVuY2hlZC1vbi1qb3VybmV5LXRvLXNwYWNlLXN0YXRpb24vIiwid2lraXBlZGlhIjoiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BhY2VYX0NSUy0xMSJ9fSx7ImlkIjoxOCwidGl0bGUiOiJGYWxjb24gSGVhdnkgVGVzdCBGbGlnaHQiLCJldmVudF9kYXRlX3V0YyI6IjIwMTgtMDItMDZUMjA6NDU6MDBaIiwiZXZlbnRfZGF0ZV91bml4IjoxNTE3OTQ5OTAwLCJmbGlnaHRfbnVtYmVyIjo1NSwiZGV0YWlscyI6Ik1haWRlbiBmbGlnaHQgb2YgRmFsY29uIEhlYXZ5LCB1c2luZyB0d28gcmVjb3ZlcmVkIEZhbGNvbiA5IGNvcmVzIGFzIHNpZGUgYm9vc3RlcnMgKGZyb20gdGhlIFRoYWljb20gOCBhbmQgQ1JTLTkgbWlzc2lvbnMpLCBhcyB3ZWxsIGFzIGEgbW9kaWZpZWQgQmxvY2sgMyBib29zdGVyIHJlaW5mb3JjZWQgdG8gZW5kdXJlIHRoZSBhZGRpdGlvbmFsIGxvYWQgZnJvbSB0aGUgdHdvIHNpZGUgYm9vc3RlcnMuIFRoZSBzdGF0aWMgZmlyZSB0ZXN0LCBoZWxkIG9uIEphbnVhcnkgMjQsIHdhcyB0aGUgZmlyc3QgdGltZSAyNyBlbmdpbmVzIHdlcmUgdGVzdGVkIHRvZ2V0aGVyLiBUaGUgbGF1bmNoIHdhcyBhIHN1Y2Nlc3MsIGFuZCB0aGUgc2lkZSBib29zdGVycyBsYW5kZWQgc2ltdWx0YW5lb3VzbHkgYXQgYWRqYWNlbnQgZ3JvdW5kIHBhZHMuIERyb25lIHNoaXAgbGFuZGluZyBvZiB0aGUgY2VudHJhbCBjb3JlIGZhaWxlZCBkdWUgdG8gVEVB4oCTVEVCIGNoZW1pY2FsIGlnbml0ZXIgcnVubmluZyBvdXQsIHByZXZlbnRpbmcgdHdvIG9mIGl0cyBlbmdpbmVzIGZyb20gcmVzdGFydGluZzsgdGhlIGxhbmRpbmcgZmFpbHVyZSBjYXVzZWQgZGFtYWdlIHRvIHRoZSBuZWFyYnkgZHJvbmUgc2hpcC4gRmluYWwgYnVybiB0byBoZWxpb2NlbnRyaWMgTWFyc+KAk0VhcnRoIG9yYml0IHdhcyBwZXJmb3JtZWQgYWZ0ZXIgdGhlIHNlY29uZCBzdGFnZSBhbmQgcGF5bG9hZCBjcnVpc2VkIGZvciA2IGhvdXJzIHRocm91Z2ggdGhlIFZhbiBBbGxlbiBiZWx0cy4gTGF0ZXIsIEVsb24gTXVzayB0d2VldGVkIHRoYXQgdGhlIHRoaXJkIGJ1cm4gd2FzIHN1Y2Nlc3NmdWwsIGFuZCBKUEwncyBIT1JJWk9OUyBzeXN0ZW0gc2hvd2VkIHRoZSBzZWNvbmQgc3RhZ2UgYW5kIHBheWxvYWQgaW4gYW4gb3JiaXQgd2l0aCBhbiBhcGhlbGlvbiBvZiAxLjY3IEFVLiBUaGUgbGl2ZSB3ZWJjYXN0IHByb3ZlZCBpbW1lbnNlbHkgcG9wdWxhciwgYXMgaXQgYmVjYW1lIHRoZSBzZWNvbmQgbW9zdCB3YXRjaGVkIGxpdmVzdHJlYW0gZXZlciBvbiBZb3VUdWJlLCByZWFjaGluZyBvdmVyIDIuMyBtaWxsaW9uIGNvbmN1cnJlbnQgdmlld3MuIiwibGlua3MiOnsicmVkZGl0IjoiaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL3NwYWNleC9jb21tZW50cy83dmc2M3gvcnNwYWNleF9mYWxjb25faGVhdnlfdGVzdF9mbGlnaHRfb2ZmaWNpYWxfbGF1bmNoLyIsImFydGljbGUiOiJodHRwczovL3NwYWNlZmxpZ2h0bm93LmNvbS8yMDE4LzAyLzA3L3NwYWNleC1kZWJ1dHMtd29ybGRzLW1vc3QtcG93ZXJmdWwtcm9ja2V0LXNlbmRzLXRlc2xhLXRvd2FyZC10aGUtYXN0ZXJvaWQtYmVsdC8iLCJ3aWtpcGVkaWEiOiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GYWxjb25fSGVhdnlfdGVzdF9mbGlnaHQifX0seyJpZCI6MTksInRpdGxlIjoiRmlyc3QgQmxvY2sgNSBMYXVuY2giLCJldmVudF9kYXRlX3V0YyI6IjIwMTgtMDUtMTFUMjA6MTQ6MDBaIiwiZXZlbnRfZGF0ZV91bml4IjoxNTI2MDY5NjQwLCJmbGlnaHRfbnVtYmVyIjo2MSwiZGV0YWlscyI6IlRoZSBCYW5nYWJhbmRodSBTYXRlbGxpdGUtMSBtaXNzaW9uIHNlcnZlZCBhcyB0aGUgZmlyc3QgZmxpZ2h0IG9mIEZhbGNvbiA5IEJsb2NrIDUsIHRoZSBmaW5hbCBzdWJzdGFudGlhbCB1cGdyYWRlIHRvIFNwYWNlWOKAmXMgRmFsY29uIDkgbGF1bmNoIHZlaGljbGUuIEZhbGNvbiA5IEJsb2NrIDUgaXMgZGVzaWduZWQgdG8gYmUgY2FwYWJsZSBvZiAxMCBvciBtb3JlIGZsaWdodHMgd2l0aCB2ZXJ5IGxpbWl0ZWQgcmVmdXJiaXNobWVudCBhcyBTcGFjZVggY29udGludWVzIHRvIHN0cml2ZSBmb3IgcmFwaWQgcmV1c2FiaWxpdHkgYW5kIGV4dHJlbWVseSBoaWdoIHJlbGlhYmlsaXR5LiIsImxpbmtzIjp7InJlZGRpdCI6Imh0dHBzOi8vd3d3LnJlZGRpdC5jb20vci9zcGFjZXgvY29tbWVudHMvOGlvcTN1L3JzcGFjZXhfYmFuZ2FiYW5kaHUxX29mZmljaWFsX2xhdW5jaF9kaXNjdXNzaW9uLyIsImFydGljbGUiOiJodHRwczovL3NwYWNlZmxpZ2h0bm93LmNvbS8yMDE4LzA1LzExL3NwYWNleC1kZWJ1dHMtYW4taW1wcm92ZWQtaHVtYW4tcmF0ZWQtbW9kZWwtb2YtdGhlLWZhbGNvbi05LXJvY2tldC8iLCJ3aWtpcGVkaWEiOiJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYW5nYWJhbmRodS0xIn19LHsiaWQiOjIwLCJ0aXRsZSI6IkZpcnN0IEJsb2NrIDUgUmVmbGlnaHQiLCJldmVudF9kYXRlX3V0YyI6IjIwMTgtMDgtMDdUMDU6MTg6MDAuMDAwWiIsImV2ZW50X2RhdGVfdW5peCI6MTUzMzYxOTA4MCwiZmxpZ2h0X251bWJlciI6NjcsImRldGFpbHMiOiJJbmRvbmVzaWFuIGNvbXNhdCBpbnRlbmRlZCB0byByZXBsYWNlIHRoZSBhZ2luZyBUZWxrb20gMSBhdCAxMDjCsCBFLiBGaXJzdCByZWZsaWdodCBvZiBhIEJsb2NrIDUtdmVyc2lvbiBib29zdGVyLiIsImxpbmtzIjp7InJlZGRpdCI6Imh0dHBzOi8vd3d3LnJlZGRpdC5jb20vci9zcGFjZXgvY29tbWVudHMvOTUzOW5yL3JzcGFjZXhfbWVyYWhfcHV0aWhfdGVsa29tNF9vZmZpY2lhbF9sYXVuY2gvIiwiYXJ0aWNsZSI6Imh0dHBzOi8vc3BhY2VmbGlnaHRub3cuY29tLzIwMTgvMDgvMDcvaW5kb25lc2lhbi1jb21tdW5pY2F0aW9ucy1zYXRlbGxpdGUtZGVwbG95ZWQtaW4tb3JiaXQtYnktc3BhY2V4LyIsIndpa2lwZWRpYSI6Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RlbGtvbV9JbmRvbmVzaWEifX1d + http_version: + recorded_at: Tue, 16 Oct 2018 02:39:03 GMT +recorded_with: VCR 4.0.0 diff --git a/spec/fixtures/spacex/history/info/4.yml b/spec/fixtures/spacex/history/info/4.yml new file mode 100644 index 0000000..a12f0b9 --- /dev/null +++ b/spec/fixtures/spacex/history/info/4.yml @@ -0,0 +1,62 @@ +--- +http_interactions: +- request: + method: get + uri: https://api.spacexdata.com/v3/history/4 + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Faraday v0.15.3 + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Date: + - Tue, 16 Oct 2018 02:43:50 GMT + Content-Type: + - application/json; charset=utf-8 + Transfer-Encoding: + - chunked + Connection: + - keep-alive + Set-Cookie: + - __cfduid=d54727cd9ad91c46626c14f99de479f611539657830; expires=Wed, 16-Oct-19 + 02:43:50 GMT; path=/; domain=.spacexdata.com; HttpOnly; Secure + Vary: + - Accept-Encoding, Origin + X-Dns-Prefetch-Control: + - 'off' + X-Frame-Options: + - SAMEORIGIN + Strict-Transport-Security: + - max-age=15552000; includeSubDomains + X-Download-Options: + - noopen + X-Content-Type-Options: + - nosniff + X-Xss-Protection: + - 1; mode=block + Access-Control-Allow-Origin: + - "*" + X-Response-Time: + - 37ms + Expect-Ct: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Server: + - cloudflare + Cf-Ray: + - 46a72e1da893241a-IAD + body: + encoding: ASCII-8BIT + string: '{"id":4,"title":"Falcon 9 First Flight","event_date_utc":"2010-06-04T18:45:00Z","event_date_unix":1275677100,"flight_number":6,"details":"Met + 100% of mission objectives on the first flight!","links":{"reddit":null,"article":"http://www.bbc.com/news/10209704","wikipedia":"https://en.wikipedia.org/wiki/Dragon_Spacecraft_Qualification_Unit"}}' + http_version: + recorded_at: Tue, 16 Oct 2018 02:43:50 GMT +recorded_with: VCR 4.0.0 diff --git a/spec/spacex/history_spec.rb b/spec/spacex/history_spec.rb new file mode 100644 index 0000000..4fb86a0 --- /dev/null +++ b/spec/spacex/history_spec.rb @@ -0,0 +1,50 @@ +require 'spec_helper' + +describe SPACEX::History do + context '#info', vcr: { cassette_name: 'history/info' } do + subject do + SPACEX::History.info + end + + it 'returns all historical events when no id is passed' do + first_subject = subject.first + expect(first_subject.id).to eq 1 + expect(first_subject.title).to eq 'Falcon 1 Makes History' + expect(first_subject.event_date_utc).to eq '2008-09-28T23:15:00Z' + expect(first_subject.event_date_unix).to eq 1_222_643_700 + expect(first_subject.flight_number).to eq 4 + expect(first_subject.details).to eq( + 'Falcon 1 becomes the first privately '\ + 'developed liquid fuel rocket to reach Earth orbit.' + ) + expect(first_subject.links).to eq( + 'reddit' => nil, + 'article' => 'http://www.spacex.com/news/2013/02/11/flight-4-launch-update-0', + 'wikipedia' => 'https://en.wikipedia.org/wiki/Falcon_1' + ) + end + end + + context "#info('4')", vcr: { cassette_name: 'history/info/4' } do + subject do + SPACEX::History.info(4) + end + + it 'returns Historical event info for event id 4' do + expect(subject.id).to eq 4 + expect(subject.title).to eq 'Falcon 9 First Flight' + expect(subject.event_date_utc).to eq '2010-06-04T18:45:00Z' + expect(subject.event_date_unix).to eq 1_275_677_100 + expect(subject.flight_number).to eq 6 + expect(subject.details).to eq( + 'Met 100% of mission objectives on the first flight!' + ) + expect(subject.links).to eq( + 'reddit' => nil, + 'article' => 'http://www.bbc.com/news/10209704', + 'wikipedia' => + 'https://en.wikipedia.org/wiki/Dragon_Spacecraft_Qualification_Unit' + ) + end + end +end