Skip to content

Commit

Permalink
Introduce BlogPost::Writer
Browse files Browse the repository at this point in the history
This module is only responsible for picking a BlogPost writer given the
environment variables..
  • Loading branch information
MatheusRich committed Sep 1, 2023
1 parent 37c33e7 commit 9f53cd9
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 25 deletions.
15 changes: 1 addition & 14 deletions lib/gold_miner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,7 @@ def convert_messages_to_blogpost(channel, messages, blog_post_builder: GoldMiner
slack_channel: channel,
messages: messages,
since: Helpers::Time.last_friday,
writer: blog_post_writer
writer: BlogPost::Writer.from_env
)
end

private

def blog_post_writer
if ENV["OPEN_AI_API_TOKEN"]
GoldMiner::BlogPost::OpenAiWriter.new(
open_ai_api_token: ENV["OPEN_AI_API_TOKEN"],
fallback_writer: GoldMiner::BlogPost::SimpleWriter.new
)
else
GoldMiner::BlogPost::SimpleWriter.new
end
end
end
18 changes: 18 additions & 0 deletions lib/gold_miner/blog_post/writer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# frozen_string_literal: true

module GoldMiner
class BlogPost
module Writer
def self.from_env
if ENV["OPEN_AI_API_TOKEN"]
GoldMiner::BlogPost::OpenAiWriter.new(
open_ai_api_token: ENV["OPEN_AI_API_TOKEN"],
fallback_writer: GoldMiner::BlogPost::SimpleWriter.new
)
else
GoldMiner::BlogPost::SimpleWriter.new
end
end
end
end
end
26 changes: 26 additions & 0 deletions spec/gold_miner/blog_post/writer_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# frozen_string_literal: true

require "spec_helper"

RSpec.describe GoldMiner::BlogPost::Writer do
describe ".from_env" do
context "when OPEN_AI_API_TOKEN env var is set" do
it "returns an OpenAI writer" do
with_env("OPEN_AI_API_TOKEN" => "test-token") do
writer = described_class.from_env

expect(writer).to be_a GoldMiner::BlogPost::OpenAiWriter
end
end
end
context "when OPEN_AI_API_TOKEN env var is not set" do
it "returns a Simple writer" do
with_env("OPEN_AI_API_TOKEN" => nil) do
writer = described_class.from_env

expect(writer).to be_a GoldMiner::BlogPost::SimpleWriter
end
end
end
end
end
11 changes: 0 additions & 11 deletions spec/gold_miner_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,4 @@
it "has a version number" do
expect(GoldMiner::VERSION).not_to be nil
end

private

def with_env(env)
original_env = ENV.to_hash
ENV.update(env)

yield
ensure
ENV.replace(original_env)
end
end
14 changes: 14 additions & 0 deletions spec/support/env_helpers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module EnvHelpers
def with_env(env)
original_env = ENV.to_hash
ENV.update(env)

yield
ensure
ENV.replace(original_env)
end
end

RSpec.configure do |config|
config.include EnvHelpers
end

0 comments on commit 9f53cd9

Please sign in to comment.