features2cards 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/History.txt +11 -0
- data/README.rdoc +2 -3
- data/Rakefile +26 -2
- data/Thorfile +114 -0
- data/examples/i18n/.gitignore +1 -0
- data/examples/i18n/README.textile +18 -0
- data/examples/i18n/Rakefile +30 -0
- data/examples/i18n/ar/addition.feature +17 -0
- data/examples/i18n/bg/addition.feature +12 -0
- data/examples/i18n/bg/consecutive_calculations.feature +19 -0
- data/examples/i18n/bg/division.feature +17 -0
- data/examples/i18n/cat/suma.feature +17 -0
- data/examples/i18n/da/summering.feature +18 -0
- data/examples/i18n/de/addition.feature +17 -0
- data/examples/i18n/de/division.feature +10 -0
- data/examples/i18n/en-lol/stuffing.feature +8 -0
- data/examples/i18n/en/addition.feature +17 -0
- data/examples/i18n/en/division.feature +10 -0
- data/examples/i18n/es/adicion.feature +17 -0
- data/examples/i18n/et/jagamine.feature +10 -0
- data/examples/i18n/et/liitmine.feature +17 -0
- data/examples/i18n/fi/jakolasku.feature +10 -0
- data/examples/i18n/fi/yhteenlasku.feature +16 -0
- data/examples/i18n/fr/addition.feature +18 -0
- data/examples/i18n/he/addition.feature +17 -0
- data/examples/i18n/he/division.feature +10 -0
- data/examples/i18n/hu/addition.feature +17 -0
- data/examples/i18n/hu/division.feature +10 -0
- data/examples/i18n/id/addition.feature +17 -0
- data/examples/i18n/id/division.feature +10 -0
- data/examples/i18n/it/somma.feature +11 -0
- data/examples/i18n/ja/addition.feature +17 -0
- data/examples/i18n/ja/division.feature +10 -0
- data/examples/i18n/ko/addition.feature +17 -0
- data/examples/i18n/ko/division.feature +11 -0
- data/examples/i18n/lt/addition.feature +17 -0
- data/examples/i18n/lt/division.feature +10 -0
- data/examples/i18n/lv/addition.feature +17 -0
- data/examples/i18n/lv/division.feature +10 -0
- data/examples/i18n/no/summering.feature +19 -0
- data/examples/i18n/pl/addition.feature +17 -0
- data/examples/i18n/pl/division.feature +10 -0
- data/examples/i18n/pt/adicao.feature +11 -0
- data/examples/i18n/ro/suma.feature +11 -0
- data/examples/i18n/ru/addition.feature +11 -0
- data/examples/i18n/ru/consecutive_calculations.feature +17 -0
- data/examples/i18n/ru/division.feature +16 -0
- data/examples/i18n/se/summering.feature +18 -0
- data/examples/i18n/sk/addition.feature +17 -0
- data/examples/i18n/sk/division.feature +10 -0
- data/examples/i18n/zh-CN/addition.feature +18 -0
- data/examples/i18n/zh-TW/addition.feature +17 -0
- data/examples/i18n/zh-TW/division.feature +11 -0
- data/examples/self_test/.gitignore +2 -0
- data/examples/self_test/features/features2cards.feature +19 -0
- data/features/features2cards_cli.feature +40 -0
- data/features/step_definitions/features2cards_steps.rb +41 -0
- data/features/support/env.rb +79 -0
- data/features2cards.gemspec +118 -0
- data/lib/features2cards.rb +2 -8
- data/lib/features2cards/card.rb +14 -10
- data/lib/features2cards/cli.rb +27 -34
- data/lib/features2cards/platform.rb +1 -1
- data/lib/features2cards/prawn.rb +13 -13
- data/spec/features2cards/card_spec.rb +8 -0
- data/spec/features2cards/cli_spec.rb +21 -0
- data/spec/features2cards/prawn_spec.rb +5 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +7 -0
- metadata +81 -12
data/lib/features2cards/cli.rb
CHANGED
@@ -4,46 +4,42 @@ require "features2cards/prawn"
|
|
4
4
|
|
5
5
|
module Features2Cards
|
6
6
|
class CLI
|
7
|
-
|
7
|
+
|
8
8
|
attr_reader :paths
|
9
|
-
attr_reader :options
|
10
|
-
|
9
|
+
attr_reader :options
|
10
|
+
|
11
11
|
def self.execute(args)
|
12
12
|
new(args).execute!
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def initialize(args, out_stream = STDOUT, error_stream = STDERR)
|
16
|
-
@args = args
|
16
|
+
@args = args
|
17
17
|
@out_stream = out_stream
|
18
18
|
@error_stream = error_stream
|
19
19
|
@paths = []
|
20
|
-
@options = default_options
|
20
|
+
@options = default_options
|
21
21
|
end
|
22
22
|
|
23
|
-
def execute!
|
23
|
+
def execute!
|
24
24
|
parse!(@args)
|
25
|
-
load_cucumber
|
25
|
+
load_cucumber
|
26
26
|
if feature_files.empty?
|
27
27
|
usage
|
28
28
|
exit
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
generate_pdf(cards)
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def parse!(args)
|
35
35
|
@args = args
|
36
|
-
@args.extend(::OptionParser::Arguable)
|
36
|
+
@args.extend(::OptionParser::Arguable)
|
37
37
|
@args.options do |opts|
|
38
38
|
opts.banner = ["Usage: features2cards [options] [ [FILE|DIR] ]+", "",
|
39
39
|
"Examples:",
|
40
40
|
"features2cards features2cards.feature",
|
41
|
-
"features2cards
|
41
|
+
"features2cards examples/i18n/it",
|
42
42
|
].join("\n")
|
43
|
-
opts.on("-l [LANG]", "--language [LANG]",
|
44
|
-
"Specify language for features (Default: #{@options[:lang]})") do |v|
|
45
|
-
@options[:lang] = v
|
46
|
-
end
|
47
43
|
opts.on("-o", "--out [FILE]",
|
48
44
|
"Specify pdf output file (Default: #{@options[:pdf_file]}).") do |v|
|
49
45
|
@options[:pdf_file] = v
|
@@ -55,31 +51,29 @@ module Features2Cards
|
|
55
51
|
opts.on_tail("-h", "--help", "You're looking at it.") do
|
56
52
|
@out_stream.puts opts.help
|
57
53
|
Kernel.exit
|
58
|
-
end
|
54
|
+
end
|
59
55
|
end.parse!
|
60
56
|
|
61
57
|
# Whatever is left after option parsing is the FILE arguments
|
62
58
|
@paths += args
|
63
|
-
end
|
64
|
-
|
65
|
-
def load_cucumber
|
66
|
-
Cucumber.load_language(lang)
|
67
|
-
|
59
|
+
end
|
60
|
+
|
61
|
+
def load_cucumber
|
68
62
|
Cucumber::Ast::Feature.class_eval do
|
69
63
|
attr_reader :scenarios
|
70
64
|
end
|
71
65
|
end
|
72
|
-
|
66
|
+
|
73
67
|
def cards
|
74
68
|
features_to_cards(features)
|
75
69
|
end
|
76
|
-
|
70
|
+
|
77
71
|
def features
|
78
72
|
feature_files.map do |file|
|
79
|
-
|
73
|
+
Cucumber::FeatureFile.new(file).parse(Cucumber::StepMother.new, {})
|
80
74
|
end
|
81
75
|
end
|
82
|
-
|
76
|
+
|
83
77
|
def feature_files
|
84
78
|
potential_feature_files = @paths.map do |path|
|
85
79
|
path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
|
@@ -88,33 +82,32 @@ module Features2Cards
|
|
88
82
|
end.flatten.uniq
|
89
83
|
potential_feature_files
|
90
84
|
end
|
91
|
-
|
92
|
-
|
85
|
+
|
86
|
+
|
93
87
|
def parser
|
94
88
|
@parser ||= Cucumber::Parser::FeatureParser.new
|
95
89
|
end
|
96
90
|
|
97
91
|
def features_to_cards(features)
|
98
92
|
features.map do |feature|
|
99
|
-
[Card.for_feature(feature
|
93
|
+
[Card.for_feature(feature)]
|
100
94
|
end.flatten
|
101
95
|
end
|
102
96
|
|
103
97
|
def generate_pdf(cards)
|
104
98
|
Prawn::Document.generate_cards(@options[:pdf_file], cards)
|
105
99
|
end
|
106
|
-
|
100
|
+
|
107
101
|
def usage
|
108
102
|
@error_stream.puts "ERROR: No feature files given"
|
109
103
|
@error_stream.puts "Type 'features2cards --help' for usage."
|
110
104
|
end
|
111
|
-
|
105
|
+
|
112
106
|
def default_options
|
113
107
|
{
|
114
|
-
:lang => "en",
|
115
108
|
:pdf_file => "cards.pdf"
|
116
109
|
}
|
117
110
|
end
|
118
|
-
|
111
|
+
|
119
112
|
end
|
120
|
-
end
|
113
|
+
end
|
data/lib/features2cards/prawn.rb
CHANGED
@@ -3,23 +3,23 @@ require "prawn"
|
|
3
3
|
class Prawn::Document
|
4
4
|
CARD_WIDTH = 72 * 5 # 5 inches
|
5
5
|
CARD_HEIGHT = 72 * 3 # 3 inches
|
6
|
-
|
6
|
+
|
7
7
|
def self.generate_cards(outfile, cards)
|
8
8
|
generate(outfile, :page_layout => :landscape) do
|
9
9
|
row = 2
|
10
10
|
col = 0
|
11
|
-
|
11
|
+
|
12
12
|
cards.each do |card|
|
13
13
|
if row == 0
|
14
14
|
start_new_page
|
15
15
|
row = 2
|
16
16
|
col = 0
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
draw_card(card, row, col)
|
20
|
-
|
20
|
+
|
21
21
|
col += 1
|
22
|
-
|
22
|
+
|
23
23
|
if col > 1
|
24
24
|
col = 0
|
25
25
|
row -= 1
|
@@ -27,13 +27,13 @@ class Prawn::Document
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def margin_box(margin, &block)
|
32
32
|
bounding_box [bounds.left + margin, bounds.top - margin],
|
33
33
|
:width => bounds.width - (margin * 2), :height => bounds.height - (margin * 2),
|
34
34
|
&block
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def outline_box
|
38
38
|
stroke_rectangle bounds.top_left, bounds.width, bounds.height
|
39
39
|
end
|
@@ -41,16 +41,16 @@ class Prawn::Document
|
|
41
41
|
def draw_card(card, row, col)
|
42
42
|
bounding_box [CARD_WIDTH * col, CARD_HEIGHT * row + ((bounds.height - (2*CARD_HEIGHT))/2)],
|
43
43
|
:width => CARD_WIDTH, :height => CARD_HEIGHT do
|
44
|
-
|
44
|
+
|
45
45
|
outline_box
|
46
|
-
|
46
|
+
|
47
47
|
margin_box 8 do
|
48
48
|
text card.type, :size => 12
|
49
|
-
|
49
|
+
|
50
50
|
margin_box 16 do
|
51
51
|
text card.body, :size => 10, :align => :left
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
unless card.footer.nil?
|
55
55
|
bounding_box [bounds.left, bounds.bottom + 10], :width => bounds.width, :height => 10 do
|
56
56
|
text card.footer, :size => 8, :align => :right
|
@@ -59,5 +59,5 @@ class Prawn::Document
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
63
|
-
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'features2cards/cli'
|
3
|
+
|
4
|
+
module Features2Cards
|
5
|
+
describe CLI do
|
6
|
+
it "should parse feature" do
|
7
|
+
cli = CLI.execute(%w{examples/self_test/features/features2cards.feature})
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should parse feature in german" do
|
11
|
+
cli = CLI.execute(%w{examples/i18n/de})
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should accept --out option" do
|
15
|
+
cli = CLI.new(StringIO.new)
|
16
|
+
cli.parse!(%w{--out test.pdf})
|
17
|
+
cli.options[:pdf_file].should == 'test.pdf'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: features2cards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Helmkamp
|
@@ -9,8 +9,8 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
13
|
-
default_executable:
|
12
|
+
date: 2009-11-09 00:00:00 -05:00
|
13
|
+
default_executable: features2cards
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: prawn
|
@@ -22,25 +22,91 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
24
|
version:
|
25
|
-
description:
|
25
|
+
description: |-
|
26
|
+
Create PDF cards from Cucumber features and scenarios for printing. We use it as we kick
|
27
|
+
off our sprints to create index cards for our task board.
|
26
28
|
email: bryan@brynary.com
|
27
29
|
executables:
|
28
30
|
- features2cards
|
29
31
|
extensions: []
|
30
32
|
|
31
|
-
extra_rdoc_files:
|
32
|
-
|
33
|
+
extra_rdoc_files:
|
34
|
+
- History.txt
|
35
|
+
- README.rdoc
|
36
|
+
- MIT-LICENSE.txt
|
33
37
|
files:
|
38
|
+
- .gitignore
|
34
39
|
- History.txt
|
35
40
|
- MIT-LICENSE.txt
|
36
41
|
- README.rdoc
|
37
42
|
- Rakefile
|
43
|
+
- Thorfile
|
38
44
|
- bin/features2cards
|
45
|
+
- examples/i18n/.gitignore
|
46
|
+
- examples/i18n/README.textile
|
47
|
+
- examples/i18n/Rakefile
|
48
|
+
- examples/i18n/ar/addition.feature
|
49
|
+
- examples/i18n/bg/addition.feature
|
50
|
+
- examples/i18n/bg/consecutive_calculations.feature
|
51
|
+
- examples/i18n/bg/division.feature
|
52
|
+
- examples/i18n/cat/suma.feature
|
53
|
+
- examples/i18n/da/summering.feature
|
54
|
+
- examples/i18n/de/addition.feature
|
55
|
+
- examples/i18n/de/division.feature
|
56
|
+
- examples/i18n/en-lol/stuffing.feature
|
57
|
+
- examples/i18n/en/addition.feature
|
58
|
+
- examples/i18n/en/division.feature
|
59
|
+
- examples/i18n/es/adicion.feature
|
60
|
+
- examples/i18n/et/jagamine.feature
|
61
|
+
- examples/i18n/et/liitmine.feature
|
62
|
+
- examples/i18n/fi/jakolasku.feature
|
63
|
+
- examples/i18n/fi/yhteenlasku.feature
|
64
|
+
- examples/i18n/fr/addition.feature
|
65
|
+
- examples/i18n/he/addition.feature
|
66
|
+
- examples/i18n/he/division.feature
|
67
|
+
- examples/i18n/hu/addition.feature
|
68
|
+
- examples/i18n/hu/division.feature
|
69
|
+
- examples/i18n/id/addition.feature
|
70
|
+
- examples/i18n/id/division.feature
|
71
|
+
- examples/i18n/it/somma.feature
|
72
|
+
- examples/i18n/ja/addition.feature
|
73
|
+
- examples/i18n/ja/division.feature
|
74
|
+
- examples/i18n/ko/addition.feature
|
75
|
+
- examples/i18n/ko/division.feature
|
76
|
+
- examples/i18n/lt/addition.feature
|
77
|
+
- examples/i18n/lt/division.feature
|
78
|
+
- examples/i18n/lv/addition.feature
|
79
|
+
- examples/i18n/lv/division.feature
|
80
|
+
- examples/i18n/no/summering.feature
|
81
|
+
- examples/i18n/pl/addition.feature
|
82
|
+
- examples/i18n/pl/division.feature
|
83
|
+
- examples/i18n/pt/adicao.feature
|
84
|
+
- examples/i18n/ro/suma.feature
|
85
|
+
- examples/i18n/ru/addition.feature
|
86
|
+
- examples/i18n/ru/consecutive_calculations.feature
|
87
|
+
- examples/i18n/ru/division.feature
|
88
|
+
- examples/i18n/se/summering.feature
|
89
|
+
- examples/i18n/sk/addition.feature
|
90
|
+
- examples/i18n/sk/division.feature
|
91
|
+
- examples/i18n/zh-CN/addition.feature
|
92
|
+
- examples/i18n/zh-TW/addition.feature
|
93
|
+
- examples/i18n/zh-TW/division.feature
|
94
|
+
- examples/self_test/.gitignore
|
95
|
+
- examples/self_test/features/features2cards.feature
|
96
|
+
- features/features2cards_cli.feature
|
97
|
+
- features/step_definitions/features2cards_steps.rb
|
98
|
+
- features/support/env.rb
|
99
|
+
- features2cards.gemspec
|
100
|
+
- lib/features2cards.rb
|
39
101
|
- lib/features2cards/card.rb
|
40
102
|
- lib/features2cards/cli.rb
|
41
103
|
- lib/features2cards/platform.rb
|
42
104
|
- lib/features2cards/prawn.rb
|
43
|
-
-
|
105
|
+
- spec/features2cards/card_spec.rb
|
106
|
+
- spec/features2cards/cli_spec.rb
|
107
|
+
- spec/features2cards/prawn_spec.rb
|
108
|
+
- spec/spec.opts
|
109
|
+
- spec/spec_helper.rb
|
44
110
|
has_rdoc: true
|
45
111
|
homepage: http://github.com/brynary/features2cards
|
46
112
|
licenses: []
|
@@ -64,10 +130,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
130
|
version:
|
65
131
|
requirements: []
|
66
132
|
|
67
|
-
rubyforge_project:
|
68
|
-
rubygems_version: 1.3.
|
133
|
+
rubyforge_project: features2cards
|
134
|
+
rubygems_version: 1.3.5
|
69
135
|
signing_key:
|
70
136
|
specification_version: 3
|
71
|
-
summary:
|
72
|
-
test_files:
|
73
|
-
|
137
|
+
summary: Generate printable PDF index cards from Cucumber feature files
|
138
|
+
test_files:
|
139
|
+
- spec/features2cards/card_spec.rb
|
140
|
+
- spec/features2cards/cli_spec.rb
|
141
|
+
- spec/features2cards/prawn_spec.rb
|
142
|
+
- spec/spec_helper.rb
|