diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97c0804..3fcb839 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,21 +4,22 @@ on: [push] jobs: test: runs-on: ubuntu-latest + strategy: + matrix: + ruby-version: ['3.4', '4.0'] steps: - - uses: actions/checkout@v2 - - uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6 + - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.7 + ruby-version: ${{ matrix.ruby-version }} bundler-cache: true - - run: bundle install - run: bundle exec rspec rubocop: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6 + - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.7 + ruby-version: '4.0' bundler-cache: true - - run: bundle install - run: bundle exec rubocop diff --git a/.ruby-version b/.ruby-version index a4dd9db..43beb40 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.7.4 +4.0.7 diff --git a/Gemfile b/Gemfile index a208771..7f4f5e9 100644 --- a/Gemfile +++ b/Gemfile @@ -1,17 +1,5 @@ -source 'https://rubygems.org' +# frozen_string_literal: true -gem 'vertebrae', '> 0.5' +source 'https://rubygems.org' -# Add dependencies to develop your gem here. -# Include everything needed to run rake, tests, features, etc. -group :development do - gem 'pry', '~> 0.10' - gem 'pry-byebug', '~> 3.4' - gem 'webmock', '~> 3.0', '>= 3.0.1' - gem 'rspec', '~> 3.6' - gem 'rdoc', ">= 6.3.1" - gem 'bundler' - gem 'juwelier' - gem 'simplecov', ">= 0" - gem 'rubocop' -end +gemspec diff --git a/README.md b/README.md index 8366dac..2a0f6e9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![CI Status](https://github.com/controlshift/identity-api-client/actions/workflows/ci.yml/badge.svg)](https://github.com/controlshift/identity-api-client/actions/workflows/ci.yml) -API Client for 38 Degree's Identity API +API client for the [Identity](https://github.com/controlshift/identity-api-client) service ## Install diff --git a/Rakefile b/Rakefile index 0701d86..91c5565 100644 --- a/Rakefile +++ b/Rakefile @@ -11,21 +11,6 @@ rescue Bundler::BundlerError => e end require 'rake' -require 'juwelier' -Juwelier::Tasks.new do |gem| - # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options - gem.name = "identity-api-client" - gem.homepage = "http://github.com/controlshift/identity-api-client" - gem.license = "MIT" - gem.summary = %Q{API Client for 38 Degree's Identity API} - gem.description = %Q{Provides a simple ruby binding to 38dgs identity API} - gem.email = 'nathan@controlshiftlabs.com' - gem.authors = ['Nathan Woodhull'] - - # dependencies defined in Gemfile -end -Juwelier::RubygemsDotOrgTasks.new - require 'rspec/core' require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:spec) do |spec| diff --git a/VERSION b/VERSION index 446ba66..3eefcb9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.4 \ No newline at end of file +1.0.0 diff --git a/identity-api-client.gemspec b/identity-api-client.gemspec index c5df5c1..e9e6bf1 100644 --- a/identity-api-client.gemspec +++ b/identity-api-client.gemspec @@ -1,77 +1,30 @@ -# Generated by juwelier -# DO NOT EDIT THIS FILE DIRECTLY -# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec' -# -*- encoding: utf-8 -*- -# stub: identity-api-client 0.1.4 ruby lib +# frozen_string_literal: true -Gem::Specification.new do |s| - s.name = "identity-api-client".freeze - s.version = "0.1.4" +version = File.read(File.join(__dir__, 'VERSION')).strip - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib".freeze] - s.authors = ["Nathan Woodhull".freeze] - s.date = "2021-12-14" - s.description = "Provides a simple ruby binding to 38dgs identity API".freeze - s.email = "nathan@controlshiftlabs.com".freeze - s.extra_rdoc_files = [ - "LICENSE", - "README.md" - ] - s.files = [ - ".document", - ".github/workflows/ci.yml", - ".rspec", - ".rubocop.yml", - ".ruby-gemset", - ".ruby-version", - "Gemfile", - "LICENSE", - "README.md", - "Rakefile", - "VERSION", - "identity-api-client.gemspec", - "lib/identity-api-client.rb", - "lib/identity-api-client/base.rb", - "lib/identity-api-client/client.rb", - "lib/identity-api-client/member.rb", - "spec/client_spec.rb", - "spec/fixtures/details.json", - "spec/fixtures/details_with_consents.json", - "spec/member_spec.rb", - "spec/spec_helper.rb" - ] - s.homepage = "http://github.com/controlshift/identity-api-client".freeze - s.licenses = ["MIT".freeze] - s.rubygems_version = "3.1.6".freeze - s.summary = "API Client for 38 Degree's Identity API".freeze +Gem::Specification.new do |s| + s.name = 'identity-api-client' + s.version = version + s.authors = ['Nathan Woodhull', 'Owens Ehimen', 'Diego Marcet', 'Grey Moore'] + s.email = ['talk@controlshiftlabs.com'] + s.homepage = 'https://github.com/controlshift/identity-api-client' + s.license = 'MIT' + s.summary = 'API client for the Identity service' + s.description = 'Ruby client for the Identity member API' + s.required_ruby_version = '>= 3.4.0' - if s.respond_to? :specification_version then - s.specification_version = 4 + s.files = Dir.chdir(__dir__) do + `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(pkg|spec)/}) } end + s.require_paths = ['lib'] - if s.respond_to? :add_runtime_dependency then - s.add_runtime_dependency(%q.freeze, ["> 0.5"]) - s.add_development_dependency(%q.freeze, ["~> 0.10"]) - s.add_development_dependency(%q.freeze, ["~> 3.4"]) - s.add_development_dependency(%q.freeze, ["~> 3.0", ">= 3.0.1"]) - s.add_development_dependency(%q.freeze, ["~> 3.6"]) - s.add_development_dependency(%q.freeze, [">= 6.3.1"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, [">= 0"]) - else - s.add_dependency(%q.freeze, ["> 0.5"]) - s.add_dependency(%q.freeze, ["~> 0.10"]) - s.add_dependency(%q.freeze, ["~> 3.4"]) - s.add_dependency(%q.freeze, ["~> 3.0", ">= 3.0.1"]) - s.add_dependency(%q.freeze, ["~> 3.6"]) - s.add_dependency(%q.freeze, [">= 6.3.1"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, [">= 0"]) - end -end + s.add_runtime_dependency 'vertebrae', '~> 2.0' + s.add_development_dependency 'pry', '~> 0.10' + s.add_development_dependency 'pry-byebug', '~> 3.4' + s.add_development_dependency 'rdoc', '>= 6.3.1' + s.add_development_dependency 'rspec', '~> 3.6' + s.add_development_dependency 'rubocop', '>= 0' + s.add_development_dependency 'simplecov', '>= 0' + s.add_development_dependency 'webmock', '~> 3.0', '>= 3.0.1' +end diff --git a/lib/identity-api-client/member.rb b/lib/identity-api-client/member.rb index 786a7d0..8859eaf 100644 --- a/lib/identity-api-client/member.rb +++ b/lib/identity-api-client/member.rb @@ -15,6 +15,8 @@ def details(guid: nil, email: nil, load_current_consents: false) resp = client.post_request('/api/member/details', params) resp.body + rescue Faraday::ResourceNotFound + nil end end end diff --git a/spec/member_spec.rb b/spec/member_spec.rb index f8f0a19..9688c30 100644 --- a/spec/member_spec.rb +++ b/spec/member_spec.rb @@ -11,6 +11,16 @@ expect { subject.member.details() }.to raise_error "Must have one of guid or email" end end + + context 'when Identity responds with 404' do + before(:each) do + stub_post(request_path).to_return(status: 404, body: '404 page not found') + end + + it 'returns nil instead of raising' do + expect(subject.member.details(guid: 'abcdef1234567890')).to be_nil + end + end end describe 'success' do @@ -22,7 +32,7 @@ end context 'without load_current_consents' do - let(:expected_request) { {'guid' => 'abcdef1234567890', 'api_token' => '1234567890abcdef'}.to_json } + let(:expected_request) { { 'guid' => 'abcdef1234567890', 'api_token' => '1234567890abcdef' }.to_json } let(:body) { fixture('details.json') } it 'should get member details back from the API' do @@ -36,7 +46,7 @@ context 'with load_current_consents' do - let(:expected_request) { {'guid' => 'abcdef1234567890', 'api_token' => '1234567890abcdef', 'load_current_consents' => true}.to_json } + let(:expected_request) { { 'guid' => 'abcdef1234567890', 'api_token' => '1234567890abcdef', 'load_current_consents' => true }.to_json } let(:body) { fixture('details_with_consents.json') } it 'should get member details with consents back from the API' do @@ -52,7 +62,7 @@ end context 'with email passed' do - let(:expected_request) { {'email' => 'test@example.com', 'api_token' => '1234567890abcdef'}.to_json } + let(:expected_request) { { 'email' => 'test@example.com', 'api_token' => '1234567890abcdef' }.to_json } let(:body) { fixture('details.json') } it 'should get member details back from the API' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index bdfb816..fce5fcc 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -30,7 +30,8 @@ def stub_post(path) end def stub_identity_request(method, path) - stub_request(method, "https://test.com" + path) + path_suffix = path.to_s.delete_prefix('/') + stub_request(method, %r{\Ahttps://test\.com/+#{Regexp.escape(path_suffix)}\z}) end def fixture_path