Class: MindMeld::Device

Inherits:
MindMeld show all
Defined in:
lib/mind_meld/device.rb

Direct Known Subclasses

Hive, Tv

Instance Method Summary collapse

Methods inherited from MindMeld

#devices, #flush_statistics

Constructor Details

#initialize(options) ⇒ Device

Returns a new instance of Device.



6
7
8
9
10
11
12
13
# File 'lib/mind_meld/device.rb', line 6

def initialize options
  super

  @device = options[:device]
  # To trigger registration (is this needed?)
  @device_details = {}.with_indifferent_access
  device_details(view: 'simple')
end

Instance Method Details

#add_statistics(data) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/mind_meld/device.rb', line 77

def add_statistics data
  if ! data.is_a? Array
    data = [ data ]
  end

  id = self.id
  data.each do |d|
    d[:device_id] = id if ! d[:device_id]
  end

  super data
end

#clear_state(options = {}) ⇒ Object



90
91
92
93
94
95
96
97
# File 'lib/mind_meld/device.rb', line 90

def clear_state options = {}
  state_params = {
    device_id: self.id,
    state: 'clear'
  }
  state_params[:component] = options[:component] if options.has_key? :component
  request :put, 'devices/update_state', { device_state: state_params }
end

#create_action(options) ⇒ Object



42
43
44
45
# File 'lib/mind_meld/device.rb', line 42

def create_action options
  response = request :put, 'devices/action', { device_action: { device_id: self.id }.merge(options) }
  response
end

#device_details(options = {refresh: false}) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/mind_meld/device.rb', line 54

def device_details(options = {refresh: false})
  if options.is_a? Hash
    refresh = options[:refresh] || false
    view = options[:view] || 'full'
  else
    puts "[DEPRECATION WARNING] device_details(true) replaced by device_details(refresh: true) in Mind Meld"
    refresh = options
    view = 'full'
  end

  if refresh || ! @device_details.has_key?(:id)
    if @device_details.has_key? :id
      @device_details = request :get, "devices/#{@device_details[:id]}", { view: view }
    elsif @device.has_key? :id
      @device_details = request :get, "devices/#{@device[:id]}", { view: view }
    else
      @device_details = register @device
    end
  else
    @device_details
  end
end

#hive_queues(refresh = false) ⇒ Object



23
24
25
# File 'lib/mind_meld/device.rb', line 23

def hive_queues(refresh = false)
  device_details(refresh: refresh)['hive_queues'] ? device_details['hive_queues'].map { |hq| hq['name'] } : []
end

#idObject



15
16
17
# File 'lib/mind_meld/device.rb', line 15

def id
  device_details['id']
end

#nameObject



19
20
21
# File 'lib/mind_meld/device.rb', line 19

def name
  device_details['name']
end

#poll(*dev_ids) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/mind_meld/device.rb', line 31

def poll *dev_ids
  args = {
    poll: dev_ids.length > 0 ? { id: self.id, devices: dev_ids } : { id: self.id }
  }
  response = request :put, 'devices/poll', args
  if dev_ids.length == 0
    @device_details = response
  end
  response
end

#register(options) ⇒ Object



27
28
29
# File 'lib/mind_meld/device.rb', line 27

def register options
  request :post, 'devices/register', { device: options }
end

#send_screenshot(options) ⇒ Object



47
48
49
50
51
52
# File 'lib/mind_meld/device.rb', line 47

def send_screenshot options
  encoded = nil
  encoded = Base64.encode64(File.open(options[:screenshot], "rb").read) if File.exists?(options[:screenshot])
  response = request :put, 'devices/screenshot', { device_action: { screenshot: encoded, device_id: options[:device_id] } }
  response
end

#set_state(options) ⇒ Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/mind_meld/device.rb', line 99

def set_state options
  request :put, 'devices/update_state',
    { device_state: {
        device_id: self.id,
        state: options[:state] || 'info',
        component: options[:component] || '[None]',
        message: options[:message]
      }
    }
end