Class: Perron::Collection

Inherits:
Object
  • Object
show all
Defined in:
lib/perron/collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Collection

Returns a new instance of Collection.



7
8
9
10
11
12
# File 'lib/perron/collection.rb', line 7

def initialize(name)
  @name = name.inquiry
  @collection_path = File.join(Perron.configuration.input, name)

  raise Errors::CollectionNotFoundError, "No such collection: #{name}" unless File.exist?(@collection_path) && File.directory?(@collection_path)
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/perron/collection.rb', line 5

def name
  @name
end

Instance Method Details

#all(resource_class = "Content::#{name.classify}".safe_constantize) ⇒ Object Also known as: resources



18
19
20
# File 'lib/perron/collection.rb', line 18

def all(resource_class = "Content::#{name.classify}".safe_constantize)
  Perron::Relation.new(load_resources(resource_class).select(&:published?))
end

#configuration(resource_class = "Content::#{name.classify}".safe_constantize) ⇒ Object



14
15
16
# File 'lib/perron/collection.rb', line 14

def configuration(resource_class = "Content::#{name.classify}".safe_constantize)
  resource_class&.configuration
end

#find(slug, resource_class = Resource) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/perron/collection.rb', line 23

def find(slug, resource_class = Resource)
  Perron.deprecator.deprecation_warning(
    :find,
    "Collection#find will return nil instead of raising in the next major version. Use #find! to raise an error."
  )

  find!(slug, resource_class)
end

#find!(slug, resource_class = Resource) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/perron/collection.rb', line 32

def find!(slug, resource_class = Resource)
  resource = load_resources(resource_class).find { it.slug == slug }

  return resource if resource

  raise Errors::ResourceNotFoundError, "Resource not found with slug: #{slug}"
end

#find_by_file_name(file_name, resource_class = Resource) ⇒ Object



40
41
42
43
44
# File 'lib/perron/collection.rb', line 40

def find_by_file_name(file_name, resource_class = Resource)
  resource_class.new(
    Perron.configuration.allowed_extensions.lazy.map { File.join(@collection_path, [file_name, it].join(".")) }.find { File.exist?(it) }
  )
end

#validateObject



46
# File 'lib/perron/collection.rb', line 46

def validate = Perron::Site::Validate.new(collections: [self]).validate