Class: Module

Inherits:
Object show all
Defined in:
lib/is/monkey/namespace.rb,
lib/is/monkey/properties.rb

Instance Method Summary collapse

Instance Method Details

#basenameString

Returns:



8
9
10
# File 'lib/is/monkey/namespace.rb', line 8

def basename
  name.split('::')[-1]
end

#global?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/is/monkey/namespace.rb', line 36

def global?
  ! namespace
end

#in?(other) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


27
28
29
30
31
32
33
# File 'lib/is/monkey/namespace.rb', line 27

def in? other
  ns = self
  while (ns = ns.namespace)
    return true if ns == other
  end
  return false
end

#namespaceModule

Returns:



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/is/monkey/namespace.rb', line 13

def namespace
  begin
    nm = name
    if (i = nm.rindex '::')
      ns = sandbox { eval nm[0...i] }
      return ns
    end
  rescue
  end
  return nil
end

#propertiesHash{Symbol => Is::Property}

Returns:



84
85
86
87
88
89
90
91
92
93
# File 'lib/is/monkey/properties.rb', line 84

def properties
  result = @properties || {}
  ancestors.each do |mod|
    result = mod.properties.merge result if mod != self
  end
  if self < Class && superclass
    result = superclass.properties.merge result
  end
  result
end

#property(*args, opts = {}) {|value| ... } (private)

This method returns an undefined value.

Parameters:

Options Hash (opts):

  • :init (Proc)
  • :default (Object)
  • :validator (#===)
  • :class (Class)
  • :null (true)

Yields:

  • (value)


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/is/monkey/properties.rb', line 18

def property *args, &block
  @properties ||= {}
  if Hash === args[-1]
    opts = args.pop
  else
    opts = {}
  end
  init = opts[:init]
  default = opts[:default]
  validator = opts[:validator]
  valclass = opts[:class]
  valnull = opts[:null]
  inh = opts[:inheritance]
  args.each do |a|
    getter = a.intern
    attr_accessor getter
    variable = "@#{getter}".intern
    setter = "#{getter}=".intern

    get_proc = define_method getter do |*values|
      if ! instance_variable_defined?(variable)
        instance_variable_set variable,
            singleton_class.properties[getter].default(self)
      end
      value = instance_variable_get variable
      if ! values.empty?
        if value.respond_to? :append!
          value.append! *values
        elsif values.size == 1
          value = values[0]
        else
          value = values
        end
        send setter, value
      end
      result = instance_variable_get variable
      if inh && Class === self && superclass && superclass.respond_to?(getter)
        sup = superclass.send getter
        if sup.respond_to? :append
          result = sup.append result
        end
      end
      result
    end

    if block_given?
      set_proc = define_method setter, &block
    else

      set_proc = define_method setter do |value|
        if validator && !(validator === value || valnull && value == nil)
          raise 'Invalid property value!'
        elsif valclass && !(valclass === value || valnull && value == nil)
          raise 'Invalid property value class!'
        end
        instance_variable_set variable, value
      end

    end

    @properties[getter] = Is::Property.new self, getter,
        opts.merge(:getter => get_proc, :setter => set_proc)
  end
end