mvnizer 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+
2
+ # Mvnizer 0.0.4
3
+
4
+ * Added sample servlet and JSP in new war project,
5
+ * Add dependency using the `mvnizer add` command.
6
+
7
+ # Mvnizer 0.0.3
8
+
9
+ * Search dependencies in Maven central repo
10
+
11
+ # Mvnizer 0.0.2
12
+
13
+ * Coordinate parsing
14
+ * Project creation depending on the project type (jar or war)
15
+
16
+ # Mvnizer 0.0.1
17
+
18
+ * Basic Maven project creation
data/Gemfile CHANGED
@@ -1,12 +1,13 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  gem 'httparty', '~> 0.9.0'
4
+ gem 'nokogiri', '~> 1.5.5'
5
+
4
6
 
5
7
  group :development do
6
8
  gem 'rspec', '~> 2.11.0'
7
9
  gem 'rspec-mocks', '~> 2.11.2'
8
10
  gem 'fakefs', '~> 0.4.0'
9
- gem 'nokogiri', '~> 1.5.5'
10
11
  gem 'jeweler', '~> 1.8.4'
11
12
  gem 'aruba', '~> 0.4.11'
12
13
  end
data/README.md CHANGED
@@ -27,6 +27,18 @@ Here are some examples of valid commands:
27
27
  mvnizer new com.example:foo:war
28
28
  mvnizer new com.example:foo:1.0:war
29
29
 
30
+ ## Add Dependency
31
+
32
+ To add dependencies, you must be in the folder where the pom file you want to add the dependency to is.
33
+
34
+ To add a dependency, simply pass the coordinates of the dependency, and add scope if needed (if no scope is given, `compile` is assumed):
35
+
36
+ mvnizer add org.apache.commons:commons-lang3:3.1:jar
37
+ mvnizer add org.mockito:mockito-core:1.9.5-rc1:jar:test
38
+
39
+ The `search` features makes it easy to find the coordinates of the dependencies for you.
40
+
41
+
30
42
  ## Dependency Search
31
43
 
32
44
  You can search for dependencies in the Maven central repository with the command:
@@ -17,6 +17,9 @@ Mvnizer bootstraps a Maven project without the pain of archetypes.
17
17
  mvnizer new com.example:foo:war
18
18
  mvnizer new com.example:foo:1.0:war
19
19
 
20
+ mvnizer add <coordinates>
21
+ Adds a dependency to the project.
22
+
20
23
  mvnizer search <text>
21
24
  Searches for artefacts in the Maven central repository.
22
25
  HELP
@@ -3,6 +3,7 @@ $:.unshift File.dirname(__FILE__)
3
3
  require 'erb'
4
4
 
5
5
  require 'mvnizer/version'
6
+ require 'mvnizer/exceptions'
6
7
  require 'mvnizer/erb_helper'
7
8
  require 'mvnizer/task_helper'
8
9
  require 'mvnizer/project'
@@ -1,3 +1,4 @@
1
1
  require 'mvnizer/commands/new_project'
2
2
  require 'mvnizer/commands/project_factory'
3
3
  require 'mvnizer/commands/search_artefact'
4
+ require 'mvnizer/commands/add_dependency'
@@ -0,0 +1,22 @@
1
+ module Mvnizer
2
+ module Command
3
+ class AddDependency
4
+ include TaskHelper
5
+
6
+ def run(options)
7
+ raise Mvnizer::FileNotFoundError, "The pom.xml file cannot be found." unless pom_present?
8
+
9
+ dependency = options[:name]
10
+ content = add_dependency([dependency])
11
+ File.open("pom.xml", "w") do |f|
12
+ f.write(content)
13
+ end
14
+ end
15
+
16
+ private
17
+ def pom_present?
18
+ File.exists?(File.join(Dir.pwd, "pom.xml"))
19
+ end
20
+ end
21
+ end
22
+ end
@@ -11,10 +11,19 @@ module Mvnizer
11
11
  create_dir("#{project.artifact_id}/src/main/java",
12
12
  "#{project.artifact_id}/src/test/java")
13
13
 
14
+ coordinate_parser = CoordinateParser.new
15
+ get_dependencies.each { |d| project.add_dependency(coordinate_parser.parse_scoped_coordinates(d)) }
16
+
14
17
  generate_file(File.join(TEMPLATE_DIR, "pom.xml.erb"),
15
18
  "#{project.artifact_id}/pom.xml",
16
19
  project)
17
20
  end
21
+
22
+ # Returns the list of dependencies to be added for this type of project.
23
+ # Override this method if extra dependencies are needed.
24
+ def get_dependencies
25
+ []
26
+ end
18
27
 
