mvnizer 0.0.3 → 0.0.4

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.
@@ -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