Module: OmniFocus::Pivotaltracker

Defined in:
lib/omnifocus/pivotaltracker/version.rb,
lib/omnifocus/pivotaltracker.rb

Constant Summary collapse

VERSION =
"1.2.0"
PREFIX =
"PT"

Instance Method Summary collapse

Instance Method Details

#fetch_projects(token) ⇒ Object



46
47
48
# File 'lib/omnifocus/pivotaltracker.rb', line 46

def fetch_projects(token)
  JSON.parse(open("https://www.pivotaltracker.com/services/v5/projects", "X-TrackerToken" => token).read)
end

#fetch_stories(token, project_id, user_name) ⇒ Object



50
51
52
53
54
55
56
# File 'lib/omnifocus/pivotaltracker.rb', line 50

def fetch_stories(token, project_id, user_name)
  url = "https://www.pivotaltracker.com/services/v5/projects/#{project_id}/stories?filter=" +
        "mywork:#{CGI.escape(user_name)}" +
        "%20state:unscheduled,unstarted,started,rejected"

  JSON.parse(open(url, "X-TrackerToken" => token).read)
end

#load_or_create_configObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/omnifocus/pivotaltracker.rb', line 9

def load_or_create_config
  path   = File.expand_path "~/.omnifocus-pivotaltracker.yml"
  config = YAML.load(File.read(path)) rescue nil

  unless config then
    config = { :token => "TOKEN", :user_name => "Full name, initials or unique part of the user's name" }

    File.open(path, "w") { |f|
      YAML.dump(config, f)
    }

    abort "Created default config in #{path}. Go fill it out."
  end

  # Make things working against single/multiple account settings.
  [config].flatten
end

#populate_pivotaltracker_tasksObject



27
28
29
30
31
32
# File 'lib/omnifocus/pivotaltracker.rb', line 27

def populate_pivotaltracker_tasks
  config    = load_or_create_config
  config.each do |conf|
    populate_pivotaltracker_tasks_for_project(conf[:token], conf[:user_name])
  end
end

#populate_pivotaltracker_tasks_for_project(token, user_name) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/omnifocus/pivotaltracker.rb', line 34

def populate_pivotaltracker_tasks_for_project(token, user_name)
  projects = fetch_projects(token)

  projects.each do |project|
    fetch_stories(token, project["id"], user_name).each do |story|
      process_story(project, story)
    end
  end
rescue OpenURI::HTTPError => error
  puts "Connection to Pivotal Tracker failed and updating could not be done."
end

#process_story(project, story) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/omnifocus/pivotaltracker.rb', line 58

def process_story(project, story)
  number       = story["id"]
  url          = story["url"]
  project_name = project["name"]
  ticket_id    = "#{PREFIX}-#{project_name}##{number}"
  title        = "#{ticket_id}: #{story["name"]}"

  if existing[ticket_id]
    bug_db[existing[ticket_id]][ticket_id] = true
    return
  end

  bug_db[project_name][ticket_id] = [title, url]
end