From 8ae858533933024a00ef0cb25ff1a70e05f23e35 Mon Sep 17 00:00:00 2001 From: mesmerize Date: Wed, 15 Sep 2021 21:32:09 +0200 Subject: [PATCH] really shitty example --- lib/newsletter/adapters/json.rb | 15 +++++++++++++++ lib/newsletter/adapters/xml.rb | 19 +++++++++++++++++++ lib/newsletter/content.rb | 17 ++--------------- spec/anything_spec.rb | 6 ++++-- 4 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 lib/newsletter/adapters/json.rb create mode 100644 lib/newsletter/adapters/xml.rb diff --git a/lib/newsletter/adapters/json.rb b/lib/newsletter/adapters/json.rb new file mode 100644 index 0000000..c59fe3a --- /dev/null +++ b/lib/newsletter/adapters/json.rb @@ -0,0 +1,15 @@ +module Newsletter + module Adapters + class Json + attr_reader :source + + def initialize(source) + @source = source + end + + def parse + JSON.parse(source) + end + end + end +end diff --git a/lib/newsletter/adapters/xml.rb b/lib/newsletter/adapters/xml.rb new file mode 100644 index 0000000..d5b8c4d --- /dev/null +++ b/lib/newsletter/adapters/xml.rb @@ -0,0 +1,19 @@ +module Newsletter + module Adapters + class Xml + attr_reader :source + + def initialize(source) + @source = source + end + + def parse + xml = Nokogiri::XML source + title = xml.xpath('//item/title')[0].children[0].text + body = xml.xpath('//item/body')[0].children[0].text + + { 'title' => title, 'body' => body } + end + end + end +end diff --git a/lib/newsletter/content.rb b/lib/newsletter/content.rb index e83ceb4..cf82599 100644 --- a/lib/newsletter/content.rb +++ b/lib/newsletter/content.rb @@ -3,9 +3,8 @@ class Content attr_reader :title, :body def self.parse(source, format) - content = if format == :json then parse_json(source) - elsif format == :xml then parse_xml(source) - end + adapter = Newsletter::Adapters.const_get(format).new(source) + content = adapter.parse new(content['title'], content['body']) end @@ -13,17 +12,5 @@ def initialize(title, body) @title = title @body = body end - - def self.parse_json(source) - JSON.parse(source) - end - - def self.parse_xml(sourse) - xml = Nokogiri::XML sourse - title = xml.xpath('//item/title')[0].children[0].text - body = xml.xpath('//item/body')[0].children[0].text - - { "title" => title, "body" => body } - end end end diff --git a/spec/anything_spec.rb b/spec/anything_spec.rb index 1b75626..0c614f1 100644 --- a/spec/anything_spec.rb +++ b/spec/anything_spec.rb @@ -4,6 +4,8 @@ require 'pry' require 'newsletter/content' +require 'newsletter/adapters/json' +require 'newsletter/adapters/xml' module Newsletter describe Content do @@ -14,7 +16,7 @@ module Newsletter ) end - subject { Content.parse(json, :json) } + subject { Content.parse(json, :Json) } it 'parses the title' do expect(subject.title).to eq('Hello world!') @@ -32,7 +34,7 @@ module Newsletter ) end - subject { Content.parse(json, :xml) } + subject { Content.parse(json, :Xml) } it 'parses the title' do expect(subject.title).to eq('Hello world!')