eslurper 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/eslurp +5 -1
- data/lib/slurper.rb +14 -6
- data/lib/story.rb +21 -3
- data/spec/slurper_spec.rb +1 -0
- metadata +10 -10
data/bin/eslurp
CHANGED
@@ -22,8 +22,12 @@ OptionParser.new do |opts|
|
|
22
22
|
opts.on("-r", "--reverse", "Reverse story creation order") do |v|
|
23
23
|
options[:reverse] = v
|
24
24
|
end
|
25
|
+
opts.on('-u', '--update_epic [STORY_ID]', Integer, "Link existing epic(s) with feature urls","if no story id provided, all current epics that aren't linked will be updated") do |ue|
|
26
|
+
options[:update_epics] = true
|
27
|
+
options[:story_query] = ue
|
28
|
+
end
|
25
29
|
end.parse!
|
26
30
|
|
27
31
|
story_file = ARGV.empty? ? "stories.slurper" : ARGV[0]
|
28
32
|
|
29
|
-
Slurper.slurp(story_file, options
|
33
|
+
Slurper.slurp(story_file, options)
|
data/lib/slurper.rb
CHANGED
@@ -6,22 +6,30 @@ YAML::ENGINE.yamler='syck' if RUBY_VERSION > '1.9'
|
|
6
6
|
|
7
7
|
class Slurper
|
8
8
|
|
9
|
-
attr_accessor :story_file, :stories
|
9
|
+
attr_accessor :story_file, :stories, :update_epics, :story_query
|
10
|
+
|
11
|
+
def self.slurp(story_file, options)
|
12
|
+
|
13
|
+
slurper = new(story_file, options)
|
10
14
|
|
11
|
-
def self.slurp(story_file, reverse)
|
12
|
-
slurper = new(story_file)
|
13
15
|
slurper.load_stories
|
14
16
|
slurper.prepare_stories
|
15
|
-
slurper.sort_stories(reverse)
|
17
|
+
slurper.sort_stories(options[:reverse])
|
16
18
|
slurper.create_stories
|
17
19
|
end
|
18
20
|
|
19
|
-
def initialize(story_file)
|
21
|
+
def initialize(story_file, options)
|
20
22
|
self.story_file = story_file
|
23
|
+
self.update_epics = options[:update_epics]
|
24
|
+
self.story_query = options[:story_query]
|
21
25
|
end
|
22
26
|
|
23
27
|
def load_stories
|
24
|
-
|
28
|
+
if update_epics
|
29
|
+
self.stories = Story.find_unlinked_epics(story_query)
|
30
|
+
else
|
31
|
+
self.stories = YAML.load(yamlize_story_file)
|
32
|
+
end
|
25
33
|
end
|
26
34
|
|
27
35
|
def prepare_stories
|
data/lib/story.rb
CHANGED
@@ -17,10 +17,17 @@ class Story < ActiveResource::Base
|
|
17
17
|
"http"
|
18
18
|
end
|
19
19
|
self.site = "#{scheme}://www.pivotaltracker.com/services/v3/projects/:project_id"
|
20
|
-
# self.site = "#{scheme}://www.pivotaltracker.com/services/v3/projects/#{@@config[project_id]}"
|
21
20
|
@@config
|
22
21
|
end
|
23
22
|
|
23
|
+
def self.find_unlinked_epics(story_query)
|
24
|
+
@@config = yaml
|
25
|
+
stories = Array.new
|
26
|
+
stories << Story.find(story_query||:all, :params => {:filter => 'label:epic', :project_id => @@config['project_id']})
|
27
|
+
require 'ruby-debug'; Debugger.start; Debugger.settings[:autoeval] = 1; Debugger.settings[:autolist] = 1; debugger
|
28
|
+
stories.flatten.reject { |story| story.linked? }
|
29
|
+
end
|
30
|
+
|
24
31
|
headers['X-TrackerToken'] = config.delete("token")
|
25
32
|
headers['Accept-Encoding'] = '*/*'
|
26
33
|
self.format = ActiveResource::Formats::XmlFormat
|
@@ -29,13 +36,24 @@ class Story < ActiveResource::Base
|
|
29
36
|
scrub_description
|
30
37
|
scrub_labels
|
31
38
|
default_requested_by
|
32
|
-
|
39
|
+
link_story
|
40
|
+
end
|
41
|
+
|
42
|
+
def link_story
|
43
|
+
if epic_story? && !linked?
|
44
|
+
self.description += "\n" + "Features Label Search\n" + label_search_url + "\n\n" + story_urls.join("\n")
|
45
|
+
self.labels += ",linked"
|
46
|
+
end
|
33
47
|
end
|
34
48
|
|
35
49
|
def epic_story?
|
36
50
|
respond_to?(:labels) ? self.labels.split(',').include?("epic") : false
|
37
51
|
end
|
38
52
|
|
53
|
+
def linked?
|
54
|
+
respond_to?(:labels) ? self.labels.split(',').include?("linked") : false
|
55
|
+
end
|
56
|
+
|
39
57
|
def feature_labels
|
40
58
|
self.labels.split(',').find { |label| label != "epic" }
|
41
59
|
end
|
@@ -65,7 +83,7 @@ class Story < ActiveResource::Base
|
|
65
83
|
"https://www.pivotaltracker.com/projects/#{@config['epic_features_project_id']}?label=" + feature_labels
|
66
84
|
end
|
67
85
|
|
68
|
-
def
|
86
|
+
def story_urls
|
69
87
|
retrieve_user_stories.map { |story| story.url }
|
70
88
|
end
|
71
89
|
|
data/spec/slurper_spec.rb
CHANGED
@@ -19,6 +19,7 @@ describe Slurper do
|
|
19
19
|
before do
|
20
20
|
slurper = Slurper.new(File.join(File.dirname(__FILE__), "fixtures", "epic_story.slurper"))
|
21
21
|
slurper.load_stories
|
22
|
+
require 'ruby-debug'; Debugger.start; Debugger.settings[:autoeval] = 1; Debugger.settings[:autolist] = 1; debugger
|
22
23
|
@story = slurper.stories.first
|
23
24
|
end
|
24
25
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eslurper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,11 +13,11 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2011-11-
|
16
|
+
date: 2011-11-28 00:00:00.000000000Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: activeresource
|
20
|
-
requirement: &
|
20
|
+
requirement: &70108441577340 !ruby/object:Gem::Requirement
|
21
21
|
none: false
|
22
22
|
requirements:
|
23
23
|
- - ~>
|
@@ -25,10 +25,10 @@ dependencies:
|
|
25
25
|
version: 3.1.2
|
26
26
|
type: :runtime
|
27
27
|
prerelease: false
|
28
|
-
version_requirements: *
|
28
|
+
version_requirements: *70108441577340
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rspec
|
31
|
-
requirement: &
|
31
|
+
requirement: &70108441575900 !ruby/object:Gem::Requirement
|
32
32
|
none: false
|
33
33
|
requirements:
|
34
34
|
- - ~>
|
@@ -36,10 +36,10 @@ dependencies:
|
|
36
36
|
version: 1.3.0
|
37
37
|
type: :development
|
38
38
|
prerelease: false
|
39
|
-
version_requirements: *
|
39
|
+
version_requirements: *70108441575900
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: ruby-debug19
|
42
|
-
requirement: &
|
42
|
+
requirement: &70108441574820 !ruby/object:Gem::Requirement
|
43
43
|
none: false
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
@@ -47,10 +47,10 @@ dependencies:
|
|
47
47
|
version: 0.11.6
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
|
-
version_requirements: *
|
50
|
+
version_requirements: *70108441574820
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
52
|
name: configuration
|
53
|
-
requirement: &
|
53
|
+
requirement: &70108441573720 !ruby/object:Gem::Requirement
|
54
54
|
none: false
|
55
55
|
requirements:
|
56
56
|
- - ~>
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
version: 1.2.0
|
59
59
|
type: :development
|
60
60
|
prerelease: false
|
61
|
-
version_requirements: *
|
61
|
+
version_requirements: *70108441573720
|
62
62
|
description: ! "\n Slurps stories from the given file (stories.slurper by default)
|
63
63
|
and creates Pivotal Tracker stories from them. Useful during story carding sessions
|
64
64
|
when you want to capture a number of stories quickly without clicking your way through
|