Class: Seam::Resources::BaseResource

Inherits:
Object
  • Object
show all
Defined in:
lib/seam/base_resource.rb

Direct Known Subclasses

AccessCode, AccessCode::DormakabaOracodeMetadata, AccessCode::Errors, AccessCode::Errors::ModifiedFields, AccessCode::PendingMutations, AccessCode::PendingMutations::From, AccessCode::PendingMutations::To, AccessCode::Warnings, AccessCode::Warnings::ModifiedFields, AccessGrant, AccessGrant::Errors, AccessGrant::PendingMutations, AccessGrant::PendingMutations::From, AccessGrant::PendingMutations::To, AccessGrant::RequestedAccessMethods, AccessGrant::Warnings, AccessGrant::Warnings::FailedDevices, AccessMethod, AccessMethod::Errors, AccessMethod::PendingMutations, AccessMethod::PendingMutations::From, AccessMethod::PendingMutations::To, AccessMethod::Warnings, AcsAccessGroup, AcsAccessGroup::AccessSchedule, AcsAccessGroup::Errors, AcsAccessGroup::PendingMutations, AcsAccessGroup::PendingMutations::From, AcsAccessGroup::PendingMutations::To, AcsAccessGroup::Warnings, AcsCredential, AcsCredential::AssaAbloyVostioMetadata, AcsCredential::Errors, AcsCredential::VisionlineMetadata, AcsCredential::Warnings, AcsEncoder, AcsEncoder::Errors, AcsEntrance, AcsEntrance::AkilesMetadata, AcsEntrance::AkilesMetadata::Actions, AcsEntrance::AssaAbloyVostioMetadata, AcsEntrance::AvigilonAltaMetadata, AcsEntrance::BrivoMetadata, AcsEntrance::DormakabaAmbianceMetadata, AcsEntrance::DormakabaCommunityMetadata, AcsEntrance::Errors, AcsEntrance::HotekMetadata, AcsEntrance::LatchMetadata, AcsEntrance::SaltoKsMetadata, AcsEntrance::SaltoSpaceMetadata, AcsEntrance::VisionlineMetadata, AcsEntrance::VisionlineMetadata::Profiles, AcsEntrance::Warnings, AcsSystem, AcsSystem::Errors, AcsSystem::Location, AcsSystem::VisionlineMetadata, AcsSystem::Warnings, AcsUser, AcsUser::AccessSchedule, AcsUser::Errors, AcsUser::PendingMutations, AcsUser::PendingMutations::From, AcsUser::PendingMutations::To, AcsUser::SaltoKsMetadata, AcsUser::SaltoSpaceMetadata, AcsUser::Warnings, ActionAttempt, ActionAttempt::Error, ActionAttempt::Result, ActionAttempt::Result::AcsCredentialOnEncoder, ActionAttempt::Result::AcsCredentialOnEncoder::VisionlineMetadata, ActionAttempt::Result::AcsCredentialOnSeam, ActionAttempt::Result::AcsCredentialOnSeam::AssaAbloyVostioMetadata, ActionAttempt::Result::AcsCredentialOnSeam::Errors, ActionAttempt::Result::AcsCredentialOnSeam::VisionlineMetadata, ActionAttempt::Result::AcsCredentialOnSeam::Warnings, ActionAttempt::Result::AssaAbloyVostioMetadata, ActionAttempt::Result::Errors, ActionAttempt::Result::PendingMutations, ActionAttempt::Result::PendingMutations::From, ActionAttempt::Result::PendingMutations::To, ActionAttempt::Result::VisionlineMetadata, ActionAttempt::Result::Warnings, Batch, ClientSession, ConnectWebview, ConnectedAccount, ConnectedAccount::Errors, ConnectedAccount::Errors::SaltoKsMetadata, ConnectedAccount::Errors::SaltoKsMetadata::Sites, ConnectedAccount::UserIdentifier, ConnectedAccount::Warnings, ConnectedAccount::Warnings::SaltoKsMetadata, ConnectedAccount::Warnings::SaltoKsMetadata::Sites, CustomerPortal, Device, Device::DeviceManufacturer, Device::DeviceProvider, Device::Errors, Device::Location, Device::Properties, Device::Properties::AccessoryKeypad, Device::Properties::AccessoryKeypad::Battery, Device::Properties::ActiveThermostatSchedule, Device::Properties::ActiveThermostatSchedule::Errors, Device::Properties::AkilesMetadata, Device::Properties::Appearance, Device::Properties::AqaraMetadata, Device::Properties::AssaAbloyCredentialServiceMetadata, Device::Properties::AssaAbloyCredentialServiceMetadata::Endpoints, Device::Properties::AssaAbloyVostioMetadata, Device::Properties::AugustMetadata, Device::Properties::AvailableClimatePresets, Device::Properties::AvailableClimatePresets::EcobeeMetadata, Device::Properties::AvigilonAltaMetadata, Device::Properties::Battery, Device::Properties::BrivoMetadata, Device::Properties::CodeConstraints, Device::Properties::ControlbywebMetadata, Device::Properties::CurrentClimateSetting, Device::Properties::CurrentClimateSetting::EcobeeMetadata, Device::Properties::DefaultClimateSetting, Device::Properties::DefaultClimateSetting::EcobeeMetadata, Device::Properties::DormakabaOracodeMetadata, Device::Properties::DormakabaOracodeMetadata::DeviceId, Device::Properties::DormakabaOracodeMetadata::PredefinedTimeSlots, Device::Properties::EcobeeMetadata, Device::Properties::FourSuitesMetadata, Device::Properties::GenieMetadata, Device::Properties::HoneywellResideoMetadata, Device::Properties::IglooMetadata, Device::Properties::IgloohomeMetadata, Device::Properties::KeynestMetadata, Device::Properties::KeypadBattery, Device::Properties::KisiMetadata, Device::Properties::KorelockMetadata, Device::Properties::KwiksetMetadata, Device::Properties::LocklyMetadata, Device::Properties::MinutMetadata, Device::Properties::MinutMetadata::LatestSensorValues, Device::Properties::MinutMetadata::LatestSensorValues::AccelerometerZ, Device::Properties::MinutMetadata::LatestSensorValues::Humidity, Device::Properties::MinutMetadata::LatestSensorValues::Pressure, Device::Properties::MinutMetadata::LatestSensorValues::Sound, Device::Properties::MinutMetadata::LatestSensorValues::Temperature, Device::Properties::Model, Device::Properties::NestMetadata, Device::Properties::NoiseawareMetadata, Device::Properties::NukiMetadata, Device::Properties::OfflineTimeFrameOptions, Device::Properties::OfflineTimeFrameOptions::TimePairs, Device::Properties::OmnitecMetadata, Device::Properties::OnlineTimeFrameOptions, Device::Properties::OnlineTimeFrameOptions::TimePairs, Device::Properties::RingMetadata, Device::Properties::SaltoKsMetadata, Device::Properties::SaltoMetadata, Device::Properties::SaltoSpaceCredentialServiceMetadata, Device::Properties::SchlageMetadata, Device::Properties::SeamBridgeMetadata, Device::Properties::SensiMetadata, Device::Properties::SmartthingsMetadata, Device::Properties::TadoMetadata, Device::Properties::TedeeMetadata, Device::Properties::TemperatureThreshold, Device::Properties::ThermostatDailyPrograms, Device::Properties::ThermostatDailyPrograms::Periods, Device::Properties::ThermostatWeeklyProgram, Device::Properties::TtlockMetadata, Device::Properties::TtlockMetadata::Features, Device::Properties::TtlockMetadata::WirelessKeypads, Device::Properties::TwoNMetadata, Device::Properties::UltraloqMetadata, Device::Properties::VisionlineMetadata, Device::Properties::WyzeMetadata, Device::Warnings, DeviceProvider, InstantKey, InstantKey::Customization, NoiseThreshold, Pagination, Phone, Phone::Errors, Phone::Properties, Phone::Properties::AssaAbloyCredentialServiceMetadata, Phone::Properties::AssaAbloyCredentialServiceMetadata::Endpoints, Phone::Properties::SaltoSpaceCredentialServiceMetadata, Phone::Warnings, SeamEvent, SeamEvent::AccessCodeErrors, SeamEvent::AccessCodeWarnings, SeamEvent::AcsSystemErrors, SeamEvent::AcsSystemWarnings, SeamEvent::ChangedProperties, SeamEvent::ConnectedAccountErrors, SeamEvent::ConnectedAccountWarnings, SeamEvent::DeviceErrors, SeamEvent::DeviceWarnings, SeamEvent::From, SeamEvent::Reason, SeamEvent::RequestedMutations, SeamEvent::To, Space, Space::CustomerData, Space::Geolocation, ThermostatDailyProgram, ThermostatDailyProgram::Periods, ThermostatSchedule, ThermostatSchedule::Errors, UnmanagedAccessCode, UnmanagedAccessCode::DormakabaOracodeMetadata, UnmanagedAccessCode::Errors, UnmanagedAccessCode::Errors::ModifiedFields, UnmanagedAccessCode::Warnings, UnmanagedAccessCode::Warnings::ModifiedFields, UnmanagedAccessGrant, UnmanagedAccessGrant::Errors, UnmanagedAccessGrant::PendingMutations, UnmanagedAccessGrant::PendingMutations::From, UnmanagedAccessGrant::PendingMutations::To, UnmanagedAccessGrant::RequestedAccessMethods, UnmanagedAccessGrant::Warnings, UnmanagedAccessGrant::Warnings::FailedDevices, UnmanagedAccessMethod, UnmanagedAccessMethod::Errors, UnmanagedAccessMethod::PendingMutations, UnmanagedAccessMethod::PendingMutations::From, UnmanagedAccessMethod::PendingMutations::To, UnmanagedAccessMethod::Warnings, UnmanagedDevice, UnmanagedDevice::Errors, UnmanagedDevice::Location, UnmanagedDevice::Properties, UnmanagedDevice::Properties::AccessoryKeypad, UnmanagedDevice::Properties::AccessoryKeypad::Battery, UnmanagedDevice::Properties::Battery, UnmanagedDevice::Properties::Model, UnmanagedDevice::Warnings, UnmanagedUserIdentity, UnmanagedUserIdentity::Errors, UnmanagedUserIdentity::Warnings, UserIdentity, UserIdentity::Errors, UserIdentity::Warnings, Webhook, Workspace, Workspace::ConnectWebviewCustomization

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data, client = nil) ⇒ BaseResource

