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::ConflictingExternalModification::ModifiedFields, AccessCode::PendingMutations, AccessCode::PendingMutations::From, AccessCode::PendingMutations::To, AccessCode::Warnings, AccessCode::Warnings::ExternalModificationInEffect::ModifiedFields, AccessGrant, AccessGrant::Errors, AccessGrant::PendingMutations, AccessGrant::PendingMutations::From, AccessGrant::PendingMutations::To, AccessGrant::RequestedAccessMethods, AccessGrant::Warnings, AccessGrant::Warnings::OverprovisionedAccess::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::AkilesMetadata, 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::ActivateClimatePreset::Error, ActionAttempt::ActivateClimatePreset::Result, ActionAttempt::AssignCredential::Error, ActionAttempt::AssignCredential::Result, ActionAttempt::AssignCredential::Result::Errors, ActionAttempt::AssignCredential::Result::PendingMutations, ActionAttempt::AssignCredential::Result::PendingMutations::From, ActionAttempt::AssignCredential::Result::PendingMutations::To, ActionAttempt::AssignCredential::Result::Warnings, ActionAttempt::ConfigureAutoLock::Error, ActionAttempt::ConfigureAutoLock::Result, ActionAttempt::CreateAccessCode::Error, ActionAttempt::CreateAccessCode::Result, ActionAttempt::CreateNoiseThreshold::Error, ActionAttempt::CreateNoiseThreshold::Result, ActionAttempt::DeleteAccessCode::Error, ActionAttempt::DeleteAccessCode::Result, ActionAttempt::DeleteNoiseThreshold::Error, ActionAttempt::DeleteNoiseThreshold::Result, ActionAttempt::EncodeCredential::Error, ActionAttempt::EncodeCredential::Result, ActionAttempt::EncodeCredential::Result::AkilesMetadata, ActionAttempt::EncodeCredential::Result::AssaAbloyVostioMetadata, ActionAttempt::EncodeCredential::Result::Errors, ActionAttempt::EncodeCredential::Result::VisionlineMetadata, ActionAttempt::EncodeCredential::Result::Warnings, ActionAttempt::Error, ActionAttempt::LockDoor::Error, ActionAttempt::LockDoor::Result, ActionAttempt::PushThermostatPrograms::Error, ActionAttempt::PushThermostatPrograms::Result, ActionAttempt::ResetSandboxWorkspace::Error, ActionAttempt::ResetSandboxWorkspace::Result, ActionAttempt::Result, ActionAttempt::ScanCredential::Error, ActionAttempt::ScanCredential::Result, ActionAttempt::ScanCredential::Result::AcsCredentialOnEncoder, ActionAttempt::ScanCredential::Result::AcsCredentialOnEncoder::VisionlineMetadata, ActionAttempt::ScanCredential::Result::AcsCredentialOnSeam, ActionAttempt::ScanCredential::Result::AcsCredentialOnSeam::AkilesMetadata, ActionAttempt::ScanCredential::Result::AcsCredentialOnSeam::AssaAbloyVostioMetadata, ActionAttempt::ScanCredential::Result::AcsCredentialOnSeam::Errors, ActionAttempt::ScanCredential::Result::AcsCredentialOnSeam::VisionlineMetadata, ActionAttempt::ScanCredential::Result::AcsCredentialOnSeam::Warnings, ActionAttempt::ScanCredential::Result::Warnings, ActionAttempt::ScanToAssignCredential::Error, ActionAttempt::ScanToAssignCredential::Result, ActionAttempt::ScanToAssignCredential::Result::AkilesMetadata, ActionAttempt::ScanToAssignCredential::Result::AssaAbloyVostioMetadata, ActionAttempt::ScanToAssignCredential::Result::Errors, ActionAttempt::ScanToAssignCredential::Result::VisionlineMetadata, ActionAttempt::ScanToAssignCredential::Result::Warnings, ActionAttempt::SetFanMode::Error, ActionAttempt::SetFanMode::Result, ActionAttempt::SetHvacMode::Error, ActionAttempt::SetHvacMode::Result, ActionAttempt::SimulateKeypadCodeEntry::Error, ActionAttempt::SimulateKeypadCodeEntry::Result, ActionAttempt::SimulateManualLockViaKeypad::Error, ActionAttempt::SimulateManualLockViaKeypad::Result, ActionAttempt::SyncAccessCodes::Error, ActionAttempt::SyncAccessCodes::Result, ActionAttempt::UnlockDoor::Error, ActionAttempt::UnlockDoor::Result, ActionAttempt::UpdateAccessCode::Error, ActionAttempt::UpdateAccessCode::Result, ActionAttempt::UpdateNoiseThreshold::Error, ActionAttempt::UpdateNoiseThreshold::Result, Batch, ClientSession, ConnectWebview, ConnectedAccount, ConnectedAccount::Errors, ConnectedAccount::Errors::SaltoKsSubscriptionLimitExceeded::SaltoKsMetadata, ConnectedAccount::Errors::SaltoKsSubscriptionLimitExceeded::SaltoKsMetadata::Sites, ConnectedAccount::UserIdentifier, ConnectedAccount::Warnings, ConnectedAccount::Warnings::SaltoKsSubscriptionLimitAlmostReached::SaltoKsMetadata, ConnectedAccount::Warnings::SaltoKsSubscriptionLimitAlmostReached::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::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::Properties::YacanMetadata, 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::AccessCodeChanged::ChangedProperties, SeamEvent::AccessCodeCodeChanged::From, SeamEvent::AccessCodeCodeChanged::To, SeamEvent::AccessCodeDelayInRemovingFromDevice::AccessCodeErrors, SeamEvent::AccessCodeDelayInRemovingFromDevice::AccessCodeWarnings, SeamEvent::AccessCodeDelayInRemovingFromDevice::ConnectedAccountErrors, SeamEvent::AccessCodeDelayInRemovingFromDevice::ConnectedAccountWarnings, SeamEvent::AccessCodeDelayInRemovingFromDevice::DeviceErrors, SeamEvent::AccessCodeDelayInRemovingFromDevice::DeviceWarnings, SeamEvent::AccessCodeDelayInSettingOnDevice::AccessCodeErrors, SeamEvent::AccessCodeDelayInSettingOnDevice::AccessCodeWarnings, SeamEvent::AccessCodeDelayInSettingOnDevice::ConnectedAccountErrors, SeamEvent::AccessCodeDelayInSettingOnDevice::ConnectedAccountWarnings, SeamEvent::AccessCodeDelayInSettingOnDevice::DeviceErrors, SeamEvent::AccessCodeDelayInSettingOnDevice::DeviceWarnings, SeamEvent::AccessCodeFailedToRemoveFromDevice::AccessCodeErrors, SeamEvent::AccessCodeFailedToRemoveFromDevice::AccessCodeWarnings, SeamEvent::AccessCodeFailedToRemoveFromDevice::ConnectedAccountErrors, SeamEvent::AccessCodeFailedToRemoveFromDevice::ConnectedAccountWarnings, SeamEvent::AccessCodeFailedToRemoveFromDevice::DeviceErrors, SeamEvent::AccessCodeFailedToRemoveFromDevice::DeviceWarnings, SeamEvent::AccessCodeFailedToSetOnDevice::AccessCodeErrors, SeamEvent::AccessCodeFailedToSetOnDevice::AccessCodeWarnings, SeamEvent::AccessCodeFailedToSetOnDevice::ConnectedAccountErrors, SeamEvent::AccessCodeFailedToSetOnDevice::ConnectedAccountWarnings, SeamEvent::AccessCodeFailedToSetOnDevice::DeviceErrors, SeamEvent::AccessCodeFailedToSetOnDevice::DeviceWarnings, SeamEvent::AccessCodeMutationsRequested::RequestedMutations, SeamEvent::AccessCodeNameChanged::From, SeamEvent::AccessCodeNameChanged::To, SeamEvent::AccessCodeTimeFrameChanged::From, SeamEvent::AccessCodeTimeFrameChanged::To, SeamEvent::AccessCodeUnmanagedFailedToConvertToManaged::AccessCodeErrors, SeamEvent::AccessCodeUnmanagedFailedToConvertToManaged::AccessCodeWarnings, SeamEvent::AccessCodeUnmanagedFailedToConvertToManaged::ConnectedAccountErrors, SeamEvent::AccessCodeUnmanagedFailedToConvertToManaged::ConnectedAccountWarnings, SeamEvent::AccessCodeUnmanagedFailedToConvertToManaged::DeviceErrors, SeamEvent::AccessCodeUnmanagedFailedToConvertToManaged::DeviceWarnings, SeamEvent::AcsSystemDisconnected::AcsSystemErrors, SeamEvent::AcsSystemDisconnected::AcsSystemWarnings, SeamEvent::AcsSystemDisconnected::ConnectedAccountErrors, SeamEvent::AcsSystemDisconnected::ConnectedAccountWarnings, SeamEvent::ConnectedAccountDisconnected::ConnectedAccountErrors, SeamEvent::ConnectedAccountDisconnected::ConnectedAccountWarnings, SeamEvent::ConnectedAccountReauthorizationRequested::ConnectedAccountErrors, SeamEvent::ConnectedAccountReauthorizationRequested::ConnectedAccountWarnings, SeamEvent::DeviceAccessoryKeypadDisconnected::ConnectedAccountErrors, SeamEvent::DeviceAccessoryKeypadDisconnected::ConnectedAccountWarnings, SeamEvent::DeviceAccessoryKeypadDisconnected::DeviceErrors, SeamEvent::DeviceAccessoryKeypadDisconnected::DeviceWarnings, SeamEvent::DeviceConnectionBecameFlaky::ConnectedAccountErrors, SeamEvent::DeviceConnectionBecameFlaky::ConnectedAccountWarnings, SeamEvent::DeviceConnectionBecameFlaky::DeviceErrors, SeamEvent::DeviceConnectionBecameFlaky::DeviceWarnings, SeamEvent::DeviceDisconnected::ConnectedAccountErrors, SeamEvent::DeviceDisconnected::ConnectedAccountWarnings, SeamEvent::DeviceDisconnected::DeviceErrors, SeamEvent::DeviceDisconnected::DeviceWarnings, SeamEvent::DeviceErrorSubscriptionRequired::ConnectedAccountErrors, SeamEvent::DeviceErrorSubscriptionRequired::ConnectedAccountWarnings, SeamEvent::DeviceErrorSubscriptionRequired::DeviceErrors, SeamEvent::DeviceErrorSubscriptionRequired::DeviceWarnings, SeamEvent::DeviceUnmanagedDisconnected::ConnectedAccountErrors, SeamEvent::DeviceUnmanagedDisconnected::ConnectedAccountWarnings, SeamEvent::DeviceUnmanagedDisconnected::DeviceErrors, SeamEvent::DeviceUnmanagedDisconnected::DeviceWarnings, SeamEvent::LockAccessDenied::Reason, Space, Space::CustomerData, Space::Geolocation, ThermostatDailyProgram, ThermostatDailyProgram::Periods, ThermostatSchedule, ThermostatSchedule::Errors, UnmanagedAccessCode, UnmanagedAccessCode::DormakabaOracodeMetadata, UnmanagedAccessCode::Errors, UnmanagedAccessCode::Errors::ConflictingExternalModification::ModifiedFields, UnmanagedAccessCode::Warnings, UnmanagedAccessCode::Warnings::ExternalModificationInEffect::ModifiedFields, UnmanagedAccessGrant, UnmanagedAccessGrant::Errors, UnmanagedAccessGrant::PendingMutations, UnmanagedAccessGrant::PendingMutations::From, UnmanagedAccessGrant::PendingMutations::To, UnmanagedAccessGrant::RequestedAccessMethods, UnmanagedAccessGrant::Warnings, UnmanagedAccessGrant::Warnings::OverprovisionedAccess::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

