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 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[:reverse])
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
- self.stories = YAML.load(yamlize_story_file)
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
- self.description += "\n" + "Label Search\n" + label_search_url + "\n\n" + story_links.join("\n") if epic_story?
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 story_links
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.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-21 00:00:00.000000000Z
16
+ date: 2011-11-28 00:00:00.000000000Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: activeresource
20
- requirement: &70340789669980 !ruby/object:Gem::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: *70340789669980
28
+ version_requirements: *70108441577340
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rspec
31
- requirement: &70340789669360 !ruby/object:Gem::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: *70340789669360
39
+ version_requirements: *70108441575900
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: ruby-debug19
42
- requirement: &70340789668760 !ruby/object:Gem::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: *70340789668760
50
+ version_requirements: *70108441574820
51
51
  - !ruby/object:Gem::Dependency
52
52
  name: configuration
53
- requirement: &70340789668160 !ruby/object:Gem::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: *70340789668160
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