Class: Kennel::Models::Record
- Inherits:
-
Base
- Object
- Base
- Kennel::Models::Record
show all
- Defined in:
- lib/kennel/models/record.rb
Constant Summary
collapse
- LOCK =
"\u{1F512}"
- TRACKING_FIELDS =
[:message, :description].freeze
- READONLY_ATTRIBUTES =
[
:deleted, :id, :created, :created_at, :creator, :org_id, :modified, :modified_at,
:klass, :tracking_id ].freeze
Constants inherited
from Base
Base::SETTING_OVERRIDABLE_METHODS
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
#recursive_subclasses, #subclasses
included
Constructor Details
#initialize(project, *args) ⇒ Record
Returns a new instance of Record.
58
59
60
61
62
|
# File 'lib/kennel/models/record.rb', line 58
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
#project ⇒ Object
Returns the value of attribute project.
56
57
58
|
# File 'lib/kennel/models/record.rb', line 56
def project
@project
end
|
Class Method Details
.api_resource_map ⇒ Object
23
24
25
|
# File 'lib/kennel/models/record.rb', line 23
def api_resource_map
subclasses.map { |s| [s.api_resource, s] }.to_h
end
|
.parse_any_url(url) ⇒ Object
15
16
17
18
19
20
21
|
# File 'lib/kennel/models/record.rb', line 15
def parse_any_url(url)
subclasses.detect do |s|
if id = s.parse_url(url)
break s.api_resource, id
end
end
end
|
.parse_tracking_id(a) ⇒ Object
27
28
29
|
# File 'lib/kennel/models/record.rb', line 27
def parse_tracking_id(a)
a[self::TRACKING_FIELD].to_s[/-- Managed by kennel (\S+:\S+)/, 1]
end
|
.remove_tracking_id(a) ⇒ Object
TODO: combine with parse into a single method or a single regex
32
33
34
35
36
37
|
# File 'lib/kennel/models/record.rb', line 32
def remove_tracking_id(a)
value = a[self::TRACKING_FIELD]
a[self::TRACKING_FIELD] =
value.dup.sub!(/\n?-- Managed by kennel .*/, "") ||
raise("did not find tracking id in #{value}")
end
|
Instance Method Details
#add_tracking_id ⇒ Object
87
88
89
90
91
92
93
94
95
|
# File 'lib/kennel/models/record.rb', line 87
def add_tracking_id
json = as_json
if self.class.parse_tracking_id(json)
invalid! "remove \"-- Managed by kennel\" line it from #{self.class::TRACKING_FIELD} to copy a resource"
end
json[self.class::TRACKING_FIELD] =
"#{json[self.class::TRACKING_FIELD]}\n" \
"-- Managed by kennel #{tracking_id} in #{project.class.file_location}, do not modify manually".lstrip
end
|
#diff(actual) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/kennel/models/record.rb', line 64
def diff(actual)
expected = as_json
expected.delete(:id)
self.class.send(:normalize, expected, actual)
Hashdiff.diff(actual, expected, use_lcs: false, strict: false, similarity: 1)
end
|
#remove_tracking_id ⇒ Object
97
98
99
|
# File 'lib/kennel/models/record.rb', line 97
def remove_tracking_id
self.class.remove_tracking_id(as_json)
end
|
#resolve_linked_tracking_ids! ⇒ Object
84
85
|
# File 'lib/kennel/models/record.rb', line 84
def resolve_linked_tracking_ids!(*)
end
|
#tracking_id ⇒ Object
76
77
78
79
80
81
82
|
# File 'lib/kennel/models/record.rb', line 76
def tracking_id
@tracking_id ||= begin
id = "#{project.kennel_id}:#{kennel_id}"
raise ValidationError, "#{id} kennel_id cannot include whitespace" if id.match?(/\s/) id
end
end
|