Sha256: 6ceaa74b317d3c1558b6930ed727d958f289686c9535ec7c11177e73e6f8aef1

Contents?: true

Size: 657 Bytes

Versions: 2

Compression:

Stored size: 657 Bytes

Contents

# frozen_string_literal: true
require 'active_support/core_ext/class/subclasses'
require './lib/timeboss/calendar'
Dir['./lib/timeboss/calendars/*.rb'].each { |f| require f }

module TimeBoss
  module Calendars
    extend self
    extend Enumerable
    delegate :each, :length, to: :all

    def all
      @_all ||= TimeBoss::Calendar.subclasses.map do |klass|
        Entry.new(klass.to_s.demodulize.underscore.to_sym, klass)
      end
    end

    def [](name)
      find { |e| e.name == name.to_sym }&.calendar
    end

    private

    Entry = Struct.new(:name, :klass) do
      def calendar
        @_calendar ||= klass.new
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
timeboss-0.0.6 lib/timeboss/calendars.rb
timeboss-0.0.5 lib/timeboss/calendars.rb