From 7485daafc1b2e0c8493f9d2de69d762e4f4f08ec Mon Sep 17 00:00:00 2001 From: Ulan Djamanbalaev Date: Thu, 4 Dec 2025 18:16:41 +0000 Subject: [PATCH 1/2] Add Metadata `item_condition_policies` API --- config/versions.yml | 1 + lib/ebay_api/operations/commerce.rb | 1 + lib/ebay_api/operations/commerce/metadata.rb | 13 ++++++ .../commerce/metadata/marketplace.rb | 12 +++++ .../get_item_condition_policies.rb | 12 +++++ .../get_item_condition_policies/success | 24 ++++++++++ .../get_item_condition_policies_spec.rb | 46 +++++++++++++++++++ 7 files changed, 109 insertions(+) create mode 100644 lib/ebay_api/operations/commerce/metadata.rb create mode 100644 lib/ebay_api/operations/commerce/metadata/marketplace.rb create mode 100644 lib/ebay_api/operations/commerce/metadata/marketplace/get_item_condition_policies.rb create mode 100644 spec/fixtures/commerce/metadata/marketplace/get_item_condition_policies/success create mode 100644 spec/operations/commerce/metadata/marketplace/get_item_condition_policies_spec.rb diff --git a/config/versions.yml b/config/versions.yml index 7ce488b..5d86e29 100644 --- a/config/versions.yml +++ b/config/versions.yml @@ -9,6 +9,7 @@ commerce: taxonomy: "1.0.0" notifications: "1.0.0" catalog: "1_beta.1.0" + metadata: "1.0.0" sell: account: "1.1.0" analytics: "1.0.0" diff --git a/lib/ebay_api/operations/commerce.rb b/lib/ebay_api/operations/commerce.rb index 4e0729a..e4493ca 100644 --- a/lib/ebay_api/operations/commerce.rb +++ b/lib/ebay_api/operations/commerce.rb @@ -10,5 +10,6 @@ class EbayAPI require_relative "commerce/catalog" require_relative "commerce/notification" require_relative "commerce/taxonomy" + require_relative "commerce/metadata" end end diff --git a/lib/ebay_api/operations/commerce/metadata.rb b/lib/ebay_api/operations/commerce/metadata.rb new file mode 100644 index 0000000..35e2a31 --- /dev/null +++ b/lib/ebay_api/operations/commerce/metadata.rb @@ -0,0 +1,13 @@ +# +# eBay Metadata API +# @see https://developer.ebay.com/api-docs/sell/metadata/overview.html +# +class EbayAPI + scope :commerce do + scope :metadata do + path { "catalog/v#{EbayAPI::COMMERCE_METADATA_VERSION.split(/\s|\./).first}" } + + require_relative "metadata/marketplace" + end + end +end diff --git a/lib/ebay_api/operations/commerce/metadata/marketplace.rb b/lib/ebay_api/operations/commerce/metadata/marketplace.rb new file mode 100644 index 0000000..43bf4d2 --- /dev/null +++ b/lib/ebay_api/operations/commerce/metadata/marketplace.rb @@ -0,0 +1,12 @@ +class EbayAPI + scope :commerce do + scope :metadata do + scope :marketplace do + path { "marketplace/#{marketplace_id}" } + option :marketplace_id + + require_relative "marketplace/get_item_condition_policies" + end + end + end +end diff --git a/lib/ebay_api/operations/commerce/metadata/marketplace/get_item_condition_policies.rb b/lib/ebay_api/operations/commerce/metadata/marketplace/get_item_condition_policies.rb new file mode 100644 index 0000000..074f89e --- /dev/null +++ b/lib/ebay_api/operations/commerce/metadata/marketplace/get_item_condition_policies.rb @@ -0,0 +1,12 @@ +class EbayAPI + scope :commerce do + scope :metadata do + scope :marketplace do + operation :get_item_condition_policies do + path { "get_item_condition_policies" } + http_method :get + end + end + end + end +end diff --git a/spec/fixtures/commerce/metadata/marketplace/get_item_condition_policies/success b/spec/fixtures/commerce/metadata/marketplace/get_item_condition_policies/success new file mode 100644 index 0000000..d2e8a4b --- /dev/null +++ b/spec/fixtures/commerce/metadata/marketplace/get_item_condition_policies/success @@ -0,0 +1,24 @@ +HTTP/1.1 200 OK +Content-Length: 500 +Content-Type: application/json + +{ + "itemConditionPolicies": [ + { + "categoryId": "625", + "categoryTreeId": "0", + "itemConditionRequired": true, + "itemConditions": [ + { + "conditionDescription": "Brand new, unused, and unworn", + "conditionId": "1000" + }, + { + "conditionDescription": "Pre-owned but in excellent condition", + "conditionId": "3000" + } + ] + } + ] +} + diff --git a/spec/operations/commerce/metadata/marketplace/get_item_condition_policies_spec.rb b/spec/operations/commerce/metadata/marketplace/get_item_condition_policies_spec.rb new file mode 100644 index 0000000..89d1f43 --- /dev/null +++ b/spec/operations/commerce/metadata/marketplace/get_item_condition_policies_spec.rb @@ -0,0 +1,46 @@ + +RSpec.describe EbayAPI, ".commerce.metadata.marketplace.get_item_condition_policies" do + let(:client) { described_class.new(**settings) } + let(:scope) { client.commerce.metadata.marketplace(marketplace_id: "EBAY_US") } + let(:settings) { yaml_fixture_file("settings.valid.yml") } + let(:url) do + "https://api.ebay.com/commerce/catalog/v1/marketplace/EBAY_US/get_item_condition_policies" + end + + before { stub_request(:get, url).to_return(response) } + subject { scope.get_item_condition_policies } + + context "success" do + let(:response) do + open_fixture_file "commerce/metadata/marketplace/get_item_condition_policies/success" + end + + it "sends a request" do + subject + expect(a_request(:get, url)).to have_been_made + end + + it "returns item condition policies" do + expect(subject["itemConditionPolicies"]).to be_an(Array) + expect(subject["itemConditionPolicies"].count).to eq(1) + end + + describe "item condition policy" do + let(:policy) { subject["itemConditionPolicies"].first } + + it "has proper attributes" do + expect(policy["categoryId"]).to eq("625") + expect(policy["categoryTreeId"]).to eq("0") + expect(policy["itemConditionRequired"]).to eq(true) + expect(policy["itemConditions"]).to be_an(Array) + end + + it "has item conditions with proper attributes" do + condition = policy["itemConditions"].first + expect(condition["conditionId"]).to eq("1000") + expect(condition["conditionDescription"]).to eq("Brand new, unused, and unworn") + end + end + end +end + From 94a4ad36dd1da0faa4165892d5fc62f8d9254e41 Mon Sep 17 00:00:00 2001 From: Ulan Djamanbalaev Date: Fri, 5 Dec 2025 10:22:12 +0000 Subject: [PATCH 2/2] Add a GitHub action for running tests and update the minimum supported Ruby version to 3.0 --- .github/workflows/test.yml | 39 ++++++++++++++++++++++++++++++++++++++ README.md | 1 + ebay_api.gemspec | 4 ++-- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..d16117a --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,39 @@ +name: CI + +on: + push: + branches: + - '**' + pull_request: + branches: + - '**' + +jobs: + test: + name: Ruby ${{ matrix.ruby }} Tests + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + ruby: + - '3.0' + - '3.1' + - '3.2' + - '3.3' + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + + - name: Install dependencies + run: bundle install --jobs 4 --retry 3 + + - name: Run tests + run: bundle exec rake spec diff --git a/README.md b/README.md index c0be67e..ce669d3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # [WIP] EbayAPI +[![Build Status](https://github.com/main24/ebay_api/actions/workflows/test.yml/badge.svg?branch=support-catalog-product-search)](https://github.com/main24/ebay_api/actions/workflows/test.yml) Ruby client to eBay RESTful JSON API diff --git a/ebay_api.gemspec b/ebay_api.gemspec index 1e90c5e..49a3a7e 100644 --- a/ebay_api.gemspec +++ b/ebay_api.gemspec @@ -11,9 +11,9 @@ Gem::Specification.new do |gem| gem.test_files = gem.files.grep(/^spec/) gem.extra_rdoc_files = Dir["README.md", "LICENSE", "CHANGELOG.md"] - gem.required_ruby_version = ">= 2.2" + gem.required_ruby_version = ">= 3.0" - gem.add_runtime_dependency "evil-client", "~> 3.0", ">= 3.0.1" + gem.add_runtime_dependency "evil-client", "~> 3.2", ">= 3.2.0" gem.add_runtime_dependency "dry-equalizer" gem.add_development_dependency "rake", ">= 10"