Class: Asana::Resources::Story

Inherits:
Resource
  • Object
show all
Defined in:
lib/asana/resources/story.rb

Overview

A story represents an activity associated with an object in the Asana system. Stories are generated by the system whenever users take actions such as creating or assigning tasks, or moving tasks between projects. Comments are also a form of user-generated story.

Stories are a form of history in the system, and as such they are read-only. Once generated, it is not possible to modify a story.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Resource

inherited, #initialize, #method_missing, #refresh, #respond_to_missing?, #to_h, #to_s

Methods included from ResponseHelper

#parse

Constructor Details

This class inherits a constructor from Asana::Resources::Resource

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Asana::Resources::Resource

Instance Attribute Details

#created_atObject (readonly)



18
19
20
# File 'lib/asana/resources/story.rb', line 18

def created_at
  @created_at
end

#created_byObject (readonly)



20
21
22
# File 'lib/asana/resources/story.rb', line 20

def created_by
  @created_by
end

#heartedObject (readonly)

DEPRECATED: prefer “liked”



23
24
25
# File 'lib/asana/resources/story.rb', line 23

def hearted
  @hearted
end

#heartsObject (readonly)

DEPRECATED: prefer “likes”



26
27
28
# File 'lib/asana/resources/story.rb', line 26

def hearts
  @hearts
end

#html_textObject (readonly)



39
40
41
# File 'lib/asana/resources/story.rb', line 39

def html_text
  @html_text
end

#idObject (readonly)



16
17
18
# File 'lib/asana/resources/story.rb', line 16

def id
  @id
end

#is_editedObject (readonly)



45
46
47
# File 'lib/asana/resources/story.rb', line 45

def is_edited
  @is_edited
end

#is_pinnedObject (readonly)



43
44
45
# File 'lib/asana/resources/story.rb', line 43

def is_pinned
  @is_pinned
end

#likedObject (readonly)



31
32
33
# File 'lib/asana/resources/story.rb', line 31

def liked
  @liked
end

#likesObject (readonly)



33
34
35
# File 'lib/asana/resources/story.rb', line 33

def likes
  @likes
end

#num_heartsObject (readonly)

DEPRECATED: prefer “num_likes”



29
30
31
# File 'lib/asana/resources/story.rb', line 29

def num_hearts
  @num_hearts
end

#num_likesObject (readonly)



35
36
37
# File 'lib/asana/resources/story.rb', line 35

def num_likes
  @num_likes
end

#sourceObject (readonly)



47
48
49
# File 'lib/asana/resources/story.rb', line 47

def source
  @source
end

#targetObject (readonly)



41
42
43
# File 'lib/asana/resources/story.rb', line 41

def target
  @target
end

#textObject (readonly)



37
38
39
# File 'lib/asana/resources/story.rb', line 37

def text
  @text
end

#typeObject (readonly)



49
50
51
# File 'lib/asana/resources/story.rb', line 49

def type
  @type
end

Class Method Details

.create_on_task(client, task: required("task"), text: required("text"), options: {}, **data) ⇒ Object

Adds a comment to a task. The comment will be authored by the currently authenticated user, and timestamped when the server receives the request.

Parameters:

  • Returns

    the full record for the new story added to the task.

  • task (Id) (defaults to: required("task"))

    Globally unique identifier for the task.

  • text (String) (defaults to: required("text"))

    The plain text of the comment to add.

  • options (Hash) (defaults to: {})

    the request I/O options.

  • data (Hash)

    the attributes to post.



89
90
91
92
# File 'lib/asana/resources/story.rb', line 89

def create_on_task(client, task: required("task"), text: required("text"), options: {}, **data)
  with_params = data.merge(text: text).reject { |_,v| v.nil? || Array(v).empty? }
  self.new(parse(client.post("/tasks/#{task}/stories", body: with_params, options: options)).first, client: client)
end

.find_by_id(client, id, options: {}) ⇒ Object

Returns the full record for a single story.

Parameters:

  • id (Id)

    Globally unique identifier for the story.

  • options (Hash) (defaults to: {})

    the request I/O options.



73
74
75
76
# File 'lib/asana/resources/story.rb', line 73

def find_by_id(client, id, options: {})

  self.new(parse(client.get("/stories/#{id}", options: options)).first, client: client)
end

.find_by_task(client, task: required("task"), per_page: 20, options: {}) ⇒ Object

Returns the compact records for all stories on the task.

Parameters:

  • task (Id) (defaults to: required("task"))

    Globally unique identifier for the task.

  • per_page (Integer) (defaults to: 20)

    the number of records to fetch per page.

  • options (Hash) (defaults to: {})

    the request I/O options.



63
64
65
66
# File 'lib/asana/resources/story.rb', line 63

def find_by_task(client, task: required("task"), per_page: 20, options: {})
  params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
  Collection.new(parse(client.get("/tasks/#{task}/stories", params: params, options: options)), type: self, client: client)
end

.plural_nameObject

Returns the plural name of the resource.



53
54
55
# File 'lib/asana/resources/story.rb', line 53

def plural_name
  'stories'
end

Instance Method Details

#deleteObject

Deletes a story. A user can only delete stories they have created. Returns an empty data record.



111
112
113
114
# File 'lib/asana/resources/story.rb', line 111

def delete()

  client.delete("/stories/#{id}") && true
end

#update(text: nil, html_text: nil, is_pinned: nil, options: {}, **data) ⇒ Object

Updates the story and returns the full record for the updated story. Only comment stories can have their text updated, and only comment stories and attachment stories can be pinned. Only one of ‘text` and `html_text` can be specified.

Parameters:

  • text (String) (defaults to: nil)

    The plain text with which to update the comment.

  • html_text (String) (defaults to: nil)

    The rich text with which to update the comment.

  • is_pinned (Boolean) (defaults to: nil)

    Whether the story should be pinned on the resource.

  • options (Hash) (defaults to: {})

    the request I/O options.

  • data (Hash)

    the attributes to post.



105
106
107
108
# File 'lib/asana/resources/story.rb', line 105

def update(text: nil, html_text: nil, is_pinned: nil, options: {}, **data)
  with_params = data.merge(text: text, html_text: html_text, is_pinned: is_pinned).reject { |_,v| v.nil? || Array(v).empty? }
  refresh_with(parse(client.put("/stories/#{id}", body: with_params, options: options)).first)
end