Class: MOCO::API

Inherits:
Object
  • Object
show all
Defined in:
lib/moco/api.rb

Overview

MOCO::API abstracts access to the MOCO API and its entities

Instance Method Summary collapse

Constructor Details

#initialize(subdomain, api_key) ⇒ API

Returns a new instance of API.



9
10
11
12
13
14
15
16
17
18
# File 'lib/moco/api.rb', line 9

def initialize(subdomain, api_key)
  @subdomain = subdomain
  @api_key = api_key
  @conn = Faraday.new do |f|
    f.request :json
    f.response :json
    f.request :authorization, "Token", "token=#{@api_key}" if @api_key
    f.url_prefix = "https://#{@subdomain}.mocoapp.com/api/v1"
  end
end

Instance Method Details

#archive_project(project_id) ⇒ Object



94
95
96
# File 'lib/moco/api.rb', line 94

def archive_project(project_id)
  @conn.put("projects/#{project_id}/archive")
end

#assign_project_to_group(project_id, project_group_id) ⇒ Object



114
115
116
# File 'lib/moco/api.rb', line 114

def assign_project_to_group(project_id, project_group_id)
  @conn.put("projects/#{project_id}/assign_project_group", { project_group_id: project_group_id })
end

#create_activities_bulk(activities) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/moco/api.rb', line 46

def create_activities_bulk(activities)
  api_entities = activities.map do |activity|
    activity.to_h.except(:id, :project, :user, :customer).tap do |h|
      h[:project_id] = activity.project.id
      h[:task_id] = activity.task.id
    end
  end
  @conn.post("activities/bulk", { activities: api_entities })
end

#create_activity(activity) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/moco/api.rb', line 56

def create_activity(activity)
  api_entity = activity.to_h.except(:id, :project, :user, :customer).tap do |h|
    h[:project_id] = activity.project.id
    h[:task_id] = activity.task.id
  end
  @conn.post("activities", api_entity)
end

#delete_activity(activity_id) ⇒ Object



90
91
92
# File 'lib/moco/api.rb', line 90

def delete_activity(activity_id)
  @conn.delete("activities/#{activity_id}")
end

#disable_project_report_sharing(project_id) ⇒ Object



110
111
112
# File 'lib/moco/api.rb', line 110

def disable_project_report_sharing(project_id)
  @conn.put("projects/#{project_id}/disable_share")
end

#disregard_activities(reason:, activity_ids:, company_id:, project_id: nil) ⇒ Object



80
81
82
83
84
85
86
87
88
# File 'lib/moco/api.rb', line 80

def disregard_activities(reason:, activity_ids:, company_id:, project_id: nil)
  payload = {
    reason: reason,
    activity_ids: activity_ids,
    company_id: company_id
  }
  payload[:project_id] = project_id if project_id
  @conn.post("activities/disregard", payload)
end

#get_activities(filters = {}) ⇒ Object



36
37
38
39
# File 'lib/moco/api.rb', line 36

def get_activities(filters = {})
  response = @conn.get("activities?#{Faraday::Utils.build_query(filters)}")
  parse_activities_response(response.body)
end

#get_activity(id) ⇒ Object



41
42
43
44
# File 'lib/moco/api.rb', line 41

def get_activity(id)
  response = @conn.get("activities/#{id}")
  parse_activities_response([response.body]).first
end

#get_assigned_projects(**args) ⇒ Object



31
32
33
34
# File 'lib/moco/api.rb', line 31

def get_assigned_projects(**args)
  response = @conn.get("projects/assigned?#{Faraday::Utils.build_query(args)}")
  parse_projects_response(response.body)
end

#get_project_report(project_id) ⇒ Object



102
103
104
# File 'lib/moco/api.rb', line 102

def get_project_report(project_id)
  @conn.get("projects/#{project_id}/report")
end

#get_projects(**args) ⇒ Object



26
27
28
29
# File 'lib/moco/api.rb', line 26

def get_projects(**args)
  response = @conn.get("projects?#{Faraday::Utils.build_query(args)}")
  parse_projects_response(response.body)
end

#share_project_report(project_id) ⇒ Object



106
107
108
# File 'lib/moco/api.rb', line 106

def share_project_report(project_id)
  @conn.put("projects/#{project_id}/share")
end

#start_activity_timer(activity_id) ⇒ Object



72
73
74
# File 'lib/moco/api.rb', line 72

def start_activity_timer(activity_id)
  @conn.patch("activities/#{activity_id}/start_timer")
end

#stop_activity_timer(activity_id) ⇒ Object



76
77
78
# File 'lib/moco/api.rb', line 76

def stop_activity_timer(activity_id)
  @conn.patch("activities/#{activity_id}/stop_timer")
end

#unarchive_project(project_id) ⇒ Object



98
99
100
# File 'lib/moco/api.rb', line 98

def unarchive_project(project_id)
  @conn.put("projects/#{project_id}/unarchive")
end

#unassign_project_from_group(project_id) ⇒ Object



118
119
120
# File 'lib/moco/api.rb', line 118

def unassign_project_from_group(project_id)
  @conn.put("projects/#{project_id}/unassign_project_group")
end

#update_activity(activity) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/moco/api.rb', line 64

def update_activity(activity)
  api_entity = activity.to_h.except(:project, :user, :customer).tap do |h|
    h[:project_id] = activity.project.id
    h[:task_id] = activity.task.id
  end
  @conn.put("activities/#{activity.id}", api_entity)
end