ruby-trello 1.1.0 → 1.1.1

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
  SHA1:
3
- metadata.gz: c4d52816b20573e0e428d30639952518f52c303e
4
- data.tar.gz: ba52ccc7483b34f53d018cdef8be47565959c1b0
3
+ metadata.gz: 646b1425d617c5840facf57bee4cf7b52a7ef4a7
4
+ data.tar.gz: 805feb33ce7d86288b20612451bbe523fce80e91
5
5
  SHA512:
6
- metadata.gz: 64d9ab9659f109dca082bf07764aa695c6487e294c6b5fd9e3e951ffc8492d24ab26e80a676648a2dd3f877f7d2c2b3c00e4bf7b8fab742d7caae67f1e1a4511
7
- data.tar.gz: 06941e4963b76afb942927c2657e07544fa44e698655bb1d4a6d74c6457b53fec9aa695615076ff3b544bafe9a7e679918f510111358bf5c690f246254530bf4
6
+ metadata.gz: d5c21fc97bbfe409dadf87336190dd6ec1c875bae9f4154ae761529a1dae50c17fe7757af4b9cb66c6bf40498c8a2f9a9085da1978ddfba279486c93bdb09baa
7
+ data.tar.gz: 74655e09b8a6fb6ed6a00e10a63b5e4f4d9e9b7d4014aaf74575e8a473f9644e9759f75b6f9722800b8af2852de8e2a75dbd706afc1404c3f50c778120dc9cf7
data/lib/trello.rb CHANGED
@@ -41,6 +41,7 @@ module Trello
41
41
  autoload :Association, 'trello/association'
42
42
  autoload :AssociationProxy, 'trello/association_proxy'
43
43
  autoload :Attachment, 'trello/attachment'
44
+ autoload :CoverImage, 'trello/cover_image'
44
45
  autoload :BasicData, 'trello/basic_data'
45
46
  autoload :Board, 'trello/board'
46
47
  autoload :Card, 'trello/card'
data/lib/trello/action.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Trello
2
2
  # Action represents some event that occurred. For instance, when a card is created.
3
3
  class Action < BasicData
4
- register_attributes :id, :type, :data, :date, :member_creator_id,
5
- :readonly => [ :id, :type, :data, :date, :member_creator_id ]
4
+ register_attributes :id, :type, :data, :date, :member_creator_id, :member_participant,
5
+ :readonly => [ :id, :type, :data, :date, :member_creator_id, :member_participant ]
6
6
  validates_presence_of :id, :type, :date, :member_creator_id
7
7
 
8
8
  class << self
@@ -10,6 +10,14 @@ module Trello
10
10
  def find(id, params = {})
11
11
  client.find(:action, id, params)
12
12
  end
13
+
14
+ def search(query, opts={})
15
+ response = client.get("/search/", { query: query }.merge(opts))
16
+ formatted_response = JSON.parse(response).except("options").inject({}) do |res, key|
17
+ res.merge!({ key.first => key.last.jsoned_into("Trello::#{key.first.singularize.capitalize}".constantize) })
18
+ res
19
+ end
20
+ end
13
21
  end
14
22
 
15
23
  # Update the attributes of an action
@@ -17,11 +25,12 @@ module Trello
17
25
  # Supply a hash of string keyed data retrieved from the Trello API representing
18
26
  # an Action.
19
27
  def update_fields(fields)
20
- attributes[:id] = fields['id']
21
- attributes[:type] = fields['type']
22
- attributes[:data] = fields['data']
23
- attributes[:date] = Time.iso8601(fields['date'])
24
- attributes[:member_creator_id] = fields['idMemberCreator']
28
+ attributes[:id] = fields['id']
29
+ attributes[:type] = fields['type']
30
+ attributes[:data] = fields['data']
31
+ attributes[:date] = Time.iso8601(fields['date'])
32
+ attributes[:member_creator_id] = fields['idMemberCreator']
33
+ attributes[:member_participant] = fields['member']
25
34
  self
26
35
  end
