ruby-trello 4.0.0 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 444768a08c6a6d45235a6a35d935870d9a18dfd3486e64067ba4cdececf34701
4
- data.tar.gz: b3af839b451f934e29be6c6a5247c2945fc6d864182f70dc70be284f38c9cb55
3
+ metadata.gz: 33fd510f3a84ba004edaa9f4ccec95bb616af0d8658be375ba079916bfa8795d
4
+ data.tar.gz: 7cfeadb04a8a97351b83d5c8b8dc316a2b8f868e54b827993a49b4668031d8ee
5
5
  SHA512:
6
- metadata.gz: 5a719ac68ef702c5acb8e1cdccee07ff149f69c73e523f5c553823f68d3a7ac9643337b668218009f3c45138d69545dcde89946bad1b5f3fe464ea1ae6b0f020
7
- data.tar.gz: 6a3f2dd5aee11df5ab30a08098174c70119e1ceac944d4b689e0fca4076d9dac198d06b63f376c8142fd4a825ac96645e34eacca260f1909257b2b7cfaf340b6
6
+ metadata.gz: 87ed9410f4f6d834e87f3cb26f0e50eadcf8746224775605877e8c981c0848643cf25eefe4bace7fa76a54bf046282f5f68b3252ece365db6113b93375433191
7
+ data.tar.gz: 0bbf70b993c9a15b046b4cfcc028d90b04f98a78994017f4257404ec43fc5b6c1fe0e37ade3d189801672c9a5b9a7915f62d5e2430e8948a6a399c427111c50d
data/README.md CHANGED
@@ -15,11 +15,12 @@ to, please just [create an issue](https://github.com/jeremytregunna/ruby-trello/
15
15
 
16
16
  ## Requirements
17
17
 
18
- | Ruby \ ActiveModel | 6.0 | 6.1 | 7.0 |
18
+ | Ruby \ ActiveModel | 6.0 | 6.1 | 7.0 | 7.1 |
19
19
  | ---- | ---- | ---- | ---- |
20
- | 2.7 | ✅ | ✅ | ✅ |
21
- | 3.0 | ✅ | ✅ | ✅ |
22
- | 3.1 | ✅ | ✅ | ✅ |
20
+ | 2.7 | ✅ | ✅ | ✅ | ✅ |
21
+ | 3.0 | ✅ | ✅ | ✅ | ✅ |
22
+ | 3.1 | ✅ | ✅ | ✅ | ✅ |
23
+ | 3.2 | ✅ | ✅ | ✅ | ✅ |
23
24
 
24
25
  - Use the newest version for Ruby 2.7.0 or newer support.
25
26
  - Use version 3.2.0 or earlier for Ruby 2.5 ~ 2.6 support.
data/lib/trello/action.rb CHANGED
@@ -54,23 +54,23 @@ module Trello
54
54
  end
55
55
 
56
56
  # Returns the board this action occurred on.
57
- def board
58
- Board.from_response client.get("/actions/#{id}/board")
57
+ def board(params = {})
58
+ Board.from_response client.get("/actions/#{id}/board", params)
59
59
  end
60
60
 
61
61
  # Returns the card the action occurred on.
62
- def card
63
- Card.from_response client.get("/actions/#{id}/card")
62
+ def card(params = {})
63
+ Card.from_response client.get("/actions/#{id}/card", params)
64
64
  end
65
65
 
66
66
  # Returns the list the action occurred on.
67
- def list
68
- List.from_response client.get("/actions/#{id}/list")
67
+ def list(params = {})
68
+ List.from_response client.get("/actions/#{id}/list", params)
69
69
  end
70
70
 
71
71
  # Returns the list the action occurred on.
72
- def member_creator
73
- Member.from_response client.get("/actions/#{id}/memberCreator")
72
+ def member_creator(params = {})
73
+ Member.from_response client.get("/actions/#{id}/memberCreator", params)
74
74
  end
75
75
  end
76
76
  end
data/lib/trello/board.rb CHANGED
@@ -106,8 +106,8 @@ module Trello
106
106
 
107
107
  class << self
108
108
  # @return [Array<Trello::Board>] all boards for the current user
109
- def all
110
- from_response client.get("/members/#{Member.find(:me).username}/boards")
109
+ def all(params = {})
110
+ from_response client.get("/members/#{Member.find(:me).username}/boards", params)
111
111
  end
112
112
  end
113
113
 
data/lib/trello/card.rb CHANGED
@@ -105,8 +105,8 @@ module Trello
105
105
  # List of custom field values on the card, only the ones that have been set
106
106
  many :custom_field_items, path: 'customFieldItems'
107
107
 
108
- def check_item_states
109
- states = CheckItemState.from_response client.get("/cards/#{self.id}/checkItemStates")
108
+ def check_item_states(params = {})
109
+ states = CheckItemState.from_response client.get("/cards/#{self.id}/checkItemStates", params)
110
110
  MultiAssociation.new(self, states).proxy
111
111
  end
112
112
 
@@ -116,8 +116,8 @@ module Trello
116
116
  # Returns a list of members who are assigned to this card.
117
117
  #
118
118
  # @return [Array<Trello::Member>]
119
- def members
120
- members = Member.from_response client.get("/cards/#{self.id}/members")
119
+ def members(params = {})
120
+ members = Member.from_response client.get("/cards/#{self.id}/members", params)
121
121
  MultiAssociation.new(self, members).proxy
122
122
  end
123
123
 
@@ -127,8 +127,8 @@ module Trello
127
127
  # accuracy over network performance
128
128
  #
129
129
  # @return [Array<Trello::Member>]
130
- def voters
131
- Member.from_response client.get("/cards/#{id}/membersVoted")
130
+ def voters(params = {})
131
+ Member.from_response client.get("/cards/#{id}/membersVoted", params)
132
132
  end
133
133
 
134
134
  # Delete this card
@@ -273,7 +273,7 @@ module Trello
273
273
  # Is it a file object or a string (url)?
274
274
  if attachment.respond_to?(:path) && attachment.respond_to?(:read)
275
275
  client.post("/cards/#{id}/attachments", {
276
- file: attachment,
276
+ file: Trello::TInternet.multipart_file(attachment),
277
277
  name: name
278
278
  })
279
279
  else
@@ -285,8 +285,8 @@ module Trello
285
285
  end
286
286
 
287
287
  # Retrieve a list of attachments
288
- def attachments
289
- attachments = Attachment.from_response client.get("/cards/#{id}/attachments")
288
+ def attachments(params = {})
289
+ attachments = Attachment.from_response client.get("/cards/#{id}/attachments", params)
290
290
  MultiAssociation.new(self, attachments).proxy
291
291
  end
292
292
 
@@ -301,8 +301,9 @@ module Trello
301
301
  end
302
302
 
303
303
  # Retrieve a list of comments
304
- def comments
305
- comments = Comment.from_response client.get("/cards/#{id}/actions", filter: "commentCard")
304
+ def comments(params = {})
305
+ params[:filter] ||= "commentCard"
306
+ comments = Comment.from_response client.get("/cards/#{id}/actions", params)
306
307
  end
307
308
 
308
309
  # Find the creation date
@@ -49,18 +49,18 @@ module Trello
49
49
  end
50
50
 
51
51
  # Returns the board this comment is located
52
- def board
53
- Board.from_response client.get("/actions/#{id}/board")
52
+ def board(params = {})
53
+ Board.from_response client.get("/actions/#{id}/board", params)
54
54
  end
55
55
 
56
56
  # Returns the card the comment is located
57
- def card
58
- Card.from_response client.get("/actions/#{id}/card")
57
+ def card(params = {})
58
+ Card.from_response client.get("/actions/#{id}/card", params)
59
59
  end
60
60
 
61
61
  # Returns the list the comment is located
62
- def list
63
- List.from_response client.get("/actions/#{id}/list")
62
+ def list(params = {})
63
+ List.from_response client.get("/actions/#{id}/list", params)
64
64
  end
65
65
 
66
66
  # Deletes the comment from the card
@@ -4,6 +4,8 @@ module Trello
4
4
  class << self
5
5
  begin
6
6
  require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'mime/types'
7
9
  rescue LoadError
8
10
  end
9
11
 
@@ -11,6 +13,14 @@ module Trello
11
13
  try_execute request
12
14
  end
13
15
 
16
+ def multipart_file(file)
17
+ Faraday::Multipart::FilePart.new(
18
+ file,
19
+ content_type(file),
20
+ filename(file)
21
+ )
22
+ end
23
+
14
24
  private
15
25
 
16
26
  def try_execute(request)
@@ -33,6 +43,7 @@ module Trello
33
43
  request: { timeout: 10 }
34
44
  ) do |faraday|
