Sha256: 5997bd04b31a26e83644dc3f62a9702ad0cef81c83a10f284d200d5349d3cb93

Contents?: true

Size: 1.84 KB

Versions: 5

Compression:

Stored size: 1.84 KB

Contents

# -*- coding: utf-8 -*-
require 'singleton'
module Mushikago
  # Mushikago SDK for Rubyの各設定
  class Config
    include Singleton

    # @param [Hash] options optionsをロードします
    # @option options [String] :api_key(ENV['MUSHIKAGO_API_KEY']) 発行されたAPIKeyを設定する
    # @option options [String] :secret_key(ENV['MUSHIKAGO_SECRET_KEY']) 発行されたSecretKeyを設定する
    # @option options [String] :endpoint('api.mushikago.org') 標準のエンドポイントを設定する
    # @example
    #   Mushikago.config.load(:api_key => 'ABCDEFG', :secret_key => 'HIJKLMN')
    def load options={}
      options.each do |key, value|
        supplied[key.to_sym] = value
      end
    end

    class << self
      # @param [Symbol] name オプション名
      # @param [Object] default_value デフォルト値
      # @param [Hash] options 型情報を補足的に追加することができる
      # @param [Block] transform 渡された値を変換するブロック
      # @option options [Symbol] :boolean 自動的にname?のエイリアスメソッドが生成されます
      private
      def add_option name, default_value = nil, options = {}, &transform
        name = name.to_sym
        raise "The option #{name} is already defined!" if self.respond_to?(name)

        define_method(name) do
          value = supplied.has_key?(name) ? supplied[name] : default_value
          transform ? transform.call(value) : value
        end 

        alias_class_method("#{name}?", name) if options[:boolean]
      end
    end
    
    add_option :api_key, ENV['MUSHIKAGO_API_KEY'] || ENV['MUSHIKAGO_API_KEY_ID']
    add_option :secret_key, ENV['MUSHIKAGO_SECRET_KEY'] || ENV['MUSHIKAGO_SECRET_ACCESS_KEY']
    add_option :endpoint, 'api.mushikago.org'

    # @private
    private
    def supplied
      @supplied ||= {}
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mushikago-sdk-0.3.6 lib/mushikago/configuration.rb
mushikago-sdk-0.3.5 lib/mushikago/configuration.rb
mushikago-sdk-0.3.4 lib/mushikago/configuration.rb
mushikago-sdk-0.3.2 lib/mushikago/configuration.rb
mushikago-sdk-0.3.1 lib/mushikago/configuration.rb