From c0c3a1beb5c7c5b1e03d109f2d140005f7f78a6f Mon Sep 17 00:00:00 2001 From: Nikhil Vengal Date: Wed, 8 Oct 2025 01:44:23 -0700 Subject: [PATCH] Add NPS client class --- .gitignore | 2 ++ Gemfile | 2 ++ Gemfile.lock | 10 ++++++++++ README.md | 1 + app/lib/nps_client.rb | 21 +++++++++++++++++++++ 5 files changed, 36 insertions(+) create mode 100644 app/lib/nps_client.rb diff --git a/.gitignore b/.gitignore index 063233c..dc9d84f 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ # Ignore master key for decrypting credentials and more. /config/master.key + +.mise.toml diff --git a/Gemfile b/Gemfile index c7f32fe..e4ba509 100644 --- a/Gemfile +++ b/Gemfile @@ -18,3 +18,5 @@ group :development, :test do gem "debug", platforms: %i[ mri windows ], require: "debug/prelude" gem "rspec-rails", "~> 8.0" end + +gem "faraday", "~> 2.14" diff --git a/Gemfile.lock b/Gemfile.lock index e9475e7..65ffb62 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -87,6 +87,12 @@ GEM drb (2.2.3) erb (5.0.3) erubi (1.13.1) + faraday (2.14.0) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-net_http (3.4.1) + net-http (>= 0.5.0) globalid (1.3.0) activesupport (>= 6.1) i18n (1.14.7) @@ -96,6 +102,7 @@ GEM pp (>= 0.6.0) rdoc (>= 4.0.0) reline (>= 0.4.2) + json (2.15.1) logger (1.7.0) loofah (2.24.1) crass (~> 1.0.2) @@ -108,6 +115,8 @@ GEM marcel (1.1.0) mini_mime (1.1.5) minitest (5.26.0) + net-http (0.6.0) + uri net-imap (0.5.12) date net-protocol @@ -242,6 +251,7 @@ PLATFORMS DEPENDENCIES debug + faraday (~> 2.14) puma (>= 5.0) rails (~> 8.0.3) rspec-rails (~> 8.0) diff --git a/README.md b/README.md index 48742cc..aa0ff22 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ - Ruby 3.4.7 - Bundler +- Set `NPS_API_KEY` env var ### Deps diff --git a/app/lib/nps_client.rb b/app/lib/nps_client.rb new file mode 100644 index 0000000..a2e5f9e --- /dev/null +++ b/app/lib/nps_client.rb @@ -0,0 +1,21 @@ +class NpsClient + def self.current + @current ||= new + end + + def parks(offset: 0) + conn.get('parks', { start: offset }) + end + + private + + def conn + @conn ||= Faraday.new( + url: 'https://developer.nps.gov/api/v1', + headers: { 'X-Api-Key': ENV.fetch('NPS_API_KEY') } + ) do |builder| + builder.response :json + builder.response :raise_error + end + end +end