ruby-trello 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -22,6 +22,10 @@ of refactoring and functionality to be deserving of a beer and this special than
22
22
 
23
23
  ## Contributing
24
24
 
25
+ Several ways you can contribute. Documentation, code, tests, feature requests, bug reports.
26
+
27
+ We develop ruby-trello using [Trello itself](https://trello.com/board/ruby-trello/4f092b2ee23cb6fe6d1aaabd).
28
+
25
29
  Pick up an editor, fix a test! (If you want to, of course.) Send a pull
26
30
  request, and I'll look at it. I only ask a few things:
27
31
 
data/lib/trello.rb CHANGED
@@ -40,25 +40,25 @@ module Trello
40
40
  autoload :Request, 'trello/net'
41
41
  autoload :TInternet, 'trello/net'
42
42
 
43
+ module Authorization
44
+ autoload :AuthPolicy, 'trello/authorization'
45
+ autoload :BasicAuthPolicy, 'trello/authorization'
46
+ autoload :OAuthPolicy, 'trello/authorization'
47
+ end
48
+
43
49
  # Version of the Trello API that we use by default.
44
50
  API_VERSION = 1
45
51
 
46
52
  # Raise this when we hit a Trello error.
47
53
  class Error < StandardError; end
54
+ # This specific error is thrown when your access token is invalid. You should get a new one.
55
+ class InvalidAccessToken < StandardError; end
48
56
 
49
57
  def self.logger
50
- @@logger || Logger.new(STDOUT)
58
+ @logger ||= Logger.new(STDOUT)
51
59
  end
52
60
 
53
61
  def self.logger=(logger)
54
- @@logger = logger
55
- end
56
- end
57
-
58
- module Trello
59
- module Authorization
60
- autoload :AuthPolicy, 'trello/authorization'
61
- autoload :BasicAuthPolicy, 'trello/authorization'
62
- autoload :OAuthPolicy, 'trello/authorization'
62
+ @logger = logger
63
63
  end
64
- end
64
+ end
@@ -37,7 +37,10 @@ module Trello
37
37
  attr_accessor :consumer_credential, :token
38
38
 
39
39
  def authorize(request)
40
- fail "The consumer_credential has not been supplied." unless consumer_credential
40
+ unless consumer_credential
41
+ Trello.logger.error "The consumer_credential has not been supplied."
42
+ fail "The consumer_credential has not been supplied."
43
+ end
41
44
 
42
45
  request.headers = {"Authorization" => get_auth_header(request.uri, :get)}
43
46
  request
@@ -48,7 +51,7 @@ module Trello
48
51
  def get_auth_header(url, verb)
49
52
  require "oauth"
50
53
 
51
- self.token ||= OAuthCredential.new
54
+ self.token ||= OAuthCredential.new
52
55
 
53
56
  consumer = OAuth::Consumer.new(
54
57
  consumer_credential.key,
data/lib/trello/board.rb CHANGED
@@ -10,19 +10,29 @@ module Trello
10
10
  end
11
11
 
12
12
  def create(attributes)
13
- Client.post("/boards/", attributes).json_into Board
13
+ new('name' => attributes[:name],
14
+ 'desc' => attributes[:description],
15
+ 'closed' => attributes[:closed] || false).save!
14
16
  end
15
17
  end
16
18
 
17
19
  def save!
20
+ return update! if id
21
+
22
+ attributes = { :name => name }
23
+ attributes.merge!(:desc => description) if description
24
+ attributes.merge!(:idOrganization => organization_id) if organization_id
25
+
26
+ Client.post("/boards", attributes).json_into(self)
27
+ end
28
+
29
+ def update!
18
30
  fail "Cannot save new instance." unless self.id
19
31
 
20
32
  Client.put("/boards/#{self.id}/", {
21
- :name => @name,
22
- :description => @description,
23
- :closed => @closed,
24
- :url => @url,
25
- :organisation_id => @organisation_id
33
+ :name => @name,
34
+ :description => @description,
35
+ :closed => @closed
26
36
  }).json_into(self)
27
37
  end
28
38
 
data/lib/trello/card.rb CHANGED
@@ -132,5 +132,17 @@ module Trello
132
132
  :value => checklist.id
133
133
  })
