Class: Pickler
- Inherits:
-
Object
show all
- Defined in:
- lib/pickler.rb,
lib/pickler/runner.rb,
lib/pickler/feature.rb,
lib/pickler/tracker.rb,
lib/pickler/tracker/note.rb,
lib/pickler/tracker/story.rb,
lib/pickler/tracker/project.rb,
lib/pickler/tracker/iteration.rb
Defined Under Namespace
Classes: Error, Feature, Runner, Tracker
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(path = '.') ⇒ Pickler
Returns a new instance of Pickler.
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/pickler.rb', line 39
def initialize(path = '.')
@lang = 'en'
@directory = File.expand_path(path)
until File.directory?(File.join(@directory,'features'))
if @directory == File.dirname(@directory)
raise Error, 'Project not found. Make sure you have a features/ directory.', caller
end
@directory = File.dirname(@directory)
end
end
|
Instance Attribute Details
#directory ⇒ Object
Returns the value of attribute directory.
37
38
39
|
# File 'lib/pickler.rb', line 37
def directory
@directory
end
|
Class Method Details
.config ⇒ Object
12
13
14
15
16
17
18
|
# File 'lib/pickler.rb', line 12
def self.config
@config ||= {'api_token' => ENV["TRACKER_API_TOKEN"]}.merge(
if File.exist?(path = File.expand_path('~/.tracker.yml'))
YAML.load_file(path)
end || {}
)
end
|
.hash_to_xml(root, attributes) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/pickler.rb', line 20
def self.hash_to_xml(root, attributes)
require 'cgi'
xml = "<#{root}>"
attributes.each do |k,v|
if v.kind_of?(Hash)
xml << hash_to_xml(k, v)
else
xml << "<#{k}>#{CGI.escapeHTML(v.to_s)}</#{k}>"
end
end
xml << "</#{root}>"
end
|
.run(argv) ⇒ Object
33
34
35
|
# File 'lib/pickler.rb', line 33
def self.run(argv)
Runner.new(argv).run
end
|
Instance Method Details
#config ⇒ Object
58
59
60
61
|
# File 'lib/pickler.rb', line 58
def config
@config ||= File.exist?(config_file) && YAML.load_file(config_file) || {}
self.class.config.merge(@config)
end
|
#config_file ⇒ Object
54
55
56
|
# File 'lib/pickler.rb', line 54
def config_file
features_path('tracker.yml')
end
|
#deliver_all_finished_stories ⇒ Object
94
95
96
|
# File 'lib/pickler.rb', line 94
def deliver_all_finished_stories
project.deliver_all_finished_stories
end
|
#feature(string) ⇒ Object
139
140
141
|
# File 'lib/pickler.rb', line 139
def feature(string)
string.kind_of?(Feature) ? string : Feature.new(self,string)
end
|
#features_path(*subdirs) ⇒ Object
50
51
52
|
# File 'lib/pickler.rb', line 50
def features_path(*subdirs)
File.join(@directory,'features',*subdirs)
end
|
123
124
125
|
# File 'lib/pickler.rb', line 123
def format
(config['format'] || :tag).to_sym
end
|
#iteration_length ⇒ Object
82
83
84
|
# File 'lib/pickler.rb', line 82
def iteration_length
project.iteration_length
end
|
#local_features ⇒ Object
127
128
129
|
# File 'lib/pickler.rb', line 127
def local_features
Dir[features_path('**','*.feature')].map {|f|feature(f)}.select {|f|f.pushable?}
end
|
#name ⇒ Object
78
79
80
|
# File 'lib/pickler.rb', line 78
def name
project.name
end
|
#new_story(attributes = {}, &block) ⇒ Object
67
68
69
70
71
72
|
# File 'lib/pickler.rb', line 67
def new_story(attributes = {}, &block)
attributes = attributes.inject('requested_by' => real_name) do |h,(k,v)|
h.update(k.to_s => v)
end
project.new_story(attributes, &block)
end
|
#point_scale ⇒ Object
86
87
88
|
# File 'lib/pickler.rb', line 86
def point_scale
project.point_scale
end
|
#project ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/pickler.rb', line 102
def project
@project ||= Dir.chdir(@directory) do
unless token = config['api_token']
raise Error, 'echo api_token: ... > ~/.tracker.yml'
end
unless id = project_id
raise Error, 'echo project_id: ... > features/tracker.yml'
end
ssl = config['ssl']
Tracker.new(token, ssl).project(id)
end
end
|
#project_id ⇒ Object
98
99
100
|
# File 'lib/pickler.rb', line 98
def project_id
config["project_id"] || (self.class.config["projects"]||{})[File.basename(@directory)]
end
|
#real_name ⇒ Object
63
64
65
|
# File 'lib/pickler.rb', line 63
def real_name
config["real_name"] || (require 'etc'; Etc.getpwuid.gecos.split(',').first)
end
|
#scenario_features(excluded_states = %w(unscheduled unstarted))) ⇒ Object
131
132
133
134
135
136
137
|
# File 'lib/pickler.rb', line 131
def scenario_features(excluded_states = %w(unscheduled unstarted))
project.stories(scenario_word, :includedone => true).reject do |s|
Array(excluded_states).map {|state| state.to_s}.include?(s.current_state)
end.select do |s|
s.to_s =~ /^\s*#{Regexp.escape(scenario_word)}:/
end
end
|
#scenario_word ⇒ Object
115
116
117
118
119
120
121
|
# File 'lib/pickler.rb', line 115
def scenario_word
if @lang == 'en'
'Scenario'
else
raise Error, 'Sorry, no internationalization support (yet)'
end
end
|
#stories(*args) ⇒ Object
74
75
76
|
# File 'lib/pickler.rb', line 74
def stories(*args)
project.stories(*args)
end
|
#story(string) ⇒ Object
143
144
145
|
# File 'lib/pickler.rb', line 143
def story(string)
feature(string).story
end
|
#week_start_day ⇒ Object
90
91
92
|
# File 'lib/pickler.rb', line 90
def week_start_day
project.week_start_day
end
|