bcx 1.0.0 → 1.1.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
  SHA1:
3
- metadata.gz: e0255073331ab595db0c0eac6a8c6321dcde11e5
4
- data.tar.gz: 08bff6e4f6921ac5fad539180bae038753ad5f59
3
+ metadata.gz: 85e40c84d39ed27c5608eb29bbc277dc05c46f70
4
+ data.tar.gz: 1a1afb7ebbe093ee8286422ae2f6267d99562580
5
5
  SHA512:
6
- metadata.gz: 4c6285944e40341a7475f8083bf91f45c8d579bce244b493bd17bf4ba3e3f9b377d6de50f5375517ab9250e1a5b29b342d6354341d975c91f72bba4655d6098b
7
- data.tar.gz: 17b031d8c5a322ebf48df0ae0159aa38471ad75477db4a5b56c07ecf43843aae12a2c552bb6b481ad134d9459e8b61d04faba2791727f49003d531e2d09ff3f2
6
+ metadata.gz: 21b3887a2b1d025448eefa216b8a368af69a96ba0631a8f170dc3b1368c3eaea6675318bba23d86d571959f5f2d4060eb4035aaa1906f19761df0fd50db820a2
7
+ data.tar.gz: 23b400ac212a1a29e4434b4d3c7683eb5e8dc221801fe972b901d0d4ce0a575548326376562e5220e577be074d809ba03a473dde9f4cea7c8f103b32157a13d0
data/README.md CHANGED
@@ -35,11 +35,12 @@ $ bundle install
35
35
 
36
36
  ### Usage
37
37
 
38
- Configure Bcx for your Basecamp account
38
+ Configure Bcx for your Basecamp account. Basecamp requests that you provide contact information for your app through the user_agent string, for eventual technical issues.
39
39
 
40
40
  ```ruby
41
41
  Bcx.configure do |config|
42
42
  config.account = '1234567890'
43
+ config.user_agent = 'My great app name. https://app.com/contact_us.rb, contact: me@me.com'
43
44
  end
44
45
  ```
45
46
 
