class HatenablogPublisher::Io

Public Class Methods

new(options) click to toggle source
# File lib/hatenablog_publisher/io.rb, line 3
def initialize(options)
  @options = options
end

Public Instance Methods

data_file() click to toggle source
# File lib/hatenablog_publisher/io.rb, line 11
def data_file
  @options.data_file
end
data_file?() click to toggle source
# File lib/hatenablog_publisher/io.rb, line 7
def data_file?
  data_file.present?
end
read() click to toggle source
# File lib/hatenablog_publisher/io.rb, line 45
def read
  filename = @options.filename

  if data_file?
    read_from_datafile(filename)
  else
    read_from_file(filename)
  end
end
read_from_datafile(filename) click to toggle source
# File lib/hatenablog_publisher/io.rb, line 55
def read_from_datafile(filename)
  json = JSON.parse(File.read(data_file))
  target = json.find { |l| l['filepath'] == filename }

  [target.deep_symbolize_keys, File.read(filename)]
end
read_from_file(filename) click to toggle source
# File lib/hatenablog_publisher/io.rb, line 62
def read_from_file(filename)
  parsed = FrontMatterParser::Parser.parse_file(filename, loader: yaml_loader)

  [parsed.front_matter.deep_symbolize_keys, parsed.content]
end
write(metadata, text) click to toggle source
# File lib/hatenablog_publisher/io.rb, line 19
def write(metadata, text)
  if data_file?
    write_data_file(metadata)
  else
    write_file(metadata, text)
  end
end
write_data_file(metadata) click to toggle source
# File lib/hatenablog_publisher/io.rb, line 27
def write_data_file(metadata)
  data = JSON.parse(File.read(@options.data_file))
  data.each do |l|
    next unless l['filepath'] == @options.filename

    l.deep_symbolize_keys!.merge!(metadata)
  end
  File.write(data_file, JSON.pretty_generate(data, indent: '   ', space_before: ' '))
end
write_file(metadata, text) click to toggle source
# File lib/hatenablog_publisher/io.rb, line 37
def write_file(metadata, text)
  filename = @options.filename
  parsed = FrontMatterParser::Parser.parse_file(filename, loader: yaml_loader)
  front_matter = parsed.front_matter.deep_symbolize_keys.merge(metadata)
  body = YAML.dump(front_matter.deep_stringify_keys) + "\n---\n\n" + text
  File.write(filename, body)
end
yaml_loader() click to toggle source
# File lib/hatenablog_publisher/io.rb, line 15
def yaml_loader
  FrontMatterParser::Loader::Yaml.new(whitelist_classes: [Time])
end