27
36
 
@@ -1,4 +1,7 @@
1
- require 'trello/string'
1
+ require 'trello/core_ext/array'
2
+ require 'trello/core_ext/hash'
3
+ require 'trello/core_ext/string'
4
+ require 'active_support/inflector'
2
5
 
3
6
  module Trello
4
7
  class BasicData
data/lib/trello/board.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Trello
2
2
  class Board < BasicData
3
3
  register_attributes :id, :name, :description, :closed, :url, :organization_id, :prefs,
4
- :readonly => [ :id, :url, :organization_id, :prefs ]
4
+ :readonly => [ :id, :url, :prefs ]
5
5
  validates_presence_of :id, :name
6
6
  validates_length_of :name, :in => 1..16384
7
7
  validates_length_of :description, :maximum => 16384
@@ -15,10 +15,12 @@ module Trello
15
15
  end
16
16
 
17
17
  def create(fields)
18
- client.create(:board,
18
+ data = {
19
19
  'name' => fields[:name],
20
20
  'desc' => fields[:description],
21
- 'closed' => fields[:closed] || false)
21
+ 'closed' => fields[:closed] || false }
22
+ data.merge!('idOrganization' => fields[:organization_id]) if fields[:organization_id]
23
+ client.create(:board, data)
22
24
  end
23
25
 
24
26
  def all
data/lib/trello/card.rb CHANGED
@@ -1,14 +1,36 @@
1
1
  module Trello
2
2
  # A Card is a container that can house checklists and comments; it resides inside a List.
3
3
  class Card < BasicData
4
- register_attributes :id, :short_id, :name, :desc, :due, :closed, :url, :board_id, :member_ids, :list_id, :pos, :last_activity_date,
5
- :readonly => [ :id, :short_id, :url, :board_id, :member_ids, :last_activity_date ]
4
+ register_attributes :id, :short_id, :name, :desc, :due, :closed, :url, :short_url,
5
+ :board_id, :member_ids, :list_id, :pos, :last_activity_date, :card_labels,
6
+ :cover_image_id, :badges, :card_members,
7
+ :readonly => [ :id, :short_id, :url, :short_url, :last_activity_date, :badges, :card_members ]
6
8
  validates_presence_of :id, :name, :list_id
7
9
  validates_length_of :name, :in => 1..16384
8
10
  validates_length_of :desc, :in => 0..16384
9
11
 
10
12
  include HasActions
11
13
 
14
+ SYMBOL_TO_STRING = {
15
+ id: 'id',
16
+ short_id: 'idShort',
17
+ name: 'name',
18
+ desc: 'desc',
19
+ due: 'due',
20
+ closed: 'closed',
21
+ url: 'url',
22
+ short_url: 'shortUrl',
23
+ board_id: 'idBoard',
24
+ member_ids: 'idMembers',
25
+ cover_image_id: 'idAttachmentCover',
26
+ list_id: 'idList',
27
+ pos: 'pos',
28
+ last_activity_date: 'dateLastActivity',
29
+ card_labels: 'labels',
30
+ badges: 'badges',
31
+ card_members: 'members'
32
+ }
33
+
12
34
  class << self
13
35
  # Find a specific card by its id.
14
36
  def find(id, params = {})
@@ -18,9 +40,12 @@ module Trello
18
40
  # Create a new card and save it on Trello.
19
41
  def create(options)
20
42
  client.create(:card,
21
- 'name' => options[:name],
22
- 'idList' => options[:list_id],
23
- 'desc' => options[:desc])
43
+ 'name' => options[:name],
44
+ 'idList' => options[:list_id],
45
+ 'desc' => options[:desc],
46
+ 'idMembers' => options[:member_ids],
47
+ 'labels' => options[:card_labels]
48
+ )
24
49
  end
25
50
  end
26
51
 
@@ -29,23 +54,30 @@ module Trello
29
54
  # Supply a hash of string keyed data retrieved from the Trello API representing
30
55
  # a card.
31
56
  def update_fields(fields)
