Class: SheetsDB::Resource
- Inherits:
-
Object
- Object
- SheetsDB::Resource
show all
- Extended by:
- Forwardable
- Defined in:
- lib/sheets_db/resource.rb
Defined Under Namespace
Classes: CollectionTypeAlreadyRegisteredError, ResourceTypeMismatchError
Class Attribute Summary collapse
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(google_drive_resource) ⇒ Resource
Returns a new instance of Resource.
55
56
57
|
# File 'lib/sheets_db/resource.rb', line 55
def initialize(google_drive_resource)
@google_drive_resource = google_drive_resource
end
|
Class Attribute Details
.resource_type ⇒ Object
Returns the value of attribute resource_type.
7
8
9
|
# File 'lib/sheets_db/resource.rb', line 7
def resource_type
@resource_type
end
|
Instance Attribute Details
#google_drive_resource ⇒ Object
Returns the value of attribute google_drive_resource.
53
54
55
|
# File 'lib/sheets_db/resource.rb', line 53
def google_drive_resource
@google_drive_resource
end
|
Class Method Details
.belongs_to_many(resource, class_name:) ⇒ Object
26
27
28
29
30
31
32
33
34
|
# File 'lib/sheets_db/resource.rb', line 26
def belongs_to_many(resource, class_name:)
register_association(resource, class_name: class_name, resource_type: :parents)
define_method(resource) do
result = instance_variable_get(:"@#{resource}")
result || instance_variable_set(:"@#{resource}",
google_drive_resource.parents.map { |id| Support.constantize(class_name).find_by_id(id) }
)
end
end
|
.find_by_id(id, session: SheetsDB::Session.default) ⇒ Object
18
19
20
21
22
23
24
|
# File 'lib/sheets_db/resource.rb', line 18
def find_by_id(id, session: SheetsDB::Session.default)
google_drive_resource = session.raw_file_by_id(id)
if @resource_type && !google_drive_resource.is_a?(@resource_type)
fail(ResourceTypeMismatchError, "The file with id #{id} is not a #{@resource_type}")
end
new(google_drive_resource)
end
|
.inherited(subclass) ⇒ Object
9
10
11
12
|
# File 'lib/sheets_db/resource.rb', line 9
def inherited(subclass)
super
subclass.instance_variable_set(:@resource_type, @resource_type)
end
|
.register_association(resource, class_name:, resource_type:) ⇒ Object
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/sheets_db/resource.rb', line 36
def register_association(resource, class_name:, resource_type:)
@associations ||= {}
if @associations.values.any? { |value| value[:resource_type] == resource_type }
raise CollectionTypeAlreadyRegisteredError
end
@associations[resource] = {
resource_type: resource_type,
class_name: class_name
}
end
|
.set_resource_type(resource_type) ⇒ Object
14
15
16
|
# File 'lib/sheets_db/resource.rb', line 14
def set_resource_type(resource_type)
@resource_type = resource_type
end
|
Instance Method Details
#==(other) ⇒ Object
Also known as:
eql?
59
60
61
62
|
# File 'lib/sheets_db/resource.rb', line 59
def ==(other)
other.is_a?(self.class) &&
other.google_drive_resource == google_drive_resource
end
|
#base_attributes ⇒ Object
70
71
72
73
74
75
76
77
|
# File 'lib/sheets_db/resource.rb', line 70
def base_attributes
{
id: id,
name: name,
created_at: created_at,
updated_at: updated_at
}
end
|
#hash ⇒ Object
66
67
68
|
# File 'lib/sheets_db/resource.rb', line 66
def hash
[self.class, google_drive_resource].hash
end
|