ruby-trello-czuger 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +182 -0
  3. data/lib/trello.rb +163 -0
  4. data/lib/trello/action.rb +68 -0
  5. data/lib/trello/association.rb +14 -0
  6. data/lib/trello/association_proxy.rb +42 -0
  7. data/lib/trello/attachment.rb +40 -0
  8. data/lib/trello/authorization.rb +187 -0
  9. data/lib/trello/basic_data.rb +132 -0
  10. data/lib/trello/board.rb +211 -0
  11. data/lib/trello/card.rb +467 -0
  12. data/lib/trello/checklist.rb +143 -0
  13. data/lib/trello/client.rb +120 -0
  14. data/lib/trello/comment.rb +62 -0
  15. data/lib/trello/configuration.rb +68 -0
  16. data/lib/trello/core_ext/array.rb +6 -0
  17. data/lib/trello/core_ext/hash.rb +6 -0
  18. data/lib/trello/core_ext/string.rb +6 -0
  19. data/lib/trello/cover_image.rb +8 -0
  20. data/lib/trello/has_actions.rb +9 -0
  21. data/lib/trello/item.rb +37 -0
  22. data/lib/trello/item_state.rb +30 -0
  23. data/lib/trello/json_utils.rb +64 -0
  24. data/lib/trello/label.rb +108 -0
  25. data/lib/trello/label_name.rb +31 -0
  26. data/lib/trello/list.rb +114 -0
  27. data/lib/trello/member.rb +112 -0
  28. data/lib/trello/multi_association.rb +12 -0
  29. data/lib/trello/net.rb +39 -0
  30. data/lib/trello/notification.rb +61 -0
  31. data/lib/trello/organization.rb +68 -0
  32. data/lib/trello/plugin_datum.rb +34 -0
  33. data/lib/trello/token.rb +37 -0
  34. data/lib/trello/webhook.rb +103 -0
  35. data/spec/action_spec.rb +149 -0
  36. data/spec/array_spec.rb +13 -0
  37. data/spec/association_spec.rb +26 -0
  38. data/spec/basic_auth_policy_spec.rb +51 -0
  39. data/spec/board_spec.rb +442 -0
  40. data/spec/card_spec.rb +822 -0
  41. data/spec/checklist_spec.rb +296 -0
  42. data/spec/client_spec.rb +257 -0
  43. data/spec/configuration_spec.rb +95 -0
  44. data/spec/hash_spec.rb +15 -0
  45. data/spec/integration/how_to_authorize_spec.rb +53 -0
  46. data/spec/integration/how_to_use_boards_spec.rb +48 -0
  47. data/spec/integration/integration_test.rb +40 -0
  48. data/spec/item_spec.rb +75 -0
  49. data/spec/json_utils_spec.rb +73 -0
  50. data/spec/label_spec.rb +205 -0
  51. data/spec/list_spec.rb +253 -0
  52. data/spec/member_spec.rb +159 -0
  53. data/spec/notification_spec.rb +143 -0
  54. data/spec/oauth_policy_spec.rb +160 -0
  55. data/spec/organization_spec.rb +71 -0
  56. data/spec/spec_helper.rb +435 -0
  57. data/spec/string_spec.rb +55 -0
  58. data/spec/token_spec.rb +89 -0
  59. data/spec/trello_spec.rb +134 -0
  60. data/spec/webhook_spec.rb +130 -0
  61. metadata +200 -0
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+ require 'trello/core_ext/string'
3
+
4
+ describe String, '#json_into' do
5
+ include Helpers
6
+
7
+ def example_class
8
+ @example_class ||= Class.new do
9
+ include Trello::JsonUtils
10
+
11
+ attr_accessor :name, :description
12
+
13
+ def initialize(options = {})
14
+ @name = options['name']
15
+ @description = options['description']
16
+ end
17
+ end
18
+ end
19
+
20
+ it 'converts json into an instance of a class' do
21
+ expect('{}'.json_into(example_class)).to be_a example_class
22
+ end
23
+
24
+ it 'supplies the parsed json to the class ctor as a hash' do
25
+ expect(example_class)
26
+ .to receive(:new)
27
+ .once
28
+ .with({
29
+ "name" => "Jazz Kang",
30
+ "description" => "Plonker"
31
+ })
32
+
33
+ json_text = '{"name" : "Jazz Kang", "description": "Plonker"}'
34
+
35
+ json_text.json_into example_class
36
+ end
37
+
38
+ it 'can also handle arrays of instances of a class' do
39
+ json_text = <<-JSON
40
+ [
41
+ {"name" : "Jazz Kang", "description": "Plonker"},
42
+ {"name" : "Phil Murphy", "description": "Shoreditch hipster"}
43
+ ]
44
+ JSON
45
+
46
+ result = json_text.json_into example_class
47
+
48
+ expect(result).to be_an Array
49
+ expect(result.size).to eq 2
50
+ result.each do |parsed|
51
+ expect(parsed).to be_a example_class
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ module Trello
4
+ describe Token do
5
+ include Helpers
6
+
7
+ let(:token) { client.find(:token, '1234') }
8
+ let(:client) { Client.new }
9
+
10
+ before do
11
+ allow(client)
12
+ .to receive(:get)
13
+ .with('/tokens/1234', {})
14
+ .and_return token_payload
15
+ end
16
+
17
+ context 'finding' do
18
+ let(:client) { Trello.client }
19
+
20
+ it 'delegates to Trello.client#find' do
21
+ expect(client)
22
+ .to receive(:find)
23
+ .with(:token, '1234', {webhooks: true})
24
+
25
+ Token.find('1234')
26
+ end
27
+
28
+ it 'is equivalent to client#find' do
29
+ expect(Token.find('1234', {})).to eq(token)
30
+ end
31
+ end
32
+
33
+ context 'attributes' do
34
+ it 'has an id' do
35
+ expect(token.id).to eq '4f2c10c7b3eb95a45b294cd5'
36
+ end
37
+
38
+ it 'gets its created_at date' do
39
+ expect(token.created_at).to eq Time.iso8601('2012-02-03T16:52:23.661Z')
40
+ end
41
+
42
+ it 'has a permission grant' do
43
+ expect(token.permissions.count).to eq 3
44
+ end
45
+ end
46
+
47
+ context 'members' do
48
+ before do
49
+ allow(client)
50
+ .to receive(:get)
51
+ .with('/members/abcdef123456789123456789', {})
52
+ .and_return user_payload
53
+
54
+ allow(Trello.client)
55
+ .to receive(:get)
56
+ .with('/members/abcdef123456789123456789', {})
57
+ .and_return user_payload
58
+
59
+ allow(client)
60
+ .to receive(:get)
61
+ .with('/tokens/1234', {})
62
+ .and_return token_payload
63
+ end
64
+
65
+ it 'retrieves the member who authorized the token' do
66
+ expect(token.member).to eq Member.find('abcdef123456789123456789')
67
+ end
68
+ end
69
+
70
+ describe "#update_fields" do
71
+ it "does not set any fields when the fields argument is empty" do
72
+ expected = {
73
+ 'id' => 'id',
74
+ 'idMember' => 'member_id',
75
+ 'permissions' => 'permissions',
76
+ 'webhooks' => 'webhooks'
77
+ }
78
+
79
+ token = Token.new(expected)
80
+
81
+ token.update_fields({})
82
+
83
+ expected.each do |key, value|
84
+ expect(token.send(value)).to eq expected[key]
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+ require 'launchy'
3
+
4
+ include Trello
5
+ include Trello::Authorization
6
+
7
+ describe Trello do
8
+
9
+ describe 'self.configure' do
10
+ before do
11
+ Trello.configure do |config|
12
+ config.developer_public_key = 'developer_public_key'
13
+ config.member_token = 'member_token'
14
+ end
15
+ end
16
+
17
+ it 'builds auth policy client uses to make requests' do
18
+ allow(TInternet).to receive(:execute)
19
+ expect(Trello.auth_policy).to receive(:authorize)
20
+ Trello.client.get(:member, params = {})
21
+ end
22
+
23
+ it 'configures basic auth policy' do
24
+ auth_policy = Trello.auth_policy
25
+ expect(auth_policy).to be_a(BasicAuthPolicy)
26
+ expect(auth_policy.developer_public_key).to eq('developer_public_key')
27
+ expect(auth_policy.member_token).to eq('member_token')
28
+ end
29
+
30
+ context 'oauth' do
31
+ before do
32
+ Trello.configure do |config|
33
+ config.consumer_key = 'consumer_key'
34
+ config.consumer_secret = 'consumer_secret'
35
+ config.oauth_token = 'oauth_token'
36
+ config.oauth_token_secret = 'oauth_token_secret'
37
+ end
38
+ end
39
+
40
+ it 'configures oauth policy' do
41
+ auth_policy = Trello.auth_policy
42
+
43
+ expect(auth_policy).to be_a(OAuthPolicy)
44
+ expect(auth_policy.consumer_key).to eq('consumer_key')
45
+ expect(auth_policy.consumer_secret).to eq('consumer_secret')
46
+ expect(auth_policy.oauth_token).to eq('oauth_token')
47
+ expect(auth_policy.oauth_token_secret).to eq('oauth_token_secret')
48
+ end
49
+
50
+ it 'updates auth policy configuration' do
51
+ auth_policy = Trello.auth_policy
52
+ expect(auth_policy.consumer_key).to eq('consumer_key')
53
+
54
+ Trello.configure do |config|
55
+ config.consumer_key = 'new_consumer_key'
56
+ config.consumer_secret = 'new_consumer_secret'
57
+ config.oauth_token = 'new_oauth_token'
58
+ config.oauth_token_secret = nil
59
+ end
60
+
61
+ auth_policy = Trello.auth_policy
62
+
63
+ expect(auth_policy).to be_a(OAuthPolicy)
64
+ expect(auth_policy.consumer_key).to eq('new_consumer_key')
65
+ expect(auth_policy.consumer_secret).to eq('new_consumer_secret')
66
+ expect(auth_policy.oauth_token).to eq('new_oauth_token')
67
+ expect(auth_policy.oauth_token_secret).to be_nil
68
+ end
69
+ end
70
+
71
+ context 'not configured' do
72
+ before do
73
+ Trello.configure
74
+ end
75
+
76
+ it { expect(Trello.auth_policy).to be_a(AuthPolicy) }
77
+ it { expect { Trello.client.get(:member) }.to raise_error(Trello::ConfigurationError) }
78
+ end
79
+ end
80
+
81
+ context 'client authorization helpers' do
82
+ before do
83
+ allow(Launchy).to receive(:open)
84
+ end
85
+
86
+ it { expect(Trello.public_key_url).to eq('https://trello.com/app-key') }
87
+ it { expect(Trello.authorize_url(key: 'foo')).to match(%r{^https://trello.com/1/authorize}) }
88
+
89
+ describe '.authorize_url' do
90
+ it 'allows the scope to be set' do
91
+ expect(Trello.authorize_url(key: 'foo', scope: 'read')).to match(%r{scope=read$})
92
+ end
93
+ end
94
+
95
+ describe '.open_public_key_url' do
96
+ it 'launches app key endpoint' do
97
+ expect(Launchy).to receive(:open).with('https://trello.com/app-key')
98
+
99
+ Trello.open_public_key_url
100
+ end
101
+
102
+ it 'rescues LoadError', :silence_warnings do
103
+ allow(Launchy).to receive(:open).and_raise(LoadError)
104
+
105
+ expect { Trello.open_public_key_url }.to_not raise_error(LoadError)
106
+ end
107
+ end
108
+
109
+ describe '.open_authorization_url' do
110
+ it 'launches authorize endpoint with configured public key' do
111
+ app_key = 'abcd1234'
112
+ allow(Trello.configuration).to receive(:developer_public_key).and_return(app_key)
113
+ authorize_url = "https://trello.com/1/authorize?expiration=never&key=#{app_key}&name=Ruby%20Trello&response_type=token&scope=read%2Cwrite%2Caccount"
114
+ expect(Launchy).to receive(:open).with(authorize_url)
115
+
116
+ Trello.open_authorization_url
117
+ end
118
+
119
+ it 'launches authorize endpoint with given public key' do
120
+ app_key = 'wxyz6789'
121
+ authorize_url = "https://trello.com/1/authorize?expiration=never&key=#{app_key}&name=Ruby%20Trello&response_type=token&scope=read%2Cwrite%2Caccount"
122
+ expect(Launchy).to receive(:open).with(authorize_url)
123
+
124
+ Trello.open_authorization_url(key: 'wxyz6789')
125
+ end
126
+
127
+ it 'raises an error if key not configured' do
128
+ expect(Launchy).to_not receive(:open)
129
+
130
+ expect { Trello.open_authorization_url }.to raise_error(ArgumentError)
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,130 @@
1
+ require 'spec_helper'
2
+
3
+ module Trello
4
+ describe Webhook do
5
+ include Helpers
6
+
7
+ let(:webhook) { client.find(:webhook, "1234") }
8
+ let(:client) { Client.new }
9
+
10
+ before(:each) do
11
+ allow(client)
12
+ .to receive(:get)
13
+ .with("/webhooks/1234", {})
14
+ .and_return webhook_payload
15
+ end
16
+
17
+ context "finding" do
18
+ let(:client) { Trello.client }
19
+
20
+ it "delegates to Trello.client#find" do
21
+ expect(client)
22
+ .to receive(:find)
23
+ .with(:webhook, '1234', {})
24
+
25
+ Webhook.find('1234')
26
+ end
27
+
28
+ it "is equivalent to client#find" do
29
+ expect(Webhook.find('1234')).to eq(webhook)
30
+ end
31
+ end
32
+
33
+ context "creating" do
34
+ let(:client) { Trello.client }
35
+
36
+ it "creates a new webhook" do
37
+ webhook = Webhook.new(webhooks_details.first)
38
+ expect(webhook).to be_valid
39
+ end
40
+
41
+ it "initializes all fields from response-like formatted hash" do
42
+ webhook_details = webhooks_details.first
43
+ webhook = Webhook.new(webhook_details)
44
+ expect(webhook.id).to eq webhook_details['id']
45
+ expect(webhook.description).to eq webhook_details['description']
46
+ expect(webhook.id_model).to eq webhook_details['idModel']
47
+ expect(webhook.callback_url).to eq webhook_details['callbackURL']
48
+ expect(webhook.active).to eq webhook_details['active']
49
+ end
50
+
51
+ it "initializes required fields from options-like formatted hash" do
52
+ webhook_details = webhooks_details[1]
53
+ webhook = Webhook.new(webhook_details)
54
+ expect(webhook.description).to eq webhook_details[:description]
55
+ expect(webhook.id_model).to eq webhook_details[:id_model]
56
+ expect(webhook.callback_url).to eq webhook_details[:callback_url]
57
+ end
58
+
59
+ it 'creates a new webhook and saves it on Trello', refactor: true do
60
+ payload = { name: 'Test Card', desc: nil }
61
+
62
+ webhook = webhooks_details.first
63
+ result = JSON.generate(webhook)
64
+
65
+ expected_payload = {description: webhook[:description], idModel: webhook[:idModel], callbackURL: webhook[:callbackURL]}
66
+
67
+ expect(client)
68
+ .to receive(:post)
69
+ .with("/webhooks", expected_payload)
70
+ .and_return result
71
+
72
+ webhook = Webhook.create(webhooks_details.first)
73
+
74
+ expect(webhook.class).to be Webhook
75
+ end
76
+ end
77
+
78
+ context "updating" do
79
+ it "updating description does a put on the correct resource with the correct value" do
80
+ expected_new_description = "xxx"
81
+
82
+ expected_payload = {description: expected_new_description, idModel: webhook.id_model, callbackURL: webhook.callback_url, active: webhook.active}
83
+
84
+ expect(client)
85
+ .to receive(:put)
86
+ .once
87
+ .with("/webhooks/#{webhook.id}", expected_payload)
88
+
89
+ webhook.description = expected_new_description
90
+ webhook.save
91
+ end
92
+ end
93
+
94
+ context "deleting" do
95
+ it "deletes the webhook" do
96
+ expect(client)
97
+ .to receive(:delete)
98
+ .with("/webhooks/#{webhook.id}")
99
+
100
+ webhook.delete
101
+ end
102
+ end
103
+
104
+ context "activated?" do
105
+ it "returns the active attribute" do
106
+ expect(webhook).to be_activated
107
+ end
108
+ end
109
+
110
+ describe "#update_fields" do
111
+ it "does not set any fields when the fields argument is empty" do
112
+ expected = {
113
+ 'id' => 'id',
114
+ 'description' => 'description',
115
+ 'idModel' => 'id_model',
116
+ 'callbackURL' => 'callback_url',
117
+ 'active' => 'active'
118
+ }
119
+
120
+ webhook = Webhook.new(expected)
121
+
122
+ webhook.update_fields({})
123
+
124
+ expected.each do |key, value|
125
+ expect(webhook.send(value)).to eq expected[key]
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
metadata ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-trello-czuger
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Tregunna
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-01-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activemodel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: addressable
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: oauth
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.5
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.4.5
69
+ - !ruby/object:Gem::Dependency
70
+ name: rest-client
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.8.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.0
83
+ description: A wrapper around the trello.com API.
84
+ email: jeremy@tregunna.ca
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files:
88
+ - README.md
89
+ files:
90
+ - README.md
91
+ - lib/trello.rb
92
+ - lib/trello/action.rb
93
+ - lib/trello/association.rb
94
+ - lib/trello/association_proxy.rb
95
+ - lib/trello/attachment.rb
96
+ - lib/trello/authorization.rb
97
+ - lib/trello/basic_data.rb
98
+ - lib/trello/board.rb
99
+ - lib/trello/card.rb
100
+ - lib/trello/checklist.rb
101
+ - lib/trello/client.rb
102
+ - lib/trello/comment.rb
103
+ - lib/trello/configuration.rb
104
+ - lib/trello/core_ext/array.rb
105
+ - lib/trello/core_ext/hash.rb
106
+ - lib/trello/core_ext/string.rb
107
+ - lib/trello/cover_image.rb
108
+ - lib/trello/has_actions.rb
109
+ - lib/trello/item.rb
110
+ - lib/trello/item_state.rb
111
+ - lib/trello/json_utils.rb
112
+ - lib/trello/label.rb
113
+ - lib/trello/label_name.rb
114
+ - lib/trello/list.rb
115
+ - lib/trello/member.rb
116
+ - lib/trello/multi_association.rb
117
+ - lib/trello/net.rb
118
+ - lib/trello/notification.rb
119
+ - lib/trello/organization.rb
120
+ - lib/trello/plugin_datum.rb
121
+ - lib/trello/token.rb
122
+ - lib/trello/webhook.rb
123
+ - spec/action_spec.rb
124
+ - spec/array_spec.rb
125
+ - spec/association_spec.rb
126
+ - spec/basic_auth_policy_spec.rb
127
+ - spec/board_spec.rb
128
+ - spec/card_spec.rb
129
+ - spec/checklist_spec.rb
130
+ - spec/client_spec.rb
131
+ - spec/configuration_spec.rb
132
+ - spec/hash_spec.rb
133
+ - spec/integration/how_to_authorize_spec.rb
134
+ - spec/integration/how_to_use_boards_spec.rb
135
+ - spec/integration/integration_test.rb
136
+ - spec/item_spec.rb
137
+ - spec/json_utils_spec.rb
138
+ - spec/label_spec.rb
139
+ - spec/list_spec.rb
140
+ - spec/member_spec.rb
141
+ - spec/notification_spec.rb
142
+ - spec/oauth_policy_spec.rb
143
+ - spec/organization_spec.rb
144
+ - spec/spec_helper.rb
145
+ - spec/string_spec.rb
146
+ - spec/token_spec.rb
147
+ - spec/trello_spec.rb
148
+ - spec/webhook_spec.rb
149
+ homepage: https://github.com/czuger/ruby-trello
150
+ licenses:
151
+ - MIT
152
+ metadata: {}
153
+ post_install_message:
154
+ rdoc_options:
155
+ - "--charset=UTF-8"
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 2.1.0
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ requirements: []
169
+ rubyforge_project: ruby-trello
170
+ rubygems_version: 2.6.13
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: A wrapper around the trello.com API.
174
+ test_files:
175
+ - spec/client_spec.rb
176
+ - spec/token_spec.rb
177
+ - spec/trello_spec.rb
178
+ - spec/item_spec.rb
179
+ - spec/notification_spec.rb
180
+ - spec/checklist_spec.rb
181
+ - spec/string_spec.rb
182
+ - spec/hash_spec.rb
183
+ - spec/integration/integration_test.rb
184
+ - spec/integration/how_to_authorize_spec.rb
185
+ - spec/integration/how_to_use_boards_spec.rb
186
+ - spec/basic_auth_policy_spec.rb
187
+ - spec/spec_helper.rb
188
+ - spec/list_spec.rb
189
+ - spec/oauth_policy_spec.rb
190
+ - spec/member_spec.rb
191
+ - spec/array_spec.rb
192
+ - spec/board_spec.rb
193
+ - spec/json_utils_spec.rb
194
+ - spec/action_spec.rb
195
+ - spec/configuration_spec.rb
196
+ - spec/label_spec.rb
197
+ - spec/card_spec.rb
198
+ - spec/association_spec.rb
199
+ - spec/webhook_spec.rb
200
+ - spec/organization_spec.rb