From 4ad694564de9a6eec1da5814ecc723762f365435 Mon Sep 17 00:00:00 2001 From: Tomas Smetka Date: Thu, 8 Jan 2026 17:35:27 +0100 Subject: [PATCH 1/4] Add blogs create webhook --- README.md | 4 +++- lib/pobo/enum/webhook_event.rb | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f884cc8..b00c3e5 100644 --- a/README.md +++ b/README.md @@ -251,6 +251,8 @@ class WebhooksController < ApplicationController SyncProductsJob.perform_later when Pobo::WebhookEvent::CATEGORIES_UPDATE SyncCategoriesJob.perform_later + when Pobo::WebhookEvent::BLOGS_UPDATE + SyncBlogsJob.perform_later end render json: { status: 'ok' } @@ -273,7 +275,7 @@ payload = handler.handle( ### Webhook Payload ```ruby -payload.event # String: "products.update" or "categories.update" +payload.event # String: "products.update", "categories.update", or "blogs.update" payload.timestamp # Time payload.eshop_id # Integer ``` diff --git a/lib/pobo/enum/webhook_event.rb b/lib/pobo/enum/webhook_event.rb index aed102c..b88bd94 100644 --- a/lib/pobo/enum/webhook_event.rb +++ b/lib/pobo/enum/webhook_event.rb @@ -4,8 +4,9 @@ module Pobo module WebhookEvent PRODUCTS_UPDATE = "products.update" CATEGORIES_UPDATE = "categories.update" + BLOGS_UPDATE = "blogs.update" - ALL = [PRODUCTS_UPDATE, CATEGORIES_UPDATE].freeze + ALL = [PRODUCTS_UPDATE, CATEGORIES_UPDATE, BLOGS_UPDATE].freeze def self.valid?(event) ALL.include?(event) From 2b448b2921d7ae629a31b7bb045fc5a2ae0461fe Mon Sep 17 00:00:00 2001 From: Tomas Smetka Date: Thu, 8 Jan 2026 21:48:40 +0100 Subject: [PATCH 2/4] Add table --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index b00c3e5..25ba016 100644 --- a/README.md +++ b/README.md @@ -338,6 +338,19 @@ name.to_hash # => { 'default' => '...', 'cs' => '...', ... | `each_category(last_update_from:, is_edited:)` | Iterate all categories | | `each_blog(last_update_from:, is_edited:)` | Iterate all blogs | +## Limits + +| Limit | Value | +|------------------------------|--------------| +| Max items per import request | 100 | +| Max items per export page | 100 | +| Product/Category ID length | 255 chars | +| Name length | 250 chars | +| URL length | 255 chars | +| Image URL length | 650 chars | +| Description length | 65,000 chars | +| SEO description length | 500 chars | + ## Development After checking out the repo, run `bundle install` to install dependencies. Then, run `rake spec` to run the tests. From 794d2ae62b44da082d640690d9ad933ad13b0327 Mon Sep 17 00:00:00 2001 From: Tomas Smetka Date: Thu, 8 Jan 2026 21:50:48 +0100 Subject: [PATCH 3/4] Add test and enum --- spec/pobo/enum/webhook_event_spec.rb | 41 ++++++++++++++++++++++++++++ spec/pobo/webhook_handler_spec.rb | 22 ++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 spec/pobo/enum/webhook_event_spec.rb diff --git a/spec/pobo/enum/webhook_event_spec.rb b/spec/pobo/enum/webhook_event_spec.rb new file mode 100644 index 0000000..df2fa6b --- /dev/null +++ b/spec/pobo/enum/webhook_event_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require "spec_helper" + +RSpec.describe Pobo::WebhookEvent do + describe "constants" do + it "defines PRODUCTS_UPDATE" do + expect(described_class::PRODUCTS_UPDATE).to eq("products.update") + end + + it "defines CATEGORIES_UPDATE" do + expect(described_class::CATEGORIES_UPDATE).to eq("categories.update") + end + + it "defines BLOGS_UPDATE" do + expect(described_class::BLOGS_UPDATE).to eq("blogs.update") + end + + it "includes all events in ALL" do + expect(described_class::ALL).to contain_exactly( + "products.update", + "categories.update", + "blogs.update" + ) + end + end + + describe ".valid?" do + it "returns true for valid events" do + expect(described_class.valid?("products.update")).to be true + expect(described_class.valid?("categories.update")).to be true + expect(described_class.valid?("blogs.update")).to be true + end + + it "returns false for invalid events" do + expect(described_class.valid?("invalid.event")).to be false + expect(described_class.valid?("")).to be false + expect(described_class.valid?(nil)).to be false + end + end +end diff --git a/spec/pobo/webhook_handler_spec.rb b/spec/pobo/webhook_handler_spec.rb index 4849b33..147d7c4 100644 --- a/spec/pobo/webhook_handler_spec.rb +++ b/spec/pobo/webhook_handler_spec.rb @@ -12,7 +12,7 @@ def sign(payload) end describe "#handle" do - it "validates and parses webhook payload" do + it "validates and parses products.update webhook payload" do payload = { event: "products.update", timestamp: 1704067200, eshop_id: 123 }.to_json signature = sign(payload) @@ -23,6 +23,26 @@ def sign(payload) expect(result.timestamp).to be_a(Time) end + it "validates and parses categories.update webhook payload" do + payload = { event: "categories.update", timestamp: 1704067200, eshop_id: 456 }.to_json + signature = sign(payload) + + result = handler.handle(payload: payload, signature: signature) + + expect(result.event).to eq("categories.update") + expect(result.eshop_id).to eq(456) + end + + it "validates and parses blogs.update webhook payload" do + payload = { event: "blogs.update", timestamp: 1704067200, eshop_id: 789 }.to_json + signature = sign(payload) + + result = handler.handle(payload: payload, signature: signature) + + expect(result.event).to eq("blogs.update") + expect(result.eshop_id).to eq(789) + end + it "raises error for missing signature" do payload = { event: "products.update" }.to_json From 60de971c1851342ad4afac1cfdfc8dab23f0a71c Mon Sep 17 00:00:00 2001 From: Tomas Smetka Date: Thu, 8 Jan 2026 21:53:10 +0100 Subject: [PATCH 4/4] Update version --- lib/pobo/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pobo/version.rb b/lib/pobo/version.rb index 809085c..ff3c77d 100644 --- a/lib/pobo/version.rb +++ b/lib/pobo/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Pobo - VERSION = "1.0.0" + VERSION = "1.1.0" end