lib/trestle.rb in trestle-0.9.5 vs lib/trestle.rb in trestle-0.9.6
- old
+ new
@@ -21,47 +21,62 @@
require_relative "trestle/reloader"
require_relative "trestle/scopes"
require_relative "trestle/tab"
require_relative "trestle/table"
require_relative "trestle/admin"
+ require_relative "trestle/registry"
require_relative "trestle/resource"
- mattr_accessor :admins
- self.admins = {}
+ # The registry records all active Trestle admins and facilitates lookups.
+ mattr_accessor :registry
+ self.registry = Registry.new
- def self.admin(name, options={}, &block)
- register(Admin::Builder.create(name, options, &block))
+ class << self
+ # Expose registry methods on Trestle module
+ delegate :register, :lookup, :lookup_model, :admins, to: :registry
end
- def self.resource(name, options={}, &block)
- register(Resource::Builder.create(name, options, &block))
+ # Builds and registers a new plain admin
+ def self.admin(name, **options, &block)
+ register(Admin::Builder.create(name, options, &block))
end
- def self.register(admin)
- self.admins[admin.admin_name] = admin
+ # Builds and registers a new admin resource
+ def self.resource(name, register_model: true, **options, &block)
+ register(Resource::Builder.create(name, options, &block), register_model: register_model)
end
- def self.lookup(admin)
- return admin if admin.is_a?(Class) && admin < Trestle::Admin
- self.admins[admin.to_s]
- end
+ # Configuration methods
def self.config
@configuration ||= Configuration.new
end
def self.configure(&block)
config.configure(&block)
end
+ # Builds the global navigation by combining the menu options from the
+ # Trestle configuration along with menu blocks from admin resources.
def self.navigation(context)
- blocks = config.menus + admins.values.map(&:menu).compact
+ blocks = config.menus + registry.map(&:menu).compact
Navigation.build(blocks, context)
end
+ # Returns the I18n fallbacks for the given locale.
+ #
+ # This is used from within a Sprockets asset (JavaScript)
+ # to determine which locale files to include.
+ #
+ # Examples
+ #
+ # Trestle.i18n_fallbacks("pt-BR") => ["pt-BR", "pt"]
+ # Trestle.i18n_fallbacks("ca") => ["ca", "es-ES", "es"] %>
+ #
+ # Returns an array of locale Strings.
def self.i18n_fallbacks(locale=I18n.locale)
if I18n.respond_to?(:fallbacks)
- I18n.fallbacks[locale]
+ I18n.fallbacks[locale].map(&:to_s)
elsif locale.to_s.include?("-")
fallback = locale.to_s.split("-").first
[locale, fallback]
else
[locale]