mvnizer 0.0.1 → 0.0.2
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/.rspec +1 -1
- data/Gemfile +9 -9
- data/LICENSE.txt +20 -20
- data/README.md +23 -5
- data/Rakefile +54 -54
- data/TODO.md +14 -0
- data/bin/mvnizer +41 -35
- data/conf/default.yml +4 -2
- data/lib/mvnizer/commands/new_project.rb +49 -0
- data/lib/mvnizer/commands/new_war_project.rb +20 -0
- data/lib/mvnizer/commands/project_factory.rb +19 -0
- data/lib/mvnizer/commands.rb +2 -0
- data/lib/mvnizer/configuration.rb +24 -21
- data/lib/mvnizer/coordinate_parser.rb +29 -0
- data/lib/mvnizer/dir_creator.rb +10 -10
- data/lib/mvnizer/erb_helper.rb +27 -0
- data/lib/mvnizer/mvnize.rb +36 -23
- data/lib/mvnizer/pom_generator.rb +10 -25
- data/lib/mvnizer/project.rb +35 -10
- data/lib/mvnizer/templates/_dependency.xml.erb +6 -0
- data/lib/mvnizer/templates/pom.xml.erb +33 -37
- data/lib/mvnizer/templates/web.xml.erb +6 -0
- data/lib/mvnizer/version.rb +1 -1
- data/lib/mvnizer.rb +15 -9
- data/mvnizer.gemspec +18 -2
- data/ragel/coordinate.rb +385 -0
- data/ragel/coordinate.rl +57 -0
- data/ragel/test_coord.rb +5 -0
- data/spec/commands/new_project_spec.rb +69 -0
- data/spec/commands/new_war_project_spec.rb +63 -0
- data/spec/commands/project_factory_spec.rb +21 -0
- data/spec/configuration_spec.rb +28 -28
- data/spec/coordinate_parser_spec.rb +69 -0
- data/spec/dir_creator_spec.rb +17 -17
- data/spec/generator_spec.rb +46 -19
- data/spec/mvnize_spec.rb +51 -37
- data/spec/spec_helper.rb +11 -11
- metadata +20 -4
data/.rspec
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--color
|
1
|
+
--color
|
data/Gemfile
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
source 'http://rubygems.org'
|
2
|
-
|
3
|
-
group :development do
|
4
|
-
gem 'rspec', '~> 2.11.0'
|
5
|
-
gem 'rspec-mocks', '~> 2.11.2'
|
6
|
-
gem 'fakefs', '~> 0.4.0'
|
7
|
-
gem 'nokogiri', '~> 1.5.5'
|
8
|
-
gem 'jeweler', '~> 1.8.4'
|
9
|
-
end
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
group :development do
|
4
|
+
gem 'rspec', '~> 2.11.0'
|
5
|
+
gem 'rspec-mocks', '~> 2.11.2'
|
6
|
+
gem 'fakefs', '~> 0.4.0'
|
7
|
+
gem 'nokogiri', '~> 1.5.5'
|
8
|
+
gem 'jeweler', '~> 1.8.4'
|
9
|
+
end
|
data/LICENSE.txt
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
Copyright (c) 2012 Sebastien Le Callonnec
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1
|
+
Copyright (c) 2012 Sebastien Le Callonnec
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,5 +1,23 @@
|
|
1
|
-
Bootstraps a Maven project. Because archetypes shouldn't be so complicated.
|
2
|
-
|
3
|
-
# Introduction
|
4
|
-
|
5
|
-
Mvnizer is ideal to create a throw-away Maven project that adds junit as a dependency and sets up the Maven project structure.
|
1
|
+
Bootstraps a Maven project. Because archetypes shouldn't be so complicated.
|
2
|
+
|
3
|
+
# Introduction
|
4
|
+
|
5
|
+
Mvnizer is ideal to create a throw-away Maven project that adds junit as a dependency and sets up the Maven project structure.
|
6
|
+
|
7
|
+
# Command
|
8
|
+
|
9
|
+
Mvnizer is used as follows:
|
10
|
+
|
11
|
+
$ mvnizer new <coordinates>
|
12
|
+
|
13
|
+
The coordinates can have the following format:
|
14
|
+
|
15
|
+
<group:>artifact<:version><:type>
|
16
|
+
|
17
|
+
with the values between angled brackets optional. `type` can only have one of the following three values: `jar` (default), `war` or `pom`.
|
18
|
+
|
19
|
+
This command creates a project in the `artifact` folder, populating the proper values in the pom file.
|
20
|
+
|
21
|
+
# License
|
22
|
+
|
23
|
+
MIT License.
|
data/Rakefile
CHANGED
@@ -1,55 +1,55 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler'
|
5
|
-
begin
|
6
|
-
Bundler.setup(:default, :development)
|
7
|
-
rescue Bundler::BundlerError => e
|
8
|
-
$stderr.puts e.message
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
11
|
-
end
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
require './lib/mvnizer/version.rb'
|
16
|
-
Jeweler::Tasks.new do |gem|
|
17
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
18
|
-
gem.name = "mvnizer"
|
19
|
-
gem.version = Mvnizer::Version::STRING
|
20
|
-
gem.homepage = "http://github.com/tychobrailleur/mvnizer"
|
21
|
-
gem.license = "MIT"
|
22
|
-
gem.summary = %Q{Bootstrap a Maven project without the pain of archetypes.}
|
23
|
-
gem.description = %Q{Bootstrap a Maven project without the pain of archetypes.}
|
24
|
-
gem.email = "sebastien@weblogism.com"
|
25
|
-
gem.authors = ["Sébastien Le Callonnec"]
|
26
|
-
|
27
|
-
gem.executables = ['mvnizer']
|
28
|
-
# dependencies defined in Gemfile
|
29
|
-
end
|
30
|
-
Jeweler::RubygemsDotOrgTasks.new
|
31
|
-
|
32
|
-
require 'rspec/core'
|
33
|
-
require 'rspec/core/rake_task'
|
34
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
35
|
-
spec.pattern = FileList['spec/**/*_spec.rb']
|
36
|
-
end
|
37
|
-
|
38
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
39
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
40
|
-
spec.rcov = true
|
41
|
-
end
|
42
|
-
|
43
|
-
task :default => :spec
|
44
|
-
|
45
|
-
require 'rdoc/task'
|
46
|
-
Rake::RDocTask.new do |rdoc|
|
47
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
-
|
49
|
-
rdoc.rdoc_dir = 'rdoc'
|
50
|
-
rdoc.title = "helloworld #{version}"
|
51
|
-
rdoc.rdoc_files.include('README*')
|
52
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
-
end
|
54
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
require './lib/mvnizer/version.rb'
|
16
|
+
Jeweler::Tasks.new do |gem|
|
17
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
18
|
+
gem.name = "mvnizer"
|
19
|
+
gem.version = Mvnizer::Version::STRING
|
20
|
+
gem.homepage = "http://github.com/tychobrailleur/mvnizer"
|
21
|
+
gem.license = "MIT"
|
22
|
+
gem.summary = %Q{Bootstrap a Maven project without the pain of archetypes.}
|
23
|
+
gem.description = %Q{Bootstrap a Maven project without the pain of archetypes.}
|
24
|
+
gem.email = "sebastien@weblogism.com"
|
25
|
+
gem.authors = ["Sébastien Le Callonnec"]
|
26
|
+
|
27
|
+
gem.executables = ['mvnizer']
|
28
|
+
# dependencies defined in Gemfile
|
29
|
+
end
|
30
|
+
Jeweler::RubygemsDotOrgTasks.new
|
31
|
+
|
32
|
+
require 'rspec/core'
|
33
|
+
require 'rspec/core/rake_task'
|
34
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
35
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
36
|
+
end
|
37
|
+
|
38
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
39
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
40
|
+
spec.rcov = true
|
41
|
+
end
|
42
|
+
|
43
|
+
task :default => :spec
|
44
|
+
|
45
|
+
require 'rdoc/task'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "helloworld #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
54
|
+
|
55
55
|
# -*- coding: utf-8 -*-
|
data/TODO.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
- Provide full or partial coordinates to define project coordinates. e.g. here are a list of valid values for mvnizer:
|
2
|
+
|
3
|
+
blah
|
4
|
+
blah:1.0.0-SNAPSHOT
|
5
|
+
blah:war
|
6
|
+
com.weblogism:blah
|
7
|
+
com.weblogism:blah:1.0.0-SNAPSHOT
|
8
|
+
com.weblogism:blah:war
|
9
|
+
- Depending on type of artifact (jar, war, etc.), generate appropriate pom and structure.
|
10
|
+
- Provide way to add dependency to pom given coordinates, e.g.:
|
11
|
+
|
12
|
+
mvnizer add org.junit:junit:4.10
|
13
|
+
- Provide dependency search facility.
|
14
|
+
- Support external config file (e.g. ~/.mvnizerrc) to override current defaults.
|
data/bin/mvnizer
CHANGED
@@ -1,35 +1,41 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
|
4
|
-
require 'mvnizer'
|
5
|
-
require 'optparse'
|
6
|
-
|
7
|
-
|
8
|
-
help = <<HELP
|
9
|
-
Mvnizer bootstraps a Maven project without the pain of archetypes.
|
10
|
-
|
11
|
-
mvnizer <project_name>
|
12
|
-
HELP
|
13
|
-
|
14
|
-
options = {}
|
15
|
-
|
16
|
-
opts = OptionParser.new do |opts|
|
17
|
-
opts.banner = help
|
18
|
-
|
19
|
-
opts.
|
20
|
-
puts
|
21
|
-
exit
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
|
4
|
+
require 'mvnizer'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
|
8
|
+
help = <<HELP
|
9
|
+
Mvnizer bootstraps a Maven project without the pain of archetypes.
|
10
|
+
|
11
|
+
mvnizer new <project_name>
|
12
|
+
HELP
|
13
|
+
|
14
|
+
options = {}
|
15
|
+
|
16
|
+
opts = OptionParser.new do |opts|
|
17
|
+
opts.banner = help
|
18
|
+
|
19
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
20
|
+
puts opts
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
|
24
|
+
opts.on("--version", "Display current version") do
|
25
|
+
puts "Mvnizer " + Mvnizer::Version::STRING
|
26
|
+
exit 0
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Read command line options into `options` hash
|
31
|
+
opts.parse!
|
32
|
+
|
33
|
+
if ARGV.size == 2
|
34
|
+
options[:command] = ARGV[0]
|
35
|
+
options[:name] = ARGV[1]
|
36
|
+
else
|
37
|
+
puts "Incorrect parameters. Please `mvnizer --help` for usage."
|
38
|
+
exit(1)
|
39
|
+
end
|
40
|
+
|
41
|
+
Mvnizer::Mvnize.new.run(options)
|
data/conf/default.yml
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
module Mvnizer
|
2
|
+
module Command
|
3
|
+
class NewProject
|
4
|
+
include Mvnizer::Configuration
|
5
|
+
|
6
|
+
def initialize(generator = Mvnizer::PomGenerator.new,
|
7
|
+
dir_creator = Mvnizer::DirCreator.new,
|
8
|
+
coordinate_parser = Mvnizer::CoordinateParser.new)
|
9
|
+
@generator = generator
|
10
|
+
@dir_creator = dir_creator
|
11
|
+
@coordinate_parser = coordinate_parser
|
12
|
+
end
|
13
|
+
|
14
|
+
# Creates the Maven project structure, and creates the pom file
|
15
|
+
# from the options
|
16
|
+
def run(options)
|
17
|
+
@project = define_project(options)
|
18
|
+
|
19
|
+
@dir_creator.create("#{@project.artifact_id}/src/main/java",
|
20
|
+
"#{@project.artifact_id}/src/test/java")
|
21
|
+
|
22
|
+
File.open("#{@project.artifact_id}/pom.xml", "w") do |f|
|
23
|
+
f.write(@generator.generate(@project))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
# Creates an instance of +Project+ class populated with the coordinates
|
29
|
+
# set with the user’s definition, or default values if not set.
|
30
|
+
def define_project(options)
|
31
|
+
coordinates = options[:name]
|
32
|
+
options = conf(options)
|
33
|
+
|
34
|
+
project = @coordinate_parser.parse(coordinates)
|
35
|
+
return_project = Project.new(project.group_id || options[:group_id],
|
36
|
+
project.artifact_id,
|
37
|
+
project.version || options[:version],
|
38
|
+
project.type || options[:type])
|
39
|
+
|
40
|
+
dependencies = options[:dependencies]
|
41
|
+
dependencies.each do |d|
|
42
|
+
return_project.add_dependency(@coordinate_parser.parse_scoped_coordinates(d))
|
43
|
+
end if dependencies
|
44
|
+
|
45
|
+
return_project
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Mvnizer
|
2
|
+
module Command
|
3
|
+
class NewWarProject < NewProject
|
4
|
+
def run(options)
|
5
|
+
super
|
6
|
+
|
7
|
+
@dir_creator.create("#{@project.artifact_id}/src/main/webapp/WEB-INF")
|
8
|
+
|
9
|
+
# web.xml is optional in Servlet 3.0
|
10
|
+
# Do we keep its generation here?
|
11
|
+
web_xml = File.join(File.dirname(__FILE__), '..', 'templates', 'web.xml.erb')
|
12
|
+
FileUtils.cp(web_xml, "#{@project.artifact_id}/src/main/webapp/WEB-INF/web.xml")
|
13
|
+
|
14
|
+
# TODO:
|
15
|
+
# Create sample @WebServlet?
|
16
|
+
# Add JEE dependencies into pom.
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mvnizer
|
3
|
+
module Command
|
4
|
+
class ProjectFactory
|
5
|
+
def self.create(type)
|
6
|
+
case type
|
7
|
+
when "jar"
|
8
|
+
return NewProject.new
|
9
|
+
when "war"
|
10
|
+
require 'mvnizer/commands/new_war_project'
|
11
|
+
return NewWarProject.new
|
12
|
+
else
|
13
|
+
raise ArgumentError, "Don’t know how to create #{type}."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -1,21 +1,24 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module Mvnizer
|
4
|
-
module Configuration
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
h
|
19
|
-
|
20
|
-
|
21
|
-
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Mvnizer
|
4
|
+
module Configuration
|
5
|
+
# Loads configuration from config/default.yml
|
6
|
+
# and merges the values into the passed options hash.
|
7
|
+
def conf(options)
|
8
|
+
config_file = File.join(File.dirname(__FILE__), "..", "..", "conf", "default.yml")
|
9
|
+
|
10
|
+
default_config = YAML.load_file(config_file)
|
11
|
+
symbolize_keys(default_config.merge(symbolize_keys(options)))
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
# Transforms all the keys in the hash into symbols
|
16
|
+
def symbolize_keys(hash)
|
17
|
+
h = hash.dup
|
18
|
+
h.keys.each do |key|
|
19
|
+
h[(key.to_sym rescue key) || key] = h.delete(key)
|
20
|
+
end
|
21
|
+
h
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Mvnizer
|
2
|
+
class CoordinateParser
|
3
|
+
# Parse the coordinates of an artifact.
|
4
|
+
def parse(coordinates)
|
5
|
+
p = nil
|
6
|
+
# When no group and type is given
|
7
|
+
if coordinates =~ /\A([a-zA-Z][\w\.\-]+)(:(\d+\.\d+\.\d(\-\w+)?))?:(war|jar|pom)/
|
8
|
+
p = Project.new(nil, $1, $3, $5)
|
9
|
+
else
|
10
|
+
coordinates.scan(/(([a-zA-Z][\w\.\-]+):)?([a-zA-Z][\w\.\-]+)(:(\d+\.\d+\.\d(\-\w+)?))?(:(war|jar|pom))?/) do
|
11
|
+
|i,g,a,v0,v,m,t0,t|
|
12
|
+
p = Project.new(g, a, v, t)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
p
|
17
|
+
end
|
18
|
+
|
19
|
+
# Parse the coordinates of a dependency, i.e. that include
|
20
|
+
# the scope (test, compile, provided, runtime, system or import)
|
21
|
+
def parse_scoped_coordinates(coordinates)
|
22
|
+
p = nil
|
23
|
+
if coordinates =~ /\A(([a-zA-Z][\w\.\-]+):)?([a-zA-Z][\w\.\-]+)(:(\d+\.\d+(\.\d)?(\-\w+)?))?:(war|jar|pom):(test|compile|provided|runtime|system|import)/
|
24
|
+
p = Project.new($2, $3, $5, $8, [], $9)
|
25
|
+
end
|
26
|
+
p
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/mvnizer/dir_creator.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Mvnizer
|
4
|
-
class DirCreator
|
5
|
-
# creates recursively all directories passed as a param.
|
6
|
-
def create(*dir)
|
7
|
-
dir.each { |d| FileUtils.mkdir_p d }
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Mvnizer
|
4
|
+
class DirCreator
|
5
|
+
# creates recursively all directories passed as a param.
|
6
|
+
def create(*dir)
|
7
|
+
dir.each { |d| FileUtils.mkdir_p d }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Mvnizer
|
2
|
+
|
3
|
+
# ERB utilities that needs to be brought into a class
|
4
|
+
# used as an ERB binding.
|
5
|
+
module Erbicole
|
6
|
+
# Path to folder storing all templates.
|
7
|
+
TEMPLATE_PATH = File.join(File.dirname(__FILE__), 'templates')
|
8
|
+
|
9
|
+
# Renders a template named `name` located in the templates
|
10
|
+
# folder.
|
11
|
+
def render(name, object = nil)
|
12
|
+
binding = get_binding
|
13
|
+
|
14
|
+
if object.respond_to?(:get_binding)
|
15
|
+
binding = object.get_binding
|
16
|
+
end
|
17
|
+
|
18
|
+
content = File.read(File.join(TEMPLATE_PATH, name))
|
19
|
+
ERB.new(content).result(binding)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Return the ERB binding.
|
23
|
+
def get_binding
|
24
|
+
binding
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/mvnizer/mvnize.rb
CHANGED
@@ -1,23 +1,36 @@
|
|
1
|
-
module Mvnizer
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
@
|
8
|
-
end
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
1
|
+
module Mvnizer
|
2
|
+
# Mvnize is the main entry point into Mvnizer.
|
3
|
+
class Mvnize
|
4
|
+
attr_writer :out
|
5
|
+
|
6
|
+
def out
|
7
|
+
@out ||= $stdout
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.new_project
|
11
|
+
@new_project ||= Mvnizer::Command::NewProject.new
|
12
|
+
end
|
13
|
+
|
14
|
+
# Execute the right command depending on the :command parameter
|
15
|
+
# passed in +options+.
|
16
|
+
# If the command does not exit, throw an error.
|
17
|
+
def run(options)
|
18
|
+
raise ArgumentError, "Please give a name to the project." unless options[:name]
|
19
|
+
if options[:command] == "new"
|
20
|
+
# FIXME: coordinates should be parsed here to check type.
|
21
|
+
# and pass to the factory, rather than doing this if,
|
22
|
+
# and parse coordinates later down in NewProject.
|
23
|
+
if options[:name] =~ /:war$/
|
24
|
+
project = Mvnizer::Command::ProjectFactory.create("war")
|
25
|
+
else
|
26
|
+
project = Mvnizer::Command::ProjectFactory.create("jar")
|
27
|
+
end
|
28
|
+
|
29
|
+
project.run(options)
|
30
|
+
out.puts("Project created successfully.")
|
31
|
+
else
|
32
|
+
raise ArgumentError, "#{options[:command]} is not a valid command."
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,25 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
def get_binding
|
13
|
-
binding
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class PomGenerator
|
18
|
-
# Creates the pom content by reading the erb template.
|
19
|
-
def generate(options)
|
20
|
-
template = File.open(File.join(File.dirname(__FILE__), 'templates', 'pom.xml.erb'), 'r').read
|
21
|
-
project = Project.new(options[:group_id], options[:name], options[:version])
|
22
|
-
ERB.new(template).result(project.get_binding)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
1
|
+
module Mvnizer
|
2
|
+
# This class handles the generation of the content of the pom file.
|
3
|
+
class PomGenerator
|
4
|
+
# Creates the pom content by reading the erb template.
|
5
|
+
def generate(project)
|
6
|
+
template = File.open(File.join(File.dirname(__FILE__), 'templates', 'pom.xml.erb'), 'r').read
|
7
|
+
ERB.new(template).result(project.get_binding)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|