Class: Is::Property

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

Defined Under Namespace

Modules: Validators

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(owner, name, opts = {}) ⇒ Property

Returns a new instance of Property.

Parameters:



230
231
232
233
234
# File 'lib/is/monkey/properties.rb', line 230

def initialize owner, name, opts = {}
  @owner = owner
  @name = name.intern
  @opts = opts
end

Instance Attribute Details

#getterProc (readonly)

Returns:

  • (Proc)


204
205
206
# File 'lib/is/monkey/properties.rb', line 204

def getter
  @getter
end

#nameSymbol (readonly)

Returns:



201
202
203
# File 'lib/is/monkey/properties.rb', line 201

def name
  @name
end

#optionsHash (readonly)

Returns:



210
211
212
# File 'lib/is/monkey/properties.rb', line 210

def options
  @options
end

#ownerModule (readonly)

Returns:



213
214
215
# File 'lib/is/monkey/properties.rb', line 213

def owner
  @owner
end

#setterProc (readonly)

Returns:

  • (Proc)


207
208
209
# File 'lib/is/monkey/properties.rb', line 207

def setter
  @setter
end

Instance Method Details

#===(value) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


262
263
264
265
266
267
268
269
270
# File 'lib/is/monkey/properties.rb', line 262

def === value
  if @opts[:validator]
    @opts[:validator] === value
  elsif @opts[:class]
    @opts[:class] === value
  else
    true
  end
end

#default(obj) ⇒ Object?

Parameters:

Returns:



238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# File 'lib/is/monkey/properties.rb', line 238

def default obj
  if Class === obj && obj.superclass && obj.superclass.respond_to?(@name)
    v = obj.superclass.send @name
  else
    v = nil
  end
  if v == nil
    if @opts.has_key? :init
      v = @opts[:init].call obj
    elsif @opts.has_key? :default
      v = @opts[:default]
    elsif @opts.has_key? :class
      begin
        v = @opts[:class].new
      rescue
        v = nil
      end
    end
  end
  v
end