cardigan 0.0.7 → 0.0.8
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/lib/cardigan/command/count_cards.rb +24 -3
- data/lib/cardigan/command/total_cards.rb +16 -3
- data/lib/cardigan/text_report_formatter.rb +20 -15
- metadata +28 -13
@@ -1,15 +1,36 @@
|
|
1
|
+
require 'cardigan/context'
|
2
|
+
require 'cardigan/text_report_formatter'
|
3
|
+
|
1
4
|
class Cardigan::Command::CountCards
|
2
5
|
def initialize repository, io
|
3
6
|
@repository, @io = repository, io
|
4
7
|
end
|
5
8
|
|
6
|
-
def execute text
|
9
|
+
def execute text=''
|
7
10
|
grouping_fields = text.scan(/\w+/)
|
11
|
+
lengths = Array.new(grouping_fields.size, 0)
|
8
12
|
counts = {}
|
9
|
-
|
13
|
+
total = 0
|
14
|
+
@repository.each do |card|
|
15
|
+
grouping_fields.each_with_index do |grouping_field,index|
|
16
|
+
lengths[index] = card[grouping_field].size if card[grouping_field] and card[grouping_field].size > lengths[index]
|
17
|
+
end
|
10
18
|
key = grouping_fields.map {|key| card[key] ? card[key] : ''}
|
11
19
|
counts[key] = counts[key] ? counts[key] + 1 : 1
|
20
|
+
total += counts[key]
|
21
|
+
end
|
22
|
+
|
23
|
+
values = counts.keys.sort.map do |key|
|
24
|
+
hash = {'count' => counts[key]}
|
25
|
+
grouping_fields.each_with_index {|grouping_field,index| hash[grouping_field] = key[index] }
|
26
|
+
hash
|
12
27
|
end
|
13
|
-
|
28
|
+
|
29
|
+
values << {'count' => total} unless counts.size == 1
|
30
|
+
|
31
|
+
formatter = Cardigan::TextReportFormatter.new @io
|
32
|
+
grouping_fields.each_with_index {|grouping_field,index| formatter.add_column(grouping_field, lengths[index])}
|
33
|
+
formatter.add_column('count', 0)
|
34
|
+
formatter.output values, :suppress_index => true
|
14
35
|
end
|
15
36
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'cardigan/context'
|
2
|
+
require 'cardigan/text_report_formatter'
|
3
|
+
|
1
4
|
class Cardigan::Command::TotalCards
|
2
5
|
def initialize repository, io
|
3
6
|
@repository, @io = repository, io
|
@@ -6,11 +9,21 @@ class Cardigan::Command::TotalCards
|
|
6
9
|
def execute text
|
7
10
|
count_field, *grouping_fields = text.scan(/\w+/)
|
8
11
|
counts = {}
|
9
|
-
@repository.
|
10
|
-
key = grouping_fields.map {|
|
12
|
+
@repository.each do |card|
|
13
|
+
key = grouping_fields.map {|grouping_field| card[grouping_field] ? card[grouping_field] : ''}
|
11
14
|
value = card[count_field].to_i
|
12
15
|
counts[key] = counts[key] ? counts[key] + value : value
|
13
16
|
end
|
14
|
-
|
17
|
+
|
18
|
+
values = counts.keys.sort.map do |key|
|
19
|
+
hash = {count_field => counts[key]}
|
20
|
+
grouping_fields.each_with_index {|grouping_field,index| hash[grouping_field] = key[index] }
|
21
|
+
hash
|
22
|
+
end
|
23
|
+
|
24
|
+
formatter = Cardigan::TextReportFormatter.new @io
|
25
|
+
grouping_fields.each {|grouping_field| formatter.add_column(grouping_field, 0)}
|
26
|
+
formatter.add_column(count_field, 0)
|
27
|
+
formatter.output values, :suppress_index => true
|
15
28
|
end
|
16
29
|
end
|
@@ -1,36 +1,41 @@
|
|
1
1
|
module Cardigan
|
2
2
|
class TextReportFormatter
|
3
|
+
INDEX_HEADING = 'index'
|
4
|
+
|
3
5
|
def initialize io
|
4
6
|
@io = io
|
5
7
|
@columns = []
|
6
|
-
@heading = 'index'
|
7
|
-
@width = 2 + @heading.length + 1
|
8
8
|
end
|
9
9
|
|
10
10
|
def add_column name, length
|
11
11
|
longer = [name.length, length].max
|
12
12
|
@columns << [name, longer]
|
13
|
-
@width += longer + 3
|
14
13
|
end
|
15
14
|
|
16
|
-
def output hashes
|
17
|
-
|
18
|
-
|
19
|
-
hline
|
15
|
+
def output hashes, options={}
|
16
|
+
return if @columns.empty?
|
17
|
+
width = calculate_width(options[:suppress_index])
|
18
|
+
hline width
|
19
|
+
row INDEX_HEADING, @columns.map {|tuple| tuple.first }, options[:suppress_index]
|
20
|
+
hline width
|
20
21
|
hashes.each_with_index do |h,i|
|
21
|
-
|
22
|
-
values = @columns.map {|tuple| h[tuple.first]}
|
23
|
-
row first, values
|
22
|
+
row (i+1).to_s, @columns.map {|tuple| h[tuple.first]}, options[:suppress_index]
|
24
23
|
end
|
25
|
-
hline
|
24
|
+
hline width
|
26
25
|
end
|
27
26
|
private
|
28
|
-
def hline
|
29
|
-
@io.say ' ' + '-' *
|
27
|
+
def hline width
|
28
|
+
@io.say ' ' + '-' * (width - 2)
|
30
29
|
end
|
31
30
|
|
32
|
-
def
|
33
|
-
|
31
|
+
def calculate_width suppress_index
|
32
|
+
width = suppress_index ? 1 : INDEX_HEADING.length + 4
|
33
|
+
@columns.each {|column| width += column[1] + 3}
|
34
|
+
width
|
35
|
+
end
|
36
|
+
|
37
|
+
def row first, values, suppress_index
|
38
|
+
a = suppress_index ? "|" : "| #{first.ljust(INDEX_HEADING.length)} |"
|
34
39
|
@columns.each_with_index do |tuple, index|
|
35
40
|
a << " #{values[index].to_s.ljust(tuple[1])} |"
|
36
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cardigan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 8
|
9
|
+
version: 0.0.8
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Mark Ryall
|
@@ -9,29 +14,37 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-
|
17
|
+
date: 2010-04-10 00:00:00 +10:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: uuidtools
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ~>
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 1
|
30
|
+
- 1
|
23
31
|
version: 2.1.1
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: activesupport
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ~>
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 2
|
43
|
+
- 3
|
44
|
+
- 5
|
33
45
|
version: 2.3.5
|
34
|
-
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
35
48
|
description: |
|
36
49
|
A command line utility that manages cards as individual files so that they can be added to a version control system
|
37
50
|
|
@@ -92,18 +105,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
105
|
requirements:
|
93
106
|
- - ">="
|
94
107
|
- !ruby/object:Gem::Version
|
108
|
+
segments:
|
109
|
+
- 0
|
95
110
|
version: "0"
|
96
|
-
version:
|
97
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
112
|
requirements:
|
99
113
|
- - ">="
|
100
114
|
- !ruby/object:Gem::Version
|
115
|
+
segments:
|
116
|
+
- 0
|
101
117
|
version: "0"
|
102
|
-
version:
|
103
118
|
requirements: []
|
104
119
|
|
105
120
|
rubyforge_project:
|
106
|
-
rubygems_version: 1.3.
|
121
|
+
rubygems_version: 1.3.6
|
107
122
|
signing_key:
|
108
123
|
specification_version: 3
|
109
124
|
summary: command line utility for managing cards (tasks, bugs, stories or whatever)
|