Module: EffectivePostsHelper

Defined in:
app/helpers/effective_posts_helper.rb

Instance Method Summary collapse

Instance Method Details

#effective_post_path(post, opts = nil) ⇒ Object



4
5
6
7
8
9
10
11
12
13
# File 'app/helpers/effective_posts_helper.rb', line 4

def effective_post_path(post, opts = nil)
  category = post.category.to_s.downcase
  opts ||= {}

  if EffectivePosts.use_category_routes
    effective_posts.post_path(post, opts).sub('/posts', "/#{category}")
  else
    effective_posts.post_path(post, opts.merge(category: category))
  end
end

#link_to_post_category(category, options = {}) ⇒ Object



65
66
67
68
69
70
# File 'app/helpers/effective_posts_helper.rb', line 65

def (category, options = {})
  category = category.to_s.downcase

  href = EffectivePosts.use_category_routes ? "/#{category}" : effective_posts.posts_path(category: category.to_s)
  link_to(category.to_s.titleize, href, options)
end

#link_to_submit_post(label = 'Submit a post', options = {}) ⇒ Object

Submitting a Post



98
99
100
# File 'app/helpers/effective_posts_helper.rb', line 98

def link_to_submit_post(label = 'Submit a post', options = {})
  link_to(label, effective_posts.new_post_path, options)
end

#post_categoriesObject

Post Categories



57
58
59
# File 'app/helpers/effective_posts_helper.rb', line 57

def post_categories
  categories = EffectivePosts.categories
end

#post_excerpt(post, read_more_link: true, label: 'Read more', omission: '...', length: 200) ⇒ Object

Only supported options are: :label => ‘Read more’ to set the label of the ‘Read More’ link :omission => ‘…’ passed to the final text node’s truncate :length => 200 to set the max inner_text length of the content All other options are passed to the link_to ‘Read more’



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/helpers/effective_posts_helper.rb', line 33

def post_excerpt(post, read_more_link: true, label: 'Read more', omission: '...', length: 200)
  content = effective_region(post, :body, :editable => false) { '<p>Default content</p>'.html_safe }

  divider = content.index(Effective::Snippets::ReadMoreDivider::TOKEN)
  read_more = (read_more_link && label.present?) ? readmore_link(post, label: label) : ''

  CGI.unescapeHTML(if divider.present?
    truncate_html(content, Effective::Snippets::ReadMoreDivider::TOKEN, '') + read_more
  elsif length.present?
    truncate_html(content, length, omission) + read_more
  else
    content
  end).html_safe
end

#post_meta(post) ⇒ Object



19
20
21
22
23
24
25
26
# File 'app/helpers/effective_posts_helper.rb', line 19

def (post)
  [
    'Published',
    "on #{post.published_at.strftime('%B %d, %Y at %l:%M %p')}",
    ("to #{(post.category)}" if Array(EffectivePosts.categories).length > 1),
    ("by #{post.user.to_s.presence || 'Unknown'}" if EffectivePosts. && post.user.present?)
  ].compact.join(' ').html_safe
end


48
49
50
51
52
# File 'app/helpers/effective_posts_helper.rb', line 48

def read_more_link(post, options)
  (:p, class: 'post-read-more') do
    link_to((options.delete(:label) || 'Read more'), effective_post_path(post), (options.delete(:class) || {class: 'btn btn-primary'}).reverse_merge(options))
  end
end

#recent_posts(user: current_user, category: 'posts', limit: EffectivePosts.per_page) ⇒ Object

Recent Posts



74
75
76
77
# File 'app/helpers/effective_posts_helper.rb', line 74

def recent_posts(user: current_user, category: 'posts', limit: EffectivePosts.per_page)
  @recent_posts ||= {}
  @recent_posts[category] ||= Effective::Post.posts(user: user, category: category).limit(limit)
end

#render_post(post) ⇒ Object



15
16
17
# File 'app/helpers/effective_posts_helper.rb', line 15

def render_post(post)
  render(partial: 'effective/posts/post', locals: { post: post })
end

#render_post_categories(reverse: false) ⇒ Object



61
62
63
# File 'app/helpers/effective_posts_helper.rb', line 61

def render_post_categories(reverse: false)
  render(partial: '/effective/posts/categories', locals: { categories: (reverse ? post_categories.reverse : post_categories) })
end

#render_recent_posts(user: current_user, category: 'posts', limit: EffectivePosts.per_page) ⇒ Object



79
80
81
82
# File 'app/helpers/effective_posts_helper.rb', line 79

def render_recent_posts(user: current_user, category: 'posts', limit: EffectivePosts.per_page)
  posts = recent_posts(user: user, category: category, limit: limit)
  render partial: '/effective/posts/recent_posts', locals: { posts: posts }
end

#render_upcoming_events(user: current_user, category: 'events', limit: EffectivePosts.per_page) ⇒ Object



92
93
94
95
# File 'app/helpers/effective_posts_helper.rb', line 92

def render_upcoming_events(user: current_user, category: 'events', limit: EffectivePosts.per_page)
  posts = upcoming_events(user: user, category: category, limit: limit)
  render partial: '/effective/posts/upcoming_events', locals: { posts: posts }
end

#upcoming_events(user: current_user, category: 'events', limit: EffectivePosts.per_page) ⇒ Object

Upcoming Events



86
87
88
89
90
# File 'app/helpers/effective_posts_helper.rb', line 86

def upcoming_events(user: current_user, category: 'events', limit: EffectivePosts.per_page)
  @upcoming_events ||= {}
  @upcoming_events[category] ||= Effective::Post.posts(user: user, category: category).limit(limit)
    .reorder(:start_at).where('start_at > ?', Time.zone.now)
end