Sha256: cae322daba04cdf2d35055fb7ec16c4279b7a0095a8430cef2797056c34556cc

Contents?: true

Size: 1.77 KB

Versions: 1

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module Blackcal
  # Builder provides a DSL for schedule options
  class Builder
    # Enables a DSL for building schedule options
    # @return [Builder]
    # @example
    #   Blackcal.dsl do
    #     months [:january]
    #     days 15..25
    #   end
    def self.dsl(&block)
      new.tap { |b| b.instance_eval(&block) }
    end

    # Returns a new instance of Builder
    def initialize
      @data = {}
    end

    # @param [Time, Date, String, nil] start_time
    def start_time(start_time)
      @data[:start_time] = start_time
    end

    # @param [Time, Date, String, nil] finish_time
    def finish_time(finish_time)
      @data[:finish_time] = finish_time
    end

    # @param [TimeOfDay, Time, Integer, nil] start_time_of_day
    def start_time_of_day(start_time_of_day)
      @data[:start_time_of_day] = start_time_of_day
    end

    # @param [TimeOfDay, Time, Integer, nil] finish_hour_of_day
    def finish_hour_of_day(finish_hour_of_day)
      @data[:finish_hour_of_day] = finish_hour_of_day
    end

    # @param [Array<String>, Array<Symbol>, String, Symbol, nil] months
    def months(*months)
      @data[:months] = flat_array(months)
    end

    # @param [Array<String>, Array<Symbol>, String, Symbol, nil] weekdays
    def weekdays(*weekdays)
      @data[:weekdays] = flat_array(weekdays)
    end

    # @param [Array<Integer>, nil] weeks_of_month
    def weeks_of_month(*weeks_of_month)
      @data[:weeks_of_month] = flat_array(weeks_of_month)
    end

    # @param days [Array<Integer>, Integer, nil]
    def days(*days)
      @data[:days] = flat_array(days)
    end

    # The builder represented as a hash
    # @return [Hash]
    def to_h
      @data
    end

    private

    def flat_array(array)
      Array(array).flatten(1)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
blackcal-0.5.0 lib/blackcal/builder.rb