Sha256: 6500a292da333a6803250ec56472f2cb53b71f60c721057e81c9020d52145ef2

Contents?: true

Size: 1.19 KB

Versions: 12

Compression:

Stored size: 1.19 KB

Contents

format :json do
  # because card.item_cards returns "[[#{self}]]"
  def item_cards
    nested_cards
  end

  def default_nest_view
    :atom
  end

  def default_item_view
    :name
  end

  def max_depth
    params[:max_depth].present? ? params[:max_depth].to_i : 1
  end

  # TODO: support layouts in json
  # eg layout=stamp gives you the metadata currently in "page" view
  # and layout=none gives you ONLY the requested view (default atom)
  def show view, args
    view ||= :molecule
    string_with_page_details do
      render! view, args
    end
  end

  view :status, unknown: true, perms: :none do
    { key: card.key,
      url_key: card.name.url_key,
      status: card.state }.tap do |h|
      h[:id] = card.id if h[:status] == :real
    end
  end

  view :page, cache: :never do
    page_details card: render_atom
  end

  private

  def string_with_page_details
    raw = yield
    return raw if raw.is_a? String

    stringify page_details(raw)
  end

  def page_details obj
    return obj unless obj.is_a? Hash

    obj.merge url: request_url, requested_at: Time.now.utc.to_s
  end

  def stringify raw
    method = params[:compress] ? :generate : :pretty_generate
    JSON.send method, raw
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
card-mod-format-0.18.1 set/all/json.rb
card-mod-format-0.18.0 set/all/json.rb
card-mod-format-0.17.0 set/all/json.rb
card-mod-format-0.16.0 set/all/json.rb
card-mod-format-0.15.6 set/all/json.rb
card-mod-format-0.15.5 set/all/json.rb
card-mod-format-0.15.4 set/all/json.rb
card-mod-format-0.15.3 set/all/json.rb
card-mod-format-0.15.2.pre1 set/all/json.rb
card-mod-format-0.15.1.1 set/all/json.rb
card-mod-format-0.15.1 set/all/json.rb
card-mod-format-0.15.0 set/all/json.rb