134
134
  end
135
+
136
+ # Add a label
137
+ def add_label(colour)
138
+ return logger.warn "The label colour '#{colour}' does not exist." unless %w{green yellow orange red purple blue}.include? colour
139
+ Client.post("/cards/#{id}/labels", { :value => colour })
140
+ end
141
+
142
+ # Remove a label
143
+ def remove_label(colour)
144
+ return logger.warn "The label colour '#{colour}' does not exist." unless %w{green yellow orange red purple blue}.include? colour
145
+ Client.delete("/cards/#{id}/labels/#{colour}")
146
+ end
135
147
  end
136
148
  end
@@ -1,5 +1,5 @@
1
1
  module Trello
2
- # A Checklist holds items which are like a "todo" list. Checklists are linked to a card.
2
+ # A Checklist holds items which are like a "task" list. Checklists are linked to a card.
3
3
  class Checklist < BasicData
4
4
  attr_reader :id, :name, :description, :closed, :url, :check_items, :board_id, :list_id, :member_ids
5
5
 
@@ -43,10 +43,11 @@ module Trello
43
43
  Client.post("/checklists", {
44
44
  :name => @name,
45
45
  :idBoard => @board_id
46
- })
46
+ }).json_into(self)
47
47
  end
48
48
 
49
49
  def update!
50
+ Client.put("/checklists", { :name => @name }).json_into(self)
50
51
  end
51
52
 
52
53
  # Return a list of items on the checklist.
data/lib/trello/client.rb CHANGED
@@ -6,44 +6,39 @@ module Trello
6
6
 
7
7
  class << self
8
8
  def get(path, params = {})
9
- api_version = 1
10
-
11
- uri = Addressable::URI.parse("https://api.trello.com/#{api_version}#{path}")
9
+ uri = Addressable::URI.parse("https://api.trello.com/#{API_VERSION}#{path}")
12
10
  uri.query_values = params unless params.empty?
13
-
14
- request = Request.new :get, uri, {}
15
-
16
- response = TInternet.execute AuthPolicy.authorize(request)
17
-
18
- raise Error, response.body unless response.code.to_i == 200
19
-
20
- response.body
11
+ invoke_verb(:get, uri)
21
12
  end
22
13
 
23
14
  def post(path, body = {})
24
- api_version = 1
25
-
26
- uri = Addressable::URI.parse("https://api.trello.com/#{api_version}#{path}")
27
-
28
- request = Request.new :post, uri, {}, body
29
-
30
- response = TInternet.execute AuthPolicy.authorize(request)
31
-
32
- raise Error, response.body unless response.code.to_i == 200
33
-
34
- response.body
15
+ uri = Addressable::URI.parse("https://api.trello.com/#{API_VERSION}#{path}")
16
+ invoke_verb(:post, uri, body)
35
17
  end
36
18
 
37
19
  def put(path, body = {})
38
- api_version = 1
39
-
40
- uri = Addressable::URI.parse("https://api.trello.com/#{api_version}#{path}")
20
+ uri = Addressable::URI.parse("https://api.trello.com/#{API_VERSION}#{path}")
21
+ invoke_verb(:put, uri, body)
22
+ end
41
23
 
42
- request = Request.new :put, uri, {}, body
24
+ def delete(path)
25
+ uri = Addressable::URI.parse("https://api.trello.com/#{API_VERSION}#{path}")
26
+ invoke_verb(:delete, uri)
27
+ end
43
28
 
29
+ def invoke_verb(name, uri, body = nil)
30
+ request = Request.new name, uri, {}, body
44
31
  response = TInternet.execute AuthPolicy.authorize(request)