19
28
  end
20
29
  end
@@ -8,14 +8,25 @@ module Mvnizer
8
8
 
9
9
  # web.xml is optional in Servlet 3.0
10
10
  # Do we keep its generation here?
11
- generate_file(File.join(TEMPLATE_DIR, "web.xml.erb"),
11
+ generate_file(File.join(TEMPLATE_DIR, "web.xml.erb"),
12
12
  "#{project.artifact_id}/src/main/webapp/WEB-INF/web.xml",
13
13
  project)
14
14
 
15
15
 
16
- # TODO:
17
- # Create sample @WebServlet?
18
- # Add JEE dependencies into pom.
16
+ # The Java class will be generated in the groupId/artifactId folder
17
+ # with the dots replaced by path separators.
18
+ target_directory = project.package_name.gsub(/\./, File::SEPARATOR)
19
+
20
+ generate_file(File.join(TEMPLATE_DIR, "war", "ExampleServlet.java.erb"),
21
+ "#{project.artifact_id}/src/main/java/#{target_directory}/ExampleServlet.java",
22
+ project)
23
+ generate_file(File.join(TEMPLATE_DIR, "war", "index.jsp.erb"),
24
+ "#{project.artifact_id}/src/main/webapp/WEB-INF/index.jsp",
25
+ project)
26
+ end
27
+
28
+ def get_dependencies
29
+ ["javax:javaee-web-api:6.0:jar:provided"]
19
30
  end
20
31
  end
21
32
  end
@@ -20,7 +20,7 @@ module Mvnizer
20
20
  # the scope (test, compile, provided, runtime, system or import)
21
21
  def parse_scoped_coordinates(coordinates)
22
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)/
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
24
  p = Project.new($2, $3, $5, $8, [], $9)
25
25
  end
26
26
  p
@@ -0,0 +1,6 @@
1
+ module Mvnizer
2
+
3
+ # Error thrown when the pom file cannot be found.
4
+ class FileNotFoundError < StandardError; end
5
+
6
+ end
@@ -28,6 +28,9 @@ module Mvnizer
28
28
  when "search"
29
29
  search_command = Command::SearchArtefact.new
30
30
  search_command.run(options)
31
+ when "add"
32
+ add_command = Command::AddDependency.new
33
+ add_command.run(options)
31
34
  else
32
35
  raise ArgumentError, "#{options[:command]} is not a valid command."
33
36
  end
@@ -27,6 +27,12 @@ module Mvnizer
27
27
  && type == project.type)
28
28
  end
29
29
 
30
+ def package_name
31
+ package = artifact_id
32
+ package = "#{group_id}.#{package}" unless group_id == nil
33
+ package.gsub(/\-/, "")
34
+ end
35
+
30
36
  # Converts project into its coordinates representation.
31
37
  def to_s
32
38
  "#{group_id}:#{artifact_id}:#{version}:#{type}:#{scope}"
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'nokogiri'
2
3
 
3
4
  module Mvnizer
4
5
  # The +TaskHelper+ provides different functions that can be used in tasks,
@@ -28,5 +29,39 @@ module Mvnizer
28
29
  f.write(ERB.new(template).result(binding.get_binding))
29
30
  end
30
31
  end
32
+
33
+ # adds a list of dependencies to the pom file whose location
34
+ # can be given as +pom_location+. By default, this function
35
+ # looks up the pom in the current directory.
36
+ def add_dependency(dependency, pom_location = File.join(Dir.pwd, "pom.xml"))
37
+ raise FileNotFoundError, "The pom.xml file cannot be found." unless File.exists?(pom_location)
38
+
39
+ coordinate_parser = CoordinateParser.new
40
+
41
+ pom = Nokogiri::XML(File.open(pom_location)) do |c|
42
+ c.noblanks
43
+ end
44
+ dependencies_node = pom.xpath("/pom:project/pom:dependencies", {"pom" => "http://maven.apache.org/POM/4.0.0"}).first
45
+
46
+ dependency.each do |d|
47
+ # First parse the dependency coordinates
48
+ dep_project = coordinate_parser.parse_scoped_coordinates(d)
49
+
50
+ Nokogiri::XML::Builder.with(dependencies_node) do |xml|
51
+ xml.dependency {
52
+ xml.groupId dep_project.group_id
53
+ xml.artifactId dep_project.artifact_id
54
+ xml.version dep_project.version
55
+ xml.scope dep_project.scope if dep_project.scope != nil && dep_project.scope != "compile"
56
+ xml.type dep_project.type if dep_project.type != "jar"
57
+ }
58
+ end
59
+ end
60
+
61
+ # Requires sparklemotion/nokogiri#772 to produce
62
+ # identical pom files in both MRI and JRuby.
63
+ pom.to_xml(indent: 2)
64
+ end
31
65
  end
