codn/adminpanel

View on GitHub
lib/generators/adminpanel/resource/resource_generator_helper.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Adminpanel
  module ResourceGeneratorHelper
    def needs_name?
      fields.each do |attribute|
        return false if attribute.split(':').first == 'name'
      end
      true
    end

    def class_name
      "#{resource_name}_#{@attr_field}".camelize
    end

    def belongs_to_field(resource)
      "#{resource.singularize.downcase}_id"
    end

    def checkbox_field(resource)
      "#{resource.singularize.downcase}_ids"
    end

    def resource_class_name(resource)
      "#{resource.singularize.capitalize}"
    end

    def assign_attributes_variables(attribute)
      @attr_field = attribute.split(":").first
      if attribute.split(":").second.nil?
        @attr_type = "string"
      else
        @attr_type = attribute.split(":").second
      end
    end

    def is_a_resource?
      fields.each do |attribute|
        assign_attributes_variables(attribute)
        if @attr_type != 'belongs_to'
          return true
        end
      end
      false
    end

    def has_gallery?
      !options[:'skip-gallery']
    end

    def resource_name
      name.singularize.downcase #normalize name to downcase and singular
    end

    def gallery_name
      "#{resource_name}file" #ex: postfile
    end

    def camelized_resource
      resource_name.camelize
    end

    def pluralized_name
      "#{resource_name.pluralize}"
    end

    def symbolized_attributes
      fields.map do |attribute|
        assign_attributes_variables(attribute)
        case @attr_type
        when 'belongs_to'
          ":#{belongs_to_field(@attr_field)}"
        when 'checkbox'
          "{ #{checkbox_field(@attr_field)}: [] }"
        else
          ":#{attribute.split(':').first}"
        end
      end.join(",\n")
    end

    def form_attributes_hash
      fields.map do |attribute|
        assign_attributes_variables(attribute)
        send(@attr_type + '_form_hash')
      end.join(", \n")
    end

    def string_form_hash
      attribute_hash(@attr_field, 'text_field')
    end

    def float_form_hash
      attribute_hash(@attr_field, 'text_field')
    end

    def text_form_hash
      attribute_hash(@attr_field ,'wysiwyg_field')
    end

    def integer_form_hash
      attribute_hash(@attr_field, 'number_field')
    end

    def file_form_hash
      attribute_hash(@attr_field, 'file_field')
    end

    def image_form_hash
      attribute_hash(@attr_field, 'image_field')
    end

    def boolean_form_hash
      attribute_hash(@attr_field, 'boolean')
    end

    def date_form_hash
      attribute_hash(@attr_field, 'datepicker')
    end

    def file_field_form_hash
      attribute_hash(gallery_name.pluralize, 'adminpanel_file_field')
    end

    def belongs_to_form_hash
      attribute_hash(belongs_to_field(@attr_field), 'select', resource_class_name(@attr_field))
    end

    def checkbox_form_hash
      attribute_hash(
        checkbox_field(resource_class_name(@attr_field.downcase.singularize + 's')),
        'checkbox',
        @attr_field.capitalize.singularize
      )
    end

    def attribute_hash(name, type, model = '')
      model = model_type(model) + ",\n" if model != ''
      "{\n" +
        indent("'#{name}'" + " => {\n", 2) +
          indent(form_type(type), 4) + ",\n" +
          indent(label_type, 4) + ",\n" +
          indent(placeholder_type, 4) + ",\n" +
          indent(model, 4) +
        indent("}\n", 2) +
      '}'
    end

    def form_type(type)
      "'type' => '#{type}'"
    end

    def label_type
      "'label' => '#{@attr_field}'"
    end

    def placeholder_type
      "'placeholder' => '#{@attr_field}'"
    end

    def model_type(model_name)
      "'options' => Proc.new { |#{resource_name.downcase}_instance|\n" +
        indent("Adminpanel::#{model_name}.all\n", 2) +
      '}'
    end

    def has_associations?
      fields.each do |attribute|
        assign_attributes_variables(attribute)
        if( @attr_type == 'belongs_to' ||
            @attr_type == 'checkbox' ||
            @attr_type == 'file' ||
            has_gallery?)
          return true
        end
      end
      return false
    end

    def associations
      association = ""
      fields.each do |attribute|
        assign_attributes_variables(attribute)
        case @attr_type
        when 'belongs_to'
          association = "#{association}#{belongs_to_association(@attr_field)}"
        when 'checkbox'
          association = "#{association}#{checkbox_association(@attr_field)}"
        when 'image', 'file'
          association = "#{association}#{file_association(@attr_field)}"
        end
      end

      if has_gallery?
        association = "#{association}mount_images :#{gallery_name.pluralize}\n\t\t"
      end

      association
    end

    def belongs_to_association(field)
      "belongs_to :#{field.singularize.downcase}\n\t\t"
    end

    def checkbox_association(field)
      return "# has_many :#{@attr_field.downcase}zations\n\t\t" +
      "# has_many :#{@attr_field.pluralize.downcase}, " +
      "through: :#{@attr_field.downcase}zations, " +
      "dependent: :destroy\n\t\t"
    end

    def file_association(field)
      "mount_uploader :#{field}, #{class_name}Uploader\n\t\t"
    end

  end
end