Class | SOAP::Property
In: | soap/property.rb
Parent: | Object

Property stream format:

      line separator is \r?\n.  1 line per a property.
      line which begins with '#' is a comment line.  empty line is ignored, too.
      key/value separator is ':' or '='.
      '\' as escape character.  but line separator cannot be escaped.
      \s at the head/tail of key/value are trimmed.

      '[' + key + ']' indicates property section.  for example,

        [aaa.bbb]
        ccc = ddd
        eee.fff = ggg
        []
        aaa.hhh = iii

      is the same as;

        aaa.bbb.ccc = ddd
        aaa.bbb.eee.fff = ggg
        aaa.hhh = iii

### Methods

<< [] []= add_hook each empty? keys load load loadproperty loadproperty lock locked? new unlock values

### Included Modules

Enumerable

### Classes and Modules

Module SOAP::Property::Util

### Constants

FrozenError | = | (RUBY_VERSION >= "1.9.0") ? RuntimeError : TypeError
KEY_REGSRC | = | '([^=:\\\\]*(?:\\\\.[^=:\\\\]*)*)'
DEF_REGSRC | = | '\\s*' + KEY_REGSRC + '\\s*[=:]\\s*(.*)'
COMMENT_REGEXP | = | Regexp.new('^(?:#.*|)$')
CATDEF_REGEXP | = | Regexp.new("^\\[\\s*#{KEY_REGSRC}\\s*\\]$")
LINE_REGEXP | = | Regexp.new("^#{DEF_REGSRC}$")
NO_HOOK | = | [].freeze

### Public Class methods

load(stream)

[Source]

    # File soap/property.rb, line 51
      def self.load(stream)
        new.load(stream)
      end

loadproperty(propname)

[Source]

    # File soap/property.rb, line 55
      def self.loadproperty(propname)
        new.loadproperty(propname)
      end

new()

[Source]

    # File soap/property.rb, line 59
      def initialize
        @store = Hash.new
        @hook = Hash.new
        @self_hook = Array.new
        @locked = false
      end

### Public Instance methods

<<(value)

value: an Object key is generated by property

[Source]

    # File soap/property.rb, line 122
      def <<(value)
        self[generate_new_key] = value
      end

[](name)

name: a Symbol, String or an Array

[Source]

    # File soap/property.rb, line 105
      def [](name)
        referent(name_to_a(name))
      end

[]=(name, value)

name: a Symbol, String or an Array value: an Object

[Source]

    # File soap/property.rb, line 111
      def []=(name, value)
        name_pair = name_to_a(name).freeze
        hooks = assign(name_pair, value)
        hooks.each do |hook|
          hook.call(name_pair, value)
        end
        value
      end

add_hook(name = nil, cascade = false, &hook)

name: a Symbol, String or an Array; nil means hook to the root cascade: true/false; for cascading hook of sub key hook: block which will be called with 2 args, name and value

[Source]

    # File soap/property.rb, line 129
      def add_hook(name = nil, cascade = false, &hook)
        if name == nil or name == true or name == false
          cascade = name
          assign_self_hook(cascade, &hook)
        else
          assign_hook(name_to_a(name), cascade, &hook)
        end
      end

each() {|key, value| ...}

[Source]

    # File soap/property.rb, line 138
      def each
        @store.each do |key, value|
          yield(key, value)
        end
      end

empty?()

[Source]

    # File soap/property.rb, line 144
      def empty?
        @store.empty?
      end

keys()

[Source]

    # File soap/property.rb, line 148
      def keys
        @store.keys
      end

load(stream)

[Source]

    # File soap/property.rb, line 71
      def load(stream)
        key_prefix = ""
        stream.each_with_index do |line, lineno|
          line.sub!(/\r?\n\z/, '')
          case line
          when COMMENT_REGEXP
            next
          when CATDEF_REGEXP
            key_prefix = $1.strip
          when LINE_REGEXP
            key, value = $1.strip, $2.strip
            key = "#{key_prefix}.#{key}" unless key_prefix.empty?
            key, value = loadstr(key), loadstr(value)
            self[key] = value
          else
            raise TypeError.new(
              "property format error at line #{lineno + 1}: `#{line}'")
          end
        end
        self
      end

loadproperty(propname)

find property from $:.

[Source]

    # File soap/property.rb, line 94
      def loadproperty(propname)
        return loadpropertyfile(propname) if File.file?(propname)
        $:.each do |path|
          if File.file?(file = File.join(path, propname))
            return loadpropertyfile(file)
          end
        end
        nil
      end

lock(cascade = false)

[Source]

    # File soap/property.rb, line 156
      def lock(cascade = false)
        if cascade
          each_key do |key|
            key.lock(cascade)
          end
        end
        @locked = true
        self
      end

locked?()

[Source]

    # File soap/property.rb, line 176
      def locked?
        @locked
      end

unlock(cascade = false)

[Source]

    # File soap/property.rb, line 166
      def unlock(cascade = false)
        @locked = false
        if cascade
          each_key do |key|
            key.unlock(cascade)
          end
        end
        self
      end

values()

[Source]

    # File soap/property.rb, line 152
      def values
        @store.values
      end

[Validate]