35
45
  faraday.response :raise_error
46
+ faraday.request :multipart
36
47
  faraday.request :json
37
48
  end
38
49
 
@@ -40,6 +51,26 @@ module Trello
40
51
  req.body = request.body
41
52
  end
42
53
  end
54
+
55
+ def content_type(file)
56
+ return file.content_type if file.respond_to?(:content_type)
57
+
58
+ mime = MIME::Types.type_for file.path
59
+ if mime.empty?
60
+ 'text/plain'
61
+ else
62
+ mime[0].content_type
63
+ end
64
+ end
65
+
66
+ def filename(file)
67
+ if file.respond_to?(:original_filename)
68
+ file.original_filename
69
+ else
70
+ File.basename(file.path)
71
+ end
72
+ end
73
+
43
74
  end
44
75
  end
45
76
  end
@@ -11,6 +11,10 @@ module Trello
11
11
  try_execute request
12
12
  end
13
13
 
14
+ def multipart_file(file)
15
+ file
16
+ end
17
+
14
18
  private
15
19
 
16
20
  def try_execute(request)
data/lib/trello/net.rb CHANGED
@@ -7,6 +7,10 @@ module Trello
7
7
  def execute(request)
8
8
  Trello.http_client.execute(request)
9
9
  end
10
+
11
+ def multipart_file(file)
12
+ Trello.http_client.multipart_file(file)
13
+ end
10
14
  end