45
32
 
46
- raise Error, response.body unless response.code.to_i == 200
33
+ if response.code.to_i == 401 && response.body =~ /expired token/
34
+ Trello.logger.error("[401 #{name.to_s.upcase} #{uri}]: Your access token has expired.")
35
+ raise InvalidAccessToken, response.body
36
+ end
37
+
38
+ unless response.code.to_i == 200
39
+ Trello.logger.error("[#{response.code.to_i} #{name.to_s.upcase} #{uri}]: #{response.body}")
40
+ raise Error, response.body
41
+ end
47
42
 
48
43
  response.body
49
44
  end
data/lib/trello/list.rb CHANGED
@@ -38,6 +38,10 @@ module Trello
38
38
  end
39
39
 
40
40
  def update!
41
+ Client.put("/lists", {
42
+ :name => @name,
43
+ :closed => @closed
44
+ }).json_into(self)
41
45
  end
42
46
 
43
47
  # Check if the list is not active anymore.
@@ -1,11 +1,48 @@
1
1
  module Trello
2
- # Notifications for members
3
- #
4
- # This class is not yet implemented as the feature set is not known yet.
5
2
  class Notification < BasicData
3
+ attr_reader :id, :unread, :type, :date, :data, :member_creator_id
4
+
5
+ class << self
6
+ # Locate a notification by its id
7
+ def find(id)
8
+ super(:notifications, id)
9
+ end
10
+ end
11
+
6
12
  def update_fields(fields)
7
- @id = fields['id']
13
+ @id = fields['id']
14
+ @unread = fields['unread']
15
+ @type = fields['type']
16
+ @date = fields['date']
17
+ @data = fields['data']
18
+ @member_creator_id = fields['idMemberCreator']
8
19
  self
9
20
  end
21
+
22
+ alias :unread? :unread
23
+
24
+ def member_creator
25
+ Member.find(member_creator_id)
26
+ end
27
+
28
+ def board
29
+ Client.get("/notifications/#{id}/board").json_into(Board)
30
+ end
31
+
32
+ def list
33
+ Client.get("/notifications/#{id}/list").json_into(List)
34
+ end
35
+
36
+ def card
37
+ Client.get("/notifications/#{id}/card").json_into(Card)
38
+ end
39
+
40
+ def member
41
+ Client.get("/notifications/#{id}/member").json_into(Member)
42
+ end
43
+
44
+ def organization
45
+ Client.get("/notifications/#{id}/organization").json_into(Organization)
46
+ end
10
47
  end
11
48
  end
data/lib/trello/string.rb CHANGED
@@ -25,8 +25,10 @@ class String
25
25
  end
26
26
  rescue JSON::ParserError => json_error
27
27
  if json_error.message =~ /model not found/
28
+ logger.error "Could not find that record."
28
29
  raise Trello::Error, "Request could not be found."
29
30
  else
31
+ logger.error "Unknown error."
30
32
  raise
31
33
  end
32
34
  end
data/spec/board_spec.rb CHANGED
@@ -122,11 +122,11 @@ module Trello
122
122
  Client.should_not_receive :put
123
123
 
124
124
  the_new_board = Board.new
125
- lambda{the_new_board.save!}.should raise_error "Cannot save new instance."
125
+ lambda{the_new_board.save!}.should raise_error
126
126
  end
127
127
 
128
128
  it "puts all fields except id" do
129
- expected_fields = %w{name description closed url organisation_id}.map{|s| s.to_sym}
129
+ expected_fields = %w{name description closed}.map{|s| s.to_sym}
130
130
 
131
131
  Client.should_receive(:put) do |anything, body|
132
132
  body.keys.should =~ expected_fields
@@ -171,20 +171,21 @@ module Trello
171
171
 
172
172
  it "creates a new board with whatever attributes are supplied " do
