Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 4 additions & 16 deletions lib/generator.rb
Original file line number Diff line number Diff line change
@@ -1,31 +1,19 @@
module Newsletter
class Generator
def initialize(format)
@format = format
end

def render
<<~HTML
<<~HTMLORMARKDOWN
#{header}

#{body}
HTML
HTMLORMARKDOWN
end

def header
if @format == :html
'<h1>header</h1>'
elsif @format == :markdown
'# Header'
end
raise NotImplementedError
end

def body
if @format == :html
'<p>body</p>'
elsif @format == :markdown
'body'
end
raise NotImplementedError
end
end
end
13 changes: 13 additions & 0 deletions lib/generators/html.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Newsletter
module Generators
class Html < Newsletter::Generator
def header
'<h1>header</h1>'
end

def body
'<p>body</p>'
end
end
end
end
13 changes: 13 additions & 0 deletions lib/generators/markdown.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module Newsletter
module Generators
class Markdown < Newsletter::Generator
def header
'# Header'
end

def body
'body'
end
end
end
end
46 changes: 29 additions & 17 deletions spec/anything_spec.rb
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
require 'spec_hepler'
require_relative '../lib/generator'
require_relative '../lib/generators/html'
require_relative '../lib/generators/markdown'

describe Newsletter::Generator do
context 'when HTML' do
let(:newsletter) do
File.read(
File.expand_path('fixtures/newsletter.html', File.dirname(__FILE__))
)
end
module Newsletter
describe Generator do
context 'when HTML' do
let(:newsletter) do
File.read(
File.expand_path('fixtures/newsletter.html', File.dirname(__FILE__))
)
end

it 'generates HTML' do
expect(described_class.new(:html).render).to include(newsletter)
it 'generates HTML' do
expect(Generators::Html.new.render).to include(newsletter)
end
end
end

context 'when markdown' do
let(:newsletter) do
File.read(
File.expand_path('fixtures/newsletter.markdown', File.dirname(__FILE__))
)
context 'when markdown' do
let(:newsletter) do
File.read(
File.expand_path('fixtures/newsletter.markdown', File.dirname(__FILE__))
)
end

it 'generates markdown' do
expect(Newsletter::Generators::Markdown.new.render).to include(newsletter)
end
end

it 'generates markdown' do
expect(described_class.new(:markdown).render).to include(newsletter)
context 'when we calling the base class' do
it 'Template method requires base class to ba abstract!!!' do
expect{ Generator.new.render }.to raise_error(NotImplementedError)
expect{ Generator.new.header }.to raise_error(NotImplementedError)
expect{ Generator.new.body }.to raise_error(NotImplementedError)
end
end
end
end