66
+
32
67
  end
@@ -3,4 +3,4 @@
3
3
  <artifactId><%= artifact_id %></artifactId>
4
4
  <version><%= version %></version>
5
5
  <% if scope && scope != "compile" %><scope><%= scope %></scope><% end %>
6
- </dependency>
6
+ </dependency>
@@ -0,0 +1,19 @@
1
+ package <%= package_name %>;
2
+
3
+ import java.io.IOException;
4
+ import javax.servlet.GenericServlet;
5
+ import javax.servlet.ServletException;
6
+ import javax.servlet.ServletRequest;
7
+ import javax.servlet.ServletResponse;
8
+ import javax.servlet.annotation.WebServlet;
9
+
10
+ @WebServlet("/hello")
11
+ public class ExampleServlet extends GenericServlet {
12
+
13
+ @Override
14
+ public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
15
+
16
+ request.setAttribute("greeting", "Hello World");
17
+ request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
18
+ }
19
+ }
@@ -0,0 +1,11 @@
1
+ <%%@page contentType="text/html" pageEncoding="UTF-8"%>
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6
+ <title>JSP Page</title>
7
+ </head>
8
+ <body>
9
+ <h1>${greeting}</h1>
10
+ </body>
11
+ </html>
@@ -1,5 +1,5 @@
1
1
  module Mvnizer
2
2
  module Version
3
- STRING = '0.0.3'
3
+ STRING = '0.0.4'
4
4
  end
5
5
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "mvnizer"
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["S\u{e9}bastien Le Callonnec"]
12
- s.date = "2012-09-25"
12
+ s.date = "2012-09-29"
13
13
  s.description = "Bootstrap a Maven project without the pain of archetypes."
14
14
  s.email = "sebastien@weblogism.com"
15
15
  s.executables = ["mvnizer"]
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  ]
20
20
  s.files = [
21
21
  ".rspec",
22
+ "CHANGELOG.md",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "LICENSE.txt",
@@ -33,6 +34,7 @@ Gem::Specification.new do |s|
33
34
  "features/support/env.rb",
34
35
  "lib/mvnizer.rb",
35
36
  "lib/mvnizer/commands.rb",
37
+ "lib/mvnizer/commands/add_dependency.rb",
36
38
  "lib/mvnizer/commands/new_project.rb",
37
39
  "lib/mvnizer/commands/new_war_project.rb",
38
40
  "lib/mvnizer/commands/project_factory.rb",
@@ -40,24 +42,31 @@ Gem::Specification.new do |s|
40
42
  "lib/mvnizer/configuration.rb",
41
43
  "lib/mvnizer/coordinate_parser.rb",
42
44
  "lib/mvnizer/erb_helper.rb",
45
+ "lib/mvnizer/exceptions.rb",
43
46
  "lib/mvnizer/mvnize.rb",
44
47
  "lib/mvnizer/project.rb",
45
48
  "lib/mvnizer/task_helper.rb",
46
49
  "lib/mvnizer/templates/_dependency.xml.erb",
47
50
  "lib/mvnizer/templates/pom.xml.erb",
51
+ "lib/mvnizer/templates/war/ExampleServlet.java.erb",
52
+ "lib/mvnizer/templates/war/index.jsp.erb",
48
53
  "lib/mvnizer/templates/web.xml.erb",
49
54
  "lib/mvnizer/version.rb",
50
55
  "mvnizer.gemspec",
51
56
  "ragel/coordinate.rb",
52
57
  "ragel/coordinate.rl",
53
58
  "ragel/test_coord.rb",
59
+ "spec/commands/add_dependency_spec.rb",
54
60
  "spec/commands/new_project_spec.rb",
55
61
  "spec/commands/new_war_project_spec.rb",
56
62
  "spec/commands/project_factory_spec.rb",
57
63
  "spec/commands/search_artefact_spec.rb",
58
64
  "spec/configuration_spec.rb",
59
65
  "spec/coordinate_parser_spec.rb",
66
+ "spec/dummy.txt.erb",
67
+ "spec/dummy_pom.xml",
60
68
  "spec/mvnize_spec.rb",
69
+ "spec/project_spec.rb",
61
70
  "spec/spec_helper.rb",
62
71
  "spec/task_helper_spec.rb"
63
72
  ]
@@ -72,27 +81,27 @@ Gem::Specification.new do |s|
72
81
 
