Class: GlooLang::Core::Obj

Inherits:
Baseo
  • Object
show all
Defined in:
lib/gloo_lang/core/obj.rb

Constant Summary

Constants inherited from Baseo

Baseo::NOT_IMPLEMENTED_ERR

Instance Attribute Summary collapse

Attributes inherited from Baseo

#name

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(engine) ⇒ Obj

Set up the object.



18
19
20
21
22
23
# File 'lib/gloo_lang/core/obj.rb', line 18

def initialize( engine )
  @engine = engine
  @value = ''
  @children = []
  @parent = nil
end

Instance Attribute Details

#childrenObject (readonly)

Returns the value of attribute children.



13
14
15
# File 'lib/gloo_lang/core/obj.rb', line 13

def children
  @children
end

#parentObject (readonly)

Returns the value of attribute parent.



13
14
15
# File 'lib/gloo_lang/core/obj.rb', line 13

def parent
  @parent
end

#valueObject

Returns the value of attribute value.



12
13
14
# File 'lib/gloo_lang/core/obj.rb', line 12

def value
  @value
end

Class Method Details

.can_create?Boolean

Can this object be created? This is true by default and only false for some special cases such as the System object.

Returns:

  • (Boolean)


66
67
68
# File 'lib/gloo_lang/core/obj.rb', line 66

def self.can_create?
  true
end

.helpObject

Get help for this object.



312
313
314
# File 'lib/gloo_lang/core/obj.rb', line 312

def self.help
  return 'No help found.'
end

.inherited(subclass) ⇒ Object

Register object types when they are loaded.



28
29
30
# File 'lib/gloo_lang/core/obj.rb', line 28

def self.inherited( subclass )
  Dictionary.instance.register_obj( subclass )
end

.messagesObject

Get a list of message names that this object receives.



241
242
243
# File 'lib/gloo_lang/core/obj.rb', line 241

def self.messages
  return %w[reload unload]
end

.typenameObject

The name of the object type.



35
36
37
# File 'lib/gloo_lang/core/obj.rb', line 35

def self.typename
  raise 'this method should be overriden'
end

Instance Method Details

#add_child(obj) ⇒ Object

Add a child object to the container.



162
163
164
165
# File 'lib/gloo_lang/core/obj.rb', line 162

def add_child( obj )
  @children << obj
  obj.set_parent self
end

#add_children_on_create?Boolean

Does this object have children to add when an object is created in interactive mode? This does not apply during obj load, etc.

Returns:

  • (Boolean)


223
224
225
# File 'lib/gloo_lang/core/obj.rb', line 223

def add_children_on_create?
  return false
end

#add_default_childrenObject

Add children to this object. This is used by containers to add children needed for default configurations.



230
231
232
# File 'lib/gloo_lang/core/obj.rb', line 230

def add_default_children
  # Override this.
end

#can_receive_message?(msg) ⇒ Boolean

Can this object receive a message?

Returns:

  • (Boolean)


248
249
250
251
# File 'lib/gloo_lang/core/obj.rb', line 248

def can_receive_message?( msg )
  msgs = self.class.messages
  return msgs.include?( msg.strip.downcase )
end

#child_countObject

Get the number of children.



170
171
172
# File 'lib/gloo_lang/core/obj.rb', line 170

def child_count
  return @children.count
end

#contains_child?(name) ⇒ Boolean

Does this object contain an object with the given name?

Returns:

  • (Boolean)


177
178
179
180
181
182
# File 'lib/gloo_lang/core/obj.rb', line 177

def contains_child?( name )
  @children.each do |o|
    return true if name.downcase == o.name.downcase
  end
  return false
end

#delete_childrenObject

Delete all children from the container.



207
208
209
210
211
# File 'lib/gloo_lang/core/obj.rb', line 207

def delete_children
  @children.reverse.each do |o|
    self.remove_child o
  end
end

#dispatch(msg) ⇒ Object

Dispatch the message to the object.



267
268
269
270
271
272
273
274
275
276
# File 'lib/gloo_lang/core/obj.rb', line 267

def dispatch( msg )
  o = "msg_#{msg}"
  if self.respond_to? o
    self.public_send( o )
    return true
  else
    @engine.log.error "Message #{msg} not implemented"
    return false
  end
end

#display_valueObject

Generic function to get display value. Can be used for debugging, etc.



87
88
89
# File 'lib/gloo_lang/core/obj.rb', line 87

def display_value
  return self.pn
end

#find_add_child(name, type) ⇒ Object