173
173
  expected_attributes = { :name => "Any new board name", :description => "Any new board desription" }
174
-
175
- Client.should_receive(:post).with(anything, expected_attributes).and_return any_board_json
174
+ sent_attributes = { :name => expected_attributes[:name], :desc => expected_attributes[:description] }
175
+
176
+ Client.should_receive(:post).with("/boards", sent_attributes).and_return any_board_json
176
177
 
177
178
  Board.create expected_attributes
178
179
  end
179
180
 
180
181
  it "posts to the boards collection" do
181
- Client.should_receive(:post).with("/boards/", anything).and_return any_board_json
182
+ Client.should_receive(:post).with("/boards", anything).and_return any_board_json
182
183
 
183
184
  Board.create :xxx => ""
184
185
  end
185
186
 
186
187
  it "returns a board" do
187
- Client.stub(:post).with("/boards/", anything).and_return any_board_json
188
+ Client.stub(:post).with("/boards", anything).and_return any_board_json
188
189
 
189
190
  the_new_board = Board.create :xxx => ""
190
191
  the_new_board.should be_a Board
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ module Trello
4
+ describe Notification do
5
+ include Helpers
6
+
7
+ before(:each) do
8
+ Client.stub(:get).with("/members/me").and_return user_payload
9
+ Client.stub(:get).with("/members/me/notifications").and_return "[" << notification_payload << "]"
10
+ @notification = Member.find("me").notifications.first
11
+ end
12
+
13
+ context "finding" do
14
+ it "can find a specific notification" do
15
+ Client.stub(:get).with("/notifications/#{notification_details['id']}").and_return notification_payload
16
+ Notification.find(notification_details['id']).should == @notification
17
+ end
18
+ end
19
+
20
+ context "boards" do
21
+ it "can retrieve the board" do
22
+ Client.stub(:get).with("/notifications/#{notification_details['id']}/board").and_return JSON.generate(boards_details.first)
23
+ @notification.board.id.should == boards_details.first['id']
24
+ end
25
+ end
26
+
27
+ context "lists" do
28
+ it "can retrieve the list" do
29
+ Client.stub(:get).with("/notifications/#{notification_details['id']}/list").and_return JSON.generate(lists_details.first)
30
+ @notification.list.id.should == lists_details.first['id']
31
+ end
32
+ end
33
+
34
+ context "cards" do
35
+ it "can retrieve the card" do
36
+ Client.stub(:get).with("/notifications/#{notification_details['id']}/card").and_return JSON.generate(cards_details.first)
37
+ @notification.card.id.should == cards_details.first['id']
38
+ end
39
+ end
40
+
41
+ context "members" do
42
+ it "can retrieve the member" do
43
+ Client.stub(:get).with("/notifications/#{notification_details['id']}/member").and_return user_payload
44
+ @notification.member.id.should == user_details['id']
45
+ end
46
+
47
+ it "can retrieve the member creator" do
48
+ Client.stub(:get).with("/members/#{user_details['id']}").and_return user_payload
49
+ @notification.member_creator.id.should == user_details['id']
50
+ end
51
+ end
52
+
53
+ context "organization" do
54
+ it "can retrieve the organization" do
55
+ Client.stub(:get).with("/notifications/#{notification_details['id']}/organization").and_return JSON.generate(orgs_details.first)
56
+ @notification.organization.id.should == orgs_details.first['id']
57
+ end
58
+ end
59
+
60
+ context "local" do
61
+ it "gets the read status" do
62
+ @notification.unread?.should == notification_details['unread']
63
+ end
64
+
65
+ it "gets the type" do
66
+ @notification.type.should == notification_details['type']
67
+ end
68
+
69
+ it "gets the date" do
70
+ @notification.date.should == notification_details['date']
71
+ end
72
+
73
+ it "gets the data" do
74
+ @notification.data.should == notification_details['data']
75
+ end
76
+
77
+ it "gets the member creator id" do
78
+ @notification.member_creator_id.should == notification_details['idMemberCreator']
79
+ end
80
+ end
81
+ end
82
+ end
@@ -79,5 +79,4 @@ describe OAuthPolicy do
79
79
 
