mvn-plugin-config 0.0.1

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/README.markdown ADDED
@@ -0,0 +1,19 @@
1
+ MvnPluginConfig
2
+ ========
3
+
4
+ Opens list of maven plugins in browser's window.
5
+
6
+ Installation:
7
+ ------------
8
+
9
+ Install gem:
10
+
11
+ gem install mvn-plugin-config
12
+
13
+ Use it:
14
+
15
+ mvn-plugin-config
16
+
17
+ It will start sinatra application on port 5678 and load start page in the browser.
18
+
19
+ Alexander Shvets, alexander.shvets@gmail.com
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gemspec|
8
+ gemspec.name = "mvn-plugin-config"
9
+ gemspec.summary = "Opens list of maven plugins in browser's window."
10
+ gemspec.description = "Opens list of maven plugins in browser's window with the ability to see configuration for each of plugins."
11
+ gemspec.email = "alexander.shvets@gmail.com"
12
+ gemspec.homepage = "http://github.com/shvets/mvn-plugin-config"
13
+ gemspec.authors = ["Alexander Shvets"]
14
+ gemspec.files = FileList["CHANGES", "mvn-plugin-config.gemspec", "Rakefile", "README", "VERSION", "lib/**/*", "bin/**", "public/**", "views/**"]
15
+
16
+ gemspec.executables = ['mvn-plugin-config']
17
+ gemspec.requirements = ["none"]
18
+ gemspec.bindir = "bin"
19
+ end
20
+ rescue LoadError
21
+ puts "Jeweler not available. Install it for jeweler-related tasks with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
22
+ end
23
+
24
+ Rake::TestTask.new do |t|
25
+ t.libs << 'lib'
26
+ t.pattern = 'test/**/*_test.rb'
27
+ t.verbose = false
28
+ end
29
+
30
+ task :default => :test
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
5
+
6
+ $:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
7
+
8
+ $KCODE='u'
9
+
10
+ require 'mvn_plugin_config'
11
+
12
+ require 'vegas'
13
+
14
+ trap('INT') { puts "Program was interrupted..."; exit }
15
+
16
+ Vegas::Runner.new(MvnPluginConfig::App, 'mvn_plugin_config')
17
+
@@ -0,0 +1,6 @@
1
+ @ECHO OFF
2
+ IF NOT "%~f0" == "~f0" GOTO :WinNT
3
+ @"ruby.exe" "C:/Ruby/ruby-1.9.1/bin/mvn-plugin-config" %1 %2 %3 %4 %5 %6 %7 %8 %9
4
+ GOTO :EOF
5
+ :WinNT
6
+ @"ruby.exe" "%~dpn0" %*
@@ -0,0 +1,134 @@
1
+ require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
2
+
3
+ require 'sinatra/base'
4
+ require 'haml'
5
+ require 'sass'
6
+ require 'zip/zip'
7
+ require 'nokogiri'
8
+
9
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__))))
10
+
11
+ require 'partial'
12
+ require 'directory_scanner'
13
+ require 'plugin_info'
14
+ require 'mojo_info'
15
+
16
+ module MvnPluginConfig
17
+ class App < Sinatra::Base
18
+ MAVEN_REPOSITORY = "#{ENV['HOME']}/.m2/repository"
19
+
20
+ set :haml, {:format => :html5, :attr_wrapper => '"'}
21
+
22
+ # get '/javascripts/*' do
23
+ # open("#{File.dirname(__FILE__)}/../public/javascripts/#{params[:splat]}")
24
+ # end
25
+
26
+ get '/stylesheet.css' do
27
+ headers 'Content-Type' => 'text/css; charset=utf-8'
28
+ sass :stylesheet
29
+ end
30
+
31
+ get '/' do
32
+ haml :index, :locals => {:plugins => collect_plugins_info}
33
+ end
34
+
35
+ get '/*:*:*' do
36
+ plugin_file_content = plugin_file_content(params[:splat][0], params[:splat][1], params[:splat][2])
37
+
38
+ haml :description, :locals => {:mojos => collect_mojos_info(plugin_file_content)}
39
+ end
40
+
41
+ private
42
+
43
+ def jar_file_name group_id, artifact_id, version
44
+ "#{MAVEN_REPOSITORY}/#{group_id.gsub('.', '/')}/#{artifact_id}/#{version}/#{artifact_id}-#{version}.jar"
45
+ end
46
+
47
+ def plugin_file_content group_id, artifact_id, version
48
+ plugin_file_content = nil
49
+
50
+ jar_file_name = jar_file_name(group_id, artifact_id, version)
51
+
52
+ Zip::ZipInputStream.open(jar_file_name) do |zis|
53
+ done = false
54
+ while (not done) do
55
+ entry = zis.get_next_entry
56
+ if entry.name == "META-INF/maven/plugin.xml"
57
+ plugin_file_content = zis.read
58
+ done = true
59
+ end
60
+ end
61
+ end
62
+
63
+ plugin_file_content
64
+ end
65
+
66
+ def collect_plugins_info
67
+ plugins = []
68
+
69
+ scanner = DirectoryScanner.new
70
+
71
+ scanner.on_dir do |file, path|
72
+ if file =~ /-plugin$/
73
+ directories = scanner.directories_in_parent(path)
74
+
75
+ directories.each do |version|
76
+ group_id = path[MAVEN_REPOSITORY.length+1..path.length-file.length-2].gsub('/', '.')
77
+ artifact_id = file.gsub('/', '.')
78
+
79
+ jar_file_name = jar_file_name(group_id, artifact_id, version)
80
+
81
+ plugins << PluginInfo.new(group_id, artifact_id, version) if File.exist?(jar_file_name)
82
+ end
83
+ end
84
+ end
85
+
86
+ scanner.scan_subtree(MAVEN_REPOSITORY)
87
+
88
+ plugins
89
+ end
90
+
91
+ def collect_mojos_info content
92
+ mojos = []
93
+
94
+ doc = Nokogiri::XML(content)
95
+
96
+ doc.xpath('//mojos/mojo').each do |node|
97
+ goal = node.xpath('goal')
98
+ description = node.xpath('description')
99
+
100
+ parameters = collect_parameters(node.xpath('parameters'))
101
+ configuration = node.xpath('configuration')
102
+
103
+ mojos << MojoInfo.new(goal, description, parameters, configuration)
104
+ end
105
+
106
+ mojos
107
+ end
108
+
109
+ def collect_parameters(node)
110
+ parameters = []
111
+
112
+ node.children.each do |param_node|
113
+ p "1 #{param_node}"
114
+ if param_node.name == 'parameter'
115
+ p "2"
116
+ parameter = {:name => param_node.xpath('name'), :type => param_node.xpath('type'),
117
+ :required => param_node.xpath('required'), :editable => param_node.xpath('editable'),
118
+ :description => param_node.xpath('description')}
119
+ parameters << parameter
120
+ end
121
+ end
122
+
123
+ parameters
124
+ end
125
+
126
+ helpers do
127
+ include Partial
128
+ include Rack::Utils
129
+
130
+ alias_method :h, :escape_html
131
+ end
132
+ end
133
+ end
134
+
@@ -0,0 +1,48 @@
1
+ class DirectoryScanner
2
+
3
+ def initialize
4
+ @fileAction = nil
5
+ @dirAction = nil
6
+ end
7
+
8
+ def on_file(&action)
9
+ @fileAction = action
10
+ end
11
+
12
+ def on_dir(&action)
13
+ @dirAction = action
14
+ end
15
+
16
+ def directories_in_parent(parentPath)
17
+ directories = []
18
+ Dir.open(parentPath) do |dir|
19
+ for file in dir
20
+ next if file == '.';
21
+ next if file == '..';
22
+ path = parentPath + File::Separator + file
23
+ if File.directory? path
24
+ directories << file
25
+ end
26
+ end
27
+ end
28
+
29
+ directories
30
+ end
31
+
32
+ def scan_subtree(parentPath)
33
+ Dir.open(parentPath) do |dir|
34
+ for file in dir
35
+ next if file == '.';
36
+ next if file == '..';
37
+ path = parentPath + File::Separator + file
38
+ if File.directory? path
39
+ @dirAction.call(file, path) unless @dirAction.nil?
40
+ scan_subtree(path)
41
+ else
42
+ @fileAction.call(file, path) unless @fileAction.nil?
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1 @@
1
+ class MojoInfo < Struct.new(:goal, :description, :parameters, :configuration); end
@@ -0,0 +1,16 @@
1
+ module Partial
2
+ def partial(template, *args)
3
+ template_array = template.to_s.split('/')
4
+ template = template_array[0..-2].join('/') + "/_#{template_array[-1]}"
5
+ options = args.last.is_a?(Hash) ? args.pop : {}
6
+ options.merge!(:layout => false)
7
+ if collection = options.delete(:collection) then
8
+ collection.inject([]) do |buffer, member|
9
+ buffer << haml(:"#{template}", options.merge(:layout =>
10
+ false, :locals => {template_array[-1].to_sym => member}))
11
+ end.join("\n")
12
+ else
13
+ haml(:"#{template}", options)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ class PluginInfo < Struct.new(:group_id, :artifact_id, :version)
2
+
3
+ def full_name
4
+ "#{group_id}:#{artifact_id}:#{version}"
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
2
+
3
+ $:.unshift(File.dirname(__FILE__)) unless
4
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
5
+
6
+ require 'haml'
7
+ require 'sass'
8
+
9
+ require 'mvn_plugin_config/app'
data/lib/start.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'lib/mvn_plugin_config/app'
2
+
3
+ Rack::Handler::Mongrel.run App.new, :Port => 4567
@@ -0,0 +1,55 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{mvn-plugin-config}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Alexander Shvets"]
12
+ s.date = %q{2010-05-28}
13
+ s.default_executable = %q{mvn-plugin-config}
14
+ s.description = %q{Opens list of maven plugins in browser's window with the ability to see configuration for each of plugins.}
15
+ s.email = %q{alexander.shvets@gmail.com}
16
+ s.executables = ["mvn-plugin-config"]
17
+ s.extra_rdoc_files = [
18
+ "README.markdown"
19
+ ]
20
+ s.files = [
21
+ "Rakefile",
22
+ "VERSION",
23
+ "bin/mvn-plugin-config",
24
+ "bin/mvn-plugin-config.bat",
25
+ "lib/mvn_plugin_config.rb",
26
+ "lib/mvn_plugin_config/app.rb",
27
+ "lib/mvn_plugin_config/directory_scanner.rb",
28
+ "lib/mvn_plugin_config/mojo_info.rb",
29
+ "lib/mvn_plugin_config/partial.rb",
30
+ "lib/mvn_plugin_config/plugin_info.rb",
31
+ "lib/start.rb",
32
+ "mvn-plugin-config.gemspec",
33
+ "views/description.haml",
34
+ "views/index.haml",
35
+ "views/layout.haml",
36
+ "views/stylesheet.sass"
37
+ ]
38
+ s.homepage = %q{http://github.com/shvets/mvn-plugin-config}
39
+ s.rdoc_options = ["--charset=UTF-8"]
40
+ s.require_paths = ["lib"]
41
+ s.requirements = ["none"]
42
+ s.rubygems_version = %q{1.3.7}
43
+ s.summary = %q{Opens list of maven plugins in browser's window.}
44
+
45
+ if s.respond_to? :specification_version then
46
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
+ s.specification_version = 3
48
+
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ else
51
+ end
52
+ else
53
+ end
54
+ end
55
+
@@ -0,0 +1,30 @@
1
+ %table#browse_mojos{:border => "0"}
2
+ - mojos.each do |mojo_info|
3
+ %tr
4
+ %td="Goal: #{mojo_info.goal}"
5
+ %tr
6
+ %td="Description: #{mojo_info.description}"
7
+ %tr
8
+ %td="Parameters:"
9
+ %tr
10
+ %td
11
+ %table{:border => "1"}
12
+ - mojo_info.parameters.each do |param|
13
+ %tr
14
+ %td="Name"
15
+ %td="Type"
16
+ %td="Required"
17
+ %td="Editable"
18
+ %td="Description"
19
+ %tr
20
+ %td=param[:name]
21
+ %td=param[:type]
22
+ %td=param[:required]
23
+ %td=param[:editable]
24
+ %td=param[:description]
25
+ %tr
26
+ %td="Configuration:"
27
+ %tr
28
+ %td
29
+ %pre=h mojo_info.configuration
30
+
data/views/index.haml ADDED
@@ -0,0 +1,5 @@
1
+ %table#browse_plugins{:border => "0"}
2
+ - plugins.each do |plugin_info|
3
+ %tr
4
+ %td
5
+ %a{ :href => "/#{plugin_info.full_name}" }=plugin_info.full_name
data/views/layout.haml ADDED
@@ -0,0 +1,12 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{:'http-equiv' => 'Content-Type', :content => 'text/html; charset=UTF-8'}
5
+ %title= "Maven Plugin Config"
6
+ %link{ :href =>"/stylesheet.css", :rel => "stylesheet", :type => "text/css", :media => "screen" }
7
+ %body
8
+ #container
9
+ %p#title=page.page_title if defined?(page.page_title)
10
+ %p
11
+
12
+ = yield
@@ -0,0 +1,62 @@
1
+ body
2
+ :background white
3
+ :text-align left
4
+ :font-family Monaco, Verdana
5
+ :font-size 14px
6
+ :color black
7
+ h1
8
+ :color #97bf0d
9
+ h2
10
+ :font-size 14px
11
+ :font-weight normal
12
+
13
+ #title
14
+ font-weight: bold
15
+
16
+ #channel
17
+ font-style: italic
18
+
19
+ td#name
20
+ :width 550px
21
+
22
+ #description
23
+ :width 900px
24
+
25
+ td#channel
26
+ :width 100px
27
+
28
+ tr#page_browser
29
+ :text-align center
30
+
31
+ #container
32
+ :text-align left
33
+ :margin 0 auto
34
+
35
+ #channel_items
36
+ :width 600px
37
+
38
+ #catalog_items
39
+ :width 1200px
40
+
41
+ #browse_items
42
+ :width 1200px
43
+
44
+ #items
45
+ :width 1000px
46
+
47
+ form
48
+ label
49
+ :display block
50
+ :color #fff
51
+ input
52
+ :width 450px
53
+ :padding 3px
54
+ :font-size 14px
55
+ textarea
56
+ :width 460px
57
+ :height 150px
58
+ :font-size 14px
59
+ :font-family Monaco, Verdana
60
+ :padding 3px
61
+ span
62
+ :color #fff
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mvn-plugin-config
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Alexander Shvets
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-05-28 00:00:00 -04:00
19
+ default_executable: mvn-plugin-config
20
+ dependencies: []
21
+
22
+ description: Opens list of maven plugins in browser's window with the ability to see configuration for each of plugins.
23
+ email: alexander.shvets@gmail.com
24
+ executables:
25
+ - mvn-plugin-config
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.markdown
30
+ files:
31
+ - Rakefile
32
+ - VERSION
33
+ - bin/mvn-plugin-config
34
+ - bin/mvn-plugin-config.bat
35
+ - lib/mvn_plugin_config.rb
36
+ - lib/mvn_plugin_config/app.rb
37
+ - lib/mvn_plugin_config/directory_scanner.rb
38
+ - lib/mvn_plugin_config/mojo_info.rb
39
+ - lib/mvn_plugin_config/partial.rb
40
+ - lib/mvn_plugin_config/plugin_info.rb
41
+ - lib/start.rb
42
+ - mvn-plugin-config.gemspec
43
+ - views/description.haml
44
+ - views/index.haml
45
+ - views/layout.haml
46
+ - views/stylesheet.sass
47
+ - README.markdown
48
+ has_rdoc: true
49
+ homepage: http://github.com/shvets/mvn-plugin-config
50
+ licenses: []
51
+
52
+ post_install_message:
53
+ rdoc_options:
54
+ - --charset=UTF-8
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ requirements:
76
+ - none
77
+ rubyforge_project:
78
+ rubygems_version: 1.3.7
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: Opens list of maven plugins in browser's window.
82
+ test_files: []
83
+