Content

Rendering & filtering

Perron's resources are just Ruby objects so it is straight-forward to render, filter and order resources.

Resource content

To render a resource's content, use @resource.content.

Rendering resources

If you want to render a list of resources, use Content::Post.all. You can also pass the array to render, just like with ActiveRecord models.

<%= render Content::Post.all %>

This expects a partial app/views/content/posts/_post.html.erb.

Or set a partial, and pass the collection:

<%= render partial: "content/posts/custom", collection: Content::Post.all %

Enumerable methods

All typical enumerable methods are available on Perron's resources. Here are some examples:

Filtering

published_posts = Content::Post.all.select { it.published? }
ruby_posts = Content::Post.all.select { it.metadata.category == "ruby" }
recent_posts = Content::Post.all.select { (it.published_at.after? 1.month.ago }

Transformation

titles = Content::Post.all.map(&:title)
slugs_with_titles = Content::Post.all.map { [it.slug, it.title] }.to_h

Sorting

sorted_by_date = Content::Post.all.sort_by(&:publication_date)
sorted_by_title = Content::Post.all.sort_by(&:title)
newest_first = Content::Post.all.sort_by(&:publication_date).reverse

Limiting

first_three = Content::Post.all.first(3)
most_recent = Content::Post.all.sort_by(&:publication_date).reverse.first(5)

Finding

ruby_tutorial = Content::Post.all.find { it.metadatatitle.include?("Ruby Tutorial") }
posts_with_images = Content::Post.all.select { it.content.include?("![") } # assuming markdown usage

Grouping

posts_by_category = Content::Post.all.group_by(&:category)
posts_by_year = Content::Post.all.group_by { it.published_at.year }

Counting

total_posts = Content::Post.all.count
published_count = Content::Post.all.count { it.published? }
category_counts = Content::Post.all.group_by(&:category).transform_values(&:count)

Checking conditions

has_ruby_posts = Content::Post.all.any? { it.metadata.category == "ruby" }
all_published = Content::Post.all.all? { it.published? }

Group published posts by category

Sorted by date within each category.

categorized_posts = Content::Post.all
  .select { it.published? }
  .group_by(&:category)
  .transform_values { it.sort_by(&:publication_date).reverse }
Edit this page