@@ -82,7 +83,7 @@ client = Bcx::Client::OAuth.new(client_id: '1234567890', client_secret: '831994c
82
83
 
83
84
  You can get a `client_id` and `client_secret` from https://integrate.37signals.com/
84
85
 
85
- You can also pass an `:account` option to the OAuth client (allowing multiple clients in your app).
86
+ You can also pass an `:account` option to the OAuth client (allowing multiple clients in your app), in which case do you not need to specify an account in the config block.
86
87
 
87
88
  ```ruby
88
89
  client = Bcx::Client::OAuth.new(account: 99999999, ...)
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Bcx::VERSION
17
17
  gem.license = 'MIT'
18
18
 
19
- gem.add_runtime_dependency 'rapidash', '~> 0.3.0'
19
+ gem.add_runtime_dependency 'rapidash', '~> 0.4.0'
20
20
 
21
21
  gem.add_development_dependency 'rake'
22
22
  gem.add_development_dependency 'rspec'
data/lib/bcx.rb CHANGED
@@ -29,12 +29,17 @@ module Bcx
29
29
  end
30
30
 
31
31
  class << self
32
- attr_accessor :configuration
32
+ attr_writer :configuration
33
+ end
34
+
35
+ # Create configuration block in case the user does not call configure
36
+ def self.configuration
37
+ self.class.instance_variable_set('@configuration',Configuration.new) if self.class.instance_variable_get('@configuration').nil?
38
+ self.class.instance_variable_get('@configuration')
33
39
  end
34
40
 
35
41
  # Expose configuration block
36
42
  def self.configure
37
- self.configuration ||= Configuration.new
38
43
  yield(configuration)
39
44
  end
40
45
  end
@@ -24,6 +24,12 @@ module Bcx
24
24
  def initialize(options = {})
25
25
  @account = Bcx.configuration.account
26
26
  @api_version = Bcx.configuration.api_version
27
+ @user_agent = options[:user_agent] || Bcx.configuration.user_agent
28
+ if @user_agent
29
+ options[:request_default_options] ||= {}
30
+ options[:request_default_options][:header] ||= {}
31
+ options[:request_default_options][:header][:user_agent] ||= @user_agent
32
+ end
27
33
 
28
34
  self.class.site("https://basecamp.com/#{@account}/api/#{@api_version}/")
29
35
 
@@ -23,11 +23,18 @@ module Bcx
23
23
  def initialize(options = {})
24
24
  @account = options[:account] || Bcx.configuration.account
25
25
  @api_version = Bcx.configuration.api_version
26
+ @user_agent = options[:user_agent] || Bcx.configuration.user_agent
26
27
 
27
28
  options[:site] = "https://basecamp.com/#{@account}/api/#{@api_version}"
28
29
  options[:uid] ||= options[:client_id]
29
30
  options[:secret] ||= options[:client_secret]
30
31
 
32
+ if @user_agent
33
+ options[:request_default_options] ||= {}
34
+ options[:request_default_options][:header] ||= {}
35
+ options[:request_default_options][:header][:user_agent] ||= @user_agent
36
+ end
37
+
31
38
  super(options)
32
39
  end
33
40
  end
@@ -10,7 +10,7 @@
10
10
  #
11
11
  module Bcx
12
12
  class Configuration
13
- attr_accessor :account, :api_version
13
+ attr_accessor :account, :api_version, :user_agent
14
14
 
15
15
  def initialize
16
16
  @api_version = 'v1'
@@ -27,7 +27,11 @@ module Bcx
27
27
  messages = []
28
28
 
29
29
  body.each_pair do |attribute, msgs|
30
- msgs.each { |msg| messages.push "#{attribute} #{msg}" }
30
+ if msgs.respond_to? :each
31
+ msgs.each { |msg| messages.push "#{attribute} #{msg}" }
32
+ else
33
+ messages.push "#{attribute} #{msgs.to_s}"
34
+ end
31
35
  end
32
36
 
33
37
  messages.join(', ')
@@ -1,3 +1,3 @@
1
1
  module Bcx
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -19,7 +19,7 @@ describe Bcx::Resources::Access, :vcr do
19
19
  it "should grant access" do
20
20
  client.projects(2951531).accesses.create!(email_addresses: ["hopper.derek@gmail.com"])
21
21
  accesses = client.projects(2951531).accesses!
22
- accesses.detect { |access| access.id == 4996562 }.should be_present
22
+ expect(accesses.detect { |access| access.id == 4996562 }).to be_present
23
23
  end
24
24
  end
25
25
 
@@ -27,7 +27,7 @@ describe Bcx::Resources::Access, :vcr do
27
27
  it "should revoke access" do
28
28
  client.projects(2951531).accesses(4996562).delete!
29
29
  accesses = client.projects(2951531).accesses!
30
- accesses.detect { |access| access.id == 4996562 }.should_not be_present
30
+ expect(accesses.detect { |access| access.id == 4996562 }).not_to be_present
31
31
  end
32
32
  end
33
33
  end
@@ -33,13 +33,20 @@ describe Bcx::Client do
33
33
 
34
34
  describe "error handling", :vcr do
35
35
  let(:client) { Bcx::Client::HTTP.new(login: 'bcx-test-user', password: 'secret') }
36
-
37
- it "should raise exception" do
36
+ it "should raise exception_with_array_error" do
38
37
  expect { client.projects.create!(name: '') }.to raise_error { |response|
39
38
  expect(response).to be_a Bcx::ResponseError
40
39
  expect(response.status).to eq 422
41
40
  expect(response.errors).to include("name can't be blank")
42
41
  }
43
42
  end
43
+
44
+ it "should raise exception_with_string_error" do
45
+ expect { client.projects.create!(name: '') }.to raise_error { |response|
46
+ expect(response).to be_a Bcx::ResponseError
47
+ expect(response.status).to eq 422
48
+ expect(response.errors).to include("name can't be blank")
49
+ }
50
+ end
44
51
  end
45
52
  end
@@ -0,0 +1,56 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://basecamp.com/2274488/api/v1/projects.json
6
+ body:
7
+ encoding: UTF-8
8
+ string: ! '{"name":""}'
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.8.7
12
+ Authorization:
13
+ - Basic YmN4LXRlc3QtdXNlcjpzZWNyZXQ=
14
+ Content-Type:
15
+ - application/json
16
+ response:
17
+ status:
18
+ code: 422
19
+ message:
20
+ headers:
21
+ server:
22
+ - nginx
23
+ date:
24
+ - Fri, 21 Jun 2013 21:32:47 GMT
25
+ content-type:
26
+ - application/json; charset=utf-8
27
+ transfer-encoding:
28
+ - chunked
29
+ connection:
30
+ - close
31
+ status:
32
+ - 422 Unprocessable Entity
33
+ x-frame-options:
34
+ - SAMEORIGIN
35
+ x-xss-protection:
36
+ - 1; mode=block
37
+ x-content-type-options:
38
+ - nosniff
39
+ x-ua-compatible:
40
+ - chrome=1
41
+ x-xhr-current-location:
42
+ - /2274488/api/v1/projects.json
43
+ x-asset-paths:
44
+ - ! '{"application.js":"application-eb8afc75ba8fcbb36b8518826dd32bc5.js","application.css":"application-18059b31e3ebdcca82003cfaf2564179.css"}'
45
+ cache-control:
46
+ - no-cache
47
+ x-request-id:
48
+ - e203c487-d807-41b5-afd6-4f709fcb35e3
49
+ x-runtime:
50
+ - '0.145644'
51
+ body:
52
+ encoding: US-ASCII
53
+ string: ! '{"name":["can''t be blank","can''t be duplicate"]}'
54
+ http_version:
55
+ recorded_at: Fri, 21 Jun 2013 21:32:47 GMT
56
+ recorded_with: VCR 2.5.0
@@ -50,7 +50,7 @@ http_interactions:
50
50
  - '0.145644'
51
51
  body:
52
52
  encoding: US-ASCII
53
- string: ! '{"name":["can''t be blank"]}'
53
+ string: ! '{"name":"can''t be blank"}'
54
54
  http_version:
55
55
  recorded_at: Fri, 21 Jun 2013 21:32:47 GMT
56
56
  recorded_with: VCR 2.5.0
@@ -17,5 +17,4 @@ RSpec.configure do |config|
17
17
  Bcx.configure { |config| config.account = '2274488' }
18
18
  end
19
19
 
20
- config.treat_symbols_as_metadata_keys_with_true_values = true
21
20
  end
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Springett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-25 00:00:00.000000000 Z
11
+ date: 2015-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rapidash
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.0
19
+ version: 0.4.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
- version: 0.3.0
26
+ version: 0.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: vcr
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: Fully-fledged Ruby API wrapper for Basecamp Next
@@ -87,9 +87,9 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - .gitignore
91
- - .rspec
92
- - .travis.yml
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
93
93
  - Gemfile
94
94
  - LICENSE
95
95
  - README.md
@@ -143,7 +143,8 @@ files:
143
143
  - spec/bcx/project_spec.rb
144
144
  - spec/bcx/todo_spec.rb
145
145
  - spec/bcx/todolist_spec.rb
146
- - spec/cassettes/Bcx_Client/error_handling/should_raise_exception.yml
146
+ - spec/cassettes/Bcx_Client/error_handling/should_raise_exception_with_array_error.yml
147
+ - spec/cassettes/Bcx_Client/error_handling/should_raise_exception_with_string_error.yml
147
148
  - spec/cassettes/Bcx_Resources_Access/DELETE_/projects/2951531/accesses/4996562_json/should_revoke_access.yml
148
149
  - spec/cassettes/Bcx_Resources_Access/GET_/projects/2951531/accesses_json/first_access_should_have_the_correct_id.yml
149
150
  - spec/cassettes/Bcx_Resources_Access/GET_/projects/2951531/accesses_json/should_be_an_array.yml
@@ -203,17 +204,17 @@ require_paths:
203
204
  - lib
204
205
  required_ruby_version: !ruby/object:Gem::Requirement
205
206
  requirements:
206
- - - '>='
207
+ - - ">="
207
208
  - !ruby/object:Gem::Version
208
209
  version: '0'
209
210
  required_rubygems_version: !ruby/object:Gem::Requirement
210
211
  requirements:
211
- - - '>='
212
+ - - ">="
212
213
  - !ruby/object:Gem::Version
213
214
  version: '0'
214
215
  requirements: []
215
216
  rubyforge_project:
216
- rubygems_version: 2.4.7
217
+ rubygems_version: 2.4.5
217
218
  signing_key:
218
219
  specification_version: 4
219
220
  summary: Fully-fledged Ruby API wrapper for Basecamp Next. Uses the Rapidash gem under
@@ -228,7 +229,8 @@ test_files:
228
229
  - spec/bcx/project_spec.rb
229
230
  - spec/bcx/todo_spec.rb
230
231
  - spec/bcx/todolist_spec.rb
231
- - spec/cassettes/Bcx_Client/error_handling/should_raise_exception.yml
232
+ - spec/cassettes/Bcx_Client/error_handling/should_raise_exception_with_array_error.yml
233
+ - spec/cassettes/Bcx_Client/error_handling/should_raise_exception_with_string_error.yml
232
234
  - spec/cassettes/Bcx_Resources_Access/DELETE_/projects/2951531/accesses/4996562_json/should_revoke_access.yml
233
235
  - spec/cassettes/Bcx_Resources_Access/GET_/projects/2951531/accesses_json/first_access_should_have_the_correct_id.yml
234
236
  - spec/cassettes/Bcx_Resources_Access/GET_/projects/2951531/accesses_json/should_be_an_array.yml
@@ -278,4 +280,3 @@ test_files:
278
280
  - spec/cassettes/Bcx_Resources_Todolist/PUT_/projects/2956584/todolists/8268819_json/should_create_a_new_todolist.yml
279
281
  - spec/cassettes/Bcx_Resources_Todolist/projects/123/todolists_json/should_create_a_new_todolist.yml
280
282
  - spec/spec_helper.rb
281
- has_rdoc: