Class: Kennel::Models::Base
- Inherits:
-
Object
- Object
- Kennel::Models::Base
show all
- Extended by:
- SubclassTracking
- Defined in:
- lib/kennel/models/base.rb
Defined Under Namespace
Classes: ValidationError
Constant Summary
collapse
- LOCK =
"\u{1F512}"
- READONLY_ATTRIBUTES =
[
:deleted, :matching_downtimes, :id, :created, :created_at, :creator, :org_id, :modified,
:overall_state_modified, :overall_state, :api_resource
].freeze
- REQUEST_DEFAULTS =
{
style: { width: "normal", palette: "dog_classic", type: "solid" },
conditional_formats: [],
aggregator: "avg"
}.freeze
- OVERRIDABLE_METHODS =
[:name, :kennel_id].freeze
Class Method Summary
collapse
Instance Method Summary
collapse
recursive_subclasses, subclasses
Constructor Details
#initialize(options = {}) ⇒ Base
Returns a new instance of Base.
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/kennel/models/base.rb', line 100
def initialize(options = {})
validate_options(options)
options.each do |name, block|
self.class.validate_setting_exists name
define_singleton_method name, &block
end
pwd = /^#{Regexp.escape(Dir.pwd)}\//
@invocation_location = caller.detect do |l|
if found = File.expand_path(l).sub!(pwd, "")
break found
end
end
end
|
Class Method Details
.defaults(options) ⇒ Object
46
47
48
49
50
51
|
# File 'lib/kennel/models/base.rb', line 46
def defaults(options)
options.each do |name, block|
validate_setting_exists name
define_method name, &block
end
end
|
.inherited(child) ⇒ Object
53
54
55
56
|
# File 'lib/kennel/models/base.rb', line 53
def inherited(child)
super
child.instance_variable_set(:@set, (@set || []).dup)
end
|
.settings(*names) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/kennel/models/base.rb', line 25
def settings(*names)
duplicates = (@set & names)
if duplicates.any?
raise ArgumentError, "Settings #{duplicates.map(&:inspect).join(", ")} are already defined"
end
overrides = ((instance_methods - OVERRIDABLE_METHODS) & names)
if overrides.any?
raise ArgumentError, "Settings #{overrides.map(&:inspect).join(", ")} are already used as methods"
end
@set.concat names
names.each do |name|
next if method_defined?(name)
define_method name do
message = "Trying to call #{name} for #{self.class} but it was never set or passed as option"
raise_with_location ArgumentError, message
end
end
end
|
.validate_setting_exists(name) ⇒ Object
58
59
60
61
62
|
# File 'lib/kennel/models/base.rb', line 58
def validate_setting_exists(name)
return if !@set || @set.include?(name)
supported = @set.map(&:inspect)
raise ArgumentError, "Unsupported setting #{name.inspect}, supported settings are #{supported.join(", ")}"
end
|
Instance Method Details
#diff(actual) ⇒ Object
129
130
131
132
133
134
135
136
|
# File 'lib/kennel/models/base.rb', line 129
def diff(actual)
expected = as_json
expected.delete(:id)
self.class.send(:normalize, expected, actual)
HashDiff.diff(actual, expected, use_lcs: false)
end
|
#kennel_id ⇒ Object
117
118
119
120
121
122
123
|
# File 'lib/kennel/models/base.rb', line 117
def kennel_id
name = self.class.name
if name.start_with?("Kennel::")
raise_with_location ArgumentError, "Set :kennel_id"
end
@kennel_id ||= Utils.snake_case name
end
|
#name ⇒ Object
125
126
127
|
# File 'lib/kennel/models/base.rb', line 125
def name
self.class.name
end
|
#resolve_linked_tracking_ids ⇒ Object
146
147
|
# File 'lib/kennel/models/base.rb', line 146
def resolve_linked_tracking_ids(*)
end
|
#to_json ⇒ Object
142
143
144
|
# File 'lib/kennel/models/base.rb', line 142
def to_json
raise NotImplementedError, "Use as_json"
end
|
#tracking_id ⇒ Object
138
139
140
|
# File 'lib/kennel/models/base.rb', line 138
def tracking_id
"#{project.kennel_id}:#{kennel_id}"
end
|