Sha256: 29b33730760502c94e3a3e96a207308cef0a640a57f1425bf9e33e795b469630

Contents?: true

Size: 1.09 KB

Versions: 6

Compression:

Stored size: 1.09 KB

Contents

module Integral
  # Widgets used to generate dynamic content
  module Widgets
    # Outputs recent posts
    #
    # Example Widget Markup
    # <p class='integral-widget' data-widget-type='recent_posts' data-widget-value-tagged='awesome-tag'>
    class RecentPosts
      # Render the recent posts
      def self.render(options = {})
        options = options.reverse_merge(default_options)

        controller.render(
          partial: 'integral/posts/collection',
          locals: { collection: skope(options) },
          layout: false
        )
      end

      # Frontend controller used to render views
      def self.controller
        Integral.frontend_parent_controller.constantize
      end

      # Default widget options
      def self.default_options
        {
          amount: 2,
          tagged: ''
        }
      end

      # Scope of the widget
      def self.skope(options)
        skope = Integral::Post.published.order(published_at: :desc)
        skope = skope.tagged_with(options[:tagged].split) if options[:tagged].present?
        skope.limit(options[:amount])
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
integral-1.5.1 lib/integral/widgets/recent_posts.rb
integral-1.5.0 lib/integral/widgets/recent_posts.rb
integral-1.4.0 lib/integral/widgets/recent_posts.rb
integral-1.3.0 lib/integral/widgets/recent_posts.rb
integral-1.2.0 lib/integral/widgets/recent_posts.rb
integral-1.1.0 lib/integral/widgets/recent_posts.rb