flux 0.0.5 → 0.0.6
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/Gemfile +0 -1
- data/VERSION +1 -1
- data/flux.gemspec +4 -5
- data/lib/flux/cli/feature.rb +1 -1
- data/lib/flux/cli/pivotal_tracker.rb +10 -4
- data/lib/flux/cli/review.rb +126 -65
- data/lib/flux/util/table.rb +99 -0
- data/spec/flux/util/table_spec.rb +47 -0
- metadata +23 -32
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
data/flux.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "flux"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["David Leal"]
|
12
|
-
s.date = "2012-02-
|
12
|
+
s.date = "2012-02-18"
|
13
13
|
s.email = "david@mojotech.com"
|
14
14
|
s.executables = ["flux"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -40,7 +40,9 @@ Gem::Specification.new do |s|
|
|
40
40
|
"lib/flux/rcs/git.rb",
|
41
41
|
"lib/flux/util.rb",
|
42
42
|
"lib/flux/util/output.rb",
|
43
|
+
"lib/flux/util/table.rb",
|
43
44
|
"lib/flux/workflows/mojotech.rb",
|
45
|
+
"spec/flux/util/table_spec.rb",
|
44
46
|
"spec/flux_spec.rb",
|
45
47
|
"spec/spec_helper.rb",
|
46
48
|
"spec/support/rr.rb"
|
@@ -58,7 +60,6 @@ Gem::Specification.new do |s|
|
|
58
60
|
s.add_runtime_dependency(%q<thor>, ["~> 0.14.0"])
|
59
61
|
s.add_runtime_dependency(%q<pivotal-tracker>, ["~> 0.4.0"])
|
60
62
|
s.add_runtime_dependency(%q<grit>, ["~> 2.4.0"])
|
61
|
-
s.add_runtime_dependency(%q<hirb>, [">= 0"])
|
62
63
|
s.add_runtime_dependency(%q<github_api>, [">= 0"])
|
63
64
|
s.add_development_dependency(%q<rspec>, ["~> 2.0"])
|
64
65
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
@@ -69,7 +70,6 @@ Gem::Specification.new do |s|
|
|
69
70
|
s.add_dependency(%q<thor>, ["~> 0.14.0"])
|
70
71
|
s.add_dependency(%q<pivotal-tracker>, ["~> 0.4.0"])
|
71
72
|
s.add_dependency(%q<grit>, ["~> 2.4.0"])
|
72
|
-
s.add_dependency(%q<hirb>, [">= 0"])
|
73
73
|
s.add_dependency(%q<github_api>, [">= 0"])
|
74
74
|
s.add_dependency(%q<rspec>, ["~> 2.0"])
|
75
75
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
@@ -81,7 +81,6 @@ Gem::Specification.new do |s|
|
|
81
81
|
s.add_dependency(%q<thor>, ["~> 0.14.0"])
|
82
82
|
s.add_dependency(%q<pivotal-tracker>, ["~> 0.4.0"])
|
83
83
|
s.add_dependency(%q<grit>, ["~> 2.4.0"])
|
84
|
-
s.add_dependency(%q<hirb>, [">= 0"])
|
85
84
|
s.add_dependency(%q<github_api>, [">= 0"])
|
86
85
|
s.add_dependency(%q<rspec>, ["~> 2.0"])
|
87
86
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
data/lib/flux/cli/feature.rb
CHANGED
@@ -5,7 +5,7 @@ module Flux
|
|
5
5
|
class Feature < Thor
|
6
6
|
namespace :feature
|
7
7
|
|
8
|
-
desc "start STORY_ID
|
8
|
+
desc "start STORY_ID BRANCH", "start working on a story"
|
9
9
|
method_option :estimate, :type => :numeric
|
10
10
|
method_option :parent_branch, :type => :string,
|
11
11
|
:default => 'master',
|
@@ -2,11 +2,14 @@ require 'pivotal-tracker'
|
|
2
2
|
require 'hirb'
|
3
3
|
require 'flux/pivotal_tracker'
|
4
4
|
require 'flux/ext/pivotal-tracker'
|
5
|
+
require 'flux/util/table'
|
5
6
|
require 'forwardable'
|
6
7
|
|
7
8
|
module Flux
|
8
9
|
module CLI
|
9
10
|
class PT < Thor
|
11
|
+
STORY_LIST_HEADERS = %w(>ID STATE ASSIGNEE >EST STORY)
|
12
|
+
|
10
13
|
extend Forwardable
|
11
14
|
include Flux::Util
|
12
15
|
|
@@ -44,10 +47,13 @@ module Flux
|
|
44
47
|
|
45
48
|
desc "list", "list stories, excluding icebox by default"
|
46
49
|
def list
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
50
|
+
table =
|
51
|
+
[STORY_LIST_HEADERS] +
|
52
|
+
current_project.stories.scheduled.map { |s|
|
53
|
+
[s.id, s.state, s.owned_by, s.est, s.name]
|
54
|
+
}
|
55
|
+
|
56
|
+
puts_table table
|
51
57
|
end
|
52
58
|
|
53
59
|
story_update :finish, :current_state => 'finished'
|
data/lib/flux/cli/review.rb
CHANGED
@@ -5,35 +5,37 @@ require 'github_api'
|
|
5
5
|
module Flux
|
6
6
|
module CLI
|
7
7
|
class Review < Thor
|
8
|
+
PULL_REQUEST_HEADERS = %w(>NUM >STORY AUTHOR DATE TITLE)
|
9
|
+
|
10
|
+
include Flux::Util
|
11
|
+
|
8
12
|
namespace 'review'
|
9
13
|
|
10
|
-
desc "diff", "show interdiff between last 2 reviews"
|
14
|
+
desc "diff [BRANCH]", "show interdiff between last 2 reviews"
|
11
15
|
method_option :from, :type => :numeric, :aliases => '-f'
|
12
16
|
method_option :to, :type => :numeric, :aliases => '-t'
|
13
17
|
method_option :color, :type => :boolean, :aliases => '-c'
|
14
18
|
def diff(branch_name = Git::Branch.current.name)
|
15
|
-
reqs =
|
19
|
+
reqs = Github::PullRequest.all(:branch_name => branch_name)
|
16
20
|
|
17
21
|
if options[:from] && options[:to]
|
18
|
-
to = reqs.find { |r| r
|
19
|
-
from = reqs.find { |r| r
|
22
|
+
to = reqs.find { |r| r.number.to_i == options[:to].to_i }
|
23
|
+
from = reqs.find { |r| r.number.to_i == options[:from].to_i }
|
20
24
|
else
|
21
25
|
to, from = reqs.first(2)
|
22
26
|
end
|
23
27
|
|
24
28
|
if from
|
25
|
-
auth = [gh_config['username'], gh_config['password']]
|
26
|
-
|
27
29
|
to_diff = Tempfile.new("to_diff")
|
28
|
-
to_diff.write(
|
29
|
-
|
30
|
+
to_diff.write(to.diff)
|
31
|
+
to_diff.flush
|
30
32
|
|
31
33
|
from_diff = Tempfile.new("from_diff")
|
32
|
-
from_diff.write(
|
33
|
-
|
34
|
+
from_diff.write(from.diff)
|
35
|
+
from_diff.flush
|
34
36
|
|
35
37
|
cmd = "interdiff #{from_diff.path} #{to_diff.path}"
|
36
|
-
cmd << "| colordiff"
|
38
|
+
cmd << "| colordiff" if options[:color]
|
37
39
|
|
38
40
|
system cmd
|
39
41
|
end
|
@@ -43,27 +45,30 @@ module Flux
|
|
43
45
|
def request
|
44
46
|
branch = Git::Branch.current
|
45
47
|
story = current_project.stories.find(branch.config('story_id'))
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
48
|
+
old = Github::PullRequest.all(:branch_name => branch.name)
|
49
|
+
last = old.first
|
50
|
+
|
51
|
+
last.close if last && last.open?
|
52
|
+
|
53
|
+
body = {:branch_name => branch.name,
|
54
|
+
:story_url => story.url,
|
55
|
+
:iterations => old.map(&:html_url)}
|
56
|
+
data = {:base => 'master',
|
57
|
+
:head => branch.commit.sha,
|
58
|
+
:title => story.name,
|
59
|
+
:body => body}
|
60
|
+
|
61
|
+
Github::PullRequest.create data
|
57
62
|
end
|
58
63
|
|
59
64
|
desc "list", "list pull requests for the current project"
|
60
65
|
def list
|
61
|
-
list_pull_requests
|
66
|
+
list_pull_requests Github::PullRequest.open
|
62
67
|
end
|
63
68
|
|
64
|
-
desc "history
|
69
|
+
desc "history [BRANCH]", "show review history for branch"
|
65
70
|
def history(branch_id = Git::Branch.current.name)
|
66
|
-
reqs =
|
71
|
+
reqs = Github::PullRequest.all(:branch_name => branch_id)
|
67
72
|
|
68
73
|
list_pull_requests reqs
|
69
74
|
end
|
@@ -78,60 +83,116 @@ module Flux
|
|
78
83
|
Flux::PT::Project.new(pt_config['project_id'])
|
79
84
|
end
|
80
85
|
|
81
|
-
def gh
|
82
|
-
Github.new :login => gh_config['username'],
|
83
|
-
:password => gh_config['password']
|
84
|
-
end
|
85
|
-
|
86
|
-
def gh_config
|
87
|
-
config['github']
|
88
|
-
end
|
89
|
-
|
90
86
|
def pt_config
|
91
87
|
config['pivotal_tracker']
|
92
88
|
end
|
93
89
|
|
94
|
-
def
|
95
|
-
|
90
|
+
def list_pull_requests(pull_requests)
|
91
|
+
table =
|
92
|
+
[PULL_REQUEST_HEADERS] +
|
93
|
+
pull_requests.map { |p|
|
94
|
+
[p.number, Flux::PT::Story.id_from_url(p.body[:story_url]), p.author,
|
95
|
+
Time.parse(p.created_at).strftime("%F %R"), p.title]
|
96
|
+
}
|
97
|
+
|
98
|
+
puts_table table
|
99
|
+
end
|
96
100
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
[]
|
101
|
+
module Github
|
102
|
+
def self.config
|
103
|
+
Flux.environment['github']
|
101
104
|
end
|
102
|
-
end
|
103
105
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
pull_requests(opts.merge(:state => 'closed'))
|
106
|
+
def self.gh
|
107
|
+
::Github.new(:login => Github.config['username'],
|
108
|
+
:password => Github.config['password'])
|
108
109
|
end
|
109
110
|
|
110
|
-
|
111
|
+
class PullRequest
|
112
|
+
class << self
|
113
|
+
def all(opts = {})
|
114
|
+
pull_requests(opts.merge(:state => 'open')) +
|
115
|
+
pull_requests(opts.merge(:state => 'closed'))
|
116
|
+
end
|
111
117
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
r[:story_id] = Flux::PT::Story.id_from_url(r[:body][:story_url])
|
118
|
-
}
|
118
|
+
def create(data)
|
119
|
+
pr.create_request Github.config['repo_user'],
|
120
|
+
Github.config['repo_name'],
|
121
|
+
PullRequest.new(data).to_hash
|
122
|
+
end
|
119
123
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
reqs
|
124
|
-
end
|
125
|
-
end
|
124
|
+
def open(opts = {})
|
125
|
+
pull_requests({:state => 'open'}.merge(opts))
|
126
|
+
end
|
126
127
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
128
|
+
def pr
|
129
|
+
Github.gh.pull_requests
|
130
|
+
end
|
131
|
+
|
132
|
+
def update(id, data)
|
133
|
+
pr.update_request Github.config['repo_user'],
|
134
|
+
Github.config['repo_name'],
|
135
|
+
id,
|
136
|
+
data.dup
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
141
|
+
def pull_requests(opts = {})
|
142
|
+
branch_name = opts.delete(:branch_name)
|
143
|
+
|
144
|
+
reqs = pr.pull_requests(Github.config['repo_user'],
|
145
|
+
Github.config['repo_name'],
|
146
|
+
opts).map { |r|
|
147
|
+
r[:author] = r[:user][:login]
|
148
|
+
r[:body] = ReviewBody.from_markdown(r[:body])
|
149
|
+
|
150
|
+
PullRequest.new(r)
|
151
|
+
}
|
152
|
+
|
153
|
+
if branch_name
|
154
|
+
reqs.select { |r| r.body[:branch_name] == branch_name }
|
155
|
+
else
|
156
|
+
reqs
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def initialize(data)
|
162
|
+
@data = data
|
163
|
+
end
|
164
|
+
|
165
|
+
def close
|
166
|
+
@data[:state] = 'closed'
|
167
|
+
|
168
|
+
self.class.update number, {:state => @data[:state]}
|
169
|
+
end
|
170
|
+
|
171
|
+
def diff
|
172
|
+
auth = [Github.config['username'], Github.config['password']]
|
173
|
+
|
174
|
+
open(@data[:diff_url], :http_basic_authentication => auth).read
|
175
|
+
end
|
176
|
+
|
177
|
+
def method_missing(name, *args)
|
178
|
+
if @data.has_key?(name.to_sym)
|
179
|
+
@data[name.to_sym]
|
180
|
+
else
|
181
|
+
super
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def open?
|
186
|
+
state == 'open'
|
187
|
+
end
|
188
|
+
|
189
|
+
def to_hash
|
190
|
+
@data.merge(:body => ReviewBody.to_markdown(@data[:body]))
|
191
|
+
end
|
192
|
+
end
|
132
193
|
end
|
133
194
|
|
134
|
-
module
|
195
|
+
module ReviewBody
|
135
196
|
def self.from_markdown(md)
|
136
197
|
if (md || '').include?(signoff)
|
137
198
|
_, branch_name, story_url, iter = md.
|
@@ -0,0 +1,99 @@
|
|
1
|
+
module Flux
|
2
|
+
module Util
|
3
|
+
# Initialize a new Table.
|
4
|
+
#
|
5
|
+
# @param [Array<Array>] raw_data the table's annotated data
|
6
|
+
# @param field_sep the string used to separate columns
|
7
|
+
# @param [Integer] max_width the maximum width for this table.
|
8
|
+
# Lines exceeding this width will be truncated.
|
9
|
+
# @param shell the shell object used by the current task
|
10
|
+
def puts_table(raw_data, field_sep = ' ', max_width = nil)
|
11
|
+
$stdout.puts Table.new(shell, raw_data, field_sep, max_width)
|
12
|
+
end
|
13
|
+
|
14
|
+
# A table pretty printer that allows us to take a peek at the data after
|
15
|
+
# it's been stripped of formatting information. It exists to make testing
|
16
|
+
# easier.
|
17
|
+
#
|
18
|
+
# If any cell in the first row is prefixed with '>', then that column's
|
19
|
+
# contents will be right-aligned. This is useful when showing numbers.
|
20
|
+
class Table
|
21
|
+
ALIGN_RIGHT = '>'
|
22
|
+
|
23
|
+
attr_reader :field_sep, :raw_data, :shell, :max_width
|
24
|
+
|
25
|
+
# @see Flux::Util#puts_table
|
26
|
+
def initialize(shell, raw_data, field_sep, max_width)
|
27
|
+
@shell = shell
|
28
|
+
@raw_data = raw_data
|
29
|
+
@field_sep = field_sep
|
30
|
+
@max_width = max_width || terminal_width
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return whether a given column's contents will be aligned to the right
|
34
|
+
def align_right?(index)
|
35
|
+
meta[index].include?(ALIGN_RIGHT)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return all rows but the first
|
39
|
+
def body
|
40
|
+
@body ||= raw_data[1..-1]
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return the table data, stripped of format information
|
44
|
+
def data
|
45
|
+
@data ||= body.unshift(headers)
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return the table's first row
|
49
|
+
def headers
|
50
|
+
@headers = raw_data.first.each_with_index.map { |e, i|
|
51
|
+
align_right?(i) ? e[1..-1] : e
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return the table's format information
|
56
|
+
def meta
|
57
|
+
@meta ||= @raw_data.first.inject([]) { |a, e|
|
58
|
+
a << (e =~ /^>/ ? ALIGN_RIGHT : '')
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_s
|
63
|
+
@s ||=
|
64
|
+
begin
|
65
|
+
widths = data.transpose.inject([]) { |a, col|
|
66
|
+
a << col.max { |a, b| a.to_s.size <=> b.to_s.size }.to_s.size
|
67
|
+
}
|
68
|
+
|
69
|
+
# we don't need the last column's width if it is to be left-aligned
|
70
|
+
widths[-1] = nil unless align_right?(-1)
|
71
|
+
|
72
|
+
format = meta.each_with_index.inject('') { |a, (e, i)|
|
73
|
+
w = widths[i] ? widths[i].to_s : ''
|
74
|
+
align = align_right?(i) ? '' : '-'
|
75
|
+
|
76
|
+
a << "#{field_sep}%" << align << w << 's'
|
77
|
+
}.strip
|
78
|
+
|
79
|
+
max_width
|
80
|
+
|
81
|
+
data.inject('') { |a, r|
|
82
|
+
l =
|
83
|
+
a << truncate(format % r, max_width) << "\n"
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def truncate(string, width)
|
91
|
+
shell.send(:truncate, string, width)
|
92
|
+
end
|
93
|
+
|
94
|
+
def terminal_width
|
95
|
+
shell.send(:terminal_width)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Flux::Util::Table do
|
4
|
+
let(:body) {
|
5
|
+
[[123, 'unstarted', 'David Leal', 'First story'],
|
6
|
+
[456, 'unscheduled', '', 'Second story']]
|
7
|
+
}
|
8
|
+
|
9
|
+
it "is converted to a string" do
|
10
|
+
t = Flux::Util::Table.new(Thor::Shell::Basic.new,
|
11
|
+
[%w(ID STATE ASSIGNEE STORY)] + body,
|
12
|
+
' ',
|
13
|
+
nil)
|
14
|
+
|
15
|
+
t.to_s.should == <<EOT
|
16
|
+
ID STATE ASSIGNEE STORY
|
17
|
+
123 unstarted David Leal First story
|
18
|
+
456 unscheduled Second story
|
19
|
+
EOT
|
20
|
+
end
|
21
|
+
|
22
|
+
it "aligns its columns to the right" do
|
23
|
+
t = Flux::Util::Table.new(Thor::Shell::Basic.new,
|
24
|
+
[%w(>ID >STATE >ASSIGNEE >STORY)] + body,
|
25
|
+
' ',
|
26
|
+
nil)
|
27
|
+
|
28
|
+
t.to_s.should == <<EOT
|
29
|
+
ID STATE ASSIGNEE STORY
|
30
|
+
123 unstarted David Leal First story
|
31
|
+
456 unscheduled Second story
|
32
|
+
EOT
|
33
|
+
end
|
34
|
+
|
35
|
+
it "truncates lines to a given width" do
|
36
|
+
t = Flux::Util::Table.new(Thor::Shell::Basic.new,
|
37
|
+
[%w(ID STATE ASSIGNEE STORY)] + body,
|
38
|
+
' ',
|
39
|
+
7)
|
40
|
+
|
41
|
+
t.to_s.should == <<EOT
|
42
|
+
ID ...
|
43
|
+
123 ...
|
44
|
+
456 ...
|
45
|
+
EOT
|
46
|
+
end
|
47
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &82116730 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.14.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *82116730
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: pivotal-tracker
|
27
|
-
requirement: &
|
27
|
+
requirement: &82116220 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.4.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *82116220
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: grit
|
38
|
-
requirement: &
|
38
|
+
requirement: &82115540 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,21 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.4.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: hirb
|
49
|
-
requirement: &76509210 !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
|
-
requirements:
|
52
|
-
- - ! '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
type: :runtime
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *76509210
|
46
|
+
version_requirements: *82115540
|
58
47
|
- !ruby/object:Gem::Dependency
|
59
48
|
name: github_api
|
60
|
-
requirement: &
|
49
|
+
requirement: &82114430 !ruby/object:Gem::Requirement
|
61
50
|
none: false
|
62
51
|
requirements:
|
63
52
|
- - ! '>='
|
@@ -65,10 +54,10 @@ dependencies:
|
|
65
54
|
version: '0'
|
66
55
|
type: :runtime
|
67
56
|
prerelease: false
|
68
|
-
version_requirements: *
|
57
|
+
version_requirements: *82114430
|
69
58
|
- !ruby/object:Gem::Dependency
|
70
59
|
name: rspec
|
71
|
-
requirement: &
|
60
|
+
requirement: &82111670 !ruby/object:Gem::Requirement
|
72
61
|
none: false
|
73
62
|
requirements:
|
74
63
|
- - ~>
|
@@ -76,10 +65,10 @@ dependencies:
|
|
76
65
|
version: '2.0'
|
77
66
|
type: :development
|
78
67
|
prerelease: false
|
79
|
-
version_requirements: *
|
68
|
+
version_requirements: *82111670
|
80
69
|
- !ruby/object:Gem::Dependency
|
81
70
|
name: bundler
|
82
|
-
requirement: &
|
71
|
+
requirement: &82109050 !ruby/object:Gem::Requirement
|
83
72
|
none: false
|
84
73
|
requirements:
|
85
74
|
- - ~>
|
@@ -87,10 +76,10 @@ dependencies:
|
|
87
76
|
version: 1.0.0
|
88
77
|
type: :development
|
89
78
|
prerelease: false
|
90
|
-
version_requirements: *
|
79
|
+
version_requirements: *82109050
|
91
80
|
- !ruby/object:Gem::Dependency
|
92
81
|
name: jeweler
|
93
|
-
requirement: &
|
82
|
+
requirement: &82123730 !ruby/object:Gem::Requirement
|
94
83
|
none: false
|
95
84
|
requirements:
|
96
85
|
- - ~>
|
@@ -98,10 +87,10 @@ dependencies:
|
|
98
87
|
version: 1.6.2
|
99
88
|
type: :development
|
100
89
|
prerelease: false
|
101
|
-
version_requirements: *
|
90
|
+
version_requirements: *82123730
|
102
91
|
- !ruby/object:Gem::Dependency
|
103
92
|
name: rcov
|
104
|
-
requirement: &
|
93
|
+
requirement: &82122310 !ruby/object:Gem::Requirement
|
105
94
|
none: false
|
106
95
|
requirements:
|
107
96
|
- - ! '>='
|
@@ -109,10 +98,10 @@ dependencies:
|
|
109
98
|
version: '0'
|
110
99
|
type: :development
|
111
100
|
prerelease: false
|
112
|
-
version_requirements: *
|
101
|
+
version_requirements: *82122310
|
113
102
|
- !ruby/object:Gem::Dependency
|
114
103
|
name: rr
|
115
|
-
requirement: &
|
104
|
+
requirement: &82120780 !ruby/object:Gem::Requirement
|
116
105
|
none: false
|
117
106
|
requirements:
|
118
107
|
- - ~>
|
@@ -120,7 +109,7 @@ dependencies:
|
|
120
109
|
version: 1.0.0
|
121
110
|
type: :development
|
122
111
|
prerelease: false
|
123
|
-
version_requirements: *
|
112
|
+
version_requirements: *82120780
|
124
113
|
description:
|
125
114
|
email: david@mojotech.com
|
126
115
|
executables:
|
@@ -153,7 +142,9 @@ files:
|
|
153
142
|
- lib/flux/rcs/git.rb
|
154
143
|
- lib/flux/util.rb
|
155
144
|
- lib/flux/util/output.rb
|
145
|
+
- lib/flux/util/table.rb
|
156
146
|
- lib/flux/workflows/mojotech.rb
|
147
|
+
- spec/flux/util/table_spec.rb
|
157
148
|
- spec/flux_spec.rb
|
158
149
|
- spec/spec_helper.rb
|
159
150
|
- spec/support/rr.rb
|
@@ -172,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
163
|
version: '0'
|
173
164
|
segments:
|
174
165
|
- 0
|
175
|
-
hash:
|
166
|
+
hash: -114953261
|
176
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
168
|
none: false
|
178
169
|
requirements:
|