pivotxt 0.1.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/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ gem "treetop"
4
+ gem "rspec", ">= 2.0.0.beta.17"
5
+ gem "ruby-debug"
6
+ gem "pivotal-tracker"
7
+ gem "fakeweb"
data/Gemfile.lock ADDED
@@ -0,0 +1,48 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ builder (2.1.2)
5
+ columnize (0.3.1)
6
+ diff-lcs (1.1.2)
7
+ fakeweb (1.3.0)
8
+ happymapper (0.3.2)
9
+ libxml-ruby (~> 1.1.3)
10
+ libxml-ruby (1.1.4)
11
+ linecache (0.43)
12
+ mime-types (1.16)
13
+ nokogiri (1.4.3.1)
14
+ pivotal-tracker (0.2.2)
15
+ builder
16
+ happymapper (>= 0.3.2)
17
+ nokogiri (~> 1.4.3.1)
18
+ rest-client (~> 1.6.0)
19
+ polyglot (0.3.1)
20
+ rest-client (1.6.1)
21
+ mime-types (>= 1.16)
22
+ rspec (2.0.0.beta.22)
23
+ rspec-core (= 2.0.0.beta.22)
24
+ rspec-expectations (= 2.0.0.beta.22)
25
+ rspec-mocks (= 2.0.0.beta.22)
26
+ rspec-core (2.0.0.beta.22)
27
+ rspec-expectations (2.0.0.beta.22)
28
+ diff-lcs (>= 1.1.2)
29
+ rspec-mocks (2.0.0.beta.22)
30
+ rspec-core (= 2.0.0.beta.22)
31
+ rspec-expectations (= 2.0.0.beta.22)
32
+ ruby-debug (0.10.3)
33
+ columnize (>= 0.1)
34
+ ruby-debug-base (~> 0.10.3.0)
35
+ ruby-debug-base (0.10.3)
36
+ linecache (>= 0.3)
37
+ treetop (1.4.8)
38
+ polyglot (>= 0.3.1)
39
+
40
+ PLATFORMS
41
+ ruby
42
+
43
+ DEPENDENCIES
44
+ fakeweb
45
+ pivotal-tracker
46
+ rspec (>= 2.0.0.beta.17)
47
+ ruby-debug
48
+ treetop
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2010 Gabe Hollombe
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
data/README.markdown ADDED
@@ -0,0 +1,50 @@
1
+ # Pivotxt lets you easily create stories in Pivotal Tracker from a simple text file.
2
+
3
+ Sure, there's [slurper](http://github.com/hashrocket/slurper) but I didn't like slurper's file format; it's too YAML-y.
4
+ Hint: if you need a vim plugin to help you write your stories file, it's probably overly-complicated.
5
+
6
+ So, I drafted a simple file format that I'd like to use and I wrote a grammar in Treetop to parse that format. Pivotxt is the result. Hopefully you'll find it as useful as I do.
7
+
8
+ ## Configuration & Usage
9
+ 1. Stick your appropriate values into pivotxt_config.yml
10
+ 2. Use bin/pivotxt like this: pivotxt stories.pivotxt
11
+ 3. You're done.
12
+
13
+
14
+ ## Sample stories.pivotxt file format
15
+ <pre>
16
+ LabelOne LabelTwo
17
+ - Features start with -'s as you can see (an inline description for this feature would go here)
18
+
19
+ - Features can have multi-line descriptions too, like this one
20
+ This is the first description line for the above feature.
21
+ Here is another line.
22
+ And yet another line here.
23
+
24
+ - All stories nested under a line of labels will have those labels applied to them.
25
+ In this case, we'll end up with 3 features and 2 chores,
26
+ all with the 'LabelOne' and 'LabelTwo' labels assigned to them
27
+ because these are all nested under the 'LabelOne LabelTwo' line above.
28
+
29
+ [] Chores look like check boxes (and they can have inline descriptions too)
30
+
31
+ [] Chores can also have multi-line descriptions
32
+ Here's a multiline description for the above chore.
33
+ This is a second line of description.
34
+
35
+
36
+ AnotherLabel
37
+ - Obviously, you can have as many labeled groups of stories as you want.
38
+ This feature belongs to a new label group called 'AnotherLabel'
39
+ and it will be the only story created for the 'AnotherLabel' label.
40
+ </pre>
41
+
42
+
43
+ ## Acknowledgements
44
+ * Special thanks to Clifford Heath ([@cliffordheath](http://twitter.com/cliffordheath)) for helping me grok Treetop and get started with my grammar.
45
+ * Thanks to [Hashrocket's slurper](http://github.com/hashrocket/slurper) for the inspriation.
46
+
47
+
48
+ ## Copyright
49
+
50
+ MIT Licensed. Copyright (c) 2010 Gabe Hollombe. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "pivotxt"
8
+ gem.summary = %Q{Pivotxt lets you easily create stories in Pivotal Tracker from a simple text file.}
9
+ gem.description = %Q{Pivotxt lets you easily create stories in Pivotal Tracker from a simple text file.}
10
+ gem.email = "gabe@avantbard.com"
11
+ gem.homepage = "http://github.com/gabehollombe/pivotxt"
12
+ gem.authors = ["Gabe Hollombe"]
13
+ gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ rescue LoadError
18
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
19
+ end
20
+
21
+ require 'spec/rake/spectask'
22
+ Spec::Rake::SpecTask.new(:spec) do |spec|
23
+ spec.libs << 'lib' << 'spec'
24
+ spec.spec_files = FileList['spec/**/*_spec.rb']
25
+ end
26
+
27
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.pattern = 'spec/**/*_spec.rb'
30
+ spec.rcov = true
31
+ end
32
+
33
+ task :spec => :check_dependencies
34
+
35
+ task :default => :spec
36
+
37
+ require 'rake/rdoctask'
38
+ Rake::RDocTask.new do |rdoc|
39
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
40
+
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = "pivotxt #{version}"
43
+ rdoc.rdoc_files.include('README*')
44
+ rdoc.rdoc_files.include('lib/**/*.rb')
45
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { "rspec2" }
data/bin/pivotxt ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(File.dirname(__FILE__)), '..', 'lib'))
4
+ require 'rubygems'
5
+ require 'pivotxt'
6
+ require 'optparse'
7
+
8
+ options = {}
9
+ OptionParser.new do |opts|
10
+ opts.on("-r", "--reverse", "Reverse story creation order") do |v|
11
+ options[:reverse] = v
12
+ end
13
+ end.parse!
14
+
15
+ story_file = ARGV.empty? ? "stories.pivotxt" : ARGV[0]
16
+
17
+ pivotxt = Pivotxt.new(story_file, '../pivotxt_config.yml')
18
+ pivotxt.upload_stories!
data/lib/pivotxt.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'treetop'
2
+ require 'pivotal-tracker'
3
+ require 'yaml'
4
+
5
+ class Pivotxt
6
+ attr_reader :project
7
+
8
+ def initialize(stories_file, config_file)
9
+ @stories_file = stories_file
10
+ @config = YAML.load_file(config_file)
11
+
12
+ PivotalTracker::Client.token = @config['token']
13
+ @project = PivotalTracker::Project.find(@config['project_id'])
14
+ end
15
+
16
+ def load_stories
17
+ grammar = File.join(File.dirname(__FILE__), 'pivtxt.treetop')
18
+ Treetop.load grammar
19
+
20
+ parser = PivtxtParser.new
21
+ parser.consume_all_input = false
22
+ tree = parser.parse(File.read(@stories_file).to_s)
23
+
24
+ return tree.value
25
+ end
26
+
27
+ def upload_stories!
28
+ labeled_groups = load_stories()
29
+ labeled_groups.each do |labeled_group|
30
+ labels = labeled_group[:labels]
31
+ stories = labeled_group[:stories]
32
+ stories.each do |story|
33
+ title = story[:title].value
34
+ description = story[:description].value
35
+ @project.stories.create(:name => title, :description => description, :labels => labels, :story_type => story[:type].to_s)
36
+ end
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,135 @@
1
+ grammar Pivtxt
2
+
3
+ rule label_groups
4
+ labeled_stories*
5
+ {
6
+ def value
7
+ elements.collect{|e| e.value}
8
+ end
9
+ }
10
+ end
11
+
12
+ rule labeled_stories
13
+ blank_line*
14
+ labels:(one_line "\n")
15
+ stories
16
+ {
17
+ def value
18
+ { :labels => labels.text_value.split(' '),
19
+ :stories => stories.stories_array
20
+ }
21
+ end
22
+ }
23
+ end
24
+
25
+ rule stories
26
+ story*
27
+ {
28
+ def stories_array
29
+ elements.collect {|e| e.value}
30
+ end
31
+ }
32
+ end
33
+
34
+ rule story
35
+ blank_line*
36
+ item:(feature / chore)
37
+ {
38
+ def value
39
+ item.value
40
+ end
41
+ }
42
+ end
43
+
44
+ rule feature
45
+ indent '- '
46
+ story_body
47
+ {
48
+ def value
49
+ {:type => :feature, :title => story_body.title, :description => story_body.description}
50
+ end
51
+ }
52
+ end
53
+
54
+ rule chore
55
+ indent '[] '
56
+ story_body
57
+ {
58
+ def value
59
+ {:type => :chore, :title => story_body.title, :description => story_body.description}
60
+ end
61
+ }
62
+ end
63
+
64
+ rule story_body
65
+ title
66
+ description:(
67
+ "\n" multiline_description { def value; multiline_description.value; end }
68
+ /
69
+ inline_description "\n" { def value; inline_description.value; end }
70
+ )
71
+ end
72
+
73
+ rule title
74
+ plain_text {
75
+ def value
76
+ text_value
77
+ end
78
+ }
79
+ end
80
+
81
+ rule inline_description
82
+ (
83
+ '(' inline_description ')'
84
+ /
85
+ plain_text
86
+ )
87
+ {
88
+ def value
89
+ text_value
90
+ end
91
+ }
92
+ end
93
+
94
+ rule multiline_description
95
+ (indent indent one_line "\n")*
96
+ {
97
+ def value
98
+ text_value
99
+ end
100
+ }
101
+ end
102
+
103
+
104
+
105
+
106
+ #==========================================
107
+ # Utility rules
108
+ #==========================================
109
+
110
+ rule plain_text
111
+ (!non_plain .)*
112
+ end
113
+
114
+ # Characters not allowed in a one-line text fragment
115
+ rule non_plain
116
+ ([()] / "\n")
117
+ end
118
+
119
+
120
+ # Any text to end of line:
121
+ rule one_line
122
+ (!"\n" .)*
123
+ end
124
+
125
+
126
+ rule blank_line
127
+ [ \t]* "\n"
128
+ end
129
+
130
+
131
+ rule indent
132
+ ' '
133
+ end
134
+
135
+ end
data/pivotxt.gemspec ADDED
@@ -0,0 +1,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{pivotxt}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Gabe Hollombe"]
12
+ s.date = %q{2010-10-01}
13
+ s.default_executable = %q{pivotxt}
14
+ s.description = %q{Pivotxt lets you easily create stories in Pivotal Tracker from a simple text file.}
15
+ s.email = %q{gabe@avantbard.com}
16
+ s.executables = ["pivotxt"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.markdown"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".gitignore",
24
+ ".rspec",
25
+ "Gemfile",
26
+ "Gemfile.lock",
27
+ "LICENSE",
28
+ "README.markdown",
29
+ "Rakefile",
30
+ "VERSION",
31
+ "autotest/discover.rb",
32
+ "bin/pivotxt",
33
+ "lib/pivotxt.rb",
34
+ "lib/pivtxt.treetop",
35
+ "pivotxt.gemspec",
36
+ "pivotxt_config.yml",
37
+ "spec/fixtures/pivotxt_stories.txt",
38
+ "spec/pivotxt_spec.rb",
39
+ "spec/pivotxt_treetop_grammar_spec.rb",
40
+ "spec/spec_helper.rb"
41
+ ]
42
+ s.homepage = %q{http://github.com/gabehollombe/pivotxt}
43
+ s.rdoc_options = ["--charset=UTF-8"]
44
+ s.require_paths = ["lib"]
45
+ s.rubygems_version = %q{1.3.7}
46
+ s.summary = %q{Pivotxt lets you easily create stories in Pivotal Tracker from a simple text file.}
47
+ s.test_files = [
48
+ "spec/pivotxt_spec.rb",
49
+ "spec/pivotxt_treetop_grammar_spec.rb",
50
+ "spec/spec_helper.rb"
51
+ ]
52
+
53
+ if s.respond_to? :specification_version then
54
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
55
+ s.specification_version = 3
56
+
57
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
59
+ else
60
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
61
+ end
62
+ else
63
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
64
+ end
65
+ end
66
+
@@ -0,0 +1,4 @@
1
+ project_id: 12345 # found in the project settings or address bar in Tracker
2
+ token: 123abc123abc123abc123abc # found on your profile page in Tracker
3
+ requested_by: Default User # must be a user on the project
4
+
@@ -0,0 +1,19 @@
1
+ LabelOne LabelTwo
2
+ - feature one (description one)
3
+
4
+ - feature two (description two)
5
+
6
+ - feature three with multiline desc following
7
+ desc line 1
8
+ desc line 2
9
+ desc line 3
10
+
11
+ [] chore one (chore desc one)
12
+
13
+ [] chore two with multiline desc
14
+ chore desc line 1
15
+ chore desc line 2
16
+
17
+
18
+ LabelThree
19
+ - feature four (desc for feature four)
@@ -0,0 +1,33 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Pivotxt do
4
+ before do
5
+ stories_file = File.join(File.dirname(__FILE__), 'fixtures', 'pivotxt_stories.txt')
6
+ config_file = File.join(File.dirname(__FILE__), '..', 'pivotxt_config.yml')
7
+
8
+ PivotalTracker::Project.stub!(:find).and_return(PivotalTracker::Project.new)
9
+ @pivotxt = Pivotxt.new(stories_file, config_file)
10
+ end
11
+
12
+ it 'sets the pivotal project as configured' do
13
+ @pivotxt.project.should be_a_kind_of(PivotalTracker::Project)
14
+ end
15
+
16
+ describe '#load_stories(file)' do
17
+ before do
18
+ @label_groups = @pivotxt.load_stories
19
+ end
20
+
21
+ it 'returns label_groups' do
22
+ @label_groups.length.should == 2
23
+ end
24
+ end
25
+
26
+ describe "#upload_stories!" do
27
+ it 'creates a story of the appropriate type with the appropriate labels' do
28
+ @pivotxt.project.stories.stub!(:create).and_return(PivotalTracker::Story.new)
29
+ @pivotxt.project.stories.should_receive(:create).exactly(6).times
30
+ @pivotxt.upload_stories!
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'the pivotxt treetop grammar' do
4
+ before do
5
+ grammar = File.join(File.dirname(__FILE__), '..', 'lib', 'pivtxt.treetop')
6
+ Treetop.load grammar
7
+
8
+ @parser = PivtxtParser.new
9
+ @parser.consume_all_input = false
10
+ end
11
+
12
+ it 'parses an example stories file' do
13
+ stories_file = File.join(File.dirname(__FILE__), 'fixtures', 'pivotxt_stories.txt')
14
+ tree = @parser.parse(File.read(stories_file).to_s)
15
+ print "FAILURE REASON: " + @parser.failure_reason.to_s if ! tree
16
+
17
+
18
+ label_groups = tree.value
19
+
20
+ labels = label_groups.first[:labels]
21
+ labels.should include('LabelOne', 'LabelTwo')
22
+
23
+ stories = label_groups.first[:stories]
24
+ stories.length.should == 5
25
+
26
+
27
+ stories[0][:title].value.should == "feature one "
28
+ stories[0][:description].value.should == "(description one)"
29
+ stories[0][:type].should == :feature
30
+
31
+ multi_line_desc = stories[2][:description].value
32
+ multi_line_desc.should include('desc line 1', 'desc line 2', 'desc line 3')
33
+
34
+ stories[3][:type].should == :chore
35
+ stories[3][:title].value.should == "chore one "
36
+ stories[3][:description].value.should == "(chore desc one)"
37
+
38
+
39
+ #next label group
40
+ stories = label_groups[1][:stories]
41
+ stories.length.should == 1
42
+ label_groups[1][:labels].should include('LabelThree')
43
+ end
44
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'ruby-debug'
4
+ require 'treetop'
5
+ require 'pivotal-tracker'
6
+ require 'pivotxt'
7
+
8
+ require 'fakeweb'
9
+ FakeWeb.allow_net_connect = false
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pivotxt
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Gabe Hollombe
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-01 00:00:00 +10:00
19
+ default_executable: pivotxt
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 13
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 9
34
+ version: 1.2.9
35
+ type: :development
36
+ version_requirements: *id001
37
+ description: Pivotxt lets you easily create stories in Pivotal Tracker from a simple text file.
38
+ email: gabe@avantbard.com
39
+ executables:
40
+ - pivotxt
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - LICENSE
45
+ - README.markdown
46
+ files:
47
+ - .document
48
+ - .gitignore
49
+ - .rspec
50
+ - Gemfile
51
+ - Gemfile.lock
52
+ - LICENSE
53
+ - README.markdown
54
+ - Rakefile
55
+ - VERSION
56
+ - autotest/discover.rb
57
+ - bin/pivotxt
58
+ - lib/pivotxt.rb
59
+ - lib/pivtxt.treetop
60
+ - pivotxt.gemspec
61
+ - pivotxt_config.yml
62
+ - spec/fixtures/pivotxt_stories.txt
63
+ - spec/pivotxt_spec.rb
64
+ - spec/pivotxt_treetop_grammar_spec.rb
65
+ - spec/spec_helper.rb
66
+ has_rdoc: true
67
+ homepage: http://github.com/gabehollombe/pivotxt
68
+ licenses: []
69
+
70
+ post_install_message:
71
+ rdoc_options:
72
+ - --charset=UTF-8
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ hash: 3
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ hash: 3
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ requirements: []
94
+
95
+ rubyforge_project:
96
+ rubygems_version: 1.3.7
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: Pivotxt lets you easily create stories in Pivotal Tracker from a simple text file.
100
+ test_files:
101
+ - spec/pivotxt_spec.rb
102
+ - spec/pivotxt_treetop_grammar_spec.rb
103
+ - spec/spec_helper.rb