73
82
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
74
83
  s.add_runtime_dependency(%q<httparty>, ["~> 0.9.0"])
84
+ s.add_runtime_dependency(%q<nokogiri>, ["~> 1.5.5"])
75
85
  s.add_development_dependency(%q<rspec>, ["~> 2.11.0"])
76
86
  s.add_development_dependency(%q<rspec-mocks>, ["~> 2.11.2"])
77
87
  s.add_development_dependency(%q<fakefs>, ["~> 0.4.0"])
78
- s.add_development_dependency(%q<nokogiri>, ["~> 1.5.5"])
79
88
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
80
89
  s.add_development_dependency(%q<aruba>, ["~> 0.4.11"])
81
90
  else
82
91
  s.add_dependency(%q<httparty>, ["~> 0.9.0"])
92
+ s.add_dependency(%q<nokogiri>, ["~> 1.5.5"])
83
93
  s.add_dependency(%q<rspec>, ["~> 2.11.0"])
84
94
  s.add_dependency(%q<rspec-mocks>, ["~> 2.11.2"])
85
95
  s.add_dependency(%q<fakefs>, ["~> 0.4.0"])
86
- s.add_dependency(%q<nokogiri>, ["~> 1.5.5"])
87
96
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
88
97
  s.add_dependency(%q<aruba>, ["~> 0.4.11"])
89
98
  end
90
99
  else
91
100
  s.add_dependency(%q<httparty>, ["~> 0.9.0"])
101
+ s.add_dependency(%q<nokogiri>, ["~> 1.5.5"])
92
102
  s.add_dependency(%q<rspec>, ["~> 2.11.0"])
93
103
  s.add_dependency(%q<rspec-mocks>, ["~> 2.11.2"])
94
104
  s.add_dependency(%q<fakefs>, ["~> 0.4.0"])
95
- s.add_dependency(%q<nokogiri>, ["~> 1.5.5"])
96
105
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
97
106
  s.add_dependency(%q<aruba>, ["~> 0.4.11"])
98
107
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module Mvnizer
4
+ module Command
5
+ describe AddDependency do
6
+ let (:file) { double("file") }
7
+
8
+ subject { AddDependency.new }
9
+ it "checks the pom can be found in the current directory" do
10
+ lambda { subject.run({}) }.should raise_error(FileNotFoundError, "The pom.xml file cannot be found.")
11
+ end
12
+
13
+ it "adds a dependency" do
14
+ options = { name: "test" }
15
+
16
+ File.should_receive(:exists?).and_return(true)
17
+ subject.should_receive(:add_dependency).with(["test"]).and_return("out")
18
+ File.should_receive(:open).with("pom.xml", "w").and_yield(file)
19
+ file.should_receive(:write).with("out")
20
+
21
+ subject.run(options)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,10 +4,10 @@ require 'spec_helper'
4
4
  module Mvnizer
5
5
  module Command
6
6
  describe NewProject do
7
+ let(:coordinate_parser) { double("parser") }
7
8
  let(:project) { Mvnizer::Project.new("com.example", "foobar", "1.0.0-SNAPSHOT", "war") }
8
9
  subject { Mvnizer::Command::NewProject.new }
9
10
 
10
-
11
11
  it "creates the project directory" do
12
12
  subject.should_receive(:generate_file)
13
13
  subject.should_receive(:create_dir).with("foobar/src/main/java", "foobar/src/test/java")
@@ -15,6 +15,18 @@ module Mvnizer
15
15
  subject.run(project)
16
16
  end
17
17
 
18
+ it "parses the extra dependencies and adds them" do
19
+ subject.should_receive(:get_dependencies).and_return(["foo:bar:1.0:jar:test"])
20
+ CoordinateParser.should_receive(:new).and_return(coordinate_parser)
21
+ coordinate_parser.should_receive(:parse_scoped_coordinates).with("foo:bar:1.0:jar:test").and_return("Blah")
22
+ subject.should_receive(:generate_file)
23
+ subject.should_receive(:create_dir)
24
+
25
+ subject.run(project)
26
+
27
+ project.dependencies.first.should == "Blah"
28
+ end
29
+
18
30
  it "generates the pom file" do
19
31
  subject.should_receive(:generate_file).with(File.join(TaskHelper::TEMPLATE_DIR, "pom.xml.erb"), "foobar/pom.xml", project)
20
32
  subject.run(project)
@@ -5,7 +5,7 @@ module Mvnizer
5
5
  module Command
6
6
  describe NewWarProject do
7
7
 
