trello-client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ .*.swp
2
+ *.gem
3
+ *.rbc
4
+ .bundle
5
+ .config
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ html/
13
+ lib/bundler/man
14
+ out.txt
15
+ pkg
16
+ rdoc
17
+ spec/reports
18
+ test/tmp
19
+ test/version_tmp
20
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in trello-client.gemspec
4
+ gemspec
data/History.rdoc ADDED
@@ -0,0 +1,7 @@
1
+ = Trello::Client History
2
+
3
+ == 2012-03-28 v0.0.1
4
+
5
+ * First public release.
6
+ * Added Trello::Client#member()
7
+
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 blair christensen
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,53 @@
1
+ = Trello::Client - Trello API client
2
+
3
+ == Configuration
4
+
5
+ Get developer API key:
6
+ https://trello.com/1/appKey/generate
7
+
8
+ Get user token:
9
+ https://trello.com/1/connect?key=$YOUR_API_KEY&name=trello-client.rb&response_type=token
10
+
11
+ == Usage
12
+
13
+ require 'trello-client'
14
+
15
+ Trello::Client.new do |client|
16
+ # Set API key
17
+ client.api_key = ...
18
+
19
+ # Set token
20
+ client.token = ...
21
+
22
+ # Get member
23
+ client.member('me') do |m|
24
+ # Returns Trello::Client::Member object
25
+ m['id'] # => member identity
26
+ m['fullName'] # => member name
27
+ m['userName'] # => member user
28
+
29
+ m.boards.each do |board|
30
+ # TODO Returns Board JSON
31
+ end
32
+ end
33
+
34
+ == Author
35
+
36
+ blair christensen. <mailto:blair.christensen@gmail.com>
37
+
38
+ == Homepage
39
+
40
+ https://github.com/blairc/trello-client/
41
+
42
+ == See Also
43
+
44
+ * https://trello.com/docs/api/
45
+
46
+ == To Do
47
+
48
+ * Get boards
49
+ * Get lists
50
+ * Get cards
51
+ * Memoize API calls
52
+ * Add script
53
+
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
3
+
4
+ require 'rake/clean'
5
+ require 'rake/testtask'
6
+ require 'rdoc-readme/rake_task'
7
+ require 'rdoc/task'
8
+
9
+ %w{ coverage html out.txt pkg }.each { |p| CLEAN.include(p) }
10
+ %w{ build install rdoc test }.each { |t| task t.to_sym => [ 'rdoc:readme' ] }
11
+
12
+ task :default => :test
13
+
14
+ Rake::TestTask.new do |t|
15
+ t.libs << 'test'
16
+ t.test_files = FileList['test/test*.rb']
17
+ t.verbose = true
18
+ end
19
+
20
+ RDoc::Readme::RakeTask.new 'lib/trello-client.rb', 'README.rdoc'
21
+
22
+ RDoc::Task.new do |rdoc|
23
+ rdoc.main = 'README.rdoc'
24
+ rdoc.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'doc/*.txt')
25
+ end
26
+
27
+ desc 'Update test data files'
28
+ task :update_test_data do
29
+ $LOAD_PATH << 'lib'
30
+ require 'open-uri'
31
+ require 'trello-client'
32
+
33
+ Trello::Client.new do |client|
34
+ client.api_key = ENV['TRELLO_API_KEY']
35
+ client.api_token = ENV['TRELLO_API_TOKEN']
36
+
37
+ {
38
+ 'member' => [ :member, 'me' ],
39
+ 'member_with_boards' => [ :member, 'me', :boards => 'all' ]
40
+ }.each_pair do |file, request|
41
+ fn = File.join( File.dirname(__FILE__), 'test', 'data', "#{file}.json" )
42
+ meth = request.shift
43
+ args = request
44
+ File.open(fn, 'w') { |fh| fh.puts( client.send meth, *args ) }
45
+ end
46
+ end
47
+
48
+ end
49
+
@@ -0,0 +1,134 @@
1
+ # encoding: utf-8
2
+
3
+ require 'multi_json'
4
+ require 'open-uri'
5
+ require 'uri'
6
+
7
+ require 'trello-client/member'
8
+ require 'trello-client/version'
9
+
10
+ #
11
+ # = Trello::Client - Trello API client
12
+ #
13
+ # == Configuration
14
+ #
15
+ # Get developer API key:
16
+ # https://trello.com/1/appKey/generate
17
+ #
18
+ # Get user token:
19
+ # https://trello.com/1/connect?key=$YOUR_API_KEY&name=trello-client.rb&response_type=token
20
+ #
21
+ # == Usage
22
+ #
23
+ # require 'trello-client'
24
+ #
25
+ # Trello::Client.new do |client|
26
+ # # Set API key
27
+ # client.api_key = ...
28
+ #
29
+ # # Set token
30
+ # client.token = ...
31
+ #
32
+ # # Get member
33
+ # client.member('me') do |m|
34
+ # # Returns Trello::Client::Member object
35
+ # m['id'] # => member identity
36
+ # m['fullName'] # => member name
37
+ # m['userName'] # => member user
38
+ #
39
+ # m.boards.each do |board|
40
+ # # TODO Returns Board JSON
41
+ # end
42
+ # end
43
+ #
44
+ # == Author
45
+ #
46
+ # blair christensen. <mailto:blair.christensen@gmail.com>
47
+ #
48
+ # == Homepage
49
+ #
50
+ # https://github.com/blairc/trello-client/
51
+ #
52
+ # == See Also
53
+ #
54
+ # * https://trello.com/docs/api/
55
+ #
56
+ # == To Do
57
+ #
58
+ # * Get boards
59
+ # * Get lists
60
+ # * Get cards
61
+ # * Memoize API calls
62
+ # * Add script
63
+ #
64
+ module Trello # :nodoc:
65
+
66
+ #
67
+ # Trello API client.
68
+ #
69
+ class Client
70
+
71
+ #
72
+ # Get/Set Trello API URL
73
+ #
74
+ attr_accessor :api
75
+
76
+ #
77
+ # Get/Set Trello API key
78
+ #
79
+ attr_accessor :api_key
80
+
81
+ #
82
+ # Get/Set Trello API application token
83
+ #
84
+ attr_accessor :api_token
85
+
86
+ #
87
+ # Initialize Trello::Client object
88
+ #
89
+ def initialize
90
+ @api = 'https://api.trello.com/1'
91
+ @api_key = nil
92
+ @api_token = nil
93
+ yield self if block_given?
94
+ self
95
+ end
96
+
97
+ #
98
+ # Get Trello::Client::Member object
99
+ #
100
+ # See https://trello.com/docs/api/member/index.html
101
+ #
102
+ # Params:
103
+ # +id+:: Member identifier
104
+ # +options+:: (optional) Additional API parameters
105
+ #
106
+ def member(id, options = {} )
107
+ raise('invalid id') if id.nil? || id.empty?
108
+ _get "#{api}/members/#{id}", options
109
+ end
110
+
111
+
112
+ private
113
+
114
+ def _get( uri, options = {} )
115
+ raise('invalid URI') if uri.nil? || uri.empty?
116
+ raise('invalid API key') if @api_key.nil? || @api_key.empty?
117
+ raise('invalid API token') if @api_token.nil? || @api_token.empty?
118
+
119
+ defaults = { :key => @api_key, :token => @api_token }
120
+ options.merge!(defaults)
121
+ if options
122
+ uri << '?'
123
+ options.keys.sort.each do |k|
124
+ uri << "#{k}=#{ options[k] }&"
125
+ end
126
+ end
127
+ uri.gsub! /&$/, ''
128
+ open(uri).read
129
+ end
130
+
131
+ end # class Client
132
+
133
+ end # module Trello
134
+
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ module Trello # :nodoc:
4
+ class Client # :nodoc
5
+
6
+ #
7
+ # Trello::Client::Member object
8
+ #
9
+ class Member
10
+
11
+ #
12
+ # Initialize Trello::Member
13
+ #
14
+ def initialize(json)
15
+ @json = MultiJson.decode(json)
16
+ yield self if block_given?
17
+ self
18
+ end
19
+
20
+ #
21
+ # Get Trello::Member property
22
+ #
23
+ def[](key)
24
+ @json[key]
25
+ end
26
+
27
+ #
28
+ # Get +Array+ of boards
29
+ #
30
+ def boards
31
+ @json['boards'] || []
32
+ end
33
+
34
+ end # class Member
35
+
36
+ end # class Client
37
+ end # module Trello
38
+
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ module Trello
4
+ class Client
5
+ #
6
+ # Trello::Client version
7
+ #
8
+ VERSION = '0.0.1'
9
+ end
10
+ end
@@ -0,0 +1 @@
1
+ {"id":"4f4f9d55cf2e679318098c45","fullName":"blair christensen","initials":"BC","username":"blairchristensen","avatarHash":"65fcb89a59ff96b68b11332686c8f4f9","bio":"","url":"https://trello.com/blairchristensen"}
@@ -0,0 +1 @@
1
+ {"id":"4f4f9d55cf2e679318098c45","fullName":"blair christensen","initials":"BC","username":"blairchristensen","avatarHash":"65fcb89a59ff96b68b11332686c8f4f9","bio":"","url":"https://trello.com/blairchristensen","boards":[{"id":"4f4d0477e4ba0e4f09af1c6c","name":"5E - Survey Database Site Features","desc":"","closed":false,"idOrganization":"","pinned":true,"url":"https://trello.com/board/5e-survey-database-site-features/4f4d0477e4ba0e4f09af1c6c","prefs":{"selfJoin":false,"invitations":"members","comments":"members","voting":"members","permissionLevel":"private"}},{"id":"4f4f9d55cf2e679318098c5b","name":"Welcome Board","desc":"","closed":false,"pinned":true,"url":"https://trello.com/board/welcome-board/4f4f9d55cf2e679318098c5b","prefs":{"selfJoin":false,"invitations":"members","comments":"members","voting":"members","permissionLevel":"private"}},{"id":"4f6c9a79c3974b4d730a5533","name":"uchicago","desc":"","closed":false,"idOrganization":"","pinned":true,"url":"https://trello.com/board/uchicago/4f6c9a79c3974b4d730a5533","prefs":{"selfJoin":false,"invitations":"members","comments":"members","voting":"members","permissionLevel":"private"}}]}
@@ -0,0 +1,147 @@
1
+ # encoding: utf-8
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+
6
+ require 'fakeweb'
7
+ require 'mocha'
8
+ require 'trello-client'
9
+ require 'test/unit'
10
+
11
+
12
+ class TestClient < Test::Unit::TestCase
13
+
14
+ def setup
15
+ @api_key = 'test'
16
+ @api_token = 'test'
17
+
18
+ @test_dir = File.dirname(__FILE__)
19
+ @test_data = File.join( @test_dir, 'data' )
20
+ end
21
+
22
+
23
+ def test_initialization
24
+ blockable = false
25
+ client = Trello::Client.new do |client|
26
+ assert_kind_of Trello::Client, client
27
+ blockable = true
28
+ end
29
+ assert blockable, 'works as block'
30
+ assert_kind_of Trello::Client, client
31
+ assert_kind_of Trello::Client, Trello::Client.new
32
+ end
33
+
34
+ def test_accessors
35
+ Trello::Client.new do |client|
36
+ assert_equal 'https://api.trello.com/1', client.api
37
+ assert_nil client.api_key
38
+ assert_nil client.api_token
39
+ end
40
+ end
41
+
42
+ def test_member_parameter_validation
43
+ Trello::Client.new do |client|
44
+ assert_raise(RuntimeError, 'invalid id') { client.member(nil) }
45
+ assert_raise(RuntimeError, 'invalid id') { client.member('') }
46
+
47
+ assert_nil client.api_key
48
+ assert_raise(RuntimeError, 'invalid API key') { client.member('me') }
49
+ client.api_key = ''
50
+ assert_equal '', client.api_key
51
+ assert_raise(RuntimeError, 'invalid API key') { client.member('me') }
52
+ client.api_key = @api_key
53
+ assert_equal @api_key, client.api_key
54
+
55
+ assert_nil client.api_token
56
+ assert_raise(RuntimeError, 'invalid API token') { client.member('me') }
57
+ client.api_token = ''
58
+ assert_equal '', client.api_token
59
+ assert_raise(RuntimeError, 'invalid API token') { client.member('me') }
60
+ end
61
+ end
62
+
63
+ def test_member
64
+ Trello::Client.new do |client|
65
+ json = open( File.join( @test_data, 'member.json' ) )
66
+ m = Trello::Client::Member.new(json)
67
+ client.stubs(:member).with('me').returns(m)
68
+
69
+ assert_not_nil m
70
+ assert_kind_of Trello::Client::Member, m
71
+
72
+ assert_equal '65fcb89a59ff96b68b11332686c8f4f9', m['avatarHash']
73
+ assert_equal '', m['bio']
74
+ assert_nil m['boards']
75
+ assert_equal 'blair christensen', m['fullName']
76
+ assert_equal '4f4f9d55cf2e679318098c45', m['id']
77
+ assert_equal 'BC', m['initials']
78
+ assert_equal 'https://trello.com/blairchristensen', m['url']
79
+ assert_equal 'blairchristensen', m['username']
80
+
81
+ assert_not_nil m.boards
82
+ assert_kind_of Array, m.boards
83
+ assert_equal 0, m.boards.size
84
+ end
85
+ end
86
+
87
+ def test_member_with_boards
88
+ Trello::Client.new do |client|
89
+ json = open( File.join( @test_data, 'member_with_boards.json' ) )
90
+ m = Trello::Client::Member.new(json)
91
+ client.stubs(:member).with('me').returns(m)
92
+
93
+ assert_not_nil m
94
+ assert_kind_of Trello::Client::Member, m
95
+
96
+ assert_equal '65fcb89a59ff96b68b11332686c8f4f9', m['avatarHash']
97
+ assert_equal '', m['bio']
98
+ assert_not_nil m['boards']
99
+ assert_equal 'blair christensen', m['fullName']
100
+ assert_equal '4f4f9d55cf2e679318098c45', m['id']
101
+ assert_equal 'BC', m['initials']
102
+ assert_equal 'https://trello.com/blairchristensen', m['url']
103
+ assert_equal 'blairchristensen', m['username']
104
+
105
+ assert_not_nil m.boards
106
+ assert_kind_of Array, m.boards
107
+ assert_equal 3, m.boards.size
108
+ end
109
+ end
110
+
111
+ def test_underscore_get_parameter_validation
112
+ Trello::Client.new do |client|
113
+ uri = "#{ client.api }/member/me"
114
+
115
+ assert_raise(RuntimeError, 'invalid URI') { client.send( :_get, nil ) }
116
+ assert_raise(RuntimeError, 'invalid URI') { client.send( :_get, '' ) }
117
+
118
+ assert_raise(RuntimeError, 'invalid API key') { client.send( :_get, uri ) }
119
+ assert_raise(RuntimeError, 'invalid API key') { client.send( :_get, uri ) }
120
+ client.api_key = @api_key
121
+
122
+ assert_raise(RuntimeError, 'invalid API token') { client.send( :_get, uri ) }
123
+ assert_raise(RuntimeError, 'invalid API token') { client.send( :_get, uri ) }
124
+ client.api_token = @api_token
125
+ end
126
+ end
127
+
128
+ def test_underscore_get
129
+ Trello::Client.new do |client|
130
+ json = open( File.join( @test_data, 'member.json' ) ).read
131
+ uri = "#{ client.api }/member/me"
132
+ fake_uri = "#{uri}?key=test&token=test"
133
+ FakeWeb.register_uri( :get, fake_uri, :body => json )
134
+
135
+ client.api_key = @api_key
136
+ client.api_token = @api_token
137
+
138
+ r = client.send( :_get, uri )
139
+
140
+ assert_not_nil r
141
+ assert_equal json, r
142
+ end
143
+
144
+ end
145
+
146
+ end
147
+
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+
6
+ require 'fakeweb'
7
+ require 'mocha'
8
+ require 'trello-client'
9
+ require 'test/unit'
10
+
11
+
12
+ class TestMember < Test::Unit::TestCase
13
+
14
+ def test
15
+ skip 'TODO - Add explicit Test::Client::Member tests'
16
+ end
17
+
18
+ end
19
+
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/trello-client/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ['blair christensen']
6
+ gem.email = ['blair.christensen@gmail.com']
7
+ gem.description = %q{Trello API client}
8
+ gem.summary = %q{Trello API client}
9
+ gem.homepage = 'https://github.com/blairc/trello-client/'
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = 'trello-client'
15
+ gem.require_paths = ['lib']
16
+ gem.version = Trello::Client::VERSION
17
+
18
+ gem.add_runtime_dependency 'multi_json'
19
+
20
+ gem.add_development_dependency 'fakeweb'
21
+ gem.add_development_dependency 'mocha'
22
+ gem.add_development_dependency 'rake'
23
+ gem.add_development_dependency 'rdoc'
24
+ gem.add_development_dependency 'rdoc-readme', '~> 0.1.2'
25
+ gem.add_development_dependency 'simplecov'
26
+ end
27
+
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trello-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - blair christensen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: multi_json
16
+ requirement: &70273668948620 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70273668948620
25
+ - !ruby/object:Gem::Dependency
26
+ name: fakeweb
27
+ requirement: &70273668947980 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70273668947980
36
+ - !ruby/object:Gem::Dependency
37
+ name: mocha
38
+ requirement: &70273668947200 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70273668947200
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &70273668946460 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70273668946460
58
+ - !ruby/object:Gem::Dependency
59
+ name: rdoc
60
+ requirement: &70273668945700 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70273668945700
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc-readme
71
+ requirement: &70273668944700 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 0.1.2
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70273668944700
80
+ - !ruby/object:Gem::Dependency
81
+ name: simplecov
82
+ requirement: &70273668965120 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70273668965120
91
+ description: Trello API client
92
+ email:
93
+ - blair.christensen@gmail.com
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files: []
97
+ files:
98
+ - .gitignore
99
+ - Gemfile
100
+ - History.rdoc
101
+ - LICENSE
102
+ - README.rdoc
103
+ - Rakefile
104
+ - lib/trello-client.rb
105
+ - lib/trello-client/member.rb
106
+ - lib/trello-client/version.rb
107
+ - test/data/member.json
108
+ - test/data/member_with_boards.json
109
+ - test/test_client.rb
110
+ - test/test_member.rb
111
+ - trello-client.gemspec
112
+ homepage: https://github.com/blairc/trello-client/
113
+ licenses: []
114
+ post_install_message:
115
+ rdoc_options: []
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ segments:
125
+ - 0
126
+ hash: -3090611917339135223
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ segments:
134
+ - 0
135
+ hash: -3090611917339135223
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.11
139
+ signing_key:
140
+ specification_version: 3
141
+ summary: Trello API client
142
+ test_files:
143
+ - test/data/member.json
144
+ - test/data/member_with_boards.json
145
+ - test/test_client.rb
146
+ - test/test_member.rb