11
15
  end
12
16
  end
@@ -45,24 +45,24 @@ module Trello
45
45
 
46
46
  one :creator, path: :members, via: Member, using: :creator_id
47
47
 
48
- def board
49
- Board.from_response client.get("/notifications/#{id}/board")
48
+ def board(params = {})
49
+ Board.from_response client.get("/notifications/#{id}/board", params)
50
50
  end
51
51
 
52
- def list
53
- List.from_response client.get("/notifications/#{id}/list")
52
+ def list(params = {})
53
+ List.from_response client.get("/notifications/#{id}/list", params)
54
54
  end
55
55
 
56
- def card
57
- Card.from_response client.get("/notifications/#{id}/card")
56
+ def card(params = {})
57
+ Card.from_response client.get("/notifications/#{id}/card", params)
58
58
  end
59
59
 
60
- def member
61
- Member.from_response client.get("/notifications/#{id}/member")
60
+ def member(params = {})
61
+ Member.from_response client.get("/notifications/#{id}/member", params)
62
62
  end
63
63
 
64
- def organization
65
- Organization.from_response client.get("/notifications/#{id}/organization")
64
+ def organization(params = {})
65
+ Organization.from_response client.get("/notifications/#{id}/organization", params)
66
66
  end
67
67
  end
68
68
  end
@@ -77,8 +77,8 @@ module Trello
77
77
  end
78
78
 
79
79
  # Returns a list of boards under this organization.
80
- def boards
81
- boards = Board.from_response client.get("/organizations/#{id}/boards/all")
80
+ def boards(params = {})
81
+ boards = Board.from_response client.get("/organizations/#{id}/boards", params)
82
82
  MultiAssociation.new(self, boards).proxy
83
83
  end
84
84
 
data/spec/action_spec.rb CHANGED
@@ -71,7 +71,7 @@ module Trello
71
71
  before do
72
72
  allow(client)
73
73
  .to receive(:get)
74
- .with('/actions/4ee2482134a81a757a08af47/board')
74
+ .with('/actions/4ee2482134a81a757a08af47/board', {})
75
75
  .and_return payload
76
76
  end
77
77
 
@@ -87,7 +87,7 @@ module Trello
87
87
  before do
88
88
  allow(client)
89
89
  .to receive(:get)
90
- .with('/actions/4ee2482134a81a757a08af47/card')
90
+ .with('/actions/4ee2482134a81a757a08af47/card', {})
91
91
  .and_return payload
92
92
  end
93
93
 
@@ -102,7 +102,7 @@ module Trello
102
102
  before do
103
103
  allow(client)
104
104
  .to receive(:get)