.aliased_accessor(attr, from:) ⇒ Object



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

def self.aliased_accessor(attr, from:)
  attribute_aliases[from.to_s] = attr
  attr_accessor attr
end

.attribute_aliasesObject



97
98
99
# File 'lib/seam/base_resource.rb', line 97

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

.date_accessor(*attrs) ⇒ Object



101
102
103
104
105
106
107
108
109
# File 'lib/seam/base_resource.rb', line 101

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

.discriminated_by(attribute, variants) ⇒ Object



38
39
40
41
# File 'lib/seam/base_resource.rb', line 38

def self.discriminated_by(attribute, variants)
  @discriminator = attribute.to_s
  @discriminated_variants = variants
end

.load_from_response(data, client = nil) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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 { |item| load_from_response(item, client) }
  else
    resource_class = if data.is_a?(Hash) && @discriminator
      value = data[@discriminator] || data[@discriminator.to_sym]
      @discriminated_variants.fetch(value, self)
    else
      self
    end
    resource_class.new(data, client)
  end
end

.resource_accessor(attr, resource_class) ⇒ Object



59
60
61
62
# File 'lib/seam/base_resource.rb', line 59

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

.resource_accessorsObject



89
90
91
# File 'lib/seam/base_resource.rb', line 89

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

.resource_list_accessor(attr, resource_class) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/seam/base_resource.rb', line 69

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



93
94
95
# File 'lib/seam/base_resource.rb', line 93

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

Instance Method Details

#[](key) ⇒ Object



52
53
54
55
56
57
# File 'lib/seam/base_resource.rb', line 52

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

  public_send(name)
end

#inspectObject



43
44
45
46
47
48
49
50
# File 'lib/seam/base_resource.rb', line 43

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