8
- let(:project) { Mvnizer::Project.new(nil, "foobar", nil, nil) }
8
+ let(:project) { Mvnizer::Project.new("test", "foobar", nil, nil) }
9
9
  subject { Mvnizer::Command::NewWarProject.new }
10
10
 
11
11
  before do
@@ -22,24 +22,32 @@ module Mvnizer
22
22
 
23
23
  it "creates a basic project" do
24
24
  subject.should_receive(:create_dir)
25
- subject.should_receive(:generate_file)
25
+ subject.should_receive(:generate_file).exactly(3).times
26
26
  subject.run(project)
27
27
  $run.should be_true
28
28
  end
29
29
 
30
30
  it "creates the webapp directory" do
31
31
  subject.should_receive(:create_dir).with("foobar/src/main/webapp/WEB-INF")
32
- subject.should_receive(:generate_file)
32
+ subject.should_receive(:generate_file).exactly(3).times
33
33
  subject.run(project)
34
34
  end
35
35
 
36
- it "generates the web.xml file" do
36
+ it "generates all the webapp files file" do
37
37
  subject.should_receive(:create_dir)
38
38
  subject.should_receive(:generate_file).with(File.join(TaskHelper::TEMPLATE_DIR, "web.xml.erb"), "foobar/src/main/webapp/WEB-INF/web.xml", project)
39
+ subject.should_receive(:generate_file).with(File.join(TaskHelper::TEMPLATE_DIR, "war", "ExampleServlet.java.erb"), "foobar/src/main/java/test/foobar/ExampleServlet.java", project)
40
+ subject.should_receive(:generate_file).with(File.join(TaskHelper::TEMPLATE_DIR, "war", "index.jsp.erb"), "foobar/src/main/webapp/WEB-INF/index.jsp", project)
41
+
39
42
 
40
43
  subject.run(project)
41
44
  end
42
45
 
46
+ it "adds the dependencies needed for a war file" do
47
+ deps = subject.get_dependencies
48
+ deps.include?("javax:javaee-web-api:6.0:jar:provided").should be_true
49
+ end
50
+
43
51
  after do
44
52
  class NewProject
45
53
  alias run old_run
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
+ require 'mvnizer/commands/new_war_project'
3
4
 
4
5
  module Mvnizer
5
6
  module Command
@@ -6,11 +6,7 @@ module Mvnizer
6
6
  describe SearchArtefact do
7
7
 
8
8
  subject { SearchArtefact.new }
9
- before do
10
- subject.out = StringIO.new
11
-
12
- end
13
-
9
+ before { subject.out = StringIO.new }
14
10
 
15
11
  def httparty_response_mock(mock_response_content)
16
12
  request_object = HTTParty::Request.new Net::HTTP::Get, '/'
@@ -3,67 +3,90 @@ require 'spec_helper'
3
3
  describe Mvnizer::CoordinateParser do
4
4
  subject { Mvnizer::CoordinateParser.new }
5
5
 
6
- it "can read the project name" do
7
- project = subject.parse("name")
8
- project.artifact_id.should == "name"
9
- end
6
+ describe "#parse" do
7
+ it "can read the project name" do
8
+ project = subject.parse("name")
9
+ project.artifact_id.should == "name"
10
+ end
10
11
 
11
- it "can read the group and artifact ids" do
12
- project = subject.parse("com.example:name")
13
- project.artifact_id.should == "name"
14
- project.group_id.should == "com.example"
15
- end
12
+ it "can read the group and artifact ids" do
13
+ project = subject.parse("com.example:name")
14
+ project.artifact_id.should == "name"
15
+ project.group_id.should == "com.example"
16
+ end
16
17
 
17
- it "can read the group and artifact ids and version and type" do
18
- project = subject.parse("com.example:name:1.0.0-rc2:war")
19
- project.artifact_id.should == "name"
20
- project.group_id.should == "com.example"
21
- project.version.should == "1.0.0-rc2"
22
- project.type.should == "war"
23
- end
18
+ it "can read the group and artifact ids and version and type" do
19
+ project = subject.parse("com.example:name:1.0.0-rc2:war")
20
+ project.artifact_id.should == "name"
21
+ project.group_id.should == "com.example"
22
+ project.version.should == "1.0.0-rc2"
23
+ project.type.should == "war"
24
+ end
24
25
 
25
- it "can read the group and artifact ids and version" do
26
- project = subject.parse("com.example:name:1.0.0-rc2")
27
- project.artifact_id.should == "name"
28
- project.group_id.should == "com.example"
29
- project.version.should == "1.0.0-rc2"
30
- end
26
+ it "can read the group and artifact ids and version" do
27
+ project = subject.parse("com.example:name:1.0.0-rc2")
28
+ project.artifact_id.should == "name"
29
+ project.group_id.should == "com.example"
30
+ project.version.should == "1.0.0-rc2"
31
+ end
31
32
 
