mosespa 1.2.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +4 -0
- data/Gemfile.lock +30 -0
- data/README.md +15 -1
- data/bin/mosespa +16 -8
- data/lib/m.rb +109 -0
- data/lib/mosespa.rb +2 -110
- data/lib/search.rb +43 -0
- data/mosespa.gemspec +2 -1
- metadata +30 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd0208471aa893e7d2d538489efb87b67017987a
|
4
|
+
data.tar.gz: b8eb649271ee7e8be1dd3177119c891625c9ec62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e93f05829781190b5e9af8df9918e9eb42be50c814c3878ac60a612efd64bc7819d41ffae5bc7f3360efab0a8ae6a3ef4a19495e3c387ca7809d730d553b1102
|
7
|
+
data.tar.gz: ec1bf09581306fd832f169c4473af9b37539a9d335356943cd4ce56629b7696819948462d99e4b7ab54d5125cc7028b494c0257924d58120ff7e478610330cc7
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
mosespa (1.4.2)
|
5
|
+
colorize
|
6
|
+
jira-ruby
|
7
|
+
table_print
|
8
|
+
trollop
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
activesupport (3.2.17)
|
14
|
+
i18n (~> 0.6, >= 0.6.4)
|
15
|
+
multi_json (~> 1.0)
|
16
|
+
colorize (0.7.3)
|
17
|
+
i18n (0.6.9)
|
18
|
+
jira-ruby (0.1.10)
|
19
|
+
activesupport
|
20
|
+
oauth
|
21
|
+
multi_json (1.10.1)
|
22
|
+
oauth (0.4.7)
|
23
|
+
table_print (1.5.2)
|
24
|
+
trollop (2.0)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
mosespa!
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
mosespa
|
2
2
|
=======
|
3
3
|
|
4
|
+
[](http://badge.fury.io/rb/mosespa)
|
5
|
+
[](https://gemnasium.com/kamaradclimber/mosespa)
|
6
|
+
|
4
7
|
mosespa is very small lib on top of jira-ruby gem to interact with jira on command-line.
|
5
8
|
This uses the REST interface of jira.
|
6
9
|
|
@@ -37,7 +40,7 @@ To see more information such as comments : ```mosespa show COOK-2878 --verbose``
|
|
37
40
|
To add a comment:
|
38
41
|
```mosespa comment COOK-2878 It does not merge properly can you rebase```
|
39
42
|
|
40
|
-
If some characters
|
43
|
+
If some characters aren't nice to bash:
|
41
44
|
```mosespa comment COOK-2878 "It does not merge properly, could you rebase?"```
|
42
45
|
|
43
46
|
### Creating tickets
|
@@ -58,6 +61,17 @@ To search for any jql:
|
|
58
61
|
|
59
62
|
```mosespa search 'reporter in (currentUser())'```
|
60
63
|
|
64
|
+
If you add search in your config file under named_search section:
|
65
|
+
|
66
|
+
```
|
67
|
+
named_search:
|
68
|
+
mine: assignee = currentUser()
|
69
|
+
watched: watcher = currentUser()
|
70
|
+
```
|
71
|
+
|
72
|
+
you'll be able to search easily with ```mosespa search watched```
|
73
|
+
|
74
|
+
|
61
75
|
Installation
|
62
76
|
------------
|
63
77
|
|
data/bin/mosespa
CHANGED
@@ -20,6 +20,7 @@ global_opts = Trollop::options do
|
|
20
20
|
opt :login, "Set the username to connectio to jira", :short => '-l', :type => String
|
21
21
|
opt :debug, "Output all possible information"
|
22
22
|
opt :config, "Configuration file location", :short => '-f', :default => default_config
|
23
|
+
opt :colorize, "If relevant, add color to output", :short => '-c'
|
23
24
|
stop_on SUB_COMMANDS
|
24
25
|
end
|
25
26
|
|
@@ -65,15 +66,17 @@ options = {
|
|
65
66
|
:site => global_opts[:url] || config['url'],
|
66
67
|
:auth_type => :basic,
|
67
68
|
:context_path => '',
|
68
|
-
:use_ssl =>
|
69
|
+
:use_ssl => config['use_ssl'] || true,
|
70
|
+
:ssl_verify_mode => config['ssl_verify_mode'] || OpenSSL::SSL::VERIFY_PEER,
|
69
71
|
}
|
70
72
|
|
71
73
|
|
72
74
|
client = JIRA::Client.new(options)
|
73
75
|
|
74
76
|
$stderr.puts "Main argument is #{main_arg}" if global_opts[:debug]
|
75
|
-
|
76
|
-
|
77
|
+
|
78
|
+
case cmd
|
79
|
+
when 'show','comment', 'browse'
|
77
80
|
$stderr.puts "Using ticket mode" if global_opts[:debug]
|
78
81
|
begin
|
79
82
|
issue = main_arg
|
@@ -83,7 +86,7 @@ when /[[:alpha:]]+-[[:digit:]]+/ #ticket
|
|
83
86
|
$stderr.puts e.inspect if global_opts[:debug]
|
84
87
|
abort("Invalid issue? (use --debug to have more information)")
|
85
88
|
end
|
86
|
-
when
|
89
|
+
when 'create'
|
87
90
|
$stderr.puts "Using project mode" if global_opts[:debug]
|
88
91
|
begin
|
89
92
|
project_id = main_arg
|
@@ -92,11 +95,16 @@ when /[[:alpha:]]+$/ #project
|
|
92
95
|
$stderr.puts e.inspect if global_opts[:debug]
|
93
96
|
abort("Invalid project?(use --debug to have more information")
|
94
97
|
end
|
95
|
-
|
98
|
+
when 'search'
|
99
|
+
s = Mosespa::Search.new(client, config)
|
96
100
|
begin
|
97
|
-
tickets =
|
101
|
+
tickets = s.search(search_str)
|
98
102
|
rescue JIRA::HTTPError => e
|
99
103
|
$stderr.puts e.inspect if global_opts[:debug]
|
104
|
+
$stderr.puts e.code if global_opts[:debug]
|
105
|
+
$stderr.puts e.response if global_opts[:debug]
|
106
|
+
$stderr.puts e.message if global_opts[:debug]
|
107
|
+
|
100
108
|
abort("No result for this search ?")
|
101
109
|
end
|
102
110
|
end
|
@@ -106,7 +114,7 @@ end
|
|
106
114
|
m = Mosespa::Mosespa.new
|
107
115
|
case cmd
|
108
116
|
when 'show'
|
109
|
-
m.show(ticket, global_opts[:debug], cmd_opts[:verbose])
|
117
|
+
m.show(ticket, global_opts[:debug], cmd_opts[:verbose], global_opts[:colorize] || config['colorize'])
|
110
118
|
when 'comment'
|
111
119
|
m.comment(ticket, comment)
|
112
120
|
when 'create'
|
@@ -114,5 +122,5 @@ when 'create'
|
|
114
122
|
when 'browse'
|
115
123
|
m.browse((options[:site] + '/browse/'+ticket.key))
|
116
124
|
when 'search'
|
117
|
-
|
125
|
+
s.print_search
|
118
126
|
end
|
data/lib/m.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'thread'
|
2
|
+
require 'colorize'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module Mosespa
|
6
|
+
class Mosespa
|
7
|
+
def show(ticket, json, verbose, colorize)
|
8
|
+
p = Puts.new(colorize)
|
9
|
+
if json
|
10
|
+
puts ticket.to_json
|
11
|
+
else
|
12
|
+
puts "#{ticket.key} (#{ticket.status.name}) #{ticket.summary}"
|
13
|
+
if verbose
|
14
|
+
puts ticket.summary
|
15
|
+
ticket.comments.each do |c|
|
16
|
+
p.puts(c.author['name'], c.body)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def browse(url)
|
23
|
+
`#{ENV['BROWSER']} #{url}`
|
24
|
+
end
|
25
|
+
|
26
|
+
def comment(ticket, comment)
|
27
|
+
c = ticket.comments.build
|
28
|
+
c.save({'body' => comment})
|
29
|
+
end
|
30
|
+
|
31
|
+
def create(client, project, summary, description)
|
32
|
+
file = Tempfile.new('mosespa')
|
33
|
+
need_external_editor = summary.nil?
|
34
|
+
if need_external_editor
|
35
|
+
task_type, summary, description = create_get_options(file, project,'Task' ,summary, description)
|
36
|
+
$stderr.puts "Ticket type was: #{task_type}"
|
37
|
+
$stderr.puts "Summary was: #{summary}"
|
38
|
+
end
|
39
|
+
fail "Won't create a ticket without summary" if summary.nil? or summary.empty?
|
40
|
+
t = client.Issue.build
|
41
|
+
request = {'summary' => summary, 'description' => description, 'project' => {'key' => project.key}, 'issuetype' => {'name'=> task_type || 'Task'} }
|
42
|
+
begin
|
43
|
+
resp = t.save!({'fields' =>request})
|
44
|
+
rescue Exception => e
|
45
|
+
$stderr.puts "Error while creating your ticket"
|
46
|
+
$stderr.puts "Your ticket information was saved in #{file.path}" if need_external_editor
|
47
|
+
raise e
|
48
|
+
end
|
49
|
+
puts "Created #{t.key}"
|
50
|
+
file.unlink
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_get_options(file, project, task_type, summary, description)
|
54
|
+
file.write(summary || "Task:")
|
55
|
+
file.write("\n")
|
56
|
+
file.write("\n")
|
57
|
+
file.write(description ||"")
|
58
|
+
file.write("\n")
|
59
|
+
file.write("# Here you can edit the ticket you want to create\n")
|
60
|
+
file.write("# Line starting with a # will be ignored\n")
|
61
|
+
file.write("# The format is the same as a git commit\n")
|
62
|
+
file.write("\n")
|
63
|
+
file.write("# Summary line follows this template : [TaskType]: [Title]\n")
|
64
|
+
file.write("# This means that if you write: Story: Create a prototype of SOA\n")
|
65
|
+
file.write("# You'll get a new story about creating a SOA prototype")
|
66
|
+
file.write("# The summary line is always followed by an empty line and may be followed by a description")
|
67
|
+
file.write("\n\n")
|
68
|
+
file.write("# /* vim: set filetype=gitcommit : */")
|
69
|
+
file.close #need to flush
|
70
|
+
file.open
|
71
|
+
system "$EDITOR #{file.path}"
|
72
|
+
all = file.read.lines.reject {|l| l.start_with? "#"}.map {|l| l.chop}
|
73
|
+
summary = all[0]
|
74
|
+
m = /^(\w+):(.*)/.match(summary)
|
75
|
+
task_type, summary = m.to_a.drop(1) if m
|
76
|
+
|
77
|
+
description = all.drop(2).join("\n")
|
78
|
+
$stderr.puts "Type: #{task_type}"
|
79
|
+
$stderr.puts "summary: #{summary}"
|
80
|
+
$stderr.puts "description: #{description}"
|
81
|
+
file.close
|
82
|
+
[task_type, summary, description]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
class Puts
|
88
|
+
def initialize(colorize)
|
89
|
+
@colorize = colorize
|
90
|
+
@colors = Hash.new
|
91
|
+
@available_colors = Queue.new
|
92
|
+
String.colors
|
93
|
+
.select{ |c| not [:black, :light_black, :white].include? c}
|
94
|
+
.each { |c| @available_colors.push c }
|
95
|
+
end
|
96
|
+
|
97
|
+
def puts(author, text)
|
98
|
+
if @colorize
|
99
|
+
unless @colors.has_key? author
|
100
|
+
a_color = @available_colors.pop
|
101
|
+
@colors[author] = a_color
|
102
|
+
end
|
103
|
+
c = @colors[author]
|
104
|
+
author = author.colorize( c )
|
105
|
+
end
|
106
|
+
$stdout.puts "#{author}: #{text}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/lib/mosespa.rb
CHANGED
@@ -1,110 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'tempfile'
|
4
|
-
|
5
|
-
module Mosespa
|
6
|
-
class Mosespa
|
7
|
-
def show(ticket, json, verbose)
|
8
|
-
p = Puts.new
|
9
|
-
if json
|
10
|
-
puts ticket.to_json
|
11
|
-
else
|
12
|
-
puts "#{ticket.key} (#{ticket.status.name}) #{ticket.summary}"
|
13
|
-
if verbose
|
14
|
-
puts ticket.summary
|
15
|
-
ticket.comments.each do |c|
|
16
|
-
p.puts(c.author['name'], c.body)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def browse(url)
|
23
|
-
`#{ENV['BROWSER']} #{url}`
|
24
|
-
end
|
25
|
-
|
26
|
-
def comment(ticket, comment)
|
27
|
-
c = ticket.comments.build
|
28
|
-
c.save({'body' => comment})
|
29
|
-
end
|
30
|
-
|
31
|
-
def search(tickets, json, verbose)
|
32
|
-
tickets.each { |t| show(t, json, verbose) }
|
33
|
-
end
|
34
|
-
|
35
|
-
def create(client, project, summary, description)
|
36
|
-
file = Tempfile.new('mosespa')
|
37
|
-
need_external_editor = summary.nil?
|
38
|
-
if need_external_editor
|
39
|
-
task_type, summary, description = create_get_options(file, project,'Task' ,summary, description)
|
40
|
-
$stderr.puts "Ticket type was: #{task_type}"
|
41
|
-
$stderr.puts "Summary was: #{summary}"
|
42
|
-
end
|
43
|
-
fail "Won't create a ticket without summary" if summary.nil? or summary.empty?
|
44
|
-
t = client.Issue.build
|
45
|
-
request = {'summary' => summary, 'description' => description, 'project' => {'key' => project.key}, 'issuetype' => {'name'=> task_type || 'Task'} }
|
46
|
-
begin
|
47
|
-
resp = t.save!({'fields' =>request})
|
48
|
-
rescue Exception => e
|
49
|
-
$stderr.puts "Error while creating your ticket"
|
50
|
-
$stderr.puts "Your ticket information was saved in #{file.path}" if need_external_editor
|
51
|
-
raise e
|
52
|
-
end
|
53
|
-
puts "Created #{t.key}"
|
54
|
-
file.unlink
|
55
|
-
end
|
56
|
-
|
57
|
-
def create_get_options(file, project, task_type, summary, description)
|
58
|
-
file.write(summary || "Task:")
|
59
|
-
file.write("\n")
|
60
|
-
file.write("\n")
|
61
|
-
file.write(description ||"")
|
62
|
-
file.write("\n")
|
63
|
-
file.write("# Here you can edit the ticket you want to create\n")
|
64
|
-
file.write("# Line starting with a # will be ignored\n")
|
65
|
-
file.write("# The format is the same as a git commit\n")
|
66
|
-
file.write("\n")
|
67
|
-
file.write("# Summary line follows this template : [TaskType]: [Title]\n")
|
68
|
-
file.write("# This means that if you write: Story: Create a prototype of SOA\n")
|
69
|
-
file.write("# You'll get a new story about creating a SOA prototype")
|
70
|
-
file.write("# The summary line is always followed by an empty line and may be followed by a description")
|
71
|
-
file.write("\n\n")
|
72
|
-
file.write("# /* vim: set filetype=gitcommit : */")
|
73
|
-
file.close #need to flush
|
74
|
-
file.open
|
75
|
-
system "$EDITOR #{file.path}"
|
76
|
-
all = file.read.lines.reject {|l| l.start_with? "#"}.map {|l| l.chop}
|
77
|
-
summary = all[0]
|
78
|
-
m = /^(\w+):(.*)/.match(summary)
|
79
|
-
task_type, summary = m.to_a.drop(1) if m
|
80
|
-
|
81
|
-
description = all.drop(2).join("\n")
|
82
|
-
$stderr.puts "Type: #{task_type}"
|
83
|
-
$stderr.puts "summary: #{summary}"
|
84
|
-
$stderr.puts "description: #{description}"
|
85
|
-
file.close
|
86
|
-
[task_type, summary, description]
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
|
91
|
-
class Puts
|
92
|
-
def initialize()
|
93
|
-
@colors = Hash.new
|
94
|
-
@available_colors = Queue.new
|
95
|
-
String.colors
|
96
|
-
.select{ |c| not [:black, :light_black, :white].include? c}
|
97
|
-
.each { |c| @available_colors.push c }
|
98
|
-
end
|
99
|
-
|
100
|
-
def puts(author, text)
|
101
|
-
unless @colors.has_key? author
|
102
|
-
a_color = @available_colors.pop
|
103
|
-
@colors[author] = a_color
|
104
|
-
end
|
105
|
-
c = @colors[author]
|
106
|
-
author = author.colorize( c )
|
107
|
-
$stdout.puts "#{author}: #{text}"
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
1
|
+
require_relative 'm.rb'
|
2
|
+
require_relative 'search.rb'
|
data/lib/search.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
require 'table_print'
|
3
|
+
|
4
|
+
module Mosespa
|
5
|
+
class Search
|
6
|
+
def initialize(jira_client, config)
|
7
|
+
@client = jira_client
|
8
|
+
@named_search = config['named_search'] || {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def search(search_string)
|
12
|
+
real_search = @named_search[search_string] || search_string
|
13
|
+
@issues = @client.Issue.jql(real_search).sort_by { |i| i.updated }
|
14
|
+
end
|
15
|
+
|
16
|
+
def print_search
|
17
|
+
tp @issues,
|
18
|
+
"key",
|
19
|
+
{:updated => {:formatters => [DateColorFormatter.new]}},
|
20
|
+
"status.name",
|
21
|
+
"summary"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class DateColorFormatter
|
26
|
+
def format(value)
|
27
|
+
date = Time.parse(value)
|
28
|
+
now = Time.now
|
29
|
+
two_weeks_ago = now - 14*86400
|
30
|
+
one_month_ago = now - 30*86400
|
31
|
+
|
32
|
+
c = if date > two_weeks_ago
|
33
|
+
:green
|
34
|
+
else if date > one_month_ago
|
35
|
+
:yellow
|
36
|
+
else
|
37
|
+
:red
|
38
|
+
end end
|
39
|
+
date.strftime('%D').colorize( c )
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/mosespa.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "mosespa"
|
6
|
-
s.version = '1.2
|
6
|
+
s.version = '1.4.2'
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ["Grégoire Seux"]
|
9
9
|
s.license = "Apache License v2"
|
@@ -18,4 +18,5 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.add_dependency "jira-ruby"
|
19
19
|
s.add_dependency 'trollop'
|
20
20
|
s.add_dependency 'colorize'
|
21
|
+
s.add_dependency 'table_print'
|
21
22
|
end
|
metadata
CHANGED
@@ -1,55 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mosespa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grégoire Seux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jira-ruby
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: trollop
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: colorize
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: table_print
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
description: ''
|
@@ -60,12 +74,16 @@ executables:
|
|
60
74
|
extensions: []
|
61
75
|
extra_rdoc_files: []
|
62
76
|
files:
|
63
|
-
- .gitignore
|
77
|
+
- ".gitignore"
|
78
|
+
- Gemfile
|
79
|
+
- Gemfile.lock
|
64
80
|
- LICENSE
|
65
81
|
- README.md
|
66
82
|
- bin/completion_mosespa
|
67
83
|
- bin/mosespa
|
84
|
+
- lib/m.rb
|
68
85
|
- lib/mosespa.rb
|
86
|
+
- lib/search.rb
|
69
87
|
- mosespa.gemspec
|
70
88
|
homepage: http://github.com/kamaradclimber/mosespa
|
71
89
|
licenses:
|
@@ -77,17 +95,17 @@ require_paths:
|
|
77
95
|
- lib
|
78
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
79
97
|
requirements:
|
80
|
-
- -
|
98
|
+
- - ">="
|
81
99
|
- !ruby/object:Gem::Version
|
82
100
|
version: '0'
|
83
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
102
|
requirements:
|
85
|
-
- -
|
103
|
+
- - ">="
|
86
104
|
- !ruby/object:Gem::Version
|
87
105
|
version: '0'
|
88
106
|
requirements: []
|
89
107
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.
|
108
|
+
rubygems_version: 2.2.2
|
91
109
|
signing_key:
|
92
110
|
specification_version: 4
|
93
111
|
summary: Play on command line with JIRA
|