class TrustyCms::Extension

def activate_extension

def activate_extension
  return if instance.active?
  instance.activate_extension if instance.respond_to? :activate
  Dir["#{Rails.root}/config/routes/**/*.rb"].each do |route_file|
  end
  instance.active = true
end

def active?

def active?
  @active
end

def add_item(*args)

def add_item(*args)
  @the_tab.add_item(*args)
end

def admin

def admin
  AdminUI.instance
end

def deactivate_extension

def deactivate_extension
  return unless instance.active?
  instance.active = false
  instance.deactivate if instance.respond_to? :deactivate
end

def enabled?

def enabled?
  active? and migrated?
end

def extension_config

def extension_config
  yield Rails.configuration
end

def extension_enabled?(extension)

end
ThirdPartyExtension.extend(MyExtension::IntegrationPoints)
if MyExtension.extension_enabled?(:third_party)

Determine if another extension is installed and up to date.
def extension_enabled?(extension)
  extension = (extension.to_s.camelcase + 'Extension').constantize
  extension.enabled?
rescue NameError
  false
end

def inherited(subclass)

def inherited(subclass)
  subclass.extension_name = subclass.name.to_name('Extension')
end

def load_initializers

def load_initializers
  Dir["#{root}/config/initializers/**/*.rb"].sort.each do |initializer|
    require initializer
  end
end

def migrate_from(extension_name, until_migration = nil)

def migrate_from(extension_name, until_migration = nil)
  instance.migrates_from[extension_name] = until_migration
end

def migrated?

def migrated?
  migrator.new(:up, migrations_path).pending_migrations.empty?
end

def migrates_from

def migrates_from
  @migrates_from ||= {}
end

def migrations_path

def migrations_path
  File.join(root, 'db', 'migrate')
end

def migrator

def migrator
  unless @migrator
    extension = self
    @migrator = Class.new(ExtensionMigrator) { self.extension = extension }
  end
  @migrator
end

def root

def root
  path.to_s
end

def routed?

Conventional plugin-like routing
def routed?
  File.exist?(routing_file)
end

def routing_file

def routing_file
  File.join(root, 'config', 'routes.rb')
end

def tab(name, options = {}, &block)

def tab(name, options = {}, &block)
  @the_tab = admin.nav[name]
  unless @the_tab
    @the_tab = TrustyCms::AdminUI::NavTab.new(name)
    before = options.delete(:before)
    after = options.delete(:after)
    tab_name = before || after
    tab_object = admin.nav[tab_name]
    if tab_object
      index = admin.nav.index(tab_object)
      index += 1 unless before
      admin.nav.insert(index, @the_tab)
    else
      admin.nav << @the_tab
    end
  end
  if block_given?
    block.call(@the_tab)
  end
  @the_tab
end