32
- attributes[:id] = fields['id']
33
- attributes[:short_id] = fields['idShort']
34
- attributes[:name] = fields['name']
35
- attributes[:desc] = fields['desc']
36
- attributes[:due] = Time.iso8601(fields['due']) rescue nil
37
- attributes[:closed] = fields['closed']
38
- attributes[:url] = fields['url']
39
- attributes[:board_id] = fields['idBoard']
40
- attributes[:member_ids] = fields['idMembers']
41
- attributes[:list_id] = fields['idList']
42
- attributes[:pos] = fields['pos']
43
- attributes[:last_activity_date] = Time.iso8601(fields['dateLastActivity']) rescue nil
57
+ attributes[:id] = fields[SYMBOL_TO_STRING[:id]]
58
+ attributes[:short_id] = fields[SYMBOL_TO_STRING[:short_id]]
59
+ attributes[:name] = fields[SYMBOL_TO_STRING[:name]]
60
+ attributes[:desc] = fields[SYMBOL_TO_STRING[:desc]]
61
+ attributes[:due] = Time.iso8601(fields[SYMBOL_TO_STRING[:due]]) rescue nil
62
+ attributes[:closed] = fields[SYMBOL_TO_STRING[:closed]]
63
+ attributes[:url] = fields[SYMBOL_TO_STRING[:url]]
64
+ attributes[:short_url] = fields[SYMBOL_TO_STRING[:short_url]]
65
+ attributes[:board_id] = fields[SYMBOL_TO_STRING[:board_id]]
66
+ attributes[:member_ids] = fields[SYMBOL_TO_STRING[:member_ids]]
67
+ attributes[:list_id] = fields[SYMBOL_TO_STRING[:list_id]]
68
+ attributes[:pos] = fields[SYMBOL_TO_STRING[:post]]
69
+ attributes[:card_labels] = fields[SYMBOL_TO_STRING[:card_labels]]
70
+ attributes[:last_activity_date] = Time.iso8601(fields[SYMBOL_TO_STRING[:last_activity_date]]) rescue nil
71
+ attributes[:cover_image_id] = fields[SYMBOL_TO_STRING[:cover_image_id]]
72
+ attributes[:badges] = fields[SYMBOL_TO_STRING[:badges]]
73
+ attributes[:card_members] = fields[SYMBOL_TO_STRING[:card_members]]
44
74
  self
45
75
  end
46
76
 
47
77
  # Returns a reference to the board this card is part of.
48
78
  one :board, :path => :boards, :using => :board_id
79
+ # Returns a reference to the cover image attachment
80
+ one :cover_image, :path => :attachments, :using => :cover_image_id
49
81
 
50
82
  # Returns a list of checklists associated with the card.
51
83
  #
@@ -77,9 +109,11 @@ module Trello
77
109
  return update! if id
78
110
 
79
111
  client.post("/cards", {
80
- :name => name,
81
- :desc => desc,
82
- :idList => list_id
112
+ name: name,
113
+ desc: desc,
114
+ idList: list_id,
115
+ idMembers: member_ids,
116
+ labels: card_labels
83
117
  }).json_into(self)
84
118
  end
85
119
 
@@ -90,7 +124,7 @@ module Trello
90
124
  def update!
91
125
  @previously_changed = changes
92
126
  # extract only new values to build payload
93
- payload = Hash[changes.map { |key, values| [key.to_sym.eql?(:list_id) ? :idList : key.to_sym, values[1]] }]
127
+ payload = Hash[changes.map { |key, values| [SYMBOL_TO_STRING[key.to_sym].to_sym, values[1]] }]
94
128
  @changed_attributes.clear
95
129
 
96
130
  client.put("/cards/#{id}", payload)
@@ -1,7 +1,7 @@
1
1
  module Trello
2
2
  # A Checklist holds items which are like a "task" list. Checklists are linked to a card.
3
3
  class Checklist < BasicData
