class ActiveFacts::Generators::Rails::ActiveAdmin

Constants

MM

Public Class Methods

compatibility() click to toggle source
# File lib/activefacts/generator/rails/active_admin.rb, line 25
def self.compatibility
  # REVISIT: We depend on the surrogate option being enabled if any PK is not Rails-friendly
  [1, %i{relational}]   # one relational composition
end
new(constellation, composition, options = {}) click to toggle source
# File lib/activefacts/generator/rails/active_admin.rb, line 30
def initialize constellation, composition, options = {}
  @constellation = constellation
  @composition = composition
  @options = options
  @option_keep = options.delete("keep")
  @option_output = options.delete("output")
  @option_output ||= 'app/admin'
  @option_output = nil if @option_output == "-"
end
options() click to toggle source
# File lib/activefacts/generator/rails/active_admin.rb, line 18
def self.options
  ({
    keep:          ['Boolean', "Keep stale files"],
    output:        [String,    "Write admin config files into this output directory"],
  })
end

Public Instance Methods

extant_files() click to toggle source
# File lib/activefacts/generator/rails/active_admin.rb, line 50
def extant_files
  Dir[@option_output+'/*.rb']
end
generate_admin(composite) click to toggle source
# File lib/activefacts/generator/rails/active_admin.rb, line 54
def generate_admin composite
  columns = composite.mapping.all_leaf.flat_map do |component|
    # Absorbed empty subtypes appear as leaves
    next [] if component.is_a?(MM::Absorption) && component.parent_role.fact_type.is_a?(MM::TypeInheritance)
    ':' + component.column_name.snakecase
  end

  model = "ActiveAdmin.register #{composite.rails.class_name} do\n  permit_params #{columns.join(', ')}\nend\n"

  return model unless @option_output

  filename = composite.rails.singular_name+'_admin.rb'
  out = create_if_ok(@option_output, filename)
  return nil unless out
  out.puts "#{HEADER}\n" +
    "\# #{([File.basename($0)]+ARGV)*' '}\n\n" +
    model
ensure
  out.close if out
  nil
end
generate_files() click to toggle source
# File lib/activefacts/generator/rails/active_admin.rb, line 40
def generate_files
  admins =
    @composition.
    all_composite.
    sort_by {|composite| composite.mapping.name}.
    reject {|composite| composite.mapping.object_type.is_static}.
    map {|composite| generate_admin composite}.
    compact * "\n"
end