Octopress::Configuration is now a class, rather than a module.

The previous system was very unforgiving about where the configuration directory
lay. This commit allows the configuration directory to be set through a config_directory
instance variable on the Octopress::Configuration class, in the event that this directory
ever needs to be changed (e.g. for testing).
This commit is contained in:
Parker Moore 2013-02-17 02:38:17 +01:00
parent 2db84f0db6
commit 153ce83527

View File

@ -1,11 +1,16 @@
require 'yaml' require 'yaml'
module Octopress module Octopress
module Configuration class Configuration
CONFIG_DIR = File.join(File.dirname(__FILE__), '../', '../' '_config') DEFAULT_CONFIG_DIR = File.join(File.dirname(__FILE__), '../', '../' '_config')
attr_accessor :config_directory
def self.config_dir(*subdirs) def initialize(config_dir = DEFAULT_CONFIG_DIR)
File.absolute_path(File.join(CONFIG_DIR, *subdirs)) self.config_directory = config_dir
end
def config_dir(*subdirs)
File.absolute_path(File.join(self.config_directory, *subdirs))
end end
# Static: Reads the configuration of the specified file # Static: Reads the configuration of the specified file
@ -13,7 +18,7 @@ module Octopress
# path - the String path to the configuration file, relative to ./_config # path - the String path to the configuration file, relative to ./_config
# #
# Returns a Hash of the items in the configuration file (symbol keys) # Returns a Hash of the items in the configuration file (symbol keys)
def self.read_config(path) def read_config(path)
full_path = self.config_dir(path) full_path = self.config_dir(path)
if File.exists? full_path if File.exists? full_path
begin begin
@ -39,14 +44,14 @@ module Octopress
# obj - the object to be dumped into the specified file in YAML form # obj - the object to be dumped into the specified file in YAML form
# #
# Returns the Hash for the configuration file. # Returns the Hash for the configuration file.
def self.write_config(path, obj) def write_config(path, obj)
YAML.dump(obj.to_string_keys, File.open(self.config_dir(path), 'w')) YAML.dump(obj.to_string_keys, File.open(self.config_dir(path), 'w'))
end end
# Static: Reads all the configuration files into one hash # Static: Reads all the configuration files into one hash
# #
# Returns a Hash of all the configuration files, with each key being a symbol # Returns a Hash of all the configuration files, with each key being a symbol
def self.read_configuration def read_configuration
configs = {} configs = {}
Dir.glob(self.config_dir('defaults', '**', '*.yml')) do |filename| Dir.glob(self.config_dir('defaults', '**', '*.yml')) do |filename|
file_yaml = YAML.load(File.read(filename)) file_yaml = YAML.load(File.read(filename))
@ -67,7 +72,7 @@ module Octopress
# Static: Writes configuration files necessary for generation of the Jekyll site # Static: Writes configuration files necessary for generation of the Jekyll site
# #
# Returns a Hash of the items which were written to the Jekyll configuration file # Returns a Hash of the items which were written to the Jekyll configuration file
def self.write_configs_for_generation def write_configs_for_generation
config = self.read_configuration config = self.read_configuration
jekyll_configs = {} jekyll_configs = {}
File.open("_config.yml", "w") do |f| File.open("_config.yml", "w") do |f|
@ -81,7 +86,7 @@ module Octopress
# Static: Removes configuration files required for site generation # Static: Removes configuration files required for site generation
# #
# Returns the number of files deleted # Returns the number of files deleted
def self.remove_configs_for_generation def remove_configs_for_generation
File.unlink("_config.yml") File.unlink("_config.yml")
end end
end end