features2cards 0.3.1 → 0.4.0
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/.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/.gitignore
ADDED
data/History.txt
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
=== 0.4.0 / 2009-11-09
|
2
|
+
|
3
|
+
* 1 major enhancements
|
4
|
+
|
5
|
+
* Upgraded to Cucumber > 0.4.x (Kosmas Schütz)
|
6
|
+
* Use language specified in feature files (Kosmas Schütz)
|
7
|
+
|
8
|
+
* 1 bug fix
|
9
|
+
|
10
|
+
* Don't require rubygems or modify load path in lib/ code (Bryan Helmkamp)
|
11
|
+
|
1
12
|
=== 0.3.1 / 2009-06-12
|
2
13
|
|
3
14
|
The Kosmas Schütz Release.
|
data/README.rdoc
CHANGED
@@ -13,11 +13,10 @@ off our sprints to create index cards for our task board.
|
|
13
13
|
|
14
14
|
Examples:
|
15
15
|
features2cards features2cards.feature
|
16
|
-
features2cards --out italian.pdf
|
16
|
+
features2cards --out italian.pdf examples/i18n/it
|
17
17
|
|
18
18
|
=== Options
|
19
19
|
|
20
|
-
-l [LANG], --language [LANG] Specify language for features (Default: en)
|
21
20
|
-o, --out [FILE] Specify pdf output file (Default: cards.pdf).
|
22
21
|
--version Show version
|
23
22
|
-h, --help Show help
|
@@ -33,5 +32,5 @@ off our sprints to create index cards for our task board.
|
|
33
32
|
|
34
33
|
== License
|
35
34
|
|
36
|
-
Copyright (c) 2008 Bryan Helmkamp.
|
35
|
+
Copyright (c) 2008-2009 Bryan Helmkamp.
|
37
36
|
See MIT-LICENSE.txt in this directory.
|
data/Rakefile
CHANGED
@@ -1,7 +1,31 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require "rake/gempackagetask"
|
3
3
|
require "rake/clean"
|
4
|
-
require
|
4
|
+
require "spec/rake/spectask"
|
5
|
+
require 'cucumber/rake/task'
|
6
|
+
|
7
|
+
$:.unshift('lib')
|
8
|
+
require 'features2cards'
|
9
|
+
|
10
|
+
desc "Run the Features2Cards specs"
|
11
|
+
Spec::Rake::SpecTask.new do |t|
|
12
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
13
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
14
|
+
t.rcov = ENV['RCOV']
|
15
|
+
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
|
16
|
+
t.verbose = true
|
17
|
+
end
|
18
|
+
|
19
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
20
|
+
t.cucumber_opts = "--format pretty"
|
21
|
+
end
|
22
|
+
|
23
|
+
namespace :features do
|
24
|
+
Cucumber::Rake::Task.new(:rcov) do |t|
|
25
|
+
t.rcov = true
|
26
|
+
t.rcov_opts = %w{--rails --exclude osx\/objc,gems\/,spec\/}
|
27
|
+
t.rcov_opts << %[-o "features_rcov"]
|
28
|
+
end
|
29
|
+
end
|
5
30
|
|
6
|
-
Dir['rake_tasks/**/*.rake'].each { |rake| load rake }
|
7
31
|
|
data/Thorfile
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
module GemHelpers
|
2
|
+
|
3
|
+
def generate_gemspec
|
4
|
+
$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), "lib")))
|
5
|
+
require "features2cards"
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "features2cards"
|
9
|
+
s.version = Features2Cards::VERSION::STRING
|
10
|
+
s.author = "Bryan Helmkamp"
|
11
|
+
s.email = "bryan@brynary.com"
|
12
|
+
s.homepage = "http://github.com/brynary/features2cards"
|
13
|
+
s.summary = "Generate printable PDF index cards from Cucumber feature files"
|
14
|
+
s.description = <<-EOS.strip
|
15
|
+
Create PDF cards from Cucumber features and scenarios for printing. We use it as we kick
|
16
|
+
off our sprints to create index cards for our task board.
|
17
|
+
EOS
|
18
|
+
s.rubyforge_project = "features2cards"
|
19
|
+
|
20
|
+
s.executables = "features2cards"
|
21
|
+
|
22
|
+
require "git"
|
23
|
+
repo = Git.open(".")
|
24
|
+
|
25
|
+
s.files = normalize_files(repo.ls_files.keys - repo.lib.ignored_files)
|
26
|
+
s.test_files = normalize_files(Dir['spec/**/*.rb'] - repo.lib.ignored_files)
|
27
|
+
|
28
|
+
s.has_rdoc = true
|
29
|
+
s.extra_rdoc_files = %w[History.txt README.rdoc MIT-LICENSE.txt]
|
30
|
+
|
31
|
+
s.add_dependency "prawn"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def normalize_files(array)
|
36
|
+
# only keep files, no directories, and sort
|
37
|
+
array.select do |path|
|
38
|
+
File.file?(path)
|
39
|
+
end.sort
|
40
|
+
end
|
41
|
+
|
42
|
+
# Adds extra space when outputting an array. This helps create better version
|
43
|
+
# control diffs, because otherwise it is all on the same line.
|
44
|
+
def prettyify_array(gemspec_ruby, array_name)
|
45
|
+
gemspec_ruby.gsub(/s\.#{array_name.to_s} = \[.+?\]/) do |match|
|
46
|
+
leadin, files = match[0..-2].split("[")
|
47
|
+
leadin + "[\n #{files.split(",").join(",\n ")}\n ]"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def read_gemspec
|
52
|
+
@read_gemspec ||= eval(File.read("features2cards.gemspec"))
|
53
|
+
end
|
54
|
+
|
55
|
+
def sh(command)
|
56
|
+
puts command
|
57
|
+
system command
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class Default < Thor
|
62
|
+
include GemHelpers
|
63
|
+
|
64
|
+
desc "gemspec", "Regenerate features2cards.gemspec"
|
65
|
+
def gemspec
|
66
|
+
File.open("features2cards.gemspec", "w") do |file|
|
67
|
+
gemspec_ruby = generate_gemspec.to_ruby
|
68
|
+
gemspec_ruby = prettyify_array(gemspec_ruby, :files)
|
69
|
+
gemspec_ruby = prettyify_array(gemspec_ruby, :test_files)
|
70
|
+
gemspec_ruby = prettyify_array(gemspec_ruby, :extra_rdoc_files)
|
71
|
+
|
72
|
+
file.write gemspec_ruby
|
73
|
+
end
|
74
|
+
|
75
|
+
puts "Wrote gemspec to features2cards.gemspec"
|
76
|
+
read_gemspec.validate
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "build", "Build a features2cards gem"
|
80
|
+
def build
|
81
|
+
sh "gem build features2cards.gemspec"
|
82
|
+
FileUtils.mkdir_p "pkg"
|
83
|
+
FileUtils.mv read_gemspec.file_name, "pkg"
|
84
|
+
end
|
85
|
+
|
86
|
+
desc "install", "Install the latest built gem"
|
87
|
+
def install
|
88
|
+
sh "gem install --local pkg/#{read_gemspec.file_name}"
|
89
|
+
end
|
90
|
+
|
91
|
+
desc "release", "Release the current branch to GitHub and Gemcutter"
|
92
|
+
def release
|
93
|
+
gemspec
|
94
|
+
build
|
95
|
+
Release.new.tag
|
96
|
+
Release.new.gem
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
class Release < Thor
|
101
|
+
include GemHelpers
|
102
|
+
|
103
|
+
desc "tag", "Tag the gem on the origin server"
|
104
|
+
def tag
|
105
|
+
release_tag = "v#{read_gemspec.version}"
|
106
|
+
sh "git tag -a #{release_tag} -m 'Tagging #{release_tag}'"
|
107
|
+
sh "git push origin #{release_tag}"
|
108
|
+
end
|
109
|
+
|
110
|
+
desc "gem", "Push the gem to Gemcutter"
|
111
|
+
def gem
|
112
|
+
sh "gem push pkg/#{read_gemspec.file_name}"
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
*.pdf
|
@@ -0,0 +1,18 @@
|
|
1
|
+
h1. Internationalisation (i18n) examples
|
2
|
+
|
3
|
+
Under this directory you'll find examples of Cucumber features written in
|
4
|
+
many of the natural languages Cucumber supports.
|
5
|
+
|
6
|
+
For a full list of what languages Cucumber supports - run <pre>cucumber --language help</pre>
|
7
|
+
|
8
|
+
h2. Running all the examples
|
9
|
+
|
10
|
+
Open a shell in this directory and run
|
11
|
+
|
12
|
+
<pre>rake i18n</pre>
|
13
|
+
|
14
|
+
h2. Running examples for a specific language
|
15
|
+
|
16
|
+
Open a shell in the directory for the specific language and run
|
17
|
+
|
18
|
+
<pre>rake features</pre>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
desc 'Run features for all languages'
|
2
|
+
task :i18n do
|
3
|
+
dir = File.dirname(__FILE__)
|
4
|
+
Dir["#{dir}/*"].each do |f|
|
5
|
+
if File.directory?(f)
|
6
|
+
lang = f[dir.length+1..-1]
|
7
|
+
if examples_working?(lang)
|
8
|
+
Dir.chdir(f) do
|
9
|
+
rake("features")
|
10
|
+
end
|
11
|
+
else
|
12
|
+
STDERR.puts %{
|
13
|
+
!!!!!
|
14
|
+
!!!!!
|
15
|
+
!!!!! SKIPPING #{lang} (The examples are out of date - please help update them)
|
16
|
+
!!!!!
|
17
|
+
!!!!!
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def examples_working?(lang)
|
25
|
+
!%w{ro ko li lt}.index(lang)
|
26
|
+
end
|
27
|
+
|
28
|
+
def rake(args)
|
29
|
+
ruby($0, args) rescue nil
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: ar
|
2
|
+
خاصية: الجمع
|
3
|
+
من اجل تجنب الأخطاء السخيفة
|
4
|
+
كشخص غبي في الرياضيات
|
5
|
+
اريد معرفة ناتج جمع عددين
|
6
|
+
|
7
|
+
سيناريو مخطط: جمع عددين
|
8
|
+
بفرض كتابة <input_1> في الآلة الحاسبة
|
9
|
+
و كتابة <input_2> في الآلة الحاسبة
|
10
|
+
متى يتم الضغط على <button>
|
11
|
+
اذاً يظهر <output> على الشاشة
|
12
|
+
|
13
|
+
امثلة:
|
14
|
+
| input_1 | input_2 | button | output |
|
15
|
+
| 20 | 30 | جمع | 50 |
|
16
|
+
| 2 | 5 | جمع | 7 |
|
17
|
+
| 0 | 40 | جمع | 40 |
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# language: bg
|
2
|
+
Функционалност: Събиране на числа
|
3
|
+
За да не го правят наум
|
4
|
+
Потребителите
|
5
|
+
Трябва да могат да събират числа с калкулатора
|
6
|
+
|
7
|
+
Сценарий: Събиране на две цели числа
|
8
|
+
Дадено е че съм въвел 50
|
9
|
+
И съм въвел 70
|
10
|
+
Когато натисна "+"
|
11
|
+
То резултата трябва да е равен на 120
|
12
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# language: bg
|
2
|
+
Функционалост: Последователни изчисления
|
3
|
+
За да не го правят наум
|
4
|
+
Потребителите
|
5
|
+
Трябва да могат да извършват последователни изчисления с калкулатора
|
6
|
+
|
7
|
+
Предистория:
|
8
|
+
Дадено е че съм събрал 3 и 5
|
9
|
+
|
10
|
+
Сценарий: събиране с резултата от последната операция
|
11
|
+
Когато въведа 4
|
12
|
+
И натисна "+"
|
13
|
+
То резултата трябва да е равен на 12
|
14
|
+
|
15
|
+
Сценарий: делене с резултата от последната операция
|
16
|
+
Когато въведа 2
|
17
|
+
И натисна "/"
|
18
|
+
То резултата трябва да е равен на 4
|
19
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: bg
|
2
|
+
Фунцкционалност: Делене на числа
|
3
|
+
За да не го правят наум
|
4
|
+
Потребителите
|
5
|
+
Трябва да могат да разделят числа с калкулатора
|
6
|
+
|
7
|
+
Рамка на сценарий: Делене на цели числа
|
8
|
+
Дадено е че съм въвел <делимо>
|
9
|
+
И е че съм въвел <делител>
|
10
|
+
Когато натисна "/"
|
11
|
+
То резултата трябва да е равен на <частно>
|
12
|
+
|
13
|
+
Примери:
|
14
|
+
| делимо | делител | частно |
|
15
|
+
| 100 | 2 | 50 |
|
16
|
+
| 28 | 7 | 4 |
|
17
|
+
| 0 | 5 | 0 |
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: cat
|
2
|
+
Característica: Suma
|
3
|
+
Per evitar fer errors tontos
|
4
|
+
Com un matemàtic idiota
|
5
|
+
Vull saber la suma dels números
|
6
|
+
|
7
|
+
Esquema de l'escenari: Sumar dos números
|
8
|
+
Donat que he introduït <entrada_1> a la calculadora
|
9
|
+
I que he introduït <entrada_2> a la calculadora
|
10
|
+
Quan premo el <botó>
|
11
|
+
Aleshores el resultat ha de ser <resultat> a la pantalla
|
12
|
+
|
13
|
+
Exemples:
|
14
|
+
| entrada_1 | entrada_2 | botó | resultat |
|
15
|
+
| 20 | 30 | add | 50 |
|
16
|
+
| 2 | 5 | add | 7 |
|
17
|
+
| 0 | 40 | add | 40 |
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# language: da
|
2
|
+
Egenskab: Summering
|
3
|
+
For at slippe for at lave dumme fejl
|
4
|
+
Som en regnskabsfører
|
5
|
+
Vil jeg kunne lægge sammen
|
6
|
+
|
7
|
+
Scenarie: to tal
|
8
|
+
Givet at jeg har indtastet 5
|
9
|
+
Og at jeg har indtastet 7
|
10
|
+
Når jeg summerer
|
11
|
+
Så skal resultatet være 12
|
12
|
+
|
13
|
+
Scenarie: tre tal
|
14
|
+
Givet at jeg har indtastet 5
|
15
|
+
Og at jeg har indtastet 7
|
16
|
+
Og at jeg har indtastet 1
|
17
|
+
Når jeg summerer
|
18
|
+
Så skal resultatet være 13
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: de
|
2
|
+
Funktionalität: Addition
|
3
|
+
Um dumme Fehler zu vermeiden
|
4
|
+
möchte ich als Matheidiot
|
5
|
+
die Summe zweier Zahlen gesagt bekommen
|
6
|
+
|
7
|
+
Szenariogrundriss: Zwei Zahlen hinzufügen
|
8
|
+
Gegeben sei ich habe <Eingabe_1> in den Taschenrechner eingegeben
|
9
|
+
Und ich habe <Eingabe_2> in den Taschenrechner eingegeben
|
10
|
+
Wenn ich <Knopf> drücke
|
11
|
+
Dann sollte das Ergebniss auf dem Bildschirm <Ausgabe> sein
|
12
|
+
|
13
|
+
Beispiele:
|
14
|
+
| Eingabe_1 | Eingabe_2 | Knopf | Ausgabe |
|
15
|
+
| 20 | 30 | add | 50 |
|
16
|
+
| 2 | 5 | add | 7 |
|
17
|
+
| 0 | 40 | add | 40 |
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# language: de
|
2
|
+
Funktionalität: Division
|
3
|
+
Um dumme Fehler zu vermeiden
|
4
|
+
müssen Kassierer in der Lage sein einen Bruchteil zu berechnen
|
5
|
+
|
6
|
+
Szenario: Normale Zahlen
|
7
|
+
Gegeben sei ich habe 3 in den Taschenrechner eingegeben
|
8
|
+
Und ich habe 2 in den Taschenrechner eingegeben
|
9
|
+
Wenn ich divide drücke
|
10
|
+
Dann sollte das Ergebniss auf dem Bildschirm 1.5 sein
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: en
|
2
|
+
Feature: Addition
|
3
|
+
In order to avoid silly mistakes
|
4
|
+
As a math idiot
|
5
|
+
I want to be told the sum of two numbers
|
6
|
+
|
7
|
+
Scenario Outline: Add two numbers
|
8
|
+
Given I have entered <input_1> into the calculator
|
9
|
+
And I have entered <input_2> into the calculator
|
10
|
+
When I press <button>
|
11
|
+
Then the result should be <output> on the screen
|
12
|
+
|
13
|
+
Examples:
|
14
|
+
| input_1 | input_2 | button | output |
|
15
|
+
| 20 | 30 | add | 50 |
|
16
|
+
| 2 | 5 | add | 7 |
|
17
|
+
| 0 | 40 | add | 40 |
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# language: en
|
2
|
+
Feature: Division
|
3
|
+
In order to avoid silly mistakes
|
4
|
+
Cashiers must be able to calculate a fraction
|
5
|
+
|
6
|
+
Scenario: Regular numbers
|
7
|
+
Given I have entered 3 into the calculator
|
8
|
+
And I have entered 2 into the calculator
|
9
|
+
When I press divide
|
10
|
+
Then the result should be 1.5 on the screen
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: es
|
2
|
+
Característica: adición
|
3
|
+
Para evitar hacer errores tontos
|
4
|
+
Como un matemático idiota
|
5
|
+
Quiero saber la suma de los números
|
6
|
+
|
7
|
+
Esquema del escenario: Sumar dos números
|
8
|
+
Dado que he introducido <entrada_1> en la calculadora
|
9
|
+
Y que he introducido <entrada_2> en la calculadora
|
10
|
+
Cuando oprimo el <botón>
|
11
|
+
Entonces el resultado debe ser <resultado> en la pantalla
|
12
|
+
|
13
|
+
Ejemplos:
|
14
|
+
| entrada_1 | entrada_2 | botón | resultado |
|
15
|
+
| 20 | 30 | add | 50 |
|
16
|
+
| 2 | 5 | add | 7 |
|
17
|
+
| 0 | 40 | add | 40 |
|