gator 0.0.21.pre → 0.0.22.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +3 -1
- data/Rakefile +3 -6
- data/VERSION +1 -1
- data/bin/gator +2 -3
- data/gator.gemspec +52 -30
- data/lib/gator.rb +6 -8
- data/lib/gator/core.rb +19 -0
- data/lib/gator/core/application/application.rb +41 -0
- data/lib/gator/core/application/application_configuration.rb +11 -0
- data/lib/gator/core/command/act_as_command.rb +40 -0
- data/lib/gator/core/command/act_as_command_collection.rb +63 -0
- data/lib/gator/core/command/command.rb +20 -0
- data/lib/gator/{task.rb → core/command/task.rb} +1 -4
- data/lib/gator/core/configuration/act_as_configuration.rb +30 -0
- data/lib/gator/core/configuration/configuration.rb +5 -0
- data/lib/gator/core/io/paths.rb +21 -0
- data/lib/gator/core/io/project_file_locator.rb +28 -0
- data/lib/gator/core/io/ruby_file_loader.rb +21 -0
- data/lib/gator/core/io/sandbox.rb +9 -0
- data/lib/gator/{project.rb → core/project/layout.rb} +3 -44
- data/lib/gator/core/project/project.rb +21 -0
- data/lib/gator/plugins/generators.rb +5 -0
- data/lib/gator/{generators/generator.rb → plugins/generators/act_as_template_generator.rb} +1 -5
- data/lib/gator/{commands/generate.rb → plugins/generators/generate_command.rb} +1 -1
- data/lib/gator/plugins/generators/generator.rb +6 -0
- data/lib/gator/plugins/scaffolding.rb +4 -0
- data/lib/gator/plugins/scaffolding/scaffold_command.rb +62 -0
- data/lib/gator/plugins/scaffolding/scaffolding_file_utils.rb +58 -0
- data/rake/jeweler.rb +17 -0
- data/rake/jeweler_prerelease_tasks.rb +50 -0
- data/rake/pre_release_gemspec.rb +80 -0
- data/rake/pre_release_to_git.rb +59 -0
- data/spec/core/application/application_configuration_spec.rb +21 -0
- data/spec/core/application/application_spec.rb +15 -0
- data/spec/core/command/command_spec.rb +117 -0
- data/spec/core/command/task_spec.rb +95 -0
- data/spec/core/configuration/configuration_spec.rb +55 -0
- data/spec/core/io/paths_spec.rb +44 -0
- data/spec/core/io/sandbox_spec.rb +11 -0
- data/spec/core/project/layout_spec.rb +64 -0
- data/spec/core/project/project_spec.rb +51 -0
- data/spec/fixtures/empty_gator_project/gator.rb +4 -0
- data/spec/fixtures/no_gator_file/.empty_directory +0 -0
- data/spec/plugins/scaffolding/scaffold_command_spec.rb +75 -0
- data/spec/spec_helper.rb +14 -9
- metadata +65 -36
- data/lib/gator/command.rb +0 -109
- data/lib/gator/commands.rb +0 -5
- data/lib/gator/commands/project.rb +0 -87
- data/lib/gator/config.rb +0 -23
- data/lib/gator/generators.rb +0 -1
- data/lib/gator/runner.rb +0 -21
- data/lib/gator/util.rb +0 -91
- data/spec/command_spec.rb +0 -84
- data/spec/config_spec.rb +0 -14
- data/spec/project_spec.rb +0 -15
- data/spec/runner_spec.rb +0 -9
- data/spec/task_spec.rb +0 -8
- data/spec/util_spec.rb +0 -60
data/lib/gator/commands.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
require "thor"
|
2
|
-
require "thor/actions"
|
3
|
-
require "fileutils"
|
4
|
-
|
5
|
-
module Gator
|
6
|
-
class ProjectCommand < Command
|
7
|
-
include Thor::Actions
|
8
|
-
include Gator::Configuration
|
9
|
-
|
10
|
-
define :command => "project", :short => "p",
|
11
|
-
:usage => "project TASK", :description => "Set of tasks to manage project templates."
|
12
|
-
|
13
|
-
def self.source_root
|
14
|
-
Gator::Util.project_template_root
|
15
|
-
end
|
16
|
-
|
17
|
-
desc "project install NAME TEMPLATE_NAME", "Install a project template."
|
18
|
-
def install( dir, template=nil )
|
19
|
-
entries = directory_entries dir
|
20
|
-
template ||= File.expand_path( File.dirname(entries.first) ).split(File::SEPARATOR).last
|
21
|
-
empty_directory template_dir(template)
|
22
|
-
FileUtils.cp_r entries, template_dir(template)
|
23
|
-
create_empty_directory_files template_dir(template)
|
24
|
-
end
|
25
|
-
|
26
|
-
desc "project uninstall TEMPLATE_NAME", "Uninstall a project template."
|
27
|
-
def uninstall( template )
|
28
|
-
FileUtils.rm_r template_dir(template)
|
29
|
-
end
|
30
|
-
|
31
|
-
desc "project new NAME TEMPLATE_NAME", "Create a new project by template."
|
32
|
-
def new( name, template )
|
33
|
-
@project_name = name
|
34
|
-
directory template_dir(template), File.expand_path( name )
|
35
|
-
end
|
36
|
-
|
37
|
-
desc "project wipe", "Delete all project templates."
|
38
|
-
def wipe
|
39
|
-
template_root_entries(true).each { |e| FileUtils.rm_r e }
|
40
|
-
end
|
41
|
-
|
42
|
-
desc "project list [SEARCH]", "Lists project templates."
|
43
|
-
def list(search=nil)
|
44
|
-
entries = template_root_entries
|
45
|
-
entries = entries.select { |e| e.include?(search) } unless search.nil?
|
46
|
-
entries.each {|e| say " #{e}" }
|
47
|
-
say "No templates found.", :blue if entries.empty?
|
48
|
-
end
|
49
|
-
|
50
|
-
no_tasks {
|
51
|
-
|
52
|
-
def project_name
|
53
|
-
@project_name
|
54
|
-
end
|
55
|
-
|
56
|
-
def configuration
|
57
|
-
config
|
58
|
-
end
|
59
|
-
|
60
|
-
}
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def create_empty_directory_files( dir )
|
65
|
-
Dir.glob( File.join( dir, "**", "*" ) ).each {|f|
|
66
|
-
create_file File.join(f,".empty_directory"), ".empty_directory" if File.directory?(f) && Dir.entries(f).length == 2
|
67
|
-
}
|
68
|
-
end
|
69
|
-
|
70
|
-
def template_dir( template )
|
71
|
-
File.join( Gator::Util.project_template_root, template )
|
72
|
-
end
|
73
|
-
|
74
|
-
def directory_entries( dir, join_with_dir=true )
|
75
|
-
entries = Dir.entries(dir)
|
76
|
-
entries.delete(".")
|
77
|
-
entries.delete("..")
|
78
|
-
entries.collect! { |e| File.join(dir, e) } if join_with_dir
|
79
|
-
entries
|
80
|
-
end
|
81
|
-
|
82
|
-
def template_root_entries( join_with_dir=false )
|
83
|
-
directory_entries Gator::Util.project_template_root, join_with_dir
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
end
|
data/lib/gator/config.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Gator
|
2
|
-
module Configuration
|
3
|
-
|
4
|
-
def self.config
|
5
|
-
@configuration ||= GatorConfiguration.new
|
6
|
-
end
|
7
|
-
|
8
|
-
def config
|
9
|
-
Configuration.config
|
10
|
-
end
|
11
|
-
alias_method :configuration, :config
|
12
|
-
|
13
|
-
end
|
14
|
-
class GatorConfiguration
|
15
|
-
|
16
|
-
attr_accessor :user
|
17
|
-
|
18
|
-
def options
|
19
|
-
@options ||= {}
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
data/lib/gator/generators.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/generators/generator'
|
data/lib/gator/runner.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'thor'
|
2
|
-
require 'thor/group'
|
3
|
-
require 'thor/actions'
|
4
|
-
|
5
|
-
module Gator
|
6
|
-
class Runner < Command
|
7
|
-
include Thor::Actions
|
8
|
-
|
9
|
-
def self.start
|
10
|
-
Gator::Util.initialize_files
|
11
|
-
super
|
12
|
-
end
|
13
|
-
|
14
|
-
desc "version", "Show Gator version"
|
15
|
-
def version
|
16
|
-
version_file = File.dirname(__FILE__) + '/../../VERSION'
|
17
|
-
say File.exist?(version_file) ? File.read(version_file) : ""
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
data/lib/gator/util.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
require "thor"
|
2
|
-
require "thor/util"
|
3
|
-
require "thor/actions"
|
4
|
-
require "pathname"
|
5
|
-
|
6
|
-
module Gator
|
7
|
-
module Sandbox
|
8
|
-
extend Gator::Configuration
|
9
|
-
extend Gator::Project
|
10
|
-
end
|
11
|
-
class Util
|
12
|
-
def self.gator_files
|
13
|
-
["gator", "gator.rb"]
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.gator_files_for(dir)
|
17
|
-
gator_files.collect { |f| File.join(dir, f) }
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.gator_config
|
21
|
-
File.join(gator_root, "configuration.rb")
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.gator_root
|
25
|
-
File.join(Thor::Util.user_home, ".gator").gsub(/\\/, '/')
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.project_template_root
|
29
|
-
File.join(gator_root, "templates", "projects")
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.generator_template_root
|
33
|
-
File.join(gator_root, "templates", "generators" )
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.load_rubyfile(path, content=nil, debug=false)
|
37
|
-
content ||= File.binread(path)
|
38
|
-
|
39
|
-
begin
|
40
|
-
Gator::Sandbox.module_eval(content, path)
|
41
|
-
rescue Exception => e
|
42
|
-
$stderr.puts "WARNING: unable to load file #{path.inspect}: #{e.message}"
|
43
|
-
if debug
|
44
|
-
$stderr.puts *e.backtrace
|
45
|
-
else
|
46
|
-
$stderr.puts e.backtrace.first
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def self.find_gator_project_file(path= Dir.getwd)
|
52
|
-
gatorfile = nil
|
53
|
-
Pathname.new(path).ascend do |dir|
|
54
|
-
gatorfile = gator_files_for(dir).map { |g| Dir[g] }.flatten.first
|
55
|
-
break unless gatorfile.nil? || File.directory?(gatorfile)
|
56
|
-
end
|
57
|
-
gatorfile
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.find_gator_project(path= Dir.getwd)
|
61
|
-
file = find_gator_project_file path
|
62
|
-
File.dirname file unless file.nil?
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.initialize_files
|
66
|
-
|
67
|
-
if File.exists? gator_config
|
68
|
-
load_rubyfile gator_config
|
69
|
-
else
|
70
|
-
ConfigFileCreator.new.config_file
|
71
|
-
end
|
72
|
-
|
73
|
-
p_file = find_gator_project_file
|
74
|
-
load_rubyfile p_file unless p_file.nil?
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
class ConfigFileCreator < Thor
|
79
|
-
include Thor::Actions
|
80
|
-
|
81
|
-
no_tasks {
|
82
|
-
def config_file
|
83
|
-
file = Gator::Util.gator_config
|
84
|
-
user = ask "Username:"
|
85
|
-
create_file file, "config.user='#{user}'"
|
86
|
-
end
|
87
|
-
}
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
end
|
data/spec/command_spec.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
class CommandA < Gator::Command
|
4
|
-
define :command => "a", :short => "a",
|
5
|
-
:usage => "a", :description => "a"
|
6
|
-
end
|
7
|
-
|
8
|
-
class CommandB < Gator::Command
|
9
|
-
define :command => "b", :short => "b",
|
10
|
-
:usage => "b", :description => "b"
|
11
|
-
end
|
12
|
-
|
13
|
-
class CommandC < Gator::Command
|
14
|
-
define :command => "c", :short => "c",
|
15
|
-
:usage => "c", :description => "c"
|
16
|
-
end
|
17
|
-
|
18
|
-
class SpecCollection < Gator::Command
|
19
|
-
define :command => "collection", :short => "c",
|
20
|
-
:usage => "collection", :description => "collection"
|
21
|
-
|
22
|
-
register_subcommand CommandA
|
23
|
-
CommandA.register_subcommand CommandB
|
24
|
-
register_subcommand CommandC
|
25
|
-
end
|
26
|
-
|
27
|
-
describe Gator::ActAsCommand do
|
28
|
-
|
29
|
-
it "should contain the correct definition" do
|
30
|
-
CommandA.definition[:command].should == "a"
|
31
|
-
CommandA.definition[:short].should == "a"
|
32
|
-
CommandA.definition[:usage].should == "a"
|
33
|
-
CommandA.definition[:description].should == "a"
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should have the correct parent" do
|
37
|
-
CommandB.parent.should == CommandA
|
38
|
-
CommandA.parent.should == SpecCollection
|
39
|
-
CommandC.parent.should == SpecCollection
|
40
|
-
SpecCollection.parent.should == nil
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
describe Gator::ActAsCommandCollection do
|
46
|
-
|
47
|
-
it "should provide the correct subcommands" do
|
48
|
-
SpecCollection.get_subcommand("a").should == CommandA
|
49
|
-
SpecCollection.get_subcommand("c").should == CommandC
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should provide the correct nested subcommands" do
|
53
|
-
SpecCollection.get_subcommand("a","b").should == CommandB
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should return nil if a command cannot be found" do
|
57
|
-
SpecCollection.get_subcommand("d").should == nil
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should resolve the correct subcommand on a parent" do
|
61
|
-
CommandB.resolve_subcommand(["a"]).should == CommandA
|
62
|
-
CommandB.resolve_subcommand(["c"]).should == CommandC
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should resolve the correct nested subcommand on a parent" do
|
66
|
-
CommandC.resolve_subcommand(["a","b"]).should == CommandB
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should fall back to CommandB" do
|
70
|
-
CommandC.resolve_subcommand(["a","d"],["a","b"]).should == CommandB
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should return nil if a command cannot be resolved" do
|
74
|
-
CommandC.resolve_subcommand("d").should == nil
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
describe Gator::Command do
|
80
|
-
|
81
|
-
it "should be covered by Gator::ActAsCommandCollection & Gator::ActAsCommand" do
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
data/spec/config_spec.rb
DELETED
data/spec/project_spec.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
|
4
|
-
describe Gator::Project do
|
5
|
-
|
6
|
-
it "should have some tests"
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
describe Gator::Project::Layout do
|
11
|
-
|
12
|
-
it "should have some tests"
|
13
|
-
it "could be the tests from the buildr project"
|
14
|
-
|
15
|
-
end
|
data/spec/runner_spec.rb
DELETED
data/spec/task_spec.rb
DELETED
data/spec/util_spec.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
|
4
|
-
describe Gator::Util do
|
5
|
-
|
6
|
-
it "should contain the correct filenames" do
|
7
|
-
Gator::Util.gator_files.include?("gator").should == true
|
8
|
-
Gator::Util.gator_files.include?("gator.rb").should == true
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should contain the correct filenames for directory" do
|
12
|
-
Gator::Util.gator_files_for("testdir").include?("testdir/gator").should == true
|
13
|
-
Gator::Util.gator_files_for("testdir").include?("testdir/gator.rb").should == true
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should provide the correct gator root directory" do
|
17
|
-
Gator::Util.gator_root.should == File.join(File.expand_path("~"), ".gator")
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should provide the correct project template directory" do
|
21
|
-
Gator::Util.project_template_root.should == File.join(Gator::Util.gator_root, "templates", "projects")
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should load a rubyfile correctly"
|
25
|
-
|
26
|
-
it "should find the gator project directory from project base directory" do
|
27
|
-
project_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/empty_gator_project')
|
28
|
-
Gator::Util.find_gator_project(project_dir).should == project_dir
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should find the gator project directory from a project subdirectory" do
|
32
|
-
project_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/empty_gator_project')
|
33
|
-
sub_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/empty_gator_project/sub_dir')
|
34
|
-
Gator::Util.find_gator_project(sub_dir).should == project_dir
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should find the gator.rb file from project base directory" do
|
38
|
-
project_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/empty_gator_project')
|
39
|
-
file = File.join(project_dir, "gator.rb")
|
40
|
-
Gator::Util.find_gator_project_file(project_dir).should == file
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should find the gator.rb file from a project subdirectory" do
|
44
|
-
project_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/empty_gator_project')
|
45
|
-
sub_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/empty_gator_project/sub_dir')
|
46
|
-
file = File.join(project_dir, "gator.rb")
|
47
|
-
Gator::Util.find_gator_project_file(sub_dir).should == file
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should not find a gator project in a project without gator.rb from the its base directory" do
|
51
|
-
project_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/no_gator_file')
|
52
|
-
Gator::Util.find_gator_project(project_dir).should == nil
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should not find a gator project in a project without gator.rb from the a subdirectory" do
|
56
|
-
project_dir = File.expand_path(File.dirname(__FILE__) + '/fixtures/no_gator_file/subdir')
|
57
|
-
Gator::Util.find_gator_project(project_dir).should == nil
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|