lib/pt/client.rb in pt-0.7.3 vs lib/pt/client.rb in pt-0.8.0

- old
+ new

@@ -1,137 +1,156 @@ -require 'pivotal-tracker' require 'pt/switch_ssl' +require 'uri' +require 'tracker_api' -class PT::Client +module PT + class Client - def self.get_api_token(email, password) - PivotalTracker::Client.token(email, password) - rescue RestClient::Unauthorized - raise PT::InputError.new("Bad email/password combination.") - end + STORY_FIELDS=':default,requested_by,owners,tasks,comments(:default,person,file_attachments)' - def initialize(api_number) - PivotalTracker::Client.token = api_number - @project = nil - end - def get_project(project_id) - get_projects - project = PivotalTracker::Project.find(project_id) - PivotalTracker::Client.use_ssl = project.use_https - project - end + def self.get_api_token(email, password) + PivotalAPI::Me.retrieve(email, password) + rescue RestClient::Unauthorized + raise PT::InputError.new("Bad email/password combination.") + end - def get_projects - PivotalTracker::Project.all - end + def initialize(token) + @client = TrackerApi::Client.new(token: token) + @project = nil + end - def get_membership(project, email) - PivotalTracker::Membership.all(project).select{ |m| m.email == email }.first - end + def get_project(project_id) + project = @client.project(project_id) + project + end - def get_current_iteration(project) - PivotalTracker::Iteration.current(project) - end + def get_projects + @client.projects + end - def get_activities(project, limit) - if limit - project.activities.all :limit => limit - else - project.activities.all + def get_membership(project, email) + PivotalTracker::Membership.all(project).select{ |m| m.email == email }.first end - end - def get_work(project) - project.stories.all(:current_state => 'unscheduled,unstarted,started') - end + def get_my_info + @client.me + end - def get_my_work(project, user_name) - project.stories.all :mywork => user_name - end + def get_current_iteration(project) + PivotalTracker::Iteration.current(project) + end - def get_task_by_id(id) - get_projects.map {|project| project.stories.all(:id => id)}.flatten.first - end + def get_activities(project, limit) + project.activity + end - def get_my_open_tasks(project, user_name) - project.stories.all :owner => user_name - end + def get_work(project) + project.stories(filter: 'state:unscheduled,unstarted,started', fields: STORY_FIELDS ) + end - def get_my_tasks_to_estimate(project, user_name) - project.stories.all(:owner => user_name, :story_type => 'feature').select{ |t| t.estimate == -1 } - end + def get_my_work(project, user_name) + project.stories(filter: "owner:#{user_name} -state:accepted", limit: 50, fields: STORY_FIELDS) + end - def get_my_tasks_to_start(project, user_name) - tasks = project.stories.all(:owner => user_name, :current_state => 'unscheduled,rejected,unstarted') - tasks.reject{ |t| (t.story_type == 'feature') && (t.estimate == -1) } - end + def search_for_story(project, query) + project.stories(filter: query.to_s ,fields: STORY_FIELDS) + end - def get_my_tasks_to_finish(project, user_name) - project.stories.all(:owner => user_name, :current_state => 'started') - end + def get_task_by_id(project, id) + project.story(id, fields: STORY_FIELDS) + end + alias :get_story :get_task_by_id - def get_my_tasks_to_deliver(project, user_name) - project.stories.all(:owner => user_name, :current_state => 'finished') - end + def get_my_open_tasks(project, user_name) + project.stories filter: "owner:#{user_name}", fields: STORY_FIELDS + end - def get_my_tasks_to_accept(project, user_name) - project.stories.all(:owner => user_name, :current_state => 'delivered') - end + def get_my_tasks_to_estimate(project, user_name) + project.stories( filter: "owner:#{user_name} type:feature estimate:-1", fields: STORY_FIELDS) + end - def get_my_tasks_to_reject(project, user_name) - project.stories.all(:owner => user_name, :current_state => 'delivered') - end + def get_my_tasks_to_start(project, user_name) + tasks = project.stories filter: "owner:#{user_name} state:unscheduled,rejected,unstarted", limit: 50, fields: STORY_FIELDS + tasks.reject{ |t| (t.story_type == 'feature') && (t.estimate == -1) } + end - def get_tasks_to_assign(project, user_name) - project.stories.all.select{ |t| t.owned_by == nil } - end + def get_my_tasks_to_finish(project, user_name) + project.stories filter: "owner:#{user_name} -state:finished,delivered,accepted,rejected", limit: 50, fields: STORY_FIELDS + end - def get_member(project, query) - member = project.memberships.all.select{ |m| m.name.downcase.start_with? query.downcase || m.initials.downcase == query.downcase } - member.empty? ? nil : member.first - end + def get_my_tasks_to_deliver(project, user_name) + project.stories filter: "owner:#{user_name} -state:delivered,accepted,rejected", limit: 50, fields: STORY_FIELDS + end - def get_members(project) - project.memberships.all - end + def get_my_tasks_to_accept(project, user_name) + project.stories filter: "owner:#{user_name} -state:accepted", limit: 50, fields: STORY_FIELDS + end - def mark_task_as(project, task, state) - task = PivotalTracker::Story.find(task.id, project.id) - task.update(:current_state => state) - end + def get_my_tasks_to_reject(project, user_name) + project.stories filter: "owner:#{user_name} -state:rejected", limit: 50, fields: STORY_FIELDS + end - def estimate_task(project, task, points) - task = PivotalTracker::Story.find(task.id, project.id) - task.update(:estimate => points) - end + def get_tasks_to_assign(project) + project.stories filter: "-state:accepted", limit: 50 + end - def assign_task(project, task, owner) - task = PivotalTracker::Story.find(task.id, project.id) - task.update(:owned_by => owner) - end + def get_all_stories(project, user_name) + project.stories limit: 50, fields: STORY_FIELDS + end - def add_label(project, task, label) - task = PivotalTracker::Story.find(task.id, project.id) - if task.labels - task.labels += "," + label; - task.update(:labels => task.labels) - else - task.update(:labels => label) + + def get_member(project, query) + member = project.memberships.select{ |m| m.person.name.downcase.start_with?(query.downcase) || m.person.initials.downcase == query.downcase } + member.empty? ? nil : member.first end - end - def comment_task(project, task, comment) - task = PivotalTracker::Story.find(task.id, project.id) - task.notes.create(:text => comment) - end + def find_member(project, query) + memberships = project.memberships.detect do |m| + m.person.name.downcase.start_with?(query.downcase) || m.person.initials.downcase == query.downcase + end + end - def create_task(project, name, owner, requester, task_type) - project.stories.create(:name => name, :owned_by => owner, :requested_by => requester, :story_type => task_type) - end + def get_members(project) + project.memberships fields: ':default,person' + end - def create_task_with_description(project, name, owner, requester, task_type, description) - project.stories.create(:name => name, :owned_by => owner, :requested_by => requester, :story_type => task_type, :description => description) - end + def mark_task_as(project, task, state) + task = get_story(project, task.id) + task.current_state = state + task.save + end + def estimate_task(project, task, points) + task = get_story(project, task.id) + task.estimate = points + task.save + end + + def assign_task(project, task, owner) + task = get_story(project, task.id) + task.add_owner(owner) + end + + def add_label(project, task, label) + task = get_story(project, task.id) + task.add_label(label) + task.save + end + + def comment_task(project, task, comment) + task = get_story(project, task.id) + task.create_comment(text: comment) + end + + def create_task(project, name, owner_ids, task_type) + project.create_story(:name => name, :story_type => task_type, owner_ids: owner_ids) + end + + def create_task_with_description(project, name, owner, task_type, description) + project.create_story(:name => name, :story_type => task_type, :description => description) + end + + + end end