karlentwistle/ruby_home

View on GitHub
lib/ruby_home/factories/templates/characteristic_template.rb

Summary

Maintainability
A
0 mins
Test Coverage
module RubyHome
  class CharacteristicTemplate
    FILENAMES = %w[characteristics.yml manual_characteristics.yml].freeze
    FILEPATHS = FILENAMES.map { |filename| File.join(__dir__, "..", "..", "config", filename) }.freeze
    DATA = FILEPATHS.flat_map { |filepath| YAML.load_file(filepath) }.freeze

    def self.all
      @@all ||= DATA.map { |data| new(**data) }
    end

    def self.find_by(options)
      all.find do |characteristic|
        options.all? do |key, value|
          characteristic.send(key) == value
        end
      end
    end

    def initialize(name:, description:, uuid:, format:, unit:, properties:, constraints:)
      @name = name
      @description = description
      @uuid = uuid
      @format = format
      @unit = unit
      @properties = properties
      @constraints = constraints
    end

    attr_reader :name, :description, :uuid, :format, :unit, :properties

    def constraints
      @constraints || {}
    end
  end
end