4
- register_attributes :id, :name, :description, :closed, :url, :check_items, :board_id, :list_id, :member_ids,
4
+ register_attributes :id, :name, :description, :closed, :position, :url, :check_items, :board_id, :list_id, :member_ids,
5
5
  :readonly => [:id, :description, :closed, :url, :check_items, :board_id, :list_id, :member_ids]
6
6
  validates_presence_of :id, :board_id, :list_id
7
7
  validates_length_of :name, :in => 1..16384
@@ -30,6 +30,7 @@ module Trello
30
30
  attributes[:closed] = fields['closed']
31
31
  attributes[:url] = fields['url']
32
32
  attributes[:check_items] = fields['checkItems']
33
+ attributes[:position] = fields['position']
33
34
  attributes[:board_id] = fields['idBoard']
34
35
  attributes[:list_id] = fields['idList']
35
36
  attributes[:member_ids] = fields['idMembers']
@@ -52,7 +53,7 @@ module Trello
52
53
  end
53
54
 
54
55
  def update!
55
- client.put("/checklists/#{id}", {:name => name}).json_into(self)
56
+ client.put("/checklists/#{id}", {:name => name, :pos => position}).json_into(self)
56
57
  end
57
58
 
58
59
  # Return a list of items on the checklist.
data/lib/trello/client.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'addressable/uri'
2
2
  require 'forwardable'
3
+ require 'active_support/inflector'
3
4
 
4
5
  module Trello
5
6
  class Client
@@ -0,0 +1,5 @@
1
+ class Array
2
+ def jsoned_into(obj)
3
+ self.map { |element| element.jsoned_into(obj) }
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class Hash
2
+ def jsoned_into(obj)
3
+ action = obj.kind_of?(Class) ? :new : :update_fields
4
+ obj.send(action, self)
5
+ end
6
+ end
@@ -17,12 +17,7 @@ class String
17
17
  # thing.b == "foo"
18
18
  def json_into(obj)
19
19
  data = JSON.parse(self)
20
- action = obj.kind_of?(Class) ? :new : :update_fields
21
- if data.kind_of? Hash
22
- obj.send(action, JSON.parse(self))
23
- else
24
- data.map { |element| obj.send(action, element) }
25
- end
20
+ data.jsoned_into(obj)
26
21
  rescue JSON::ParserError => json_error
27
22
  if json_error.message =~ /model not found/
28
23
  Trello.logger.error "Could not find that record."
@@ -0,0 +1,8 @@
1
+ module Trello
2
+ # The trello cover image
3
+ #
4
+ # This is normally an attachment that the user (or trello) has set
5
+ # as the cover image
6
+ class CoverImage < Attachment
7
+ end
8
+ end
@@ -34,8 +34,8 @@ module Trello
34
34
  end
35
35
 
36
36
  # Returns an array of members associated with the organization.
37
- def members
38
- members = client.get("/organizations/#{id}/members/all").json_into(Member)
37
+ def members(params = {})
38
+ members = client.get("/organizations/#{id}/members/all", params).json_into(Member)
39
39
  MultiAssociation.new(self, members).proxy
40
40
  end
41
41
 
data/spec/action_spec.rb CHANGED
@@ -25,6 +25,15 @@ module Trello
25
25
  end
26
26
  end
27
27
 
28
+ context 'search' do
29
+ let(:client) { Trello.client }
30
+
31
+ it "should search and get back a card object" do
32
+ client.should_receive(:get).with("/search/", { query: "something"}).and_return(JSON.generate({ "cards" => cards_details }))
33
+ Action.search("something").should eq({ "cards" => cards_details.jsoned_into(Card) })
34
+ end
35
+ end
36
+
28
37
  context 'fields' do
29
38
  let(:detail) { actions_details.first }
30
39
 
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require 'trello/core_ext/array'
3
+
4
+ describe Array, '#jsoned_into' do
5
+ include Helpers
6
+
7
+ it "should convert an array of parsed json into cards" do
8
+ cards_details.jsoned_into(Trello::Card).should eq([cards_details.first.jsoned_into(Trello::Card)])
9
+ end
10
+ end
data/spec/card_spec.rb CHANGED
@@ -51,7 +51,7 @@ module Trello
51
51
 
