Class: Artoo::Robot

Inherits:
Object
  • Object
show all
Extended by:
Basic, ClassMethods
Includes:
Events, Utility, Celluloid, Celluloid::Notifications
Defined in:
lib/artoo/robot.rb,
lib/artoo/robot_class_methods.rb

Overview

The most important class used by Artoo is Robot. This represents the primary interface for interacting with a collection of physical computing capabilities.

This module contains the class-level methods used by Artoo::Robot

Direct Known Subclasses

MainRobot

Defined Under Namespace

Modules: ClassMethods

Constant Summary

Constants included from Basic

Basic::CALLERS_TO_IGNORE

Class Attribute Summary collapse

Instance Attribute Summary collapse

Attributes included from ClassMethods

#use_api

Instance Method Summary collapse

Methods included from Basic

caller_files, set

Methods included from ClassMethods

api, begin_working, cli?, connection, device, handle_signals, is_running?, prepare_work, running!, setup_interrupt, start_api, stopped!, test?, work!

Methods included from Events

#create_proxy_method, #on, #proxy_method_name

Methods included from Utility

#classify, #constantize, #current_class, #current_instance, #os, #random_string, #underscore

Constructor Details

#initialize(params = {}) ⇒ Robot

Create new robot

Parameters:

  • params (Hash) (defaults to: {})

Options Hash (params):

  • :name (String)
  • :connections (Collection)
  • :devices (Collection)


41
42
43
44
45
# File 'lib/artoo/robot.rb', line 41

def initialize(params={})
  @name = params[:name] || "Robot #{random_string}"
  initialize_connections(params[:connections] || {})
  initialize_devices(params[:devices] || {})
end

Class Attribute Details

.connection_typesObject

Returns the value of attribute connection_types.



7
8
9
# File 'lib/artoo/robot_class_methods.rb', line 7

def connection_types
  @connection_types
end

.device_typesObject

Returns the value of attribute device_types.



7
8
9
# File 'lib/artoo/robot_class_methods.rb', line 7

def device_types
  @device_types
end

Instance Attribute Details

#connectionsObject (readonly)

Returns the value of attribute connections.



32
33
34
# File 'lib/artoo/robot.rb', line 32

def connections
  @connections
end

#devicesObject (readonly)

Returns the value of attribute devices.



32
33
34
# File 'lib/artoo/robot.rb', line 32

def devices
  @devices
end

#nameObject (readonly)

Returns the value of attribute name.



32
33
34
# File 'lib/artoo/robot.rb', line 32

def name
  @name
end

Instance Method Details

#api_hostString

Returns Api Host.

Returns:

  • (String)

    Api Host



53
54
55
# File 'lib/artoo/robot.rb', line 53

def api_host
  self.class.api_host
end

#api_portString

Returns Api Port.

Returns:

  • (String)

    Api Port



58
59
60
# File 'lib/artoo/robot.rb', line 58

def api_port
  self.class.api_port
end

#as_jsonJSON

Returns robot.

Returns:

  • (JSON)

    robot



125
126
127
# File 'lib/artoo/robot.rb', line 125

def as_json
  MultiJson.dump(to_hash)
end

#connection_typesCollection

Returns connection types.

Returns:

  • (Collection)

    connection types



93
94
95
# File 'lib/artoo/robot.rb', line 93

def connection_types
  current_class.connection_types ||= [{:name => :passthru}]
end

#continue_workObject

continue with the work



77
78
79
80
# File 'lib/artoo/robot.rb', line 77

def continue_work
  Logger.info "Continuing work..."
  current_instance.timers.continue
end

#default_connectionConnection

Returns default connection.

Returns:



88
89
90
# File 'lib/artoo/robot.rb', line 88

def default_connection
  connections.values.first
end

#device_typesCollection

Returns device types.

Returns:

  • (Collection)

    device types



98
99
100
101
# File 'lib/artoo/robot.rb', line 98

def device_types
  current_class.device_types ||= []
  current_class.device_types
end

#disconnectObject

Terminate all connections



83
84
85
# File 'lib/artoo/robot.rb', line 83

def disconnect
  connections.each {|k, c| c.async.disconnect}
end

#has_work?(period, interval) ⇒ Boolean

Returns True if there is recurring work for the period and interval.

Parameters:

  • period (Symbol)
  • interval (Numeric)

Returns:

  • (Boolean)

    True if there is recurring work for the period and interval



111
112
113
# File 'lib/artoo/robot.rb', line 111

def has_work?(period, interval)
  current_instance.timers.find {|t| t.recurring == (period == :every) && t.interval == interval}
end

#inspectString

Returns robot.

Returns:

  • (String)

    robot



130
131
132
# File 'lib/artoo/robot.rb', line 130

def inspect
  "#<Robot #{object_id}>"
end

#pause_workObject

pause the work



71
72
73
74
# File 'lib/artoo/robot.rb', line 71

def pause_work
  Logger.info "Pausing work..."
  current_instance.timers.pause
end

#safe_nameString

Returns Name without spaces and downcased.

Returns:

  • (String)

    Name without spaces and downcased



48
49
50
# File 'lib/artoo/robot.rb', line 48

def safe_name
  name.gsub(' ', '_').downcase
end

#to_hashHash

Returns robot.

Returns:

  • (Hash)

    robot



116
117
118
119
120
121
122
# File 'lib/artoo/robot.rb', line 116

def to_hash
  {
    :name => name,
    :connections => connections.each_value.collect {|c|c.to_hash},
    :devices => devices.each_value.collect {|d|d.to_hash}
  }
end

#workObject

start doing the work



63
64
65
66
67
68
# File 'lib/artoo/robot.rb', line 63

def work
  Logger.info "Starting work..."
  execute_startup(connections) {|c| c.future.connect}
  execute_startup(devices) {|d| d.future.start_device}
  execute_working_code
end

#working_codeProc

Returns current working code.

Returns:

  • (Proc)

    current working code



104
105
106
# File 'lib/artoo/robot.rb', line 104

def working_code
  current_class.working_code ||= proc {puts "No work defined."}
end