105
- .with('/actions/4ee2482134a81a757a08af47/list')
105
+ .with('/actions/4ee2482134a81a757a08af47/list', {})
106
106
  .and_return payload
107
107
  end
108
108
 
@@ -116,7 +116,7 @@ module Trello
116
116
  before do
117
117
  allow(client)
118
118
  .to receive(:get)
119
- .with('/actions/4ee2482134a81a757a08af47/memberCreator')
119
+ .with('/actions/4ee2482134a81a757a08af47/memberCreator', {})
120
120
  .and_return user_payload
121
121
  end
122
122
 
@@ -15,7 +15,7 @@ module Trello
15
15
 
16
16
  allow(client)
17
17
  .to receive(:get)
18
- .with('/organizations/4ee7e59ae582acdec8000291/boards/all')
18
+ .with('/organizations/4ee7e59ae582acdec8000291/boards', {})
19
19
  .and_return boards_payload
20
20
  end
21
21
 
data/spec/board_spec.rb CHANGED
@@ -70,7 +70,7 @@ module Trello
70
70
 
71
71
  allow(client)
72
72
  .to receive(:get)
73
- .with("/members/testuser/boards")
73
+ .with("/members/testuser/boards", {})
74
74
  .and_return boards_payload
75
75
  end
76
76
 
data/spec/card_spec.rb CHANGED
@@ -511,7 +511,7 @@ module Trello
511
511
 
512
512
  allow(client)
513
513
  .to receive(:get)
514
- .with("/cards/abcdef123456789123456789/members")
514
+ .with("/cards/abcdef123456789123456789/members", {})
515
515
  .and_return user_payload
516
516
  end
517
517
 
@@ -597,7 +597,7 @@ module Trello
597
597
  no_voters = JSON.generate([])
598
598
  expect(client)
599
599
  .to receive(:get)
600
- .with("/cards/#{card.id}/membersVoted")
600
+ .with("/cards/#{card.id}/membersVoted", {})
601
601
  .and_return(no_voters)
602
602
 
603
603
  card.voters
@@ -606,7 +606,7 @@ module Trello
606
606
  voters = JSON.generate([user_details])
607
607
  expect(client)
608
608
  .to receive(:get)
609
- .with("/cards/#{card.id}/membersVoted")
609
+ .with("/cards/#{card.id}/membersVoted", {})
610
610
  .and_return(voters)
611
611
 
612
612
  expect(card.voters.first).to be_kind_of Trello::Member
@@ -734,7 +734,7 @@ module Trello
734
734
 
735
735
  allow(client)
736
736
  .to receive(:post)
737
- .with("/cards/abcdef123456789123456789/attachments", { file: f, name: '' })
737
+ .with("/cards/abcdef123456789123456789/attachments", { file: instance_of(Multipart::Post::UploadIO), name: '' })
738
738
  .and_return "not important"
739
739
 
740
740
  card.add_attachment(f)
@@ -750,7 +750,7 @@ module Trello
750
750
 
751
751
  allow(client)
752
752
  .to receive(:get)
753
- .with("/cards/abcdef123456789123456789/attachments")
753
+ .with("/cards/abcdef123456789123456789/attachments", {})
754
754
  .and_return attachments_payload
755
755
 
756
756
  expect(card.board).to_not be_nil
@@ -779,7 +779,7 @@ module Trello
779
779
 
780
780
  allow(client)
781
781
  .to receive(:get)
782
- .with("/cards/abcdef123456789123456789/attachments")
782
+ .with("/cards/abcdef123456789123456789/attachments", {})
783
783
  .and_return attachments_payload
784
784
 
785
785
  card.remove_attachment(card.attachments.first)
