class Pu::Saas::PortalGenerator
def add_entity_link_to_header
def add_entity_link_to_header header_path = resource_header_path return unless File.exist?(Rails.root.join(header_path)) file_content = File.read(Rails.root.join(header_path)) return if file_content.include?("entity_url") inject_into_file header_path, " section.with_link(label: current_scoped_entity.name, href: entity_url)\n", before: /\s*section\.with_link\(label: "Profile"/ end
def add_entity_url_helper
def add_entity_url_helper methods = <<-RUBY # Returns the URL to the current entity's show page. def entity_url resource_url_for(current_scoped_entity) end # Returns all entities the current user belongs to (for the entity switcher). def user_entities @user_entities ||= current_user.#{entity_table.pluralize} end RUBY inject_into_concerns_controller concerns_controller_path, helper_methods: [:entity_url, :user_entities], methods: methods end
def concerns_controller_path
def concerns_controller_path "packages/#{portal_package}/app/controllers/#{portal_package}/concerns/controller.rb" end
def connect_entity_to_portal
def connect_entity_to_portal # Shell out so the subprocess can load the newly created entity model generate "pu:res:conn", "#{entity_model} --dest=#{portal_package} --singular --policy" end
def create_portal
def create_portal generate "pu:pkg:portal", "#{options[:portal_name]} --auth=#{rodauth_config} --scope=#{entity_model}" end
def customize_entity_policy
def customize_entity_policy content = <<-RUBY update? rrent_membership&.owner? destroy? lse permitted_attributes_for_read name] permitted_attributes_for_update name] permitted_associations RUBY inject_into_file entity_policy_path, content, after: /include #{portal_engine}::ResourcePolicy\n/ end
def entity_model
def entity_model options[:entity_model].camelize end
def entity_policy_path
def entity_policy_path "packages/#{portal_package}/app/policies/#{portal_package}/#{entity_table}_policy.rb" end
def entity_table
def entity_table options[:entity_model].underscore end
def portal_engine
def portal_engine "#{options[:portal_name].camelize}Portal" end
def portal_package
def portal_package portal_engine.underscore end
def resource_header_path
def resource_header_path "packages/#{portal_package}/app/views/plutonium/_resource_header.html.erb" end
def rodauth_config
def rodauth_config options[:rodauth] end
def start
def start create_portal connect_entity_to_portal customize_entity_policy add_entity_url_helper add_entity_link_to_header rescue => e exception "#{self.class} failed:", e end