Returns a new instance of BaseResource.



11
12
13
14
15
# File 'lib/seam/base_resource.rb', line 11

def initialize(data, client = nil)
  @data = data
  @client = client
  process_data_attributes(@data)
end

Instance Attribute Details

#clientObject

Returns the value of attribute client.



9
10
11
# File 'lib/seam/base_resource.rb', line 9

def client
  @client
end

#dataObject

Returns the value of attribute data.



9
10
11
# File 'lib/seam/base_resource.rb', line 9

def data
  @data
end

Class Method Details

.date_accessor(*attrs) ⇒ Object



73
74
75
76
77
78
79
80
81
# File 'lib/seam/base_resource.rb', line 73

def self.date_accessor(*attrs)
  attrs.each do |attr|
    define_method(attr) do
      value = instance_variable_get(:"@#{attr}")

      value.nil? ? nil : parse_datetime(value)
    end
  end
end

.load_from_response(data, client = nil) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/seam/base_resource.rb', line 22

def self.load_from_response(data, client = nil)
  return nil if data.nil?

  if data.is_a?(Array)
    data.map { |d| new(d, client) }
  else
    new(data, client)
  end
end

.resource_accessor(attr, resource_class) ⇒ Object



48
49
50
51
# File 'lib/seam/base_resource.rb', line 48

