Module: MinerMover::Config

Defined in:
lib/miner_mover/config.rb

Defined Under Namespace

Classes: Error

Constant Summary collapse

GLOB =
'*/*.cfg'.freeze
DEFAULT =

reasonable defaults for all known keys

{
  main: {
    num_miners: 3,
    num_movers: 3,
    time_limit: 5,
    ore_limit: 100,
    logging: true,
    debugging: false,
  }.freeze,
  miner: {
    depth: 30,
    partial_reward: false,
    variance: 0,
    logging: true,
    debugging: false,
  }.freeze,
  mover: {
    batch_size: 8,
    rate: 4,
    work_type: :wait,
    variance: 0,
    logging: true,
    debugging: false,
  }.freeze,
}.freeze

Class Method Summary collapse

Class Method Details

.gather(*globs) ⇒ Object

return an array of strings representing file paths



37
38
39
# File 'lib/miner_mover/config.rb', line 37

def self.gather(*globs)
  (globs.unshift GLOB).inject([]) { |memo, glob| memo + Dir[glob] }
end

.process(file = nil, cfg: nil) ⇒ Object

return a hash with :miner, :mover, :main keys



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/miner_mover/config.rb', line 52

def self.process(file = nil, cfg: nil)
  cfg ||= DotCfg.new(file || self.recent)

  if cfg['miner'] or cfg['mover'] or cfg['main']
    # convert string keys to symbols
    miner = (cfg['miner'] || {}).transform_keys { |k| k.to_sym }
    mover = (cfg['mover'] || {}).transform_keys { |k| k.to_sym }
    main  = (cfg['main']  || {}).transform_keys { |k| k.to_sym }
  elsif cfg[:miner] or cfg[:mover] or cfg[:main]
    # assume all keys are symbols
    miner = cfg[:miner] || {}
    mover = cfg[:mover] || {}
    main  = cfg[:main]  || {}
  else
    miner, mover, main = {}, {}, {}
  end
  { miner: DEFAULT[:miner].merge(miner),
    mover: DEFAULT[:mover].merge(mover),
    main:  DEFAULT[:main].merge(main) }
end

.recent(*globs) ⇒ Object

return a file path as a string, or nil



42
43
44
45
46
47
48
49
# File 'lib/miner_mover/config.rb', line 42

def self.recent(*globs)
  mtime, newest = Time.at(0), nil
  self.gather(*globs).each { |file|
    mt = File.mtime(file)
    mtime, newest = mt, file if mt > mtime
  }
  newest
end

.rewrite(file) ⇒ Object

rewrites the dotcfg file, filling in any defaults, using symbols for keys



74
75
76
77
78
79
# File 'lib/miner_mover/config.rb', line 74

def self.rewrite(file)
  cfg = DotCfg.new(file)
  hsh = self.process(cfg: cfg)
  hsh.each { |k, v| cfg[k] = v }
  cfg.save
end