class Markov::CLI

Public Instance Methods

analyze(*source_file_paths) click to toggle source
# File lib/markov/cli.rb, line 12
def analyze(*source_file_paths)
  raise "Please provide an --out_json options!" unless options['out_json'] # || options['out_markov']

  order = options.fetch('order',6).to_i
  new_words = options['new_words']

  say "Constructing chain of order #{order}"
  chain = Chain.new(name: source_file_paths.map { |f| File.basename(f,'.txt') }.join('/'), order: order, new_words: new_words)

  source_file_paths.each do |source_file_path|
    say "Reading #{source_file_path} into memory..."
    text = File.read(source_file_path)

    say "Parsing #{source_file_path}..."
    chain.parse(text)
  end

  outfile = options['out_json']
  say "Writing JSON data to #{outfile}..."
  File.write(outfile, Oj.dump(chain))
end
sample(analysis_file="data/shakespeare.json") click to toggle source
# File lib/markov/cli.rb, line 38
def sample(analysis_file="data/shakespeare.json")
  say "Reading analysis files..."
  chain = load_chain(analysis_file)

  max = options.fetch('max', 1_000).to_i
  start_text = options.fetch('start_text', "")

  say "Sampling #{max} characters."
  say "With drama!" if options['show']
  say "Using start text:\n#{start_text}" if start_text

  say "==== BEGIN SAMPLE ===="
  text = chain.generate!(max: max, show: options['show'], start_text: start_text)
  puts text unless options['show']
  say "==== END SAMPLE ===="
end
serve(*analysis_files) click to toggle source
# File lib/markov/cli.rb, line 57
def serve(*analysis_files)
  Server.configure do |config|
    config.set :chains, analysis_files.map { |f| load_chain(f) }
    config.set :port, options['p'] if options['p']
  end

  Server.run!
end

Private Instance Methods

load_chain(analysis_file) click to toggle source
# File lib/markov/cli.rb, line 67
def load_chain(analysis_file)
  chain_data = File.read(analysis_file)
  filetype = File.extname(analysis_file)
  if filetype == ".json"
    say "Reconstructing chain from JSON data in #{analysis_file}..."
    Oj.load(chain_data)
    say "Done!"
  else
    raise "Can't load chain from '#{analysis_file}'"
  end
end
say(text) click to toggle source
# File lib/markov/cli.rb, line 79
def say(text)
  puts "       #{text}"
end