Skip to content

Commit 33c30b7

Browse files
committed
Send plausible event when color scheme updated
1 parent a105b03 commit 33c30b7

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

app/clients/plausible_client.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@
1010

1111
class PlausibleClient < ApplicationClient
1212
BASE_URI = "https://plausible.io/api"
13+
DOMAIN = "joyofrails.com"
1314

14-
def post_event(name:, url:, domain: "joyofrails.com", headers: {})
15+
def post_event(name:, url:, referrer: nil, props: nil, headers: {})
1516
post(
1617
"/event",
1718
body: {
1819
name:,
1920
url:,
20-
domain:
21-
},
21+
referrer:,
22+
props:,
23+
domain: DOMAIN
24+
}.reject { |_, v| v.nil? },
2225
headers: headers.reverse_merge("Content-Type" => "application/json")
2326
)
2427
end

app/controllers/settings/color_schemes_controller.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
class Settings::ColorSchemesController < ApplicationController
2+
after_action :send_plausible_event, only: :update
3+
24
def show
35
@color_scheme = find_color_scheme
46

@@ -32,4 +34,23 @@ def update
3234

3335
redirect_to settings_color_scheme_path, status: :see_other
3436
end
37+
38+
private
39+
40+
def send_plausible_event
41+
plausible_event "Color Scheme Update", props: {color_scheme: @color_scheme.name}
42+
end
43+
44+
def plausible_event(name, props: {})
45+
Analytics::PlausibleEventJob.perform_later(
46+
name: name,
47+
url: request.original_url,
48+
props: props,
49+
referrer: request.referer,
50+
headers: {
51+
"User-Agent" => request.user_agent,
52+
"X-Forwarded-For" => request.remote_ip
53+
}
54+
)
55+
end
3556
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Analytics::PlausibleEventJob < ApplicationJob
2+
def perform(name:, url:, referrer: nil, props: nil, headers: {})
3+
result = PlausibleClient.new.post_event(name:, url:, referrer:, props:, headers: headers)
4+
5+
if result.code.to_i >= 300
6+
Rails.logger.warn("[#{self.class}] Plausible event unexpected response: #{result.code} #{result.body}")
7+
else
8+
Rails.logger.info("[#{self.class}] Plausible event posted: #{result.code} #{result.body}")
9+
end
10+
end
11+
end

spec/requests/settings/color_schemes_spec.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,5 +106,15 @@
106106
expect(response.body).to match(default_color_scheme.name.parameterize)
107107
end
108108
end
109+
110+
it "sends a plausible event" do
111+
plausible_request = stub_request(:post, "https://plausible.io/api/event")
112+
113+
patch settings_color_scheme_path(settings: {color_scheme_id: color_scheme.id})
114+
115+
perform_enqueued_jobs
116+
117+
expect(plausible_request).to have_been_requested
118+
end
109119
end
110120
end

0 commit comments

Comments
 (0)