@@ -0,0 +1,244 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.trello.com/1/cards/5e95d1b4f43f9a06497f17f7?key=DEVELOPER_PUBLIC_KEY&token=MEMBER_TOKEN
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v2.3.0
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Sat, 11 Nov 2023 18:18:11 GMT
23
+ Content-Type:
24
+ - application/json; charset=utf-8
25
+ Content-Length:
26
+ - '1053'
27
+ X-Dns-Prefetch-Control:
28
+ - 'off'
29
+ Expect-Ct:
30
+ - max-age=0
31
+ X-Frame-Options:
32
+ - DENY
33
+ X-Download-Options:
34
+ - noopen
35
+ X-Permitted-Cross-Domain-Policies:
36
+ - none
37
+ Referrer-Policy:
38
+ - strict-origin-when-cross-origin
39
+ Surrogate-Control:
40
+ - no-store
41
+ Cache-Control:
42
+ - max-age=0, must-revalidate, no-cache, no-store
43
+ Pragma:
44
+ - no-cache
45
+ Expires:
46
+ - Thu, 01 Jan 1970 00:00:00
47
+ X-Trello-Version:
48
+ - 1.242759.0
49
+ X-Trello-Environment:
50
+ - Production
51
+ Set-Cookie:
52
+ - dsc=set_cookie_dsc; Path=/; Expires=Sat, 25 Nov 2023 18:18:11 GMT; Secure;
53
+ SameSite=None
54
+ - preAuthProps=s%3A5e679b808e6e8828784b30e1%3AisEnterpriseAdmin%3Dfalse.Pfv1AFghhSOM0MLjFpWB8CaOPcNRIjt%2FmCZysEK4KNY;
55
+ Path=/; HttpOnly
56
+ Access-Control-Allow-Origin:
57
+ - "*"
58
+ Access-Control-Allow-Methods:
59
+ - GET, PUT, POST, DELETE
60
+ Access-Control-Allow-Headers:
61
+ - Authorization, Accept, Content-Type
62
+ Access-Control-Expose-Headers:
63
+ - x-rate-limit-api-key-interval-ms, x-rate-limit-api-key-max, x-rate-limit-api-key-remaining,
64
+ x-rate-limit-api-token-interval-ms, x-rate-limit-api-token-max, x-rate-limit-api-token-remaining
65
+ X-Rate-Limit-Api-Token-Interval-Ms:
66
+ - '10000'
67
+ X-Rate-Limit-Api-Token-Max:
68
+ - '100'
69
+ X-Rate-Limit-Api-Token-Remaining:
70
+ - '99'
71
+ X-Rate-Limit-Db-Query-Time-Interval-Ms:
72
+ - '600000'
73
+ X-Rate-Limit-Db-Query-Time-Max:
74
+ - '7200000'
75
+ X-Rate-Limit-Db-Query-Time-Remaining:
76
+ - '7199990'
77
+ X-Rate-Limit-Api-Key-Interval-Ms:
78
+ - '10000'
79
+ X-Rate-Limit-Api-Key-Max:
80
+ - '300'
81
+ X-Rate-Limit-Api-Key-Remaining:
82
+ - '299'
83
+ X-Rate-Limit-Member-Interval-Ms:
84
+ - '10000'
85
+ X-Rate-Limit-Member-Max:
86
+ - '375'
87
+ X-Rate-Limit-Member-Remaining:
88
+ - '374'
89
+ X-Server-Time:
90
+ - '1699726691750'
91
+ Server:
92
+ - AtlassianEdge
93
+ X-Content-Type-Options:
94
+ - nosniff
95
+ X-Xss-Protection:
96
+ - 1; mode=block
97
+ Atl-Traceid:
98
+ - 5442e51c04ce42f5aa01bfb53445cc31
99
+ Report-To:
100
+ - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group":
101
+ "endpoint-1", "include_subdomains": true, "max_age": 600}'
102
+ Nel:
103
+ - '{"failure_fraction": 0.001, "include_subdomains": true, "max_age": 600, "report_to":
104
+ "endpoint-1"}'
105
+ Strict-Transport-Security:
106
+ - max-age=63072000; preload
107
+ body:
108
+ encoding: UTF-8
109
+ string: '{"id":"5e95d1b4f43f9a06497f17f7","badges":{"attachmentsByType":{"trello":{"board":0,"card":0}},"location":false,"votes":0,"viewingMemberVoted":false,"subscribed":false,"start":null,"fogbugz":"","checkItems":0,"checkItemsChecked":0,"checkItemsEarliestDue":null,"comments":0,"attachments":3,"description":false,"due":null,"dueComplete":false},"checkItemStates":[],"closed":false,"dueComplete":false,"dateLastActivity":"2023-11-11T18:14:08.574Z","desc":"","descData":null,"due":null,"dueReminder":null,"email":null,"idBoard":"5e94f5ded016b22c2437c13c","idChecklists":[],"idList":"5e95d1b07f2ff83927319128","idMembers":[],"idMembersVoted":[],"idShort":2,"idAttachmentCover":"","labels":[],"idLabels":[],"manualCoverAttachment":false,"name":"C2","pos":16384,"shortLink":"DeJYDbq0","shortUrl":"https://trello.com/c/DeJYDbq0","start":null,"subscribed":false,"url":"https://trello.com/c/DeJYDbq0/2-c2","cover":{"idAttachment":null,"color":null,"idUploadedBackground":null,"size":"normal","brightness":"light","idPlugin":null},"isTemplate":false,"cardRole":null}'
110
+ recorded_at: Sat, 11 Nov 2023 18:18:11 GMT
111
+ - request:
112
+ method: post
113
+ uri: https://api.trello.com/1/cards/5e95d1b4f43f9a06497f17f7/attachments?key=DEVELOPER_PUBLIC_KEY&token=MEMBER_TOKEN
114
+ body:
115
+ encoding: UTF-8
116
+ string: "-------------RubyMultipartPost-045b3ab4e226f744d8d7119fa63ad0fb\r\nContent-Disposition:
117
+ form-data; name=\"file\"; filename=\"add_and_remove_attachment_spec.rb\"\r\nContent-Length:
118
+ 1672\r\nContent-Type: application/x-ruby\r\nContent-Transfer-Encoding: binary\r\n\r\nrequire
119
+ 'spec_helper'\n\nRSpec.describe 'Trell::Card add and remove attachment' do\n
120
+ \ include IntegrationHelpers\n\n before { setup_trello }\n\n describe '#add_attachment'
121
+ do\n it 'can success add an attachment(file) on a card', focus: true do\n
122
+ \ cassette_name = Trello.http_client == \"rest-client\" ? \"can_add_a_file_on_a_card\"
123
+ : \"can_add_a_file_on_a_card_with_farady\"\n VCR.use_cassette(cassette_name)
124
+ do\n card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')\n file
125
+ = File.new('spec/integration/card/add_and_remove_attachment_spec.rb', 'r')\n\n
126
+ \ response = card.add_attachment(file)\n expect(response.code).to
127
+ eq(200)\n body = JSON.parse(response.body)\n expect(body['name']).to
128
+ eq('add_and_remove_attachment_spec.rb')\n end\n end\n\n it 'can
129
+ success add and attachment(url) on a card' do\n VCR.use_cassette('can_add_a_file_from_url_on_a_card')
130
+ do\n card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')\n file_url
131
+ = 'https://upload.wikimedia.org/wikipedia/en/6/6b/Hello_Web_Series_%28Wordmark%29_Logo.png'\n\n
132
+ \ response = card.add_attachment(file_url, 'hello.png')\n expect(response.code).to
133
+ eq(200)\n body = JSON.parse(response.body)\n expect(body['name']).to
134
+ eq('hello.png')\n end\n end\n end\n\n describe '#remove_attachment'
135
+ do\n it 'can success remove and attachment on a card' do\n VCR.use_cassette('can_remove_an_attachment_on_a_card')
136
+ do\n card = Trello::Card.find('5e95d1b4f43f9a06497f17f7')\n attachments
137
+ = card.attachments\n\n response = card.remove_attachment(attachments.last)\n
138
+ \ expect(response.code).to eq(200)\n end\n end\n end\nend\n\r\n-------------RubyMultipartPost-045b3ab4e226f744d8d7119fa63ad0fb\r\nContent-Disposition:
139
+ form-data; name=\"name\"\r\n\r\n\r\n-------------RubyMultipartPost-045b3ab4e226f744d8d7119fa63ad0fb--\r\n"
140
+ headers:
141
+ User-Agent:
142
+ - Faraday v2.3.0
143
+ Content-Type:
144
+ - multipart/form-data; boundary=-----------RubyMultipartPost-045b3ab4e226f744d8d7119fa63ad0fb
145
+ Content-Length:
146
+ - '2104'
147
+ Accept-Encoding:
148
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
149
+ Accept:
150
+ - "*/*"
151
+ response:
152
+ status:
153
+ code: 200
154
+ message: OK
155
+ headers:
156
+ Date:
157
+ - Sat, 11 Nov 2023 18:18:14 GMT
158
+ Content-Type:
159
+ - application/json; charset=utf-8
160
+ Content-Length:
161
+ - '451'
162
+ X-Dns-Prefetch-Control:
163
+ - 'off'
164
+ Expect-Ct:
165
+ - max-age=0
166
+ X-Frame-Options:
167
+ - DENY
168
+ X-Download-Options:
169
+ - noopen
170
+ X-Permitted-Cross-Domain-Policies:
171
+ - none
172
+ Referrer-Policy:
173
+ - strict-origin-when-cross-origin
174
+ Surrogate-Control:
175
+ - no-store
176
+ Cache-Control:
177
+ - max-age=0, must-revalidate, no-cache, no-store
178
+ Pragma:
179
+ - no-cache
180
+ Expires:
181
+ - Thu, 01 Jan 1970 00:00:00
182
+ X-Trello-Version:
183
+ - 1.242759.0
184
+ X-Trello-Environment:
185
+ - Production
186
+ Access-Control-Allow-Origin:
187
+ - "*"
188
+ Access-Control-Allow-Methods:
189
+ - GET, PUT, POST, DELETE
190
+ Access-Control-Allow-Headers:
191
+ - Authorization, Accept, Content-Type
192
+ Access-Control-Expose-Headers:
193
+ - x-rate-limit-api-key-interval-ms, x-rate-limit-api-key-max, x-rate-limit-api-key-remaining,
194
+ x-rate-limit-api-token-interval-ms, x-rate-limit-api-token-max, x-rate-limit-api-token-remaining
195
+ X-Rate-Limit-Api-Token-Interval-Ms:
196
+ - '10000'
197
+ X-Rate-Limit-Api-Token-Max:
198
+ - '100'
199
+ X-Rate-Limit-Api-Token-Remaining:
200
+ - '98'
201
+ X-Rate-Limit-Db-Query-Time-Interval-Ms:
202
+ - '600000'
203
+ X-Rate-Limit-Db-Query-Time-Max:
204
+ - '7200000'
205
+ X-Rate-Limit-Db-Query-Time-Remaining:
206
+ - '7199990'
207
+ X-Rate-Limit-Api-Key-Interval-Ms:
208
+ - '10000'
209
+ X-Rate-Limit-Api-Key-Max:
210
+ - '300'
211
+ X-Rate-Limit-Api-Key-Remaining:
212
+ - '298'
213
+ X-Rate-Limit-Member-Interval-Ms:
214
+ - '10000'
215
+ X-Rate-Limit-Member-Max:
216
+ - '375'
217
+ X-Rate-Limit-Member-Remaining:
218
+ - '373'
219
+ Set-Cookie:
220
+ - preAuthProps=s%3A5e679b808e6e8828784b30e1%3AisEnterpriseAdmin%3Dfalse.Pfv1AFghhSOM0MLjFpWB8CaOPcNRIjt%2FmCZysEK4KNY;
221
+ Path=/; HttpOnly
222
+ X-Server-Time:
223
+ - '1699726694377'
224
+ Server:
225
+ - AtlassianEdge
226
+ X-Content-Type-Options:
227
+ - nosniff
228
+ X-Xss-Protection:
229
+ - 1; mode=block
230
+ Atl-Traceid:
231
+ - c52c43e2b82d4915bb527fc58f3153bc
232
+ Report-To:
233
+ - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group":
234
+ "endpoint-1", "include_subdomains": true, "max_age": 600}'
235
+ Nel:
236
+ - '{"failure_fraction": 0.001, "include_subdomains": true, "max_age": 600, "report_to":
237
+ "endpoint-1"}'
238
+ Strict-Transport-Security:
239
+ - max-age=63072000; preload
240
+ body:
241
+ encoding: UTF-8
242
+ string: '{"id":"654fc566366a6de141e759d8","bytes":1672,"date":"2023-11-11T18:18:14.070Z","edgeColor":null,"idMember":"5e679b808e6e8828784b30e1","isUpload":true,"mimeType":"application/x-ruby","name":"add_and_remove_attachment_spec.rb","previews":[],"url":"https://trello.com/1/cards/5e95d1b4f43f9a06497f17f7/attachments/654fc566366a6de141e759d8/download/add_and_remove_attachment_spec.rb","pos":81920,"fileName":"add_and_remove_attachment_spec.rb","limits":{}}'
243
+ recorded_at: Sat, 11 Nov 2023 18:18:14 GMT
244
+ recorded_with: VCR 6.1.0