32
- it "can read the artifact id and version" do
33
- project = subject.parse("name:1.0.0-SNAPSHOT")
34
- project.artifact_id.should == "name"
35
- project.version.should == "1.0.0-SNAPSHOT"
36
- end
33
+ it "can read the artifact id and version" do
34
+ project = subject.parse("name:1.0.0-SNAPSHOT")
35
+ project.artifact_id.should == "name"
36
+ project.version.should == "1.0.0-SNAPSHOT"
37
+ end
37
38
 
38
- it "can read the artifact id and type" do
39
- project = subject.parse("name:jar")
40
- project.artifact_id.should == "name"
41
- project.type.should == "jar"
42
- end
39
+ it "can read the artifact id and type" do
40
+ project = subject.parse("name:jar")
41
+ project.artifact_id.should == "name"
42
+ project.type.should == "jar"
43
+ end
43
44
 
44
- it "can read the artifact id, version and type" do
45
- project = subject.parse("name:1.0.0-rc2:war")
46
- project.artifact_id.should == "name"
47
- project.version.should == "1.0.0-rc2"
48
- project.type.should == "war"
45
+ it "can read the artifact id, version and type" do
46
+ project = subject.parse("name:1.0.0-rc2:war")
47
+ project.artifact_id.should == "name"
48
+ project.version.should == "1.0.0-rc2"
49
+ project.type.should == "war"
50
+ end
49
51
  end
50
52
 
51
- it "can parse the scope" do
52
- project = subject.parse_scoped_coordinates("name:1.0.0-rc2:war:runtime")
53
- project.artifact_id.should == "name"
54
- project.scope.should == "runtime"
53
+ describe "#parse_scoped_coordinates" do
54
+ it "can parse the scope" do
55
+ project = subject.parse_scoped_coordinates("name:1.0.0-rc2:war:runtime")
56
+ project.artifact_id.should == "name"
57
+ project.scope.should == "runtime"
55
58
 
56
- project = subject.parse_scoped_coordinates("com.weblogism:name:1.0.0-rc2:jar:runtime")
57
- project.artifact_id.should == "name"
58
- project.scope.should == "runtime"
59
- end
59
+ project = subject.parse_scoped_coordinates("com.weblogism:name:1.0.0-rc2:jar:runtime")
60
+ project.artifact_id.should == "name"
61
+ project.scope.should == "runtime"
62
+ end
63
+
64
+ it "can parse the junit dependency" do
65
+ project = subject.parse_scoped_coordinates("junit:junit:4.10:jar:test")
66
+ project.group_id.should == "junit"
67
+ project.artifact_id.should == "junit"
68
+ project.version.should == "4.10"
69
+ project.type.should == "jar"
70
+ project.scope.should == "test"
71
+ end
72
+
73
+ it "can parse the java EE dependency" do
74
+ project = subject.parse_scoped_coordinates("javax:javaee-web-api:6.0:jar:provided")
75
+ project.group_id.should == "javax"
76
+ project.artifact_id.should == "javaee-web-api"
77
+ project.version.should == "6.0"
78
+ project.type.should == "jar"
79
+ project.scope.should == "provided"
80
+
81
+ end
60
82
 
61
- it "can parse the junit dependency" do
62
- project = subject.parse_scoped_coordinates("junit:junit:4.10:jar:test")
63
- project.group_id.should == "junit"
64
- project.artifact_id.should == "junit"
65
- project.version.should == "4.10"
66
- project.type.should == "jar"
67
- project.scope.should == "test"
83
+ it "can parse a dependency without scope" do
84
+ project = subject.parse_scoped_coordinates("junit:junit:4.10:jar")
85
+ project.group_id.should == "junit"
86
+ project.artifact_id.should == "junit"
87
+ project.version.should == "4.10"
88
+ project.type.should == "jar"
89
+ project.scope.should be_nil
90
+ end
68
91
  end
69
92
  end
@@ -0,0 +1 @@
1
+ Test
@@ -0,0 +1,30 @@
1
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
2
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4
+ <modelVersion>4.0.0</modelVersion>
5
+
6
+ <groupId>com.weblogism</groupId>
7
+ <artifactIdd>dummy</artifactIdd>
8
+ <version>1.0.0-SNAPSHOT</version>
9
+
10
+ <properties>
11
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12
+ </properties>
13
+
14
+ <dependencies>
15
+ </dependencies>
16
+
17
+ <build>
18
+ <plugins>
19
+ <plugin>
20
+ <artifactId>maven-compiler-plugin</artifactId>
21
+ <version>2.3.2</version>
22
+ <configuration>
23
+ <source>1.6</source>
24
+ <target>1.6</target>
25
+ </configuration>
26
+ </plugin>
27
+ </plugins>
28
+ </build>
29
+
30
+ </project>
@@ -87,5 +87,14 @@ module Mvnizer
87
87
  subject.run(options)
