jiraa 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ coverage
19
+ *.idea
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
@@ -0,0 +1,6 @@
1
+ = jiraa
2
+
3
+ Describe your project here
4
+
5
+ :include:jiraa.rdoc
6
+
@@ -0,0 +1,44 @@
1
+ require 'rake/clean'
2
+ require 'rubygems'
3
+ require 'rubygems/package_task'
4
+ require 'rdoc/task'
5
+ require 'cucumber'
6
+ require 'cucumber/rake/task'
7
+ Rake::RDocTask.new do |rd|
8
+ rd.main = "README.rdoc"
9
+ rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
10
+ rd.title = 'Your application title'
11
+ end
12
+
13
+ spec = eval(File.read('jiraa.gemspec'))
14
+
15
+ Gem::PackageTask.new(spec) do |pkg|
16
+ end
17
+ CUKE_RESULTS = 'results.html'
18
+ CLEAN << CUKE_RESULTS
19
+ desc 'Run features'
20
+ Cucumber::Rake::Task.new(:features) do |t|
21
+ opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
22
+ opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
23
+ t.cucumber_opts = opts
24
+ t.fork = false
25
+ end
26
+
27
+ desc 'Run features tagged as work-in-progress (@wip)'
28
+ Cucumber::Rake::Task.new('features:wip') do |t|
29
+ tag_opts = ' --tags ~@pending'
30
+ tag_opts = ' --tags @wip'
31
+ t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
32
+ t.fork = false
33
+ end
34
+
35
+ task :cucumber => :features
36
+ task 'cucumber:wip' => 'features:wip'
37
+ task :wip => 'features:wip'
38
+ require 'rake/testtask'
39
+ Rake::TestTask.new do |t|
40
+ t.libs << "test"
41
+ t.test_files = FileList['test/*_test.rb']
42
+ end
43
+
44
+ task :default => [:test,:features]
@@ -0,0 +1,232 @@
1
+ #!/usr/bin/env ruby
2
+ require 'gli'
3
+ require 'jira_client'
4
+ require 'yaml'
5
+ begin # XXX: Remove this begin/rescue before distributing your app
6
+ require 'jiraa'
7
+ rescue LoadError
8
+ STDERR.puts "In development, you need to use `bundle exec bin/jiraa` to run your app"
9
+ STDERR.puts "At install-time, RubyGems will make sure lib, etc. are in the load path"
10
+ STDERR.puts "Feel free to remove this message from bin/jiraa now"
11
+ exit 64
12
+ end
13
+
14
+ include GLI::App
15
+
16
+ program_desc 'Command line application for accessing the Jira 5 API'
17
+
18
+ version Jiraa::VERSION
19
+
20
+ desc 'The base URL of your Jira instance (e.g. https://jira.company.com)'
21
+ arg_name 'URL'
22
+ flag [:U,:url]
23
+
24
+ desc 'The port your Jira instance is running on'
25
+ arg_name 'PORT'
26
+ flag [:P, :port]
27
+
28
+ desc 'Your Jira username (if using HTTP basic authentication)'
29
+ arg_name 'USERNAME'
30
+ flag [:u,:username]
31
+
32
+ desc 'Your Jira password (if using HTTP basic authentication)'
33
+ arg_name 'PASSWORD'
34
+ flag [:p,:password]
35
+
36
+ desc 'Your Jira certificate (if using SSL authentication)'
37
+ arg_name 'CERTIFICATE'
38
+ flag [:C,:certificate]
39
+
40
+ desc 'Resolve an issue'
41
+ arg_name 'ISSUE'
42
+ command :resolve do |c|
43
+ c.desc 'Specify the issue resolution'
44
+ c.default_value 'Fixed'
45
+ c.arg_name 'RESOLUTION'
46
+ c.flag [:a, "resolve-as"]
47
+
48
+ c.desc 'Comment on the resolution'
49
+ c.arg_name 'COMMENT'
50
+ c.flag [:c, :comment]
51
+
52
+ c.desc 'Log work on the issue before resolving'
53
+ c.arg_name 'TIME'
54
+ c.flag [:l, "log-work"]
55
+
56
+ c.desc 'Set remaining estimate to zero'
57
+ c.switch :Z
58
+
59
+ c.action do |global_options,options,args|
60
+ help_now! "Missing issue key" if args.length == 0
61
+ params = {
62
+ :as => options[:a]
63
+ }
64
+ params[:comment] = options[:comment] unless options[:comment].nil?
65
+ if options["log-work"]
66
+ if options[:Z]
67
+ params = {
68
+ :remaining_estimate => 0
69
+ }
70
+ end
71
+ JiraClient.create_worklog args[0], options["log-work"], params
72
+ puts "Logged #{options['log-work']} on #{args[0]}"
73
+ end
74
+ JiraClient.resolve_issue args[0], params
75
+ puts "Resolved #{args[0]} as #{options[:a]}"
76
+ end
77
+ end
78
+
79
+ desc 'Close an issue'
80
+ arg_name 'ISSUE'
81
+ command :close do |c|
82
+ c.desc 'Comment on the resolution'
83
+ c.arg_name 'COMMENT'
84
+ c.flag [:c, :comment]
85
+
86
+ c.action do |global_options,options,args|
87
+ help_now! "Missing issue key" if args.length == 0
88
+ params = {}
89
+ params[:comment] = options[:comment] unless options[:comment].nil?
90
+ JiraClient.close_issue args[0], params
91
+ end
92
+ end
93
+
94
+ desc 'Re-open an issue'
95
+ arg_name 'ISSUE'
96
+ command :reopen do |c|
97
+ c.desc 'Comment on the resolution'
98
+ c.arg_name 'COMMENT'
99
+ c.flag [:c, :comment]
100
+
101
+ c.action do |global_options,options,args|
102
+ help_now! "Missing issue key" if args.length == 0
103
+ params = {}
104
+ params[:comment] = options[:comment] unless options[:comment].nil?
105
+ JiraClient.reopen_issue args[0], params
106
+ puts "#{args[0]} re-opened"
107
+ end
108
+ end
109
+
110
+ desc 'Start progress on an issue'
111
+ arg_name 'ISSUE'
112
+ command "start-progress" do |c|
113
+ c.action do |global_options,options,args|
114
+ help_now! "Missing issue key" if args.length == 0
115
+ JiraClient.start_progress_on_issue args[0]
116
+ "Progress started on #{args[0]}"
117
+ end
118
+ end
119
+
120
+ desc 'Log work on an issue'
121
+ arg_name 'ISSUE TIME'
122
+ command "log-work" do |c|
123
+ c.desc 'Comment on the resolution'
124
+ c.arg_name 'COMMENT'
125
+ c.flag [:c, :comment]
126
+
127
+ c.desc 'Set remaining estimate'
128
+ c.arg_name 'TIME'
129
+ c.flag [:r, "remaining-estimate"]
130
+
131
+ c.action do |global_options, options, args|
132
+ help_now! "Missing issue key" if args.length == 0
133
+ help_now! "Missing time" if args.length == 1
134
+ params = {}
135
+ params[:comment] = options[:comment] unless options[:comment].nil?
136
+ params[:remaining_estimate] = options["remaining-estimate"] unless options["remaining-estimate"].nil?
137
+ JiraClient.create_worklog(args[0], args[1], params)
138
+ print "Logged #{args[1]} on #{args[0]}"
139
+ puts " and set remaining estimate to #{params[:remaining_estimate]}" if params.has_key? :remaining_estimate
140
+ end
141
+ end
142
+
143
+ desc 'Display information about the Jira server'
144
+ command :server do |c|
145
+ c.action do |global_options,options,args|
146
+ info = JiraClient.server_info
147
+ puts "Server: #{info.server_title}"
148
+ puts "URL: #{info.base_url}"
149
+ puts "Version: #{info.version}"
150
+ end
151
+ end
152
+
153
+ desc 'Display detailed information about an issue'
154
+ arg_name 'ISSUE'
155
+ command :show do |c|
156
+ c.action do |global_options,options,args|
157
+ help_now! "Missing issue key" if args.length == 0
158
+ issue = JiraClient.find_issue_by_key(args[0], :fields => [:summary, :status, :description])
159
+ header = "#{issue.key}\t#{issue.summary}"
160
+ puts header
161
+ puts "Status: #{issue.status.name}"
162
+ puts
163
+ puts
164
+ puts "#{issue.description}"
165
+ end
166
+ end
167
+
168
+ desc 'Search for issues using JQL'
169
+ arg_name 'JQL'
170
+ command :search do |c|
171
+ c.action do |global_options,options,args|
172
+ help_now! "Missing JQL statement" if args.length == 0
173
+ issues = JiraClient.find_issues(:jql => args[0], :fields => [:summary, :status])
174
+ issues.each do |issue|
175
+ puts "#{issue.key}\t#{issue.summary}"
176
+ end
177
+ end
178
+ end
179
+
180
+ pre do |global,command,options,args|
181
+ config = load_config(global)
182
+ configure_client(config)
183
+ true
184
+ end
185
+
186
+ def load_config(global_config)
187
+ config_filename = File.join(ENV['HOME'], ".jiraa")
188
+
189
+ config = if File.exists?(config_filename)
190
+ read_config_file(config_filename)
191
+ else
192
+ create_config_file(config_filename)
193
+ end
194
+
195
+ config.merge! global_config
196
+ end
197
+
198
+ def read_config_file(filename)
199
+ YAML.load_file(filename) || {}
200
+ end
201
+
202
+ def create_config_file(filename)
203
+ File.open(filename, 'w') do |file|
204
+ file.write <<-EOF
205
+ ---
206
+ # Enter the URL of your Jira instance here:
207
+ # url: https://jira.example.com
208
+
209
+ # If your Jira server uses HTTP basic authentication then fill in your username and password:
210
+ # username: my_username
211
+ # password: my_password
212
+
213
+ # If your Jira server users SSL certificate authentication then provide a path to your certificate:
214
+ # certificate: /usr/local/certificates/my_cert.pem
215
+ EOF
216
+ {}
217
+ end
218
+ end
219
+
220
+ def configure_client(config)
221
+ JiraClient.configure do |c|
222
+ c.base_url = config["url"]
223
+ c.certificate = config["certificate"]
224
+ c.username = config["username"]
225
+ c.password = config["password"]
226
+ c.port = config["port"]
227
+ c.proxy = ENV['https_proxy']
228
+ c.api_path = "/jira/rest/api/2"
229
+ end
230
+ end
231
+
232
+ exit run(ARGV)
@@ -0,0 +1,8 @@
1
+ Feature: My bootstrapped app kinda works
2
+ In order to get going on coding my awesome app
3
+ I want to have aruba and cucumber setup
4
+ So I don't have to do it myself
5
+
6
+ Scenario: App just runs
7
+ When I get help for "jiraa"
8
+ Then the exit status should be 0
@@ -0,0 +1,6 @@
1
+ When /^I get help for "([^"]*)"$/ do |app_name|
2
+ @app_name = app_name
3
+ step %(I run `#{app_name} help`)
4
+ end
5
+
6
+ # Add more step definitions here
@@ -0,0 +1,15 @@
1
+ require 'aruba/cucumber'
2
+
3
+ ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
4
+ LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
5
+
6
+ Before do
7
+ # Using "announce" causes massive warnings on 1.9.2
8
+ @puts = true
9
+ @original_rubylib = ENV['RUBYLIB']
10
+ ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
11
+ end
12
+
13
+ After do
14
+ ENV['RUBYLIB'] = @original_rubylib
15
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jiraa/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "jiraa"
8
+ spec.version = Jiraa::VERSION
9
+ spec.authors = ["Matthew Williams"]
10
+ spec.email = ["m.williams@me.com"]
11
+ spec.description = %q{A CLI for the Jira 5 REST API}
12
+ spec.summary = %q{A CLI for the Jira 5 REST API...}
13
+ spec.homepage = "https://github.com/mrwillihog/jiraa"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "aruba"
24
+ spec.add_development_dependency "cucumber"
25
+
26
+ spec.add_runtime_dependency "jira_client", "1.0.0"
27
+ spec.add_runtime_dependency "gli", "2.5.6"
28
+ end
@@ -0,0 +1,5 @@
1
+ = jiraa
2
+
3
+ Generate this with
4
+ jiraa rdoc
5
+ After you have described your command line interface
@@ -0,0 +1,4 @@
1
+ require 'jiraa/version.rb'
2
+
3
+ # Add requires for other files you add to your project here, so
4
+ # you just need to require this one file in your bin file
@@ -0,0 +1,3 @@
1
+ module Jiraa
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class DefaultTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def teardown
9
+ end
10
+
11
+ def test_the_truth
12
+ assert true
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ require 'test/unit'
2
+
3
+ # Add test libraries you want to use here, e.g. mocha
4
+
5
+ class Test::Unit::TestCase
6
+
7
+ # Add global extensions to the test case class here
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jiraa
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matthew Williams
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: aruba
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: cucumber
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: jira_client
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.0.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.0.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: gli
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 2.5.6
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 2.5.6
110
+ description: A CLI for the Jira 5 REST API
111
+ email:
112
+ - m.williams@me.com
113
+ executables:
114
+ - jiraa
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - Gemfile
120
+ - Gemfile.lock
121
+ - README.rdoc
122
+ - Rakefile
123
+ - bin/jiraa
124
+ - features/jiraa.feature
125
+ - features/step_definitions/jiraa_steps.rb
126
+ - features/support/env.rb
127
+ - jiraa.gemspec
128
+ - jiraa.rdoc
129
+ - lib/jiraa.rb
130
+ - lib/jiraa/version.rb
131
+ - test/default_test.rb
132
+ - test/test_helper.rb
133
+ homepage: https://github.com/mrwillihog/jiraa
134
+ licenses:
135
+ - MIT
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ! '>='
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 1.8.23
155
+ signing_key:
156
+ specification_version: 3
157
+ summary: A CLI for the Jira 5 REST API...
158
+ test_files:
159
+ - features/jiraa.feature
160
+ - features/step_definitions/jiraa_steps.rb
161
+ - features/support/env.rb
162
+ - test/default_test.rb
163
+ - test/test_helper.rb
164
+ has_rdoc: