lib/cany.rb in cany-0.0.2 vs lib/cany.rb in cany-0.1.0
- old
+ new
@@ -1,29 +1,98 @@
-require 'cany/version'
-require 'cany/specification'
-require 'cany/recipe'
-require 'cany/recipes/bundler'
-require 'cany/recipes/rails'
-require 'cany/recipes/web_server'
-require 'cany/recipes/thin'
-require 'cany/dpkg'
-require 'cany/dpkg/creator'
-require 'cany/dpkg/builder'
-require 'cany/dpkg/deb_helper_recipe'
+require 'logger'
module Cany
- class MissingSpecification < Exception
- end
-
- class MultipleSpecifications < Exception
- end
-
+ # @raise [MissingSpecification] if no canspec is found in the directory
+ # @raise [MultipleSpecifications] if multiple canspec files are found inside
+ # the directory
def self.setup(directory='.')
specs = Dir[directory + '/*.' + Specification::EXT]
- raise MissingSpecification, "No #{Specification::EXT} found in #{directory}" if specs.size == 0
- raise MultipleSpecifications, "Multiple #{Specification::EXT} found in #{directory}" if specs.size > 1
+ raise MissingSpecification.new(directory) if specs.size == 0
+ raise MultipleSpecifications.new(directory) if specs.size > 1
file = specs.first
spec = eval File::read(file), binding, file
spec.base_dir = directory
spec
+ end
+
+ # This methods creates a hash that returns an array as default value and also
+ # stores it directly inside the hash, so that the return value can be changed
+ # without additional actions.
+ # @example
+ # hash = hash_with_array_as_default
+ # hash[:hans] << 'otto'
+ # hash[:hash] == ['otto']
+ def self.hash_with_array_as_default
+ {}.tap do |hash|
+ hash.default_proc = Proc.new do |_, key|
+ hash[key] = []
+ end
+ end
+ end
+
+ # @api public
+ # @return [Logger]
+ def self.logger
+ @logger ||= create_logger
+ end
+
+ def self.create_logger
+ logger = Logger.new(STDOUT)
+ logger.level = Logger::INFO
+ org_formatter = Logger::Formatter.new
+ logger.formatter = proc do |severity, datetime, progname, msg|
+ if severity == "INFO"
+ " #{msg}\n"
+ else
+ org_formatter.call severity, datetime, progname, msg
+ end
+ end
+ logger
+ end
+
+ require 'cany/version'
+ require 'cany/errors'
+ # This module contains ruby mixins that are used within multiple classes to share code.
+ module Mixins
+ require 'cany/mixins/depend_mixin'
+ end
+ require 'cany/dependency'
+ require 'cany/specification'
+ require 'cany/recipe'
+
+
+ # Applications using common libraries to concentrate on things that are new
+ # and no solved by existing software. Therefore there are similar deploy
+ # tasks that are needed for applications.
+ #
+ # Cany groups common deploy aspects in recipes. This recipes can be included
+ # and used by the application. Normally there exists one recipe for every
+ # important software that is used by the application and influences directly
+ # the way the applications needs to be installed.
+ #
+ # Central recipes are bundler as gem package manager and rails as popular
+ # web framework.
+ #
+ # To support starting the applications there is also a collection of recipes
+ # deploying ruby web server or background services.
+ module Recipes
+ require 'cany/recipes/bundler'
+ require 'cany/recipes/bundler/gem'
+ require 'cany/recipes/bundler/gem_db'
+ require 'cany/recipes/rails'
+ require 'cany/recipes/web_server'
+ require 'cany/recipes/thin'
+ require 'cany/recipes/unicorn'
+ require 'cany/recipes/sidekiq'
+ end
+
+
+ # Cany is designed to be able to pack applications for multiple package
+ # managers. Although there is currently only support for debian/ubuntu.
+ # All DPKG specific things are group into the Dpkg namespace.
+ module Dpkg
+ require 'cany/dpkg'
+ require 'cany/dpkg/creator'
+ require 'cany/dpkg/builder'
+ require 'cany/dpkg/deb_helper_recipe'
end
end