88
88
  end
89
89
 
90
+ it "calls the add command when adding a dependency" do
91
+ options = { command:"add", name: "junit" }
92
+
93
+ Command::AddDependency.should_receive(:new).and_return(search)
94
+ search.should_receive(:run).with(options)
95
+
96
+ subject.run(options)
97
+ end
98
+
90
99
  end
91
100
  end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ module Mvnizer
4
+ describe Project do
5
+
6
+ describe "#package_name" do
7
+ it "returns the package name based on coordinates" do
8
+ project = Project.new("foo", "bar", nil, nil)
9
+ project.package_name.should == "foo.bar"
10
+ end
11
+
12
+ it "ignores nil group id" do
13
+ project = Project.new(nil, "bar", nil, nil)
14
+ project.package_name.should == "bar"
15
+ end
16
+
17
+ it "removes invalid characters in package name" do
18
+ project = Project.new("f-oo", "b-ar", nil, nil)
19
+ project.package_name.should == "foo.bar"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -12,13 +12,6 @@ module Mvnizer
12
12
  let (:file) { double("file") }
13
13
  subject { Dummy.new }
14
14
 
15
- # Make use of fakefs explicit by using activate! / deactivate!
16
- before do
17
- FakeFS.activate!
18
- FileUtils.mkdir("foobar")
19
- FileUtils.touch("dummy.txt.erb")
20
- end
21
-
22
15
  describe "#create_dir" do
23
16
  it "creates a list of directories" do
24
17
  subject.create_dir("/tmp/blah/blah", "/tmp/foo/bar")
@@ -29,12 +22,22 @@ module Mvnizer
29
22
 
30
23
  describe "#generate_file" do
31
24
  it "generates a file from a template into a given directory" do
25
+
26
+ # This checks ERB is called properly.
32
27
  ERB.should_receive(:new).and_return(erb)
33
28
  binding.should_receive(:get_binding)
34
- erb.should_receive(:result).and_return("")
35
- subject.generate_file("dummy.txt.erb", "foobar/dummy.txt", binding)
29
+ erb.should_receive(:result).and_return("Blah")
30
+
31
+ # This checks that the template is being read
32
+ File.should_receive(:open).with("dummy.txt.erb", "r").and_return(file)
33
+ file.should_receive(:read)
34
+
35
+ # This checks that the output is being written.
36
+ f = double("output_file")
37
+ File.should_receive(:open).with("foobar/dummy.txt", "w").and_yield(f)
38
+ f.should_receive(:write).with("Blah")
36
39
 
37
- File.exists?("foobar/dummy.txt").should be_true
40
+ subject.generate_file("dummy.txt.erb", "foobar/dummy.txt", binding)
38
41
  end
39
42
 
40
43
  it "creates the output directory if it does not exist" do
@@ -45,9 +48,23 @@ module Mvnizer
45
48
  end
46
49
  end
47
50
 
48
- after do
49
- FileUtils.rm_rf("foobar")
50
- FakeFS.deactivate!
51
+ describe "#add_dependency" do
52
+
53
+ # This test fails because of sparklemotion/nokogiri#771
54
+ # Remove pending when nokogiri is fixed.
55
+ it "adds a new dependency to an existing pom file" do
56
+ pending("Awaiting sparklemotion/nokogiri#771")
57
+ dependencies = ["org.apache.commons:commons-lang3:3.1:jar",
58
+ "org.apache.commons:commons-collections:3.2.1:jar"]
59
+
60
+ pom_location = File.join(File.dirname(__FILE__), "dummy_pom.xml")
61
+ output = subject.add_dependency(dependencies, pom_location)
62
+ output.should match("<groupId>org.apache.commons</groupId>")
63
+ end
64
+
65
+ it "throws an error if the pom cannot be found in the current directory" do
66
+ lambda { subject.add_dependency(nil) }.should raise_error(FileNotFoundError, "The pom.xml file cannot be found.")
67
+ end
51
68
  end
52
69
  end
53
70
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: mvnizer
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Sébastien Le Callonnec
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-25 00:00:00.000000000 Z
12
+ date: 2012-09-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -28,66 +28,66 @@ dependencies:
28
28
  prerelease: false
