Module: StreamRails::Renderable

Defined in:
lib/stream_rails/renderable.rb

Overview

Provides logic for rendering activities. (different templates per activity verb).

Class Method Summary collapse

Class Method Details

.layout_path(path = nil, root = nil) ⇒ Object



39
40
41
42
43
# File 'lib/stream_rails/renderable.rb', line 39

def layout_path(path = nil, root = nil)
  path.nil? and return
  root ||= 'layouts'
  select_path path, root
end

.partial_path(activity, aggregated, prefix = '', path = nil, root = nil) ⇒ Object



45
46
47
48
49
50
# File 'lib/stream_rails/renderable.rb', line 45

def partial_path(activity, aggregated, prefix = '', path = nil, root = nil)
  root ||= (if aggregated then 'aggregated_activity' else 'activity' end)
  path ||= "#{activity['verb']}".downcase
  path = "#{prefix}_#{path}" if prefix
  select_path path, root
end

.prepare_locals(activity, params) ⇒ Object



52
53
54
55
56
57
# File 'lib/stream_rails/renderable.rb', line 52

def prepare_locals(activity, params)
  locals = params.delete(:locals) || Hash.new
  locals.merge\
    activity:     activity,
    parameters:   params
end

.render(activity, context, params = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/stream_rails/renderable.rb', line 7

def render(activity, context, params = {})
  aggregated = activity.has_key? 'activities'
  partial = partial_path(activity, aggregated, *params.values_at(:prefix, :partial, :partial_root))
  layout  = layout_path(*params.values_at(:layout, :layout_root))
  locals  = prepare_locals(activity, params)
  params = params.merge(partial: partial, locals: locals, layout: layout)
  if aggregated
    render_aggregated(activity, context, params)
  else
    render_simple(activity, context, params)
  end
end

.render_aggregated(activity, context, params) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/stream_rails/renderable.rb', line 29

def render_aggregated(activity, context, params)
  if !activity['activities'].map {|a| !a.enriched?}.all?
    context.render params
  else
    first_activity = activity['activities'][0]
    StreamRails.logger.warn "trying to display a non enriched activity #{first_activity.inspect} #{first_activity.failed_to_enrich}"
    return ''
  end
end

.render_simple(activity, context, params) ⇒ Object



20
21
22
23
24
25
26
27
# File 'lib/stream_rails/renderable.rb', line 20

def render_simple(activity, context, params)
  if activity.enriched?
    context.render params
  else
    StreamRails.logger.warn "trying to display a non enriched activity #{activity.inspect} #{activity.failed_to_enrich}"
    return ''
  end
end