Sha256: 98aba94554bb7ec1e9208cece2c55502299ff438c61d9465e76621fe8ce8e8a7

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

module Ro
  class Config < ::Map
    def Config.defaults
      {
        :root =>
          (Ro.env.root || Ro.defaults.root),

        :build =>
          (Ro.env.build || Ro.defaults.build),

        :url =>
          (Ro.env.url || Ro.defaults.url),

        :page_size =>
          (Ro.env.page_size || Ro.defaults.page_size),

        :log =>
          (Ro.env.log || Ro.defaults.log),

        :debug =>
          (Ro.env.debug || Ro.defaults.debug),

        :port =>
          (Ro.env.port || Ro.defaults.port),

        :md_theme =>
          (Ro.env.md_theme || Ro.defaults.md_theme),
      }
    end

    def initialize(*args, **kws)
      configure!(Config.defaults)

      args.each do |arg|
        configure!(arg) if arg.is_a?(Hash)
      end

      configure!(kws)
    end

    def configure!(hash)
      hash.each do |key, value|
        send("#{ key }=", value)
      end
    end

    {
      :root      => :root,
      :build     => :path,
      :url       => :url,
      :page_size => :int,
      :log       => :bool,
      :debug     => :bool,
      :port      => :int,
      :md_theme  => :string,
    }.each do |attribute, cast|
      class_eval <<-____, __FILE__, __LINE__ + 1
        def #{ attribute }
          get :#{ attribute }
        end

        def #{ attribute }=(value)
          set :#{ attribute }, Ro.cast(:#{ cast }, value)
        end
      ____
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ro-4.2.0 lib/ro/config.rb