class Datagrid::Scaffold

Public Instance Methods

base_grid_file() click to toggle source
# File lib/datagrid/scaffold.rb, line 76
def base_grid_file
  "app/grids/base_grid.rb"
end
create_scaffold() click to toggle source
# File lib/datagrid/scaffold.rb, line 10
def create_scaffold
  unless file_exists?(base_grid_file)
    template "base.rb.erb", base_grid_file
  end
  template "grid.rb.erb", "app/grids/#{grid_class_name.underscore}.rb"
  if file_exists?(grid_controller_file)
    inject_into_file grid_controller_file, index_action, after: %r{class .*#{grid_controller_class_name}.*\n}
  else
    template "controller.rb.erb", grid_controller_file
  end
  template "index.html.erb", view_file
  route(generate_routing_namespace("resources :#{grid_controller_short_name}"))
  unless defined?(::Kaminari) || defined?(::WillPaginate)
    gem 'kaminari'
  end
  in_root do
    {
      "css" => " *= require datagrid",
      "css.sass" => " *= require datagrid",
      "css.scss" => " *= require datagrid",
    }.each do |extension, string|
      file = "app/assets/stylesheets/application.#{extension}"
      if file_exists?(file)
        inject_into_file file, string + "\n", {before: %r{.*require_self}} # before all
      end
    end
  end
end
grid_class_name() click to toggle source
# File lib/datagrid/scaffold.rb, line 43
def grid_class_name
  file_name.camelize.pluralize + "Grid"
end
grid_controller_class_name() click to toggle source
# File lib/datagrid/scaffold.rb, line 47
def grid_controller_class_name
  controller_class_name.camelize + "Controller"
end
grid_controller_file() click to toggle source
# File lib/datagrid/scaffold.rb, line 51
def grid_controller_file
  Rails.root.join("app/controllers").join("#{grid_controller_class_name.underscore}.rb")
end
grid_controller_short_name() click to toggle source
# File lib/datagrid/scaffold.rb, line 55
def grid_controller_short_name
  controller_file_name
end
grid_model_name() click to toggle source
# File lib/datagrid/scaffold.rb, line 59
def grid_model_name
  file_name.camelize.singularize
end
grid_param_name() click to toggle source
# File lib/datagrid/scaffold.rb, line 63
def grid_param_name
  grid_class_name.underscore
end
grid_route_name() click to toggle source
# File lib/datagrid/scaffold.rb, line 80
def grid_route_name
  controller_class_name.underscore.gsub("/", "_") + "_path"
end
index_action() click to toggle source
# File lib/datagrid/scaffold.rb, line 84
  def index_action
    indent(<<-RUBY)
def index
  @grid = #{grid_class_name}.new(grid_params) do |scope|
    scope.page(params[:page])
  end
end

protected

def grid_params
  params.fetch(:#{grid_param_name}, {}).permit!
end
RUBY
  end
pagination_helper_code() click to toggle source
# File lib/datagrid/scaffold.rb, line 67
def pagination_helper_code
  if defined?(::WillPaginate)
    "will_paginate(@grid.assets)"
  else
    # Kaminari is default
    "paginate(@grid.assets)"
  end
end
view_file() click to toggle source
# File lib/datagrid/scaffold.rb, line 39
def view_file
  Rails.root.join("app/views").join(controller_file_path).join("index.html.erb")
end

Protected Instance Methods

file_exists?(name) click to toggle source
# File lib/datagrid/scaffold.rb, line 125
def file_exists?(name)
  name = Rails.root.join(name) unless name.to_s.first == "/"
  File.exist?(name)
end
generate_routing_namespace(code) click to toggle source
# File lib/datagrid/scaffold.rb, line 101
def generate_routing_namespace(code)
  depth = regular_class_path.length
  # Create 'namespace' ladder
  # namespace :foo do
  #   namespace :bar do
  namespace_ladder = regular_class_path.each_with_index.map do |ns, i|
    indent("namespace :#{ns} do\n", i * 2)
  end.join

  # Create route
  #     get 'baz/index'
  route = indent(code, depth * 2)

  # Create `end` ladder
  #   end
  # end
  end_ladder = (1..depth).reverse_each.map do |i|
    indent("end\n", i * 2)
  end.join

  # Combine the 3 parts to generate complete route entry
  namespace_ladder + route + "\n" + end_ladder
end