diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7352025..295ffbb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,6 +30,9 @@ jobs: browser-tests: runs-on: ubuntu-latest + env: + CHROME_PATH: /usr/bin/google-chrome + steps: - uses: actions/checkout@v4 - name: Set up Ruby diff --git a/.rubocop.yml b/.rubocop.yml index 3a733b3..0bbacaf 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -17,4 +17,4 @@ Layout/LineLength: Max: 150 Metrics/BlockLength: - IgnoredMethods: ['describe', 'context', 'shared_examples'] + AllowedMethods: ['describe', 'context', 'shared_examples'] diff --git a/Gemfile b/Gemfile index b766968..5387f5e 100644 --- a/Gemfile +++ b/Gemfile @@ -18,14 +18,14 @@ group :development, :test do gem "cuprite", "~> 0.15" gem "pry" gem "pry-byebug", "~> 3.10" - gem "rake", "~> 13.0" gem "rack-test", "~> 2.1" gem "rails", "~> 8.0" + gem "rake", "~> 13.0" gem "rspec", "~> 3.13" - gem "sqlite3", "~> 2.0" gem "rubocop", "~> 1.60" gem "rubocop-rake", "~> 0.7" gem "rubocop-rspec", "~> 2.31" gem "simplecov", "~> 0.22" + gem "sqlite3", "~> 2.0" gem "webmock", "~> 3.23" end diff --git a/app/controllers/yookassa/webhooks_controller.rb b/app/controllers/yookassa/webhooks_controller.rb index 29a0a78..6d5e493 100644 --- a/app/controllers/yookassa/webhooks_controller.rb +++ b/app/controllers/yookassa/webhooks_controller.rb @@ -54,7 +54,7 @@ module Yookassa end def payload_matches_api_object?(payload) - object = payload["object"] || payload.dig("data", "object") + object = extract_object(payload) return false unless object.is_a?(Hash) object_id = object["id"].to_s @@ -69,6 +69,10 @@ module Yookassa false end + def extract_object(payload) + payload["object"] || payload.dig("data", "object") + end + def fetch_object_from_api(payload, object_id) event_name = payload["event"].to_s event_name = payload["type"].to_s if event_name.empty? diff --git a/config/routes.rb b/config/routes.rb index 0ef3391..5d9d15d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Yookassa::Engine.routes.draw do post "/webhooks/:token", to: "webhooks#create" end diff --git a/lib/yookassa/client.rb b/lib/yookassa/client.rb index 1522405..7fe0f25 100644 --- a/lib/yookassa/client.rb +++ b/lib/yookassa/client.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "http" -require_relative "./entity/error" +require_relative "entity/error" module Yookassa class Client diff --git a/lib/yookassa/deals.rb b/lib/yookassa/deals.rb index e296da2..b328ca6 100644 --- a/lib/yookassa/deals.rb +++ b/lib/yookassa/deals.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./client" -require_relative "./entity/deal" -require_relative "./entity/collection" +require_relative "client" +require_relative "entity/deal" +require_relative "entity/collection" module Yookassa class Deals < Client @@ -13,7 +13,7 @@ module Yookassa def create(payload:, idempotency_key: SecureRandom.hex(10)) data = post("deals", payload: payload, idempotency_key: idempotency_key) - Entity::Deal.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Deal.new(**data, idempotency_key: idempotency_key) end def list diff --git a/lib/yookassa/entity/amount.rb b/lib/yookassa/entity/amount.rb index 2db9abf..ed42bb3 100644 --- a/lib/yookassa/entity/amount.rb +++ b/lib/yookassa/entity/amount.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/authorization_details.rb b/lib/yookassa/entity/authorization_details.rb index 59d23d0..323544e 100644 --- a/lib/yookassa/entity/authorization_details.rb +++ b/lib/yookassa/entity/authorization_details.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/cancellation_details.rb b/lib/yookassa/entity/cancellation_details.rb index 55da223..0e6e466 100644 --- a/lib/yookassa/entity/cancellation_details.rb +++ b/lib/yookassa/entity/cancellation_details.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/card.rb b/lib/yookassa/entity/card.rb index 30c2561..bef49c2 100644 --- a/lib/yookassa/entity/card.rb +++ b/lib/yookassa/entity/card.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/collection.rb b/lib/yookassa/entity/collection.rb index a3e20f8..3425c50 100644 --- a/lib/yookassa/entity/collection.rb +++ b/lib/yookassa/entity/collection.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./payment" -require_relative "./receipt" -require_relative "./refund" -require_relative "./webhook" -require_relative "./deal" +require_relative "types" +require_relative "payment" +require_relative "receipt" +require_relative "refund" +require_relative "webhook" +require_relative "deal" module Yookassa module Entity diff --git a/lib/yookassa/entity/confirmation.rb b/lib/yookassa/entity/confirmation.rb index 4010a68..aaefc3f 100644 --- a/lib/yookassa/entity/confirmation.rb +++ b/lib/yookassa/entity/confirmation.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/customer.rb b/lib/yookassa/entity/customer.rb index 7b68d81..8febf79 100644 --- a/lib/yookassa/entity/customer.rb +++ b/lib/yookassa/entity/customer.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/deal.rb b/lib/yookassa/entity/deal.rb index a68adb0..cd3fd2a 100644 --- a/lib/yookassa/entity/deal.rb +++ b/lib/yookassa/entity/deal.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" +require_relative "types" +require_relative "amount" module Yookassa module Entity diff --git a/lib/yookassa/entity/error.rb b/lib/yookassa/entity/error.rb index 5e99f65..31ff06a 100644 --- a/lib/yookassa/entity/error.rb +++ b/lib/yookassa/entity/error.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/payment.rb b/lib/yookassa/entity/payment.rb index fe60828..e7e1b6a 100644 --- a/lib/yookassa/entity/payment.rb +++ b/lib/yookassa/entity/payment.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" -require_relative "./payment_methods" -require_relative "./confirmation" -require_relative "./recipient" -require_relative "./cancellation_details" -require_relative "./authorization_details" -require_relative "./transfer" +require_relative "types" +require_relative "amount" +require_relative "payment_methods" +require_relative "confirmation" +require_relative "recipient" +require_relative "cancellation_details" +require_relative "authorization_details" +require_relative "transfer" module Yookassa module Entity diff --git a/lib/yookassa/entity/payment_methods.rb b/lib/yookassa/entity/payment_methods.rb index 4ee1c08..c309d3d 100644 --- a/lib/yookassa/entity/payment_methods.rb +++ b/lib/yookassa/entity/payment_methods.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./card" +require_relative "types" +require_relative "card" module Yookassa module Entity diff --git a/lib/yookassa/entity/payment_receipt.rb b/lib/yookassa/entity/payment_receipt.rb index 59fa099..4b92d42 100644 --- a/lib/yookassa/entity/payment_receipt.rb +++ b/lib/yookassa/entity/payment_receipt.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./customer" -require_relative "./product" +require_relative "types" +require_relative "customer" +require_relative "product" module Yookassa module Entity diff --git a/lib/yookassa/entity/payout.rb b/lib/yookassa/entity/payout.rb index f2e6ed1..1db0cd6 100644 --- a/lib/yookassa/entity/payout.rb +++ b/lib/yookassa/entity/payout.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" -require_relative "./payout_destinations" +require_relative "types" +require_relative "amount" +require_relative "payout_destinations" module Yookassa module Entity diff --git a/lib/yookassa/entity/payout_destinations.rb b/lib/yookassa/entity/payout_destinations.rb index ea9a829..d170573 100644 --- a/lib/yookassa/entity/payout_destinations.rb +++ b/lib/yookassa/entity/payout_destinations.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./card" +require_relative "types" +require_relative "card" module Yookassa module Entity diff --git a/lib/yookassa/entity/product.rb b/lib/yookassa/entity/product.rb index 8191dfd..6c55923 100644 --- a/lib/yookassa/entity/product.rb +++ b/lib/yookassa/entity/product.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" -require_relative "./supplier" +require_relative "types" +require_relative "amount" +require_relative "supplier" module Yookassa module Entity diff --git a/lib/yookassa/entity/receipt.rb b/lib/yookassa/entity/receipt.rb index 883faf2..eeda0b5 100644 --- a/lib/yookassa/entity/receipt.rb +++ b/lib/yookassa/entity/receipt.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./customer" -require_relative "./product" -require_relative "./settlement" +require_relative "types" +require_relative "customer" +require_relative "product" +require_relative "settlement" module Yookassa module Entity diff --git a/lib/yookassa/entity/recipient.rb b/lib/yookassa/entity/recipient.rb index b8bdc39..4d303d3 100644 --- a/lib/yookassa/entity/recipient.rb +++ b/lib/yookassa/entity/recipient.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/refund.rb b/lib/yookassa/entity/refund.rb index 379ed81..62deed1 100644 --- a/lib/yookassa/entity/refund.rb +++ b/lib/yookassa/entity/refund.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" -require_relative "./source" +require_relative "types" +require_relative "amount" +require_relative "source" module Yookassa module Entity diff --git a/lib/yookassa/entity/settlement.rb b/lib/yookassa/entity/settlement.rb index a2f6f43..1f2660c 100644 --- a/lib/yookassa/entity/settlement.rb +++ b/lib/yookassa/entity/settlement.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" +require_relative "types" +require_relative "amount" module Yookassa module Entity diff --git a/lib/yookassa/entity/source.rb b/lib/yookassa/entity/source.rb index 99c36a4..4fd32c9 100644 --- a/lib/yookassa/entity/source.rb +++ b/lib/yookassa/entity/source.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" +require_relative "types" +require_relative "amount" module Yookassa module Entity diff --git a/lib/yookassa/entity/store_info.rb b/lib/yookassa/entity/store_info.rb index 1638b5d..740be55 100644 --- a/lib/yookassa/entity/store_info.rb +++ b/lib/yookassa/entity/store_info.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/supplier.rb b/lib/yookassa/entity/supplier.rb index 32d982a..d973cbf 100644 --- a/lib/yookassa/entity/supplier.rb +++ b/lib/yookassa/entity/supplier.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/entity/transfer.rb b/lib/yookassa/entity/transfer.rb index 48c9d17..ada4b72 100644 --- a/lib/yookassa/entity/transfer.rb +++ b/lib/yookassa/entity/transfer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative "./types" -require_relative "./amount" +require_relative "types" +require_relative "amount" module Yookassa module Entity diff --git a/lib/yookassa/entity/webhook.rb b/lib/yookassa/entity/webhook.rb index b1620aa..e0b79b7 100644 --- a/lib/yookassa/entity/webhook.rb +++ b/lib/yookassa/entity/webhook.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require_relative "./types" +require_relative "types" module Yookassa module Entity diff --git a/lib/yookassa/payments.rb b/lib/yookassa/payments.rb index 987817a..d351236 100644 --- a/lib/yookassa/payments.rb +++ b/lib/yookassa/payments.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./client" -require_relative "./entity/payment" -require_relative "./entity/collection" +require_relative "client" +require_relative "entity/payment" +require_relative "entity/collection" module Yookassa class Payments < Client @@ -13,17 +13,17 @@ module Yookassa def create(payment:, idempotency_key: SecureRandom.hex(10)) data = post("payments", payload: payment, idempotency_key: idempotency_key) - Entity::Payment.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Payment.new(**data, idempotency_key: idempotency_key) end def capture(payment_id:, idempotency_key: SecureRandom.hex(10)) data = post("payments/#{payment_id}/capture", idempotency_key: idempotency_key) - Entity::Payment.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Payment.new(**data, idempotency_key: idempotency_key) end def cancel(payment_id:, idempotency_key: SecureRandom.hex(10)) data = post("payments/#{payment_id}/cancel", idempotency_key: idempotency_key) - Entity::Payment.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Payment.new(**data, idempotency_key: idempotency_key) end def list(filters: {}) diff --git a/lib/yookassa/payouts.rb b/lib/yookassa/payouts.rb index 8e5b3ed..6bfb64a 100644 --- a/lib/yookassa/payouts.rb +++ b/lib/yookassa/payouts.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./client" -require_relative "./entity/payout" -require_relative "./entity/collection" +require_relative "client" +require_relative "entity/payout" +require_relative "entity/collection" module Yookassa class Payouts < Client @@ -13,7 +13,7 @@ module Yookassa def create(payload:, idempotency_key: SecureRandom.hex(10)) data = post("payouts", payload: payload, idempotency_key: idempotency_key) - Entity::Payout.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Payout.new(**data, idempotency_key: idempotency_key) end end end diff --git a/lib/yookassa/receipts.rb b/lib/yookassa/receipts.rb index b423911..6f395e1 100644 --- a/lib/yookassa/receipts.rb +++ b/lib/yookassa/receipts.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./client" -require_relative "./entity/receipt" -require_relative "./entity/collection" +require_relative "client" +require_relative "entity/receipt" +require_relative "entity/collection" module Yookassa class Receipts < Client @@ -13,7 +13,7 @@ module Yookassa def create(payload:, idempotency_key: SecureRandom.hex(10)) data = post("receipts", payload: payload, idempotency_key: idempotency_key) - Entity::Receipt.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Receipt.new(**data, idempotency_key: idempotency_key) end def list(filters: {}) diff --git a/lib/yookassa/refunds.rb b/lib/yookassa/refunds.rb index 6fd18ca..56bdbd4 100644 --- a/lib/yookassa/refunds.rb +++ b/lib/yookassa/refunds.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require_relative "./client" -require_relative "./entity/refund" -require_relative "./entity/collection" +require_relative "client" +require_relative "entity/refund" +require_relative "entity/collection" module Yookassa class Refunds < Client @@ -13,7 +13,7 @@ module Yookassa def create(payload:, idempotency_key: SecureRandom.hex(10)) data = post("refunds", payload: payload, idempotency_key: idempotency_key) - Entity::Refund.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Refund.new(**data, idempotency_key: idempotency_key) end def list(filters: {}) diff --git a/lib/yookassa/stores.rb b/lib/yookassa/stores.rb index 9b9791a..07f1acb 100644 --- a/lib/yookassa/stores.rb +++ b/lib/yookassa/stores.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative "./client" -require_relative "./entity/store_info" +require_relative "client" +require_relative "entity/store_info" module Yookassa class Stores < Client diff --git a/lib/yookassa/webhooks.rb b/lib/yookassa/webhooks.rb index 0b8b6f7..fb79fae 100644 --- a/lib/yookassa/webhooks.rb +++ b/lib/yookassa/webhooks.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require_relative "./client" -require_relative "./entity/webhook" -require_relative "./entity/collection" +require_relative "client" +require_relative "entity/webhook" +require_relative "entity/collection" module Yookassa class Webhooks < Client def create(payload:, idempotency_key: SecureRandom.hex(10)) data = post("webhooks", payload: payload, idempotency_key: idempotency_key) - Entity::Webhook.new(**data.merge(idempotency_key: idempotency_key)) + Entity::Webhook.new(**data, idempotency_key: idempotency_key) end def list @@ -16,7 +16,7 @@ module Yookassa Entity::WebhookCollection.new(**data) end - def delete(webhook_id:) + def delete(webhook_id:) # rubocop:disable Naming/PredicateMethod delete("webhooks/#{webhook_id}") true end diff --git a/spec/support/rails_test_app.rb b/spec/support/rails_test_app.rb index f170a67..0ecf3ca 100644 --- a/spec/support/rails_test_app.rb +++ b/spec/support/rails_test_app.rb @@ -17,7 +17,7 @@ if defined?(Rails) require File.expand_path("../../app/controllers/yookassa/webhooks_controller", __dir__) class YookassaSpecBrowserController < ActionController::Base - def index + def index # rubocop:disable Metrics/MethodLength render inline: <<~HTML