class Scaffold::Services::Controller

Public Class Methods

new(rails) click to toggle source
# File lib/scaffold/services/controller.rb, line 4
def initialize rails
  @rails = rails
end

Public Instance Methods

base_controller() click to toggle source
# File lib/scaffold/services/controller.rb, line 21
def base_controller
  @rails.choice[:base_controller] || 'ApplicationController'
end
class_name() click to toggle source

example: Manage::BooksController

# File lib/scaffold/services/controller.rb, line 9
def class_name
  if self.namespaced?
    "#{self.namespaces_as_modules}::#{@rails.resource.class_name.pluralize}Controller"
  else
    "#{@rails.resource.class_name.pluralize}Controller"
  end
end
file_name() click to toggle source
# File lib/scaffold/services/controller.rb, line 17
def file_name
  "#{@rails.resource.class_name.tableize}_controller.rb"
end
index_fields() click to toggle source

which fields will be visible on the index page

# File lib/scaffold/services/controller.rb, line 52
def index_fields
  if @rails.choice[:index_fields].blank?
    @rails.resource.fields.keys
  else
    @rails.choice[:index_fields].collect{|field| field.split(':').first}
  end
end
index_includes() click to toggle source
# File lib/scaffold/services/controller.rb, line 30
def index_includes
  @rails.choice[:includes]
end
index_joins() click to toggle source

very bad idea to go so deep

# File lib/scaffold/services/controller.rb, line 26
def index_joins
  @rails.choice[:joins]
end
namespaced?() click to toggle source
# File lib/scaffold/services/controller.rb, line 34
def namespaced?
  namespaces_as_string.present?
end
namespaces_as_modules() click to toggle source

Admin::ClassRooms::Etc

# File lib/scaffold/services/controller.rb, line 39
def namespaces_as_modules
  puts "namespaces_as_path: #{namespaces_as_path}"
  puts "namespaces_as_path.join.camelize: #{namespaces_as_path.map(&:camelize).join('::')}"
  namespaces_as_path.map(&:camelize).join('::')
end
namespaces_as_path() click to toggle source
'admin', 'classrooms'
# File lib/scaffold/services/controller.rb, line 46
def namespaces_as_path
  (namespaces_as_string || "").split('/').collect{|name| name.underscore}
end
permitted_fields() click to toggle source
# File lib/scaffold/services/controller.rb, line 85
def permitted_fields
  associations_to_ids(@rails.resource.fields)
end
permitted_search_fields() click to toggle source

convert company => company_id Used in the index action

# File lib/scaffold/services/controller.rb, line 70
def permitted_search_fields
  fields = @rails.resource.fields

  to_ids = []

  expanded_fields = expand_association_to_ids fields

  search_fields.each do |key|
    next unless expanded_fields.keys.include?(key)
    type = expanded_fields[key]
    to_ids << (['references', 'belongs_to'].include?(type.downcase) ? "#{key}_id" : key)
  end
  to_ids
end
search_fields() click to toggle source
# File lib/scaffold/services/controller.rb, line 60
def search_fields
  if @rails.choice[:search_fields].blank?
    @rails.resource.fields.keys
  else
    @rails.choice[:search_fields].collect{|field| field.split(':').first}
  end
end

Private Instance Methods

associations_to_ids(hash) click to toggle source

convert company => company_id

# File lib/scaffold/services/controller.rb, line 112
def associations_to_ids hash
  to_ids = {}
  hash.each_pair do |key, type|
    key_name = ['references', 'belongs_to'].include?(type.downcase) ? "#{key}_id" : key
    to_ids[key_name] = type
  end
  to_ids
end
expand_association_to_ids(fields) click to toggle source

if the field is belongs_to make so that fields contains the `field` and field_id

# File lib/scaffold/services/controller.rb, line 100
def expand_association_to_ids fields
  expanded = {}
  fields.each_pair do |name, type|
    case type
    when 'belongs_to'
      expanded["#{name}_id"] = 'integer'
    end
  end
  fields.merge(expanded)
end
namespaces_as_string() click to toggle source

admin/classrooms/etc

# File lib/scaffold/services/controller.rb, line 93
def namespaces_as_string
  @namespaces_as_path ||= @rails.choice[:controller_namespaces]
end