80
80
  it "adds correct signature for https uri"
81
81
  it "adds correct signature for verbs other than get"
82
- it "can sign with access token too"
83
82
  end
data/spec/spec_helper.rb CHANGED
@@ -142,4 +142,29 @@ module Helpers
142
142
  def actions_payload
143
143
  JSON.generate(actions_details)
144
144
  end
145
+
146
+ def notification_details
147
+ {
148
+ "id" => "4f30d084d5b0f7ab453bee51",
149
+ "unread" => false,
150
+ "type" => "commentCard",
151
+ "date" => "2012-02-07T07:19:32.393Z",
152
+ "data" => {
153
+ "board" => {
154
+ "id" => "abcdef123456789123456789",
155
+ "name" => "Test"
156
+ },
157
+ "card"=>{
158
+ "id" => "abcdef123456789123456789",
159
+ "name" => "Do something awesome"
160
+ },
161
+ "text" => "test"
162
+ },
163
+ "idMemberCreator" => "abcdef123456789012345678"
164
+ }
165
+ end
166
+
167
+ def notification_payload
168
+ JSON.generate(notification_details)
169
+ end
145
170
  end
metadata CHANGED
@@ -1,112 +1,78 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ruby-trello
3
- version: !ruby/object:Gem::Version
4
- hash: 4135067353417607739
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jeremy Tregunna
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-01-07 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-01-07 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: yajl-ruby
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70172866550100 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3461773182973075480
29
- segments:
30
- - 1
31
- - 1
32
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
33
21
  version: 1.1.0
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: oauth
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70172866550100
25
+ - !ruby/object:Gem::Dependency
26
+ name: oauth
27
+ requirement: &70172866549140 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
29
+ requirements:
42
30
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 3072838298281563226
45
- segments:
46
- - 0
47
- - 4
48
- - 5
31
+ - !ruby/object:Gem::Version
49
32
  version: 0.4.5
50
33
  type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: addressable
54
34
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70172866549140
36
+ - !ruby/object:Gem::Dependency
37
+ name: addressable
38
+ requirement: &70172866548200 !ruby/object:Gem::Requirement
56
39
  none: false
57
- requirements:
40
+ requirements:
58
41
  - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 1690824680571537449
61
- segments:
62
- - 2
63
- - 2
64
- - 6
42
+ - !ruby/object:Gem::Version
65
43
  version: 2.2.6
66
44
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: rest-client
70
45
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70172866548200
47
+ - !ruby/object:Gem::Dependency
48
+ name: rest-client
49
+ requirement: &70172866546920 !ruby/object:Gem::Requirement
72
50
  none: false
73
- requirements:
51
+ requirements:
74
52
  - - ~>
75
- - !ruby/object:Gem::Version
76
- hash: 4554157976602492668
77
- segments:
78
- - 1
79
- - 6
80
- - 7
53
+ - !ruby/object:Gem::Version
81
54
  version: 1.6.7
82
55
  type: :runtime
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: bundler
86
56
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *70172866546920
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: &70172866545720 !ruby/object:Gem::Requirement
88
61
  none: false
89
- requirements:
62
+ requirements:
90
63
  - - ~>
91
- - !ruby/object:Gem::Version
92
- hash: 2387456872237229630
93
- segments:
94
- - 1
95
- - 0
96
- - 0
64
+ - !ruby/object:Gem::Version
97
65
  version: 1.0.0
98
66
  type: :development
99
- version_requirements: *id005
67
+ prerelease: false
68
+ version_requirements: *70172866545720
100
69
  description: A wrapper around the trello.com API.
101
70
  email: jeremy@tregunna.ca
102
71
  executables: []
103
-
104
72
  extensions: []