52
52
  result = JSON.generate(cards_details.first.merge(payload.merge(:idList => lists_details.first['id'])))
53
53
 
54
- expected_payload = {:name => "Test Card", :desc => nil, :idList => "abcdef123456789123456789"}
54
+ expected_payload = {name: "Test Card", desc: nil, idList: "abcdef123456789123456789", idMembers: nil, labels: nil }
55
55
 
56
56
  client.should_receive(:post).with("/cards", expected_payload).and_return result
57
57
 
@@ -108,9 +108,17 @@ module Trello
108
108
  card.url.should_not be_nil
109
109
  end
110
110
 
111
+ it "gets its short url" do
112
+ card.short_url.should_not be_nil
113
+ end
114
+
111
115
  it "gets its last active date" do
112
116
  card.last_activity_date.should_not be_nil
113
117
  end
118
+
119
+ it "gets its cover image id" do
120
+ card.cover_image_id.should_not be_nil
121
+ end
114
122
  end
115
123
 
116
124
  context "actions" do
@@ -132,6 +140,13 @@ module Trello
132
140
  end
133
141
  end
134
142
 
143
+ context "cover image" do
144
+ it "has a cover image" do
145
+ client.stub(:get).with("/attachments/abcdef123456789123456789", {}).and_return JSON.generate(attachments_details.first)
146
+ card.cover_image.should_not be_nil
147
+ end
148
+ end
149
+
135
150
  context "checklists" do
136
151
  it "has a list of checklists" do
137
152
  client.stub(:get).with("/cards/abcdef123456789123456789/checklists", { :filter => :all }).and_return checklists_payload
@@ -66,7 +66,8 @@ module Trello
66
66
  expected_new_name = "xxx"
67
67
  expected_resource = "/checklists/abcdef123456789123456789"
68
68
  payload = {
69
- :name => expected_new_name
69
+ :name => expected_new_name,
70
+ :pos => checklist.position
70
71
  }
71
72
 
72
73
  result = JSON.generate(checklists_details.first)
@@ -76,6 +77,21 @@ module Trello
76
77
  checklist.save
77
78
  end
78
79
 
80
+ it "updating position does a put on the correct resource with the correct value" do
81
+ expected_new_position = 33
82
+ expected_resource = "/checklists/abcdef123456789123456789"
83
+ payload = {
84
+ :name => checklist.name,
85
+ :pos => expected_new_position
86
+ }
87
+
88
+ result = JSON.generate(checklists_details.first)
89
+ client.should_receive(:put).once.with(expected_resource, payload).and_return result
90
+
91
+ checklist.position = expected_new_position
92
+ checklist.save
93
+ end
94
+
79
95
  it "adds an item" do
80
96
  expected_item_name = "item1"
81
97
  expected_checked = true
data/spec/hash_spec.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ require 'trello/core_ext/hash'
3
+
4
+ describe Hash, '#jsoned_into' do
5
+ include Helpers
6
+
7
+ it "should convert a single parsed json into card" do
8
+ Trello::Card.should_receive(:new).once.with(cards_details.first)
9
+ cards_details.first.jsoned_into(Trello::Card)
10
+ end
11
+ end
data/spec/spec_helper.rb CHANGED
@@ -70,6 +70,7 @@ module Helpers
70
70
  'name' => 'Test Checklist',
71
71
  'desc' => 'A marvelous little checklist',
72
72
  'closed' => false,
73
+ 'position' => 16384,
73
74
  'url' => 'https://trello.com/blah/blah',
74
75
  'idBoard' => 'abcdef123456789123456789',
75
76
  'idList' => 'abcdef123456789123456789',
@@ -105,8 +106,10 @@ module Helpers
105
106
  'closed' => false,
106
107
  'idList' => 'abcdef123456789123456789',
107
108
  'idBoard' => 'abcdef123456789123456789',