29
29
  type: :runtime
30
30
  - !ruby/object:Gem::Dependency
31
- name: rspec
31
+ name: nokogiri
32
32
  version_requirements: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - ~>
35
35
  - !ruby/object:Gem::Version
36
- version: 2.11.0
36
+ version: 1.5.5
37
37
  none: false
38
38
  requirement: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - ~>
41
41
  - !ruby/object:Gem::Version
42
- version: 2.11.0
42
+ version: 1.5.5
43
43
  none: false
44
44
  prerelease: false
45
- type: :development
45
+ type: :runtime
46
46
  - !ruby/object:Gem::Dependency
47
- name: rspec-mocks
47
+ name: rspec
48
48
  version_requirements: !ruby/object:Gem::Requirement
49
49
  requirements:
50
50
  - - ~>
51
51
  - !ruby/object:Gem::Version
52
- version: 2.11.2
52
+ version: 2.11.0
53
53
  none: false
54
54
  requirement: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - ~>
57
57
  - !ruby/object:Gem::Version
58
- version: 2.11.2
58
+ version: 2.11.0
59
59
  none: false
60
60
  prerelease: false
61
61
  type: :development
62
62
  - !ruby/object:Gem::Dependency
63
- name: fakefs
63
+ name: rspec-mocks
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: 0.4.0
68
+ version: 2.11.2
69
69
  none: false
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ~>
73
73
  - !ruby/object:Gem::Version
74
- version: 0.4.0
74
+ version: 2.11.2
75
75
  none: false
76
76
  prerelease: false
77
77
  type: :development
78
78
  - !ruby/object:Gem::Dependency
79
- name: nokogiri
79
+ name: fakefs
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - ~>
83
83
  - !ruby/object:Gem::Version
84
- version: 1.5.5
84
+ version: 0.4.0
85
85
  none: false
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - ~>
89
89
  - !ruby/object:Gem::Version
90
- version: 1.5.5
90
+ version: 0.4.0
91
91
  none: false
92
92
  prerelease: false
93
93
  type: :development
@@ -133,6 +133,7 @@ extra_rdoc_files:
133
133
  - README.md
134
134
  files:
135
135
  - .rspec
136
+ - CHANGELOG.md
136
137
  - Gemfile
137
138
  - Gemfile.lock
138
139
  - LICENSE.txt
@@ -147,6 +148,7 @@ files:
147
148
  - features/support/env.rb
148
149
  - lib/mvnizer.rb
149
150
  - lib/mvnizer/commands.rb
151
+ - lib/mvnizer/commands/add_dependency.rb
150
152
  - lib/mvnizer/commands/new_project.rb
151
153
  - lib/mvnizer/commands/new_war_project.rb
152
154
  - lib/mvnizer/commands/project_factory.rb
@@ -154,24 +156,31 @@ files:
154
156
  - lib/mvnizer/configuration.rb
155
157
  - lib/mvnizer/coordinate_parser.rb
156
158
  - lib/mvnizer/erb_helper.rb
159
+ - lib/mvnizer/exceptions.rb
157
160
  - lib/mvnizer/mvnize.rb
158
161
  - lib/mvnizer/project.rb
159
162
  - lib/mvnizer/task_helper.rb
160
163
  - lib/mvnizer/templates/_dependency.xml.erb
161
164
  - lib/mvnizer/templates/pom.xml.erb
165
+ - lib/mvnizer/templates/war/ExampleServlet.java.erb
166
+ - lib/mvnizer/templates/war/index.jsp.erb
162
167
  - lib/mvnizer/templates/web.xml.erb
163
168
  - lib/mvnizer/version.rb
164
169
  - mvnizer.gemspec
165
170
  - ragel/coordinate.rb
166
171
  - ragel/coordinate.rl
167
172
  - ragel/test_coord.rb
173
+ - spec/commands/add_dependency_spec.rb
168
174
  - spec/commands/new_project_spec.rb
169
175
  - spec/commands/new_war_project_spec.rb
170
176
  - spec/commands/project_factory_spec.rb
171
177
  - spec/commands/search_artefact_spec.rb
172
178
  - spec/configuration_spec.rb
173
179
  - spec/coordinate_parser_spec.rb
180
+ - spec/dummy.txt.erb
181
+ - spec/dummy_pom.xml
174
182
  - spec/mvnize_spec.rb
183
+ - spec/project_spec.rb
175
184
  - spec/spec_helper.rb
176
185
  - spec/task_helper_spec.rb
177
186
  homepage: http://github.com/tychobrailleur/mvnizer