Sha256: 4e990a0a9398e8c3084308c272caf892dc1bcd3d04f81adf9af8012749095293

Contents?: true

Size: 1.43 KB

Versions: 2

Compression:

Stored size: 1.43 KB

Contents

module Basepack
  module Forms
    module Factories
      class RailsAdmin < Factories::Base

        class Bindings
          def initialize(form, view)
            @form = form
            @view = view
          end

          def [](param)
            case param
            when :object
              @form.resource
            when :view
              @view
            when :controller
              @view.controller
            when :form
              @form
            end
          end
        end

        def initialize(section, view, form_class = Forms::Base, group_class = Groups::Base)
          super(form_class, group_class)
          @section      = section
          @view         = view
        end

        def build_form(form)
          bindings = Bindings.new(form, @view)

          Basepack::Utils.model_config(form.resource_class).send(@section).with(bindings).visible_groups.map do |g|
            i = 0
            fields = g.fields.sort_by {|f| [f.order, i += 1] } # stable sort

            form.group(g) do |group|
              fields.each do |f|
                group.field(f.name, f.with(bindings)) do |field|
                  def field.partial_delegated
                    partial = super.to_s
                    partial.include?('/') ? partial : File.join('forms', 'edit', partial)
                  end
                end
              end
            end
          end

          form
        end

      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
basepack-0.1.0 lib/basepack/forms/factories/rails_admin.rb
basepack-0.0.2 lib/basepack/forms/factories/rails_admin.rb