# coding: utf-8 require "support/active_record" require "support/array" require "support/hash" require "support/object" require "support/string" require "typus/engine" require "typus/orm/active_record" require "typus/user" autoload :FakeUser, "support/fake_user" module Typus autoload :Configuration, "typus/configuration" autoload :Resources, "typus/resources" module Authentication autoload :Base, "typus/authentication/base" autoload :None, "typus/authentication/none" autoload :HttpBasic, "typus/authentication/http_basic" autoload :Session, "typus/authentication/session" end mattr_accessor :admin_title @@admin_title = "Typus" mattr_accessor :admin_sub_title @@admin_sub_title = <<-CODE typus by intraducibles.com CODE ## # Available Authentication Mechanisms are: # # - none # - basic: Uses http authentication # - session # mattr_accessor :authentication @@authentication = :none mattr_accessor :config_folder @@config_folder = "config/typus" mattr_accessor :username @@username = "admin" ## # Define a password. # # Used as default password for http and advances authentication. # mattr_accessor :password @@password = "columbia" ## # Configure the e-mail address which will be shown in Admin::Mailer. # # When `nil`, the `forgot_password` will be disabled. # mattr_accessor :mailer_sender @@mailer_sender = nil mattr_accessor :file_preview @@file_preview = :medium mattr_accessor :file_thumbnail @@file_thumbnail = :thumb ## # Defines the default relationship table. # mattr_accessor :relationship @@relationship = "typus_users" mattr_accessor :master_role @@master_role = "admin" mattr_accessor :user_class_name @@user_class_name = "TypusUser" mattr_accessor :user_fk @@user_fk = "typus_user_id" mattr_accessor :available_locales @@available_locales = [:en] class << self # Default way to setup typus. Run `rails generate typus` to create a fresh # initializer with all configuration values. def setup yield self end def root (File.dirname(__FILE__) + "/../").chomp("/lib/../") end def applications Typus::Configuration.config.collect { |i| i.last["application"] }.compact.uniq.sort end # Lists modules of an application. def application(name) Typus::Configuration.config.collect { |i| i.first if i.last["application"] == name }.compact.uniq.sort end # Lists models from the configuration file. def models Typus::Configuration.config.map { |i| i.first }.sort end # Lists resources, which are tableless models. def resources Typus::Configuration.roles.keys.map do |key| Typus::Configuration.roles[key].keys end.flatten.sort.uniq.delete_if { |x| models.include?(x) } end # Lists models under app/models. def detect_application_models model_dir = Rails.root.join("app/models") Dir.chdir(model_dir) do models = Dir["**/*.rb"] end end def locales human = available_locales.map { |i| locales_mapping[i.to_s] } available_locales.map { |i| i.to_s }.to_hash_with(human).invert end def locales_mapping mapping = { "ca" => "Català", "de" => "German", "en" => "English", "es" => "Español", "fr" => "Français", "hu" => "Magyar", "pt-BR" => "Portuguese", "ru" => "Russian", "it" => "Italiano" } mapping.default = "Unknown" return mapping end def detect_locales available_locales.each do |locale| I18n.load_path += Dir[File.join(Typus.root, "config", "available_locales", "#{locale}*")] end end def application_models detect_application_models.map do |model| class_name = model.sub(/\.rb$/,"").camelize klass = class_name.split("::").inject(Object) { |klass,part| klass.const_get(part) } class_name if klass < ActiveRecord::Base && !klass.abstract_class? end.compact end def user_class user_class_name.constantize end def reload! Typus::Configuration.roles! Typus::Configuration.config! detect_locales end end end Typus.reload!