LaunchPadLab/fuel

View on GitHub
lib/blog_importer.rb

Summary

Maintainability
A
35 mins
Test Coverage
require 'open-uri'
require 'example_author'

class BlogImporter

  DEFAULT_API_ADDRESS = "http://launchpadlab.com/api/posts.json"

  attr_reader :api_url
  attr_accessor :parsed_json

  def initialize(args = {})
    @api_url = args.fetch(:api_url, DEFAULT_API_ADDRESS)
  end

  def pull
    create_authors
    open(api_url) do |f|
      json_string = f.read
      @parsed_json = JSON.parse(json_string)
    end
    add_posts_to_db
  end

  def add_posts_to_db
    parsed_json.each do |post|
      puts "Importing #{post['title']}"
      post.delete("id")
      author_first_name = post["author"]["first_name"]
      author_last_name = post["author"]["last_name"]
      author_full_name = "#{author_first_name} #{author_last_name}"
      image_url = post["prioritized_featured_image_url"].present? ? post["prioritized_featured_image_url"].dup : nil
      post.delete("prioritized_featured_image_url")
      member = author_name_to_member[author_full_name]
      author = Fuel::Author.find_by_email(member[:email])
      post["author_id"] = author.id
      post.delete("author")
      new_post = Fuel::Post.new(post)
      new_post.featured_image = URI.parse(image_url) if image_url.present?
      new_post.published_at = post["created_at"] if new_post.published
      puts new_post.published_at
      new_post.save
    end
  end

  def author_name_to_member
    @key_to_member ||= {
      "Brendan Hennessy" => Fuel::Author.find_by_email("brendan@launchpadlab.com"),
      "Tom Cullen" => Fuel::Author.find_by_email("tom@launchpadlab.com"),
      "Ryan Francis" => Fuel::Author.find_by_email("ryan@launchpadlab.com"),
      "Scott Weisman" => Fuel::Author.find_by_email("scott@launchpadlab.com"),
      "Kurt Cunningham" => Fuel::Author.find_by_email("kurt@launchpadlab.com"),
      "Katie Astrauskas" => Fuel::Author.find_by_email("katie@launchpadlab.com"),
      "Monique Marchwiany" => Fuel::Author.find_by_email("monique@launchpadlab.com"),
      "Jack Miller" => Fuel::Author.find_by_email("jack@launchpadlab.com"),
      "Dave Corwin" => Fuel::Author.find_by_email("dave@launchpadlab.com")
    }
  end


  def create_authors
    [ExampleAuthor::BRENDAN, ExampleAuthor::TOM, ExampleAuthor::RYAN, ExampleAuthor::SCOTT, ExampleAuthor::KURT, ExampleAuthor::DAVE, ExampleAuthor::KATIE, ExampleAuthor::MONIQUE, ExampleAuthor::JACK].each do |member_const|
      member = member_const.dup
      author = Fuel::Author.find_by_email(member["email"])
      next if author.present?
      image_path = member[:image_path].dup
      member.delete(:image_path)
      member.delete(:image_alt)
      new_author = Fuel::Author.new(member)

      avatar_location = "#{Rails.root}/app/assets/images/#{image_path}"
      puts avatar_location
      file = File.open(avatar_location)
      new_author.avatar = file
      file.close

      puts "creating new author..."
      new_author.save!
      puts "Author #{Fuel::Author.count} created."
    end
  end

end