Sha256: 82d3d30e8d26ff825184cff81557bafa915aaa0e89d1e9f06dd8707a14dadf38

Contents?: true

Size: 910 Bytes

Versions: 5

Compression:

Stored size: 910 Bytes

Contents

class Betterdocs::Dsl::Controller::Action::Response
  include Betterdocs::Dsl::Common
  extend Tins::DSLAccessor

  def initialize(name = :default, &block)
    @name = name.to_sym
    @data_block = block || proc {}
  end

  dsl_accessor :name

  def params
    -> name { param(name).full?(:value) }
  end

  def data
    @data ||= instance_eval(&@data_block)
  end

  def properties
    representer.full? { |r| r.docs.nested_properties }  || []
  end

  def links
    representer.full? { |r| r.docs.nested_links }  || []
  end

  def representer
    data or return
    data.ask_and_send(:representer) || inherited_representer(data)
  end

  private\
  def inherited_representer(data)
    data.singleton_class.ancestors.find { |c|
      Betterdocs::ResultRepresenter >= c && c.respond_to?(:docs)
    }
  end

  def to_json(*a)
    my_data = data.ask_and_send(:to_hash) || data
    my_data.to_json(*a)
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
betterdocs-0.6.3 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.2 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.1 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.0 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.5.0 lib/betterdocs/dsl/controller/action/response.rb