From 2b6ab96456a5ab15c1aa53619a2ad01c1caa7c0d Mon Sep 17 00:00:00 2001 From: nirnanaaa Date: Fri, 28 Feb 2014 13:22:51 +0100 Subject: [PATCH] added new setup features --- lib/gollum_rails/setup.rb | 70 +++++++++++++------------------ lib/gollum_rails/setup/error.rb | 5 +++ lib/gollum_rails/setup/options.rb | 16 +++++++ spec/gollum_rails/setup_spec.rb | 9 +++- 4 files changed, 56 insertions(+), 44 deletions(-) create mode 100644 lib/gollum_rails/setup/error.rb create mode 100644 lib/gollum_rails/setup/options.rb diff --git a/lib/gollum_rails/setup.rb b/lib/gollum_rails/setup.rb index 036cb4f..4378270 100644 --- a/lib/gollum_rails/setup.rb +++ b/lib/gollum_rails/setup.rb @@ -1,3 +1,4 @@ +require 'gollum_rails/setup/error' module GollumRails # Setup functionality for Rails initializer @@ -13,59 +14,45 @@ module GollumRails # end # # - class Setup + module Setup + autoload :Options, 'gollum_rails/setup/options' + include Options + class << self - - attr_accessor :wiki_path - - attr_writer :wiki_options - attr_accessor :repository - - attr_accessor :startup - - # Gets / Sets the init options - attr_accessor :options - - - def wiki_options - return {} unless @wiki_options.kind_of? Hash - @wiki_options ||= {} - end - # Wiki startup options - def options=(options) - @options = options - end - # defines block builder for Rails initializer. # executes public methods inside own class # - def build(&block) - block.call self - if @repository == :application + def build(new_attributes = nil, &block) + if block_given? + yield self + else + if !new_attributes.respond_to?(:stringify_keys) + raise ArgumentError, "When assigning attributes, you must pass a hash as an argument." + end + attributes = new_attributes.stringify_keys + attributes.each do |k, v| + begin + public_send("#{k}=", v) + rescue NoMethodError + end + end + + end + if self.repository == :application raise GollumRailsSetupError, "Rails configuration is not defined. Are you in a Rails app?" if Rails.application.nil? initialize_wiki Rails.application.config.wiki_repository else raise GollumRailsSetupError, "Git repository does not exist. - Was the specified pathname correct?" unless Pathname.new(@repository).exist? - initialize_wiki @repository + Was the specified pathname correct?" unless Pathname.new(self.repository).exist? + initialize_wiki self.repository end end - ####### private - ####### - - # Checks if provided path is present and valid - # - # Example - # path_valid? '/' - # # =>true - # - # path_valid? nil - # # =>false + def path_valid?(path) return path.exist? if path.is_a?(Pathname) return !(path.nil? || path.empty? || ! path.is_a?(String)) @@ -73,16 +60,15 @@ def path_valid?(path) def initialize_wiki(path) if path_valid? path - @wiki_path = path.to_s - @wiki_options = options + self.wiki_path = path.to_s + self.wiki_options = options true else - raise GollumRailsSetupError, 'Repistory path is empty or invalid!' + raise GollumRailsSetupError, 'Path to repository is empty or invalid!' end end end end - class GollumRailsSetupError < ArgumentError; end end diff --git a/lib/gollum_rails/setup/error.rb b/lib/gollum_rails/setup/error.rb new file mode 100644 index 0000000..bbd7d5c --- /dev/null +++ b/lib/gollum_rails/setup/error.rb @@ -0,0 +1,5 @@ +module GollumRails + module Setup + class GollumRailsSetupError < ArgumentError; end + end +end diff --git a/lib/gollum_rails/setup/options.rb b/lib/gollum_rails/setup/options.rb new file mode 100644 index 0000000..ea45c0b --- /dev/null +++ b/lib/gollum_rails/setup/options.rb @@ -0,0 +1,16 @@ +module GollumRails + module Setup + module Options + extend ActiveSupport::Concern + + module ClassMethods + attr_accessor :wiki_options + attr_accessor :repository + attr_accessor :startup + attr_accessor :options + attr_accessor :wiki_path + end + + end + end +end diff --git a/spec/gollum_rails/setup_spec.rb b/spec/gollum_rails/setup_spec.rb index 607736e..3f476df 100644 --- a/spec/gollum_rails/setup_spec.rb +++ b/spec/gollum_rails/setup_spec.rb @@ -35,7 +35,7 @@ class Bla < GollumRails::Page config.repository = :application end - }.to raise_error GollumRails::GollumRailsSetupError + }.to raise_error GollumRails::Setup::GollumRailsSetupError end it "should throw an error if a pathname was supplied that does not exist" do @@ -43,7 +43,12 @@ class Bla < GollumRails::Page GollumRails::Setup.build do |setup| setup.repository = Pathname.new('/nonexistingdirectoryshouldbenonexisting') end - }.to raise_error GollumRails::GollumRailsSetupError + }.to raise_error GollumRails::Setup::GollumRailsSetupError + end + it "should also initialize without a block given" do + expect{ + GollumRails::Setup.build(repository: '.') + }.not_to raise_error end