Class: UnifiProtect::CameraCollection

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/unifi_protect/camera_collection.rb

Constant Summary collapse

FILTERS =
{
  adopting: :isAdopting,
  adopted: :isAdopted,
  provisioned: :isProvisioned,
  attempting_to_connect: :isAttemptingToConnect,
  managed: :isManaged,
  updating: :isUpdating,
  connected: :isConnected,
  recording: :isRecording,
  rebooting: :isRebooting,
  deleting: :isDeleting,

  # Real-world status
  dark: :isDark,
  motion_detected: :isMotionDetected,
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cameras = []) ⇒ CameraCollection

Returns a new instance of CameraCollection.



28
29
30
# File 'lib/unifi_protect/camera_collection.rb', line 28

def initialize(cameras = [])
  @cameras = cameras
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args) ⇒ Object



51
52
53
54
55
# File 'lib/unifi_protect/camera_collection.rb', line 51

def method_missing(method_name, *args)
  return filter(method_name, *args) if FILTERS.include?(method_name)

  super
end

Instance Attribute Details

#camerasObject (readonly)

Returns the value of attribute cameras.



9
10
11
# File 'lib/unifi_protect/camera_collection.rb', line 9

def cameras
  @cameras
end

Instance Method Details

#fetch(**attrs) ⇒ Object



67
68
69
# File 'lib/unifi_protect/camera_collection.rb', line 67

def fetch(**attrs)
  match(**attrs).first
end

#filter(name, value = true) ⇒ Object



71
72
73
74
75
76
# File 'lib/unifi_protect/camera_collection.rb', line 71

def filter(name, value = true)
  return CameraCollection.new if @cameras.empty?
  raise 'unknown filter' unless FILTERS.include?(name.to_sym)

  CameraCollection.new(@cameras.select { |c| c.send(FILTERS.fetch(name.to_sym)) == value })
end

#match(**attrs) ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/unifi_protect/camera_collection.rb', line 57

def match(**attrs)
  return CameraCollection.new(cameras) if attrs.empty?

  CameraCollection.new(
    @cameras.select do |camera|
      attrs.any? { |name, matcher| camera.match(name, matcher) }
    end
  )
end

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
48
49
# File 'lib/unifi_protect/camera_collection.rb', line 45

def respond_to_missing?(method_name, include_private = false)
  return true if FILTERS.include?(method_name)

  super
end