class MarkLogic::Application

Attributes

app_name[RW]
port[RW]

Public Class Methods

load(app_name, options = {}) click to toggle source
# File lib/marklogic/application.rb, line 197
def self.load(app_name, options = {})
  app = Application.new(app_name, options)
  app.load
  app
end
new(app_name, options = {}) click to toggle source
# File lib/marklogic/application.rb, line 7
def initialize(app_name, options = {})
  @app_name = app_name
  self.connection = options[:connection]
  @port = options[:port] || self.connection.port
  self.admin_connection = options[:admin_connection]
end

Public Instance Methods

add_index(index) click to toggle source
# File lib/marklogic/application.rb, line 147
def add_index(index)
  indexes[index.key] = index
end
app_server(name) { |app_server| ... } click to toggle source
# File lib/marklogic/application.rb, line 177
def app_server(name)
  app_server = MarkLogic::AppServer.new(name, @port)
  app_servers[name] = app_server
  yield(app_server) if block_given?
end
app_servers() click to toggle source
# File lib/marklogic/application.rb, line 143
def app_servers
  @app_servers ||= {}
end
clear_indexes() click to toggle source
# File lib/marklogic/application.rb, line 151
def clear_indexes()
  content_databases.each do |database|
    database.reset_indexes
  end
  @indexes = {}
end
config() { |self| ... } click to toggle source
# File lib/marklogic/application.rb, line 183
def config
  yield(self) if block_given?
  build_implicit_defs
end
content_databases() click to toggle source
# File lib/marklogic/application.rb, line 158
def content_databases
  app_servers.values.map do |app_server|
    databases[app_server['content-database']]
  end