109
+ 'idAttachmentCover' => 'abcdef123456789123456789',
108
110
  'idMembers' => ['abcdef123456789123456789'],
109
111
  'url' => 'https://trello.com/card/board/specify-the-type-and-scope-of-the-jit-in-a-lightweight-spec/abcdef123456789123456789/abcdef123456789123456789',
112
+ 'shortUrl' => 'https://trello.com/c/abcdef12',
110
113
  'pos' => 12,
111
114
  'dateLastActivity' => '2012-12-07T18:40:24.314Z'
112
115
  }]
data/spec/string_spec.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
- require 'trello/string'
2
+ require 'trello/core_ext/string'
3
3
 
4
4
  describe String, '#json_into' do
5
5
  include Helpers
@@ -24,9 +24,9 @@ describe String, '#json_into' do
24
24
  "name" => "Jazz Kang",
25
25
  "description" => "Plonker"
26
26
  })
27
-
27
+
28
28
  json_text = '{"name" : "Jazz Kang", "description": "Plonker"}'
29
-
29
+
30
30
  json_text.json_into example_class
31
31
  end
32
32
 
@@ -37,7 +37,7 @@ describe String, '#json_into' do
37
37
  {"name" : "Phil Murphy", "description": "Shoreditch hipster"}
38
38
  ]
39
39
  JSON
40
-
40
+
41
41
  result = json_text.json_into example_class
42
42
 
43
43
  result.should be_an Array
@@ -47,4 +47,4 @@ describe String, '#json_into' do
47
47
  end
48
48
  end
49
49
  end
50
-
50
+
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-trello
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Tregunna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-23 00:00:00.000000000 Z
11
+ date: 2014-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
@@ -98,6 +98,10 @@ files:
98
98
  - lib/trello/checklist.rb
99
99
  - lib/trello/client.rb
100
100
  - lib/trello/configuration.rb
101
+ - lib/trello/core_ext/array.rb
102
+ - lib/trello/core_ext/hash.rb
103
+ - lib/trello/core_ext/string.rb
104
+ - lib/trello/cover_image.rb
101
105
  - lib/trello/has_actions.rb
102
106
  - lib/trello/item.rb
103
107
  - lib/trello/item_state.rb
@@ -109,12 +113,12 @@ files:
109
113
  - lib/trello/net.rb
110
114
  - lib/trello/notification.rb
111
115
  - lib/trello/organization.rb
112
- - lib/trello/string.rb
113
116
  - lib/trello/token.rb
114
117
  - lib/trello/webhook.rb
115
118
  - lib/trello.rb
116
119
  - README.md
117
120
  - spec/action_spec.rb
121
+ - spec/array_spec.rb
118
122
  - spec/association_spec.rb
119
123
  - spec/basic_auth_policy_spec.rb
120
124
  - spec/board_spec.rb
@@ -122,6 +126,7 @@ files:
122
126
  - spec/checklist_spec.rb
123
127
  - spec/client_spec.rb
124
128
  - spec/configuration_spec.rb
129
+ - spec/hash_spec.rb
125
130
  - spec/integration/how_to_authorize_spec.rb
126
131
  - spec/integration/how_to_use_boards_spec.rb
127
132
  - spec/integration/integration_test.rb
@@ -164,6 +169,7 @@ specification_version: 4
164
169
  summary: A wrapper around the trello.com API.
165
170
  test_files:
166
171
  - spec/action_spec.rb
172
+ - spec/array_spec.rb
167
173
  - spec/association_spec.rb
168
174
  - spec/basic_auth_policy_spec.rb
169
175
  - spec/board_spec.rb
@@ -171,6 +177,7 @@ test_files:
171
177
  - spec/checklist_spec.rb
172
178
  - spec/client_spec.rb
173
179
  - spec/configuration_spec.rb
180
+ - spec/hash_spec.rb
174
181
  - spec/integration/how_to_authorize_spec.rb
175
182
  - spec/integration/how_to_use_boards_spec.rb
176
183
  - spec/integration/integration_test.rb