Sha256: ab99af468d4d1b82a49444863e262ab08607644e3a45407e2697d14224194f68

Contents?: true

Size: 1.67 KB

Versions: 6

Compression:

Stored size: 1.67 KB

Contents

# coding: utf-8
module SanUltari
  class Config
    # SanUltari::Config의 설정값들을 실제로 저장하기 위한 객체
    # method 기반으로 동작하므로, method 이름을 격리하기 위하여 상속받은 동적 타입을 생성하여 사용한다.
    #
    # @author Jeong, Jiung
    # @see SanUltari::Config
    class Store
      # 기본 인덱서
      #
      # @param [String] name 실제로 저장된 값에 접근하기 위한 접근자
      def [] name
        @values ||= {}

        @values[name] = SanUltari::Config.new name if @values[name] == nil
        @values[name]
      end

      # 기본 인덱서 세터
      #
      # @param [String] name 값을 저장할 이름. 메서드 이름으로 변경된다.
      # @param [Object] value 저장될 값. 현재 테스트된 타입은 Primary types과 List, Hash에 한한다.
      def []= name, value
        @values ||= {}

        @values[name] = value
      end

      # 현재 저장되어 있는 설정의 Key값 컬렉션을 반환한다.
      def keys
        return [] if @values == nil
        @values.keys
      end

      # 설정값에 대해서 Getter와 Setter를 동적으로 생성하기 위한 Handler.
      def method_missing(method_name, *args, &block)
        name = method_name.to_s
        name.chomp!('=')

        self.class.instance_eval do
          define_method(name.to_sym) do |&blk|
            blk.call self[name] if blk != nil
            self[name]
          end if not public_methods.include? name.to_sym

          define_method("#{name}=".to_sym) do |value|
            self[name] = value
          end
        end

        send method_name, *args, &block
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sanultari-config-0.2.5 lib/sanultari/config/store.rb
sanultari-config-0.2.4 lib/sanultari/config/store.rb
sanultari-config-0.2.3 lib/sanultari/config/store.rb
sanultari-config-0.2.1 lib/sanultari/config/store.rb
sanultari-config-0.2.0 lib/sanultari/config/store.rb
sanultari-config-0.2.0.rc.1 lib/sanultari/config/store.rb