Sha256: 6d44c4c9599f71c5af3d581e13f6137a64eb2b8a1abe0a2b14362e250af6ef5c

Contents?: true

Size: 1.06 KB

Versions: 13

Compression:

Stored size: 1.06 KB

Contents

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

  class Error < StandardError; end

  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)
  rescue => e
    error = Error.new("#{e.class}: #{e}")
    error.set_backtrace e.backtrace.grep(/^#{Betterdocs.rails.root}/)
    raise error
  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

13 entries across 13 versions & 1 rubygems

Version Path
betterdocs-0.10.0 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.9.2 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.9.1 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.9.0 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.8.1 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.8.0 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.7.1 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.7.0 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.8 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.7 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.6 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.5 lib/betterdocs/dsl/controller/action/response.rb
betterdocs-0.6.4 lib/betterdocs/dsl/controller/action/response.rb