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