Sha256: c2879183ee425dcd03c35a9ca8adced0b581f216e10c63e00f460837be2443e2

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

module CalendariumRomanum
  module Remote
    # Mostly API-compatible with CalendariumRomanum::Calendar
    # (only constructor differs).
    # Instead of computing calendar data, obtains them
    # from a remote calendar API
    # https://github.com/igneus/church-calendar-api
    class Calendar
      extend Forwardable

      def initialize(year, calendar_uri, driver: nil)
        @year = year
        @calendar_uri = calendar_uri

        @driver =
          driver ||
          Driver.new(
            V0::UriScheme.new(calendar_uri),
            V0::Denormalizer.new
          )

        # only for most fundamental computations made locally
        @temporale = Temporale.new(year)
        # only for API compatibility
        @sanctorale = nil
      end

      attr_reader :year
      attr_reader :temporale
      attr_reader :sanctorale
      attr_reader :calendar_uri

      def_delegators :@temporale, :range_check, :season

      def day(*args)
        # TODO code copied from CalendariumRomanum::Calendar -
        # extract to a separate method
        if args.size == 2
          date = Date.new(@year, *args)
          unless @temporale.date_range.include? date
            date = Date.new(@year + 1, *args)
          end
        else
          date = CalendariumRomanum::Calendar.mk_date *args
          #range_check date
        end

        @driver.day date
      end

      def lectionary
        year_spec['lectionary'].to_sym
      end

      def ferial_lectionary
        year_spec['ferial_lectionary'].to_i
      end

      def ==(obj)
        self.class == obj.class &&
          self.year == obj.year &&
          self.calendar_uri == obj.calendar_uri
      end

      private

      def year_spec
        @year_spec ||= @driver.year(@year)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
calendarium-romanum-remote-0.2.0 lib/calendarium-romanum/remote/calendar.rb