esp-idf-lib/devtools/spec/person.rb

Wed, 12 Apr 2023 16:23:02 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 12 Apr 2023 16:23:02 +0200
changeset 24
74609f70411e
parent 1
1c9894662795
permissions
-rw-r--r--

Reduced I2C master speed from 400 to 100 Khz. Hope to get power-on init for BMP280 more reliable. Added warnings for I2C devices that are missing. Some logmessages reduced to debug log messages. Added extra 10 mSec delays before read shunt voltage in the INA219 task. Removed and reduced log levels in the MQTT task. Show received data events. Remove WiFi total time debug logging, it's ok now.

# frozen_string_literal: true

require "yaml"

# A class that repesents Peson
class Person
  PERSON_FILE = File.expand_path(File.join(File.dirname("__FILE__"), "persons.yml")).freeze

  def initialize(arg)
    validate_arg(arg)
    validate_keys(arg) if arg.is_a? Hash

    name = if arg.is_a? String
             arg
           else
             arg["name"]
           end
    @metadata = lookup_person(name)
  end

  attr_reader :metadata, :persons

  def validate_keys(hash)
    raise ArgumentError, "missing key: `name`" unless hash.key?("name")
  end

  def valid_arg_class?(arg)
    arg.is_a?(String) || arg.is_a?(Hash)
  end

  def validate_arg(arg)
    raise ArgumentError, "String or dict is ecpected, but got `#{arg.class}`" unless valid_arg_class?(arg)
  end

  def load_person_file
    File.read(PERSON_FILE)
  end

  def parse(string)
    return @persons if @persons

    @persons = YAML.safe_load(string)
  rescue StandardError => e
    warn "failed to parse #{PERSON_FILE} as YAML"
    raise e
  end

  def lookup_person(name)
    parse(load_person_file)
    person = persons.select { |p| p["name"] == name }
    raise ArgumentError, "cannot find Person with name `#{name}` in #{PERSON_FILE}" unless person
    raise ArgumentError, "Person with name `#{name}` has duplicated entry in #{PERSON_FILE}" if person.length > 1

    person.first
  end

  def name?
    metadata.key?("name")
  end

  def name
    metadata["name"]
  end

  def full_name?
    metadata.key?("full_name")
  end

  def full_name
    metadata["full_name"]
  end

  def gh_id?
    metadata.key?("gh_id")
  end

  def gh_id
    metadata["gh_id"]
  end

  def email?
    metadata.key?("email")
  end

  def email
    metadata["email"]
  end

  def website?
    metadata.key?("website")
  end

  def website
    metadata["website"]
  end

  def to_s
    metadata["name"]
  end
end

mercurial