gator 0.0.21.pre → 0.0.22.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -0,0 +1,28 @@
|
|
1
|
+
class Gator
|
2
|
+
require 'pathname'
|
3
|
+
class ProjectFileLocator
|
4
|
+
|
5
|
+
def project_files
|
6
|
+
["gator", "gator.rb"]
|
7
|
+
end
|
8
|
+
|
9
|
+
def project_file_paths(dir)
|
10
|
+
project_files.collect { |f| File.join(dir, f) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_project_dir path=Dir.getwd
|
14
|
+
file = find_project_file path
|
15
|
+
File.dirname file unless file.nil?
|
16
|
+
end
|
17
|
+
|
18
|
+
def find_project_file path=Dir.getwd
|
19
|
+
gatorfile = nil
|
20
|
+
Pathname.new(path).ascend do |dir|
|
21
|
+
gatorfile = project_file_paths(dir).map { |g| Dir[g] }.flatten.first
|
22
|
+
break unless gatorfile.nil? || File.directory?(gatorfile)
|
23
|
+
end
|
24
|
+
gatorfile
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Gator
|
2
|
+
class RubyFileLoader
|
3
|
+
|
4
|
+
def initialize sandbox
|
5
|
+
@sandbox = sandbox
|
6
|
+
end
|
7
|
+
|
8
|
+
def sandbox
|
9
|
+
@sandbox
|
10
|
+
end
|
11
|
+
|
12
|
+
def exec_file file
|
13
|
+
exec_code File.binread( file )
|
14
|
+
end
|
15
|
+
|
16
|
+
def exec_code code
|
17
|
+
sandbox.module_eval( code )
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -1,45 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
def self.project
|
5
|
-
@project
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.project=(project)
|
9
|
-
@project = project
|
10
|
-
end
|
11
|
-
|
12
|
-
def project(project= nil)
|
13
|
-
Project.project = project unless project.nil?
|
14
|
-
$stderr.puts "WARNING: No project definition found." if Project.project.nil?
|
15
|
-
Project.project
|
16
|
-
end
|
17
|
-
|
18
|
-
class ProjectBase
|
19
|
-
|
20
|
-
attr_accessor :name, :layout
|
21
|
-
|
22
|
-
def initialize
|
23
|
-
@name = ""
|
24
|
-
@layout = Layout.default
|
25
|
-
end
|
26
|
-
|
27
|
-
def path(*args)
|
28
|
-
File.join(Gator::Util.find_gator_project, layout.expand(*args))
|
29
|
-
end
|
30
|
-
|
31
|
-
def options
|
32
|
-
@options ||= {}
|
33
|
-
end
|
34
|
-
|
35
|
-
def template_roots
|
36
|
-
@template_roots ||= []
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
# THIS CLASS IS STOLEN FROM BUILDR
|
42
|
-
|
1
|
+
class Gator
|
2
|
+
# THIS CLASS IS FROM BUILDR => buildr.apache.org
|
43
3
|
# Symbolic mapping for directory layout. Used for both the default and custom layouts.
|
44
4
|
#
|
45
5
|
# For example, the default layout maps [:source, :main, :java] to 'src/main/java', and
|
@@ -125,5 +85,4 @@ module Gator
|
|
125
85
|
self.default = Default.new
|
126
86
|
|
127
87
|
end
|
128
|
-
end
|
129
|
-
end
|
88
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Gator
|
2
|
+
class Project
|
3
|
+
include Gator::ActAsConfiguration
|
4
|
+
|
5
|
+
attr_accessor :name, :layout
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@name = ""
|
9
|
+
@layout = Layout.default
|
10
|
+
end
|
11
|
+
|
12
|
+
def path(*args)
|
13
|
+
File.join( ProjectFileLocator.new.find_project_dir, layout.expand(*args) )
|
14
|
+
end
|
15
|
+
|
16
|
+
def template_roots
|
17
|
+
@template_roots ||= []
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "thor/actions"
|
3
|
+
require "fileutils"
|
4
|
+
|
5
|
+
class Gator
|
6
|
+
module Scaffolding
|
7
|
+
class ScaffoldCommand < Command
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
define :command => "scaffold", :short => "s",
|
11
|
+
:usage => "scaffold TASK", :description => "Set of tasks to manage scaffold templates."
|
12
|
+
|
13
|
+
def self.source_root
|
14
|
+
Gator::Scaffolding::ScaffoldingFileUtils.new.scaffolds_home
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "scaffold install NAME TEMPLATE_NAME", "Install a scaffold template."
|
18
|
+
def install(dir, name=nil)
|
19
|
+
file_util.install_scaffold dir, name
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "scaffold uninstall TEMPLATE_NAME", "Uninstall a scaffold template."
|
23
|
+
def uninstall( scaffold )
|
24
|
+
file_util.delete_scaffold scaffold
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "scaffold new NAME TEMPLATE_NAME", "Create a new scaffold by template."
|
28
|
+
def new(name, template)
|
29
|
+
@scaffold_name = name
|
30
|
+
directory file_util.scaffold_directory(template), File.expand_path(name)
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "scaffold wipe", "Delete all scaffold templates."
|
34
|
+
def wipe
|
35
|
+
file_util.delete_all_scaffolds
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "scaffold list [SEARCH]", "Lists scaffold templates."
|
39
|
+
def list(search=nil)
|
40
|
+
entries = file_util.scaffold_entries
|
41
|
+
entries = entries.select { |e| e.include?(search) } unless search.nil?
|
42
|
+
entries.each { |e| say " #{e}" }
|
43
|
+
say "No templates found.", :blue if entries.empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
no_tasks {
|
47
|
+
|
48
|
+
def scaffold_name
|
49
|
+
@scaffold_name
|
50
|
+
end
|
51
|
+
|
52
|
+
}
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def file_util
|
57
|
+
@_file_util ||= Gator::Scaffolding::ScaffoldingFileUtils.new
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
class Gator
|
4
|
+
module Scaffolding
|
5
|
+
class ScaffoldingFileUtils
|
6
|
+
include Thor::Actions
|
7
|
+
|
8
|
+
def scaffolds_home
|
9
|
+
File.join(Gator::Paths.gator_home, "scaffolds")
|
10
|
+
end
|
11
|
+
|
12
|
+
def scaffold_directory name
|
13
|
+
File.join(scaffolds_home, name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def directory_entries dir, join= true
|
17
|
+
entries = Dir.entries dir
|
18
|
+
entries.delete(".")
|
19
|
+
entries.delete("..")
|
20
|
+
entries.collect! { |e| File.join(dir, e) } if join
|
21
|
+
entries
|
22
|
+
end
|
23
|
+
|
24
|
+
def last_directory_name dir
|
25
|
+
dir.split(File::PATH_SEPARATOR).last
|
26
|
+
end
|
27
|
+
|
28
|
+
def scaffold_entries join= false
|
29
|
+
directory_entries scaffolds_home, join
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_empty_directory_files dir
|
33
|
+
Dir.glob(File.join(dir, "**", "*")).each { |f|
|
34
|
+
create_file File.join(f, ".empty_directory"), ".empty_directory" if File.directory?(f) && Dir.entries(f).length == 2
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def install_scaffold from_dir, name=nil
|
39
|
+
name ||= last_directory_name from_dir
|
40
|
+
entries = directory_entries from_dir
|
41
|
+
install_dir = scaffold_directory(name)
|
42
|
+
#empty_directory install_dir
|
43
|
+
FileUtils.mkdir_p install_dir
|
44
|
+
FileUtils.cp_r entries, install_dir
|
45
|
+
create_empty_directory_files install_dir
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete_scaffold name
|
49
|
+
FileUtils.rm_r scaffold_directory(name)
|
50
|
+
end
|
51
|
+
|
52
|
+
def delete_all_scaffolds
|
53
|
+
scaffold_entries.each { |scaffold| delete_scaffold(scaffold) }
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/rake/jeweler.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class Jeweler
|
2
|
+
require File.dirname(__FILE__)+'/pre_release_to_git'
|
3
|
+
require File.dirname(__FILE__)+'/pre_release_gemspec'
|
4
|
+
|
5
|
+
def prerelease_to_git
|
6
|
+
Jeweler::Commands::PreReleaseToGit.build_for(self).run
|
7
|
+
end
|
8
|
+
|
9
|
+
def prerelease_gemspec
|
10
|
+
Jeweler::Commands::PreReleaseGemspec.build_for(self).run
|
11
|
+
end
|
12
|
+
|
13
|
+
def is_prerelease_version?
|
14
|
+
version.end_with? ".pre"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
require File.dirname(__FILE__)+"/jeweler"
|
4
|
+
|
5
|
+
class Jeweler
|
6
|
+
class PrereleaseTasks < Rake::TaskLib
|
7
|
+
attr_accessor :jeweler
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
yield self if block_given?
|
11
|
+
|
12
|
+
define
|
13
|
+
end
|
14
|
+
|
15
|
+
def jeweler
|
16
|
+
@jeweler ||= Rake.application.jeweler
|
17
|
+
end
|
18
|
+
|
19
|
+
def define
|
20
|
+
namespace :git do
|
21
|
+
desc "Tag and push prerelease to git. (happens by default with `rake prerelease`)"
|
22
|
+
task :prerelease do
|
23
|
+
jeweler.prerelease_to_git
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
namespace :gemspec do
|
28
|
+
desc "Regenerate and validate gemspec, and then commits and pushes to git on develop branch"
|
29
|
+
task :prerelease do
|
30
|
+
jeweler.prerelease_gemspec
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Verifies that it is a prerelease version."
|
35
|
+
task :is_prerelease_version => :version_required do
|
36
|
+
abort "it's not a prerelease version" unless jeweler.is_prerelease_version?
|
37
|
+
end
|
38
|
+
|
39
|
+
namespace :rubygems do
|
40
|
+
desc "Release gem to Gemcutter"
|
41
|
+
task :release => [:gemspec, :build] do
|
42
|
+
jeweler.release_gem_to_rubygems
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
desc "Make a prerelease to rubygems."
|
47
|
+
task :prerelease => [:is_prerelease_version, 'gemspec:prerelease', 'git:prerelease', 'rubygems:release']
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
class Jeweler
|
2
|
+
module Commands
|
3
|
+
class PreReleaseGemspec
|
4
|
+
attr_accessor :gemspec, :version, :repo, :output, :gemspec_helper, :base_dir
|
5
|
+
|
6
|
+
def initialize(attributes = {})
|
7
|
+
self.output = $stdout
|
8
|
+
|
9
|
+
attributes.each_pair do |key, value|
|
10
|
+
send("#{key}=", value)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
unless clean_staging_area?
|
16
|
+
system "git status"
|
17
|
+
raise "Unclean staging area! Be sure to commit or .gitignore everything first. See `git status` above."
|
18
|
+
end
|
19
|
+
|
20
|
+
repo.checkout('develop')
|
21
|
+
|
22
|
+
regenerate_gemspec!
|
23
|
+
commit_gemspec! if gemspec_changed?
|
24
|
+
|
25
|
+
output.puts "Pushing develop to origin"
|
26
|
+
repo.push
|
27
|
+
end
|
28
|
+
|
29
|
+
def clean_staging_area?
|
30
|
+
# surprisingly simpler than ruby-git
|
31
|
+
`git ls-files --deleted --modified --others --exclude-standard` == ""
|
32
|
+
end
|
33
|
+
|
34
|
+
def commit_gemspec!
|
35
|
+
gemspec_gitpath = working_subdir.join(gemspec_helper.path)
|
36
|
+
repo.add(gemspec_gitpath.to_s)
|
37
|
+
output.puts "Committing #{gemspec_gitpath}"
|
38
|
+
repo.commit "Regenerate gemspec for version #{version}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def regenerate_gemspec!
|
42
|
+
gemspec_helper.update_version(version)
|
43
|
+
gemspec_helper.write
|
44
|
+
end
|
45
|
+
|
46
|
+
def gemspec_changed?
|
47
|
+
# OMGHAX. ruby-git status always ends up being 'M', so let's do it a crazy way
|
48
|
+
system "git status -s #{working_subdir.join(gemspec_helper.path)} | grep #{working_subdir.join(gemspec_helper.path)} > /dev/null 2>/dev/null"
|
49
|
+
end
|
50
|
+
|
51
|
+
def gemspec_helper
|
52
|
+
@gemspec_helper ||= Jeweler::GemSpecHelper.new(self.gemspec, self.base_dir)
|
53
|
+
end
|
54
|
+
|
55
|
+
def working_subdir
|
56
|
+
return @working_subdir if @working_subdir
|
57
|
+
cwd = base_dir_path
|
58
|
+
@working_subdir = cwd.relative_path_from(Pathname.new(repo.dir.path))
|
59
|
+
@working_subdir
|
60
|
+
end
|
61
|
+
|
62
|
+
def base_dir_path
|
63
|
+
Pathname.new(base_dir).realpath
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.build_for(jeweler)
|
67
|
+
command = self.new
|
68
|
+
|
69
|
+
command.base_dir = jeweler.base_dir
|
70
|
+
command.gemspec = jeweler.gemspec
|
71
|
+
command.version = jeweler.version
|
72
|
+
command.repo = jeweler.repo
|
73
|
+
command.output = jeweler.output
|
74
|
+
command.gemspec_helper = jeweler.gemspec_helper
|
75
|
+
|
76
|
+
command
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|