end
create() click to toggle source
# File lib/marklogic/application.rb, line 14
def create
  logger.debug(%Q{Creating Application: #{@app_name}})

  build_implicit_defs

  databases.each do |database_name, database|
    unless database.exists?
      database.create
    else
      database.update
    end
  end

  forests.each do |forest_name, forest|
    forest.create unless forest.exists?
  end

  app_servers.each do |server_name, app_server|
    unless app_server.exists?
      app_server.create
    else
      app_server.update
    end
  end

end
create_indexes() click to toggle source
# File lib/marklogic/application.rb, line 41
def create_indexes
  build_implicit_defs

  content_databases.each do |database|
    if database.exists?
      database.update
    else
      database.create
    end
  end
end
database(name) { |database| ... } click to toggle source
# File lib/marklogic/application.rb, line 170
def database(name)
  database = MarkLogic::Database.new(name, self.connection)
  database.application = self
  databases[name] = database
  yield(database) if block_given?
end
databases() click to toggle source
# File lib/marklogic/application.rb, line 139
def databases
  @databases ||= {}
end
drop() click to toggle source
# File lib/marklogic/application.rb, line 61
def drop
  logger.debug(%Q{Dropping Application: #{@app_name}})

  build_implicit_defs

  app_servers.each do |server_name, app_server|
    app_server.drop if app_server.exists?
  end

  databases.each do |database_name, database|
    if database.exists?
      database.drop
    end
  end

  forests.each do |forest_name, forest|
    if forest.exists?
      forest.drop
    end
  end
end
exists?() click to toggle source
# File lib/marklogic/application.rb, line 83
def exists?
  build_implicit_defs

  databases.each do |database_name, database|
    return false if !database.exists?
  end

  forests.each do |forest_name, forest|
    return false if !forest.exists?
  end

  app_servers.each do |server_name, app_server|
    return false if !app_server.exists?
  end

  return true
end
forests() click to toggle source
# File lib/marklogic/application.rb, line 135
def forests
  @forests ||= {}
end
inspect() click to toggle source
# File lib/marklogic/application.rb, line 188
def inspect
  as_nice_string = [
    " app_name: #{app_name.inspect}",
    " port: #{port.inspect}",
    " app_servers: #{app_servers.values.each { |app_server| app_server.inspect }}"
  ].join(",")
  "#<#{self.class}#{as_nice_string}>"
end
load() click to toggle source
# File lib/marklogic/application.rb, line 203
def load
  app_servers[app_name] = MarkLogic::AppServer.load(app_name)
  @port = app_servers[app_name]['port']
  load_databases
  build_indexes
end
modules_databases() click to toggle source
# File lib/marklogic/application.rb, line 164
def modules_databases
  app_servers.values.map do |app_server|
    databases[app_server['modules-database']]
  end
end
stale?() click to toggle source
# File lib/marklogic/application.rb, line 101
def stale?
  build_implicit_defs

  databases.each do |database_name, database|
    unless database.exists?
      logger.debug "database: #{database_name} is missing"
      return true
    end
  end

  content_databases.each do |database|
    if database.stale?
      logger.debug "database: #{database.database_name} is stale"
      return true
    end
  end

  forests.each do |forest_name, forest|
    unless forest.exists?
      logger.debug "forest: #{forest_name} is missing"
      return true
    end
  end

  app_servers.each do |server_name, app_server|
    unless app_server.exists?
      logger.debug "app_server: #{server_name} is missing"
      return true
    end
  end

  return false
end
sync() click to toggle source
# File lib/marklogic/application.rb, line 53
def sync
  create if stale?
end
sync!() click to toggle source
# File lib/marklogic/application.rb, line 57
def sync!
  create
end

Private Instance Methods

build_appservers() click to toggle source
# File lib/marklogic/application.rb, line 265
def build_appservers
  if app_servers.empty?
    app_servers[@app_name] = MarkLogic::AppServer.new(@app_name, @port, "http", "Default", :connection => self.connection, :admin_connection => admin_connection)
  end
end
build_databases() click to toggle source
# File lib/marklogic/application.rb, line 271
def build_databases
  app_servers.each_value do |app_server|
    db_name = app_server['content-database']
    unless databases.has_key?(db_name)
      db = MarkLogic::Database.new(db_name, self.connection)
      db.application = self
      databases[db_name] = db
    end
    forests[db_name] = MarkLogic::Forest.new(db_name, nil, self.connection) unless forests.has_key?(db_name)
    forests[db_name].database = databases[db_name]

    modules_db_name = app_server['modules-database']
    unless databases.has_key?(modules_db_name)
      modules_db = MarkLogic::Database.new(modules_db_name, self.connection)
      modules_db.application = self
      databases[modules_db_name] = modules_db
    end
    forests[modules_db_name] = MarkLogic::Forest.new(modules_db_name, nil, self.connection) unless forests.has_key?(modules_db_name)
    forests[modules_db_name].database = databases[modules_db_name]
  end

  triggers_database = nil
  schema_database = nil
  databases.each_value do |database|
    if database.has_key?('triggers-database')
      triggers_database = database['triggers-database']
    end

    if database.has_key?('schema-database')
      schema_database = database['schema-database']
    end
  end

  if triggers_database && !databases.has_key?(triggers_database)
    databases[triggers_database] = MarkLogic::Database.new(triggers_database, self.connection)
  end

  if schema_database && !databases.has_key?(schema_database)
    databases[schema_database] = MarkLogic::Database.new(schema_database, self.connection)
  end
end
build_implicit_defs() click to toggle source
# File lib/marklogic/application.rb, line 259
def build_implicit_defs
  build_appservers
  build_databases
  build_indexes
end
build_indexes() click to toggle source
# File lib/marklogic/application.rb, line 313
def build_indexes
  content_databases.each do |database|
    database.reset_indexes

    indexes.clone.each do |key, index|
      index.append_to_db(database)
    end
  end
end
indexes() click to toggle source
# File lib/marklogic/application.rb, line 255
def indexes
  @indexes ||= {}
end
load_database(db_name) click to toggle source
# File lib/marklogic/application.rb, line 212
def load_database(db_name)
  db = MarkLogic::Database.load(db_name, self.connection)
  db.application = self
  databases[db_name] = db

  db['forest'].each do |forest_name|
    forests[forest_name] = MarkLogic::Forest.load(forest_name, nil, self.connection) unless forests.has_key?(forest_name)
    forests[forest_name].database = db
  end
end
load_databases() click to toggle source
# File lib/marklogic/application.rb, line 223
def load_databases
  app_servers.each_value do |app_server|
    db_name = app_server['content-database']
    load_database(db_name) unless databases.has_key?(db_name)

    modules_db_name = app_server['modules-database']
    load_database(modules_db_name) unless databases.has_key?(modules_db_name)
  end

  triggers_database = nil
  schema_database = nil
  databases.each_value do |database|
    if database.has_key?('triggers-database')
      triggers_database = database['triggers-database']
    end

    if database.has_key?('schema-database')
      schema_database = database['schema-database']
    end
  end

  if triggers_database && !databases.has_key?(triggers_database)
    load_database(triggers_database)
    # databases[triggers_database] = MarkLogic::Database.new(triggers_database, self.connection)
  end

  if schema_database && !databases.has_key?(schema_database)
    load_database(schema_database)
    # databases[schema_database] = MarkLogic::Database.new(schema_database, self.connection)
  end
end