Sha256: 8a0c5c67c3d5923c867cca3848ad7280d7eebd3b3d73ec933abb0381364d40c2

Contents?: true

Size: 1.17 KB

Versions: 5

Compression:

Stored size: 1.17 KB

Contents

module ApiTaster
  class FormBuilder < AbstractController::Base
    include AbstractController::Rendering
    include ActionView::Context
    include ActionView::Helpers::CaptureHelper

    self.view_paths = ApiTaster::Engine.root.join('app/views')

    def initialize(params)
      flush_output_buffer
      @_buffer = ''
      add_to_buffer(params)
    end

    def html
      @_buffer
    end

    private

    def add_to_buffer(params, parent_labels = [])
      params.each do |label, value|
        if value.is_a?(String)
          @_buffer += render(
            :partial => 'api_taster/routes/param_form_element',
            :locals  => {
              :label      => "#{print_labels(parent_labels)}#{label}",
              :label_text => label,
              :value      => value
            }
          )
        else
          parent_labels << label

          @_buffer += render(
            :partial => 'api_taster/routes/param_form_legend',
            :locals  => { :label => print_labels(parent_labels) }
          )

          add_to_buffer(value, parent_labels)
        end
      end
    end

    def print_labels(parent_labels)
      "[#{parent_labels * ']['}]"
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
api_taster-0.3.0 lib/api_taster/form_builder.rb
api_taster-0.2.2 lib/api_taster/form_builder.rb
api_taster-0.2.1 lib/api_taster/form_builder.rb
api_taster-0.2.0 lib/api_taster/form_builder.rb
api_taster-0.1.0 lib/api_taster/form_builder.rb