105
-
106
- extra_rdoc_files:
73
+ extra_rdoc_files:
107
74
  - README.md
108
- files:
109
- - lib/trello.rb
75
+ files:
110
76
  - lib/trello/action.rb
111
77
  - lib/trello/authorization.rb
112
78
  - lib/trello/basic_data.rb
@@ -122,6 +88,7 @@ files:
122
88
  - lib/trello/notification.rb
123
89
  - lib/trello/organization.rb
124
90
  - lib/trello/string.rb
91
+ - lib/trello.rb
125
92
  - README.md
126
93
  - spec/action_spec.rb
127
94
  - spec/basic_auth_policy_spec.rb
@@ -129,67 +96,59 @@ files:
129
96
  - spec/card_spec.rb
130
97
  - spec/checklist_spec.rb
131
98
  - spec/client_spec.rb
99
+ - spec/integration/how_to_authorize_spec.rb
100
+ - spec/integration/how_to_use_boards_spec.rb
101
+ - spec/integration/integration_test.rb
132
102
  - spec/item_spec.rb
133
103
  - spec/item_state_spec.rb
134
104
  - spec/list_spec.rb
135
105
  - spec/member_spec.rb
106
+ - spec/notification_spec.rb
136
107
  - spec/oauth_policy_spec.rb
137
108
  - spec/organization_spec.rb
138
109
  - spec/spec_helper.rb
139
110
  - spec/string_spec.rb
140
- - spec/integration/how_to_authorize_spec.rb
141
- - spec/integration/how_to_use_boards_spec.rb
142
- - spec/integration/integration_test.rb
143
111
  homepage: https://github.com/jeremytregunna/ruby-trello
144
112
  licenses: []
145
-
146
113
  post_install_message:
147
- rdoc_options:
114
+ rdoc_options:
148
115
  - --charset=UTF-8
149
- require_paths:
116
+ require_paths:
150
117
  - lib
151
- required_ruby_version: !ruby/object:Gem::Requirement
118
+ required_ruby_version: !ruby/object:Gem::Requirement
152
119
  none: false
153
- requirements:
154
- - - ">="
155
- - !ruby/object:Gem::Version
156
- hash: 2002549777813010636
157
- segments:
158
- - 0
159
- version: "0"
160
- required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
161
125
  none: false
162
- requirements:
163
- - - ">="
164
- - !ruby/object:Gem::Version
165
- hash: 2387630629434237851
166
- segments:
167
- - 1
168
- - 3
169
- - 6
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
170
129
  version: 1.3.6
171
130
  requirements: []
172
-
173
131
  rubyforge_project: ruby-trello
174
- rubygems_version: 1.8.12
132
+ rubygems_version: 1.8.10
175
133
  signing_key:
176
134
  specification_version: 3
177
135
  summary: A wrapper around the trello.com API.
178
- test_files:
136
+ test_files:
179
137
  - spec/action_spec.rb
180
138
  - spec/basic_auth_policy_spec.rb
181
139
  - spec/board_spec.rb
182
140
  - spec/card_spec.rb
183
141
  - spec/checklist_spec.rb
184
142
  - spec/client_spec.rb
143
+ - spec/integration/how_to_authorize_spec.rb
144
+ - spec/integration/how_to_use_boards_spec.rb
145
+ - spec/integration/integration_test.rb
185
146
  - spec/item_spec.rb
186
147
  - spec/item_state_spec.rb
187
148
  - spec/list_spec.rb
188
149
  - spec/member_spec.rb
150
+ - spec/notification_spec.rb
189
151
  - spec/oauth_policy_spec.rb
190
152
  - spec/organization_spec.rb
191
153
  - spec/spec_helper.rb
192
154
  - spec/string_spec.rb
193
- - spec/integration/how_to_authorize_spec.rb
194
- - spec/integration/how_to_use_boards_spec.rb
195
- - spec/integration/integration_test.rb