Find a child of the given name. If found, return it. If not found create it.



148
149
150
151
152
153
154
155
156
157
# File 'lib/gloo_lang/core/obj.rb', line 148

def find_add_child( name, type )
  child = self.find_child( name )
  return child if child

  params = { :name => name,
             :type => type,
             :value => nil,
             :parent => self }
  return @engine.factory.create params
end

#find_child(name) ⇒ Object

Find a child object with the given name.



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/gloo_lang/core/obj.rb', line 187

def find_child( name )
  if name.end_with?( GlooLang::Objs::Alias::ALIAS_REFERENCE )
    name = name[ 0..-2 ]
  end

  @children.each do |o|
    return o if name.downcase == o.name.downcase
  end

  if self.type_display == GlooLang::Objs::Alias.typename
    ln = GlooLang::Core::Pn.new( @engine, self.value )
    redirect = ln.resolve
    return redirect.find_child( name )
  end
  return nil
end

#msg_reloadObject

Send the object the reload message. Note that this will only work for objects with file assoications.



296
297
298
299
300
301
302
303
# File 'lib/gloo_lang/core/obj.rb', line 296

def msg_reload
  if self.root?
    @engine.log.error 'Cannot reload the root object.'
    return
  end

  @engine.persist_man.reload self
end

#msg_unloadObject

Send the object the unload message.



281
282
283
284
285
286
287
288
289
290
# File 'lib/gloo_lang/core/obj.rb', line 281

def msg_unload
  if self.root?
    @engine.log.error 'Cannot unload the root object.'
    return
  end

  @engine.event_manager.on_unload self
  @engine.heap.unload self
  @engine.persist_man.unload self
end

#multiline_value?Boolean

Does this object support multi-line values? Initially only true for scripts.

Returns:

  • (Boolean)


113
114
115
# File 'lib/gloo_lang/core/obj.rb', line 113

def multiline_value?
  return false
end

#pnObject

Get the path and name to this object.



73
74
75
76
77
78
79
80
81
# File 'lib/gloo_lang/core/obj.rb', line 73

def pn
  str = self.name
  p = self.parent
  while p && !p.root?
    str = "#{p.name}.#{str}"
    p = p.parent
  end
  return str
end

#remove_child(obj) ⇒ Object

Remove the object from the children collection.



216
217
218
# File 'lib/gloo_lang/core/obj.rb', line 216

def remove_child( obj )
  @children.delete obj
end

#root?Boolean

Is this the root object?

Returns:

  • (Boolean)


56
57
58
59
60
61
# File 'lib/gloo_lang/core/obj.rb', line 56

def root?
  return false if @parent
  return false unless name.downcase == 'root'

  return true
end

#send_message(msg, params = nil) ⇒ Object

Sent this object the given message.



256
257
258
259
260
261
262
# File 'lib/gloo_lang/core/obj.rb', line 256

def send_message( msg, params = nil )
  @params = params
  return self.dispatch msg if self.can_receive_message? msg

  @engine.log.error "Object #{self.name} cannot receive message #{msg}"
  return false
end

#set_parent(obj) ⇒ Object

Set the parent for the object.



49
50
51
# File 'lib/gloo_lang/core/obj.rb', line 49

def set_parent( obj )
  @parent = obj
end

#set_value(new_value) ⇒ Object

Set the value with any necessary type conversions.



98
99
100
# File 'lib/gloo_lang/core/obj.rb', line 98

def set_value( new_value )
  self.value = new_value
end

#type_displayObject

The object type, suitable for display.



42
43
44
# File 'lib/gloo_lang/core/obj.rb', line 42

def type_display
  return self.class.typename
end

#value_displayObject

Get the value for display purposes.



105
106
107
# File 'lib/gloo_lang/core/obj.rb', line 105

def value_display
  return self.value.to_s
end

#value_is_array?Boolean

Is the value an Array?

Returns:

  • (Boolean)


127
128
129
# File 'lib/gloo_lang/core/obj.rb', line 127

def value_is_array?
  return self.value.is_a? Array
end

#value_is_blank?Boolean

Is the value a blank string?

Returns:

  • (Boolean)


134
135
136
137
138
# File 'lib/gloo_lang/core/obj.rb', line 134

def value_is_blank?
  return true if value.nil?

  return self.value.to_s.strip.empty?
end

#value_string?Boolean

Is the value a String?

Returns:

  • (Boolean)


120
121
122
# File 'lib/gloo_lang/core/obj.rb', line 120

def value_string?
  return self.value.is_a? String
end