Class: Kennel::Models::Record

Inherits:
Base
  • Object
show all
Defined in:
lib/kennel/models/record.rb

Direct Known Subclasses

Dashboard, Monitor, Slo

Constant Summary collapse

LOCK =
"\u{1F512}"
READONLY_ATTRIBUTES =
[
  :deleted, :id, :created, :created_at, :creator, :org_id, :modified, :modified_at, :api_resource
].freeze

Constants inherited from Base

Base::SETTING_OVERRIDABLE_METHODS

Constants included from SettingsAsMethods

SettingsAsMethods::SETTING_OVERRIDABLE_METHODS

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#kennel_id, #name, #to_json

Methods included from SubclassTracking

#recursive_subclasses, #subclasses

Methods included from SettingsAsMethods

included

Constructor Details

#initialize(project, *args) ⇒ Record

Returns a new instance of Record.

Raises:

  • (ArgumentError)


44
45
46
47
48
# File 'lib/kennel/models/record.rb', line 44

def initialize(project, *args)
  raise ArgumentError, "First argument must be a project, not #{project.class}" unless project.is_a?(Project)
  @project = project
  super(*args)
end

Instance Attribute Details

#projectObject (readonly)

Returns the value of attribute project.



42
43
44
# File 'lib/kennel/models/record.rb', line 42

def project
  @project
end

Class Method Details

.api_resource_mapObject



21
22
23
# File 'lib/kennel/models/record.rb', line 21

def api_resource_map
  subclasses.map { |s| [s.api_resource, s] }.to_h
end

.parse_any_url(url) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/kennel/models/record.rb', line 13

def parse_any_url(url)
  subclasses.detect do |s|
    if id = s.parse_url(url)
      break s.api_resource, id
    end
  end
end

Instance Method Details

#diff(actual) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/kennel/models/record.rb', line 50

def diff(actual)
  expected = as_json
  expected.delete(:id)

  self.class.send(:normalize, expected, actual)

  # strict: ignore Integer vs Float
  # similarity: show diff when not 100% similar
  # use_lcs: saner output
  Hashdiff.diff(actual, expected, use_lcs: false, strict: false, similarity: 1)
end

#resolve_linked_tracking_ids!Object



66
67
# File 'lib/kennel/models/record.rb', line 66

def resolve_linked_tracking_ids!(*)
end

#tracking_idObject



62
63
64
# File 'lib/kennel/models/record.rb', line 62

def tracking_id
  "#{project.kennel_id}:#{kennel_id}"
end