def self.resource_accessor(attr, resource_class)
  resource_accessors[attr.to_s] = resource_class
  attr_accessor attr
end

.resource_accessorsObject



65
66
67
# File 'lib/seam/base_resource.rb', line 65

def self.resource_accessors
  @resource_accessors ||= {}
end

.resource_list_accessor(attr, resource_class) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/seam/base_resource.rb', line 53

def self.resource_list_accessor(attr, resource_class)
  resource_list_accessors[attr.to_s] = resource_class
  attr_writer attr

  # A list the response omits, sends as null, or sends as some other type
  # reads as empty rather than nil, so callers can always iterate.
  define_method(attr) do
    value = instance_variable_get(:"@#{attr}")
    value.is_a?(Array) ? value : []
  end
end

.resource_list_accessorsObject



69
70
71
# File 'lib/seam/base_resource.rb', line 69

def self.resource_list_accessors
  @resource_list_accessors ||= {}
end

Instance Method Details

#[](key) ⇒ Object



41
42
43
44
45
46
# File 'lib/seam/base_resource.rb', line 41

def [](key)
  name = key.to_s
  return nil unless respond_to?(name)

  public_send(name)
end

#inspectObject



32
33
34
35
36
37
38
39
# File 'lib/seam/base_resource.rb', line 32

def inspect
  "<#{self.class.name}:#{"0x00%x" % (object_id << 1)}\n" + # rubocop:disable Style/StringConcatenation, Style/FormatString
    instance_variables
      .map { |k| k.to_s.sub("@", "") }
      .filter { |k| k != "data" and k != "client" and respond_to? k }
      .map { |k| "  #{k}=#{send(k).inspect}" }
      .join("\n") + ">"
end

#update_from_response(data) ⇒ Object



17
18
19
20
# File 'lib/seam/base_resource.rb', line 17

def update_from_response(data)
  @data = data
  process_data_attributes(@data)
end