Sha256: d582da43830143a029b07c0d0cffa719baa49b23ed7bf2ae9856228dbb1c4ce9

Contents?: true

Size: 1.17 KB

Versions: 11

Compression:

Stored size: 1.17 KB

Contents

class Marty::Config < Marty::Base
  class ConfigValidator < ActiveModel::Validator
    def validate(entry)
      v = entry.get_value
      entry.errors[:base] << 'bad JSON value' if v.nil?
      v
    end
  end

  validates :key, :value, presence: true
  validates :key, uniqueness: true
  validates_with ConfigValidator

  delorean_fn :lookup, sig: 1 do |key|
    self[key]
  end

  def get_value
    value[0]
  end

  def set_value(v)
    self.value = [v]
  end

  def self.fetch(*args)
    unless (1..2).cover?(args.size)
      raise ArgumentError, 'wrong number of arguments '\
                           "(given #{args.size}, expected 1..2)"
    end

    entry = find_by(key: args[0])
    return entry.get_value if entry
    return args[1] if args.size > 1

    raise KeyError, "key not found: \"#{args[0]}\""
  end

  def self.[]=(key, value)
    entry = find_by(key: key)
    if !entry
      entry = new
      entry.key = key
    end
    entry.set_value(value)
    entry.save!

    value
  end

  def self.[](key)
    fetch(key, nil)
  end

  def self.del(key)
    entry = find_by(key: key)
    if entry
      result = entry.get_value
      entry.destroy
      result
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
marty-14.3.0 app/models/marty/config.rb
marty-14.0.0 app/models/marty/config.rb
marty-13.0.2 app/models/marty/config.rb
marty-11.0.0 app/models/marty/config.rb
marty-10.0.3 app/models/marty/config.rb
marty-10.0.2 app/models/marty/config.rb
marty-10.0.0 app/models/marty/config.rb
marty-9.5.1 app/models/marty/config.rb
marty-9.5.0 app/models/marty/config.rb
marty-9.3.3 app/models/marty/config.rb
marty-9.3.2 app/models/marty/config.rb