restforce 1.4.3 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of restforce might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55b1c7df7f025b501b8b56290e75934efdc400c8
4
- data.tar.gz: 49759852d78eb73a8a305d04cc8d951dbd1ba5a1
3
+ metadata.gz: bce56a3151368be7fe420c60a276e63a348758b5
4
+ data.tar.gz: 802b3c908611a9080478ffef024357bd50b5a9c2
5
5
  SHA512:
6
- metadata.gz: c6ed3ca069f40e557f566da9cb4da84f87c2640e3569afbd60484160cde66fc6fc1e1812f49d7589394aa17050e76700ca25af2cdccd58f30db3b7e13fc3a614
7
- data.tar.gz: f1bad005c4550aa56465c5f20a86c78d621ee6932bb4c485a177845c94e1d7af70fab109478f9aaaf6f1e47d21426423e5502f9d34f2d9a022ea4f66f495e22d
6
+ metadata.gz: 3a9082092a16f81a4de95d7a893e301e89e09ea183829bbd9b9693b9f520605994a87ddfc84700ed154b26781e0b541ea58e308d22ec7cf60cc9898718332811
7
+ data.tar.gz: 7066d91312f46b082a49bc4f0f3edeb64b3a58a015dbf47daab070d016a2d2af7cc55a4d282bbae837bb3673a02549b4deca4b7c186be5415ace3f6ccabb90a3
data/.gitignore CHANGED
@@ -16,3 +16,6 @@ spec/reports
16
16
  test/tmp
17
17
  test/version_tmp
18
18
  tmp
19
+ .rspec
20
+ .ruby-version
21
+ *.swp
@@ -4,9 +4,11 @@ rvm:
4
4
  - 1.9.2
5
5
  - 1.9.3
6
6
  - 2.0.0
7
+ - 2.1.2
7
8
  - jruby-18mode
8
9
  - jruby-19mode
9
10
  - ree
10
- - rbx-18mode
11
- - rbx-19mode
11
+ - rbx-2
12
+ gemfile:
13
+ - Gemfile.travis
12
14
  script: bundle exec rake
@@ -1,3 +1,7 @@
1
+ ## 1.5.0 (Oct 15, 2014)
2
+
3
+ * Upgrade faraday dependency to 0.9 #124 @zenchild
4
+
1
5
  ## 1.4.1 (Jun 18, 2013)
2
6
 
3
7
  * Fixed a bug with HTTP 413 responses #75 @patronmanager
data/Gemfile CHANGED
@@ -1,6 +1,4 @@
1
1
  source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in restforce.gemspec
4
2
  gemspec
5
3
 
6
4
  gem 'rake'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ gem 'rake'
5
+ gem 'jruby-openssl', :platforms => :jruby
data/README.md CHANGED
@@ -267,6 +267,14 @@ client.picklist_values('Automobile__c', 'Model__c', :valid_for => 'Honda')
267
267
  # => [#<Restforce::Mash label="Civic" value="Civic">, ... ]
268
268
  ```
269
269
 
270
+ ### user_info
271
+
272
+ ```ruby
273
+ # get info about the logged-in user
274
+ client.user_info
275
+ # => #<Restforce::Mash active=true display_name="Chatty Sassy" email="user@example.com" ... >
276
+ ```
277
+
270
278
  * * *
271
279
 
272
280
  ### authenticate!
@@ -462,6 +470,13 @@ call `Restforce.tooling` instead of `Restforce.new`:
462
470
  client = Restforce.tooling(...)
463
471
  ```
464
472
 
473
+ ## Links
474
+
475
+ If you need a full Active Record experience, may be you can use
476
+ [ActiveForce](https://github.com/ionia-corporation/active_force) that wraps
477
+ Restforce and adds Associations, Query Building (like AREL), Validations and
478
+ Callbacks.
479
+
465
480
  ## Contributing
466
481
 
467
482
  1. Fork it
@@ -29,6 +29,19 @@ module Restforce
29
29
  # Returns the Faraday::Response.
30
30
  define_verbs :get, :post, :put, :delete, :patch, :head
31
31
 
32
+ # Public: Get info about the logged-in user.
33
+ #
34
+ # Examples
35
+ #
36
+ # # get the email of the logged-in user
37
+ # client.user_info.email
38
+ # # => user@example.com
39
+ #
40
+ # Returns an Array of String names for each SObject.
41
+ def user_info
42
+ get(api_get.body.identity).body
43
+ end
44
+
32
45
  # Public: Get the names of all sobjects on the org.
33
46
  #
34
47
  # Examples
@@ -34,6 +34,8 @@ module Restforce
34
34
  # before raising an exception (default: 3).
35
35
  #
36
36
  # :compress - Set to true to have Salesforce compress the response (default: false).
37
+ # :mashify - Set to false to skip the conversion of Salesforce responses to
38
+ # Restforce::Sobjects and Restforce::Collections. (default: nil).
37
39
  # :timeout - Faraday connection request read/open timeout. (default: nil).
38
40
  #
39
41
  # :proxy_uri - Proxy URI: 'http://proxy.example.com:port' or 'http://user@pass:proxy.example.com:port'
@@ -22,7 +22,7 @@ module Restforce
22
22
  def connection
23
23
  @connection ||= Faraday.new(options[:instance_url], connection_options) do |builder|
24
24
  # Parses JSON into Hashie::Mash structures.
25
- builder.use Restforce::Middleware::Mashify, self, options
25
+ builder.use Restforce::Middleware::Mashify, self, options unless (options[:mashify] == false)
26
26
  # Handles multipart file uploads for blobs.
27
27
  builder.use Restforce::Middleware::Multipart
28
28
  # Converts the request into JSON.
@@ -16,6 +16,7 @@ module Restforce
16
16
  def faye
17
17
  raise 'Instance URL missing. Call .authenticate! first.' unless options[:instance_url]
18
18
  @faye ||= Faye::Client.new("#{options[:instance_url]}/cometd/#{options[:api_version]}").tap do |client|
19
+ client.set_header 'Authorization', "OAuth #{options[:oauth_token]}"
19
20
  client.bind 'transport:down' do
20
21
  Restforce.log "[COMETD DOWN]"
21
22
  client.set_header 'Authorization', "OAuth #{authenticate!.access_token}"
@@ -117,6 +117,10 @@ module Restforce
117
117
  # Set to true if you want responses from Salesforce to be gzip compressed.
118
118
  option :compress
119
119
 
120
+ # Set to false if you want to skip conversion to Restforce::Sobjects and
121
+ # Restforce::Collections.
122
+ option :mashify
123
+
120
124
  # Faraday request read/open timeout.
121
125
  option :timeout
122
126
 
@@ -4,15 +4,9 @@ module Restforce
4
4
  class Middleware::Mashify < Restforce::Middleware
5
5
 
6
6
  def call(env)
7
- @env = env
8
- response = @app.call(env)
9
- env[:body] = Restforce::Mash.build(body, client)
10
- response
7
+ @app.call(env).on_complete do |env|
8
+ env[:body] = Restforce::Mash.build(env[:body], client)
9
+ end
11
10
  end
12
-
13
- def body
14
- @env[:body]
15
- end
16
-
17
11
  end
18
12
  end
@@ -1,7 +1,8 @@
1
1
  module Restforce
2
2
  class Middleware::Multipart < Faraday::Request::UrlEncoded
3
3
  self.mime_type = 'multipart/form-data'.freeze
4
- DEFAULT_BOUNDARY = "--boundary_string".freeze
4
+ DEFAULT_BOUNDARY = "--boundary_string".freeze
5
+ JSON_CONTENT_TYPE = {"Content-Type" => "application/json"}
5
6
 
6
7
  def call(env)
7
8
  match_content_type(env) do |params|
@@ -36,7 +37,7 @@ module Restforce
36
37
  parts = []
37
38
 
38
39
  # Fields
39
- parts << Faraday::Parts::Part.new(boundary, 'entity_content', params.reject { |k,v| v.respond_to? :content_type }.to_json)
40
+ parts << Faraday::Parts::Part.new(boundary, 'entity_content', params.reject { |k,v| v.respond_to? :content_type }.to_json, JSON_CONTENT_TYPE)
40
41
 
41
42
  # Files
42
43
  params.each do |k,v|
@@ -0,0 +1,31 @@
1
+ module Faraday
2
+ module Parts
3
+
4
+ module Part
5
+ def self.new(boundary, name, value, headers = {})
6
+ headers ||= {}
7
+ if value.respond_to? :content_type
8
+ FilePart.new(boundary, name, value)
9
+ else
10
+ ParamPart.new(boundary, name, value, headers)
11
+ end
12
+ end
13
+ end
14
+
15
+ class ParamPart
16
+ def initialize(boundary, name, value, headers = {})
17
+ @part = build_part(boundary, name, value, headers)
18
+ @io = StringIO.new(@part)
19
+ end
20
+
21
+ def build_part(boundary, name, value, headers = {})
22
+ part = ''
23
+ part << "--#{boundary}\r\n"
24
+ part << "Content-Disposition: form-data; name=\"#{name.to_s}\"\r\n"
25
+ part << "Content-Type: #{headers["Content-Type"]}\r\n" if headers["Content-Type"]
26
+ part << "\r\n"
27
+ part << "#{value}\r\n"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -27,7 +27,7 @@ module Restforce
27
27
  return nil if signature != hmac
28
28
  JSON.parse(Base64.decode64(payload))
29
29
  end
30
-
30
+
31
31
  private
32
32
  attr_reader :client_secret, :signature, :payload
33
33
 
@@ -41,7 +41,15 @@ module Restforce
41
41
  end
42
42
 
43
43
  def digest
44
- OpenSSL::Digest::Digest.new('sha256')
44
+ digest_class.new('sha256')
45
+ end
46
+
47
+ def digest_class
48
+ if RUBY_VERSION < '2.1'
49
+ OpenSSL::Digest::Digest
50
+ else
51
+ OpenSSL::Digest
52
+ end
45
53
  end
46
54
 
47
55
  end
@@ -4,17 +4,6 @@ module Restforce
4
4
  UploadIO = Faraday::UploadIO
5
5
  end
6
6
 
7
- module Faraday
8
- module Parts
9
- class ParamPart
10
- def build_part(boundary, name, value)
11
- part = ''
12
- part << "--#{boundary}\r\n"
13
- part << "Content-Disposition: form-data; name=\"#{name.to_s}\";\r\n"
14
- part << "Content-Type: application/json\r\n"
15
- part << "\r\n"
16
- part << "#{value}\r\n"
17
- end
18
- end
19
- end
7
+ unless Parts::Part.method(:new).arity.abs == 4
8
+ require 'restforce/patches/parts'
20
9
  end
@@ -1,3 +1,3 @@
1
1
  module Restforce
2
- VERSION = '1.4.3'
2
+ VERSION = '1.5.0'
3
3
  end
@@ -15,7 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Restforce::VERSION
17
17
 
18
- gem.add_dependency 'faraday', '~> 0.8.4'
18
+ gem.add_dependency 'faraday', '~> 0.9.0'
19
19
  gem.add_dependency 'faraday_middleware', '>= 0.8.8'
20
20
  gem.add_dependency 'json', ['>= 1.7.5', '< 1.9.0']
21
21
  gem.add_dependency 'hashie', ['>= 1.2.0', '< 2.1']
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  shared_examples_for Restforce::AbstractClient do
4
+
4
5
  describe '.list_sobjects' do
5
6
  requests :sobjects, :fixture => 'sobject/describe_sobjects_success_response'
6
7
 
@@ -61,7 +62,7 @@ shared_examples_for Restforce::AbstractClient do
61
62
  context 'with multipart' do
62
63
  requests 'sobjects/Account',
63
64
  :method => :post,
64
- :with_body => %r(----boundary_string\r\nContent-Disposition: form-data; name=\"entity_content\";\r\nContent-Type: application/json\r\n\r\n{\"Name\":\"Foobar\"}\r\n----boundary_string\r\nContent-Disposition: form-data; name=\"Blob\"; filename=\"blob.jpg\"\r\nContent-Length: 42171\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary),
65
+ :with_body => %r(----boundary_string\r\nContent-Disposition: form-data; name=\"entity_content\"\r\nContent-Type: application/json\r\n\r\n{\"Name\":\"Foobar\"}\r\n----boundary_string\r\nContent-Disposition: form-data; name=\"Blob\"; filename=\"blob.jpg\"\r\nContent-Length: 42171\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary),
65
66
  :fixture => 'sobject/create_success_response'
66
67
 
67
68
  subject { client.create('Account', :Name => 'Foobar', :Blob => Restforce::UploadIO.new(File.expand_path('../../fixtures/blob.jpg', __FILE__), 'image/jpeg')) }
@@ -48,7 +48,12 @@ shared_examples_for Restforce::Data::Client do
48
48
  context 'with oauth token and instance url' do
49
49
  let(:instance_url) { 'http://google.com' }
50
50
  let(:oauth_token) { 'bar' }
51
- specify { expect { subject }.to_not raise_error }
51
+
52
+ it 'should not raise error' do
53
+ client.stub(:authorize!)
54
+ client.faye.stub(:set_header).with('Authorization', "OAuth token")
55
+ expect { subject }.to_not raise_error
56
+ end
52
57
  end
53
58
 
54
59
  context 'when the connection goes down' do
@@ -39,7 +39,7 @@ module ClientIntegrationExampleGroup
39
39
  }
40
40
 
41
41
  config.before :mashify => false do
42
- client.middleware.delete(Restforce::Middleware::Mashify)
42
+ base_options.merge!(:mashify => false)
43
43
  end
44
44
  end
45
45
  end
@@ -3,6 +3,22 @@ require 'spec_helper'
3
3
  describe Restforce::Concerns::API do
4
4
  let(:response) { double('Faraday::Response', :body => double('Body')) }
5
5
 
6
+ describe '.user_info' do
7
+ subject(:user_info) { client.user_info }
8
+
9
+ it 'returns the user info from identity url' do
10
+ identity_url = double('identity_url')
11
+ response.body.stub(:identity).and_return(identity_url)
12
+ client.should_receive(:api_get).with().and_return(response)
13
+
14
+ identity = double('identity')
15
+ identity.stub(:body).and_return(identity)
16
+ client.should_receive(:get).with(identity_url).and_return(identity)
17
+
18
+ expect(user_info).to eq identity
19
+ end
20
+ end
21
+
6
22
  describe '.list_sobjects' do
7
23
  subject { client.list_sobjects }
8
24
 
@@ -12,6 +12,48 @@ describe Restforce::Concerns::Connection do
12
12
  it { should eq builder }
13
13
  end
14
14
 
15
+ describe 'private #connection' do
16
+
17
+ describe ':mashify option' do
18
+ let(:options) { {:adapter => Faraday.default_adapter} }
19
+
20
+ before(:each) do
21
+ client.stub(:authentication_middleware)
22
+ client.stub(:cache)
23
+ client.stub(:options => options)
24
+ end
25
+
26
+ describe 'with mashify not specified' do
27
+ it 'includes the Mashify middleware' do
28
+ client.middleware.handlers.index(Restforce::Middleware::Mashify).
29
+ should_not be_nil
30
+ end
31
+ end
32
+
33
+ describe 'with mashify=true' do
34
+ before(:each) do
35
+ options.merge!(:mashify => true)
36
+ end
37
+
38
+ it 'includes the Mashify middleware' do
39
+ client.middleware.handlers.index(Restforce::Middleware::Mashify).
40
+ should_not be_nil
41
+ end
42
+ end
43
+
44
+ describe 'without mashify' do
45
+ before(:each) do
46
+ options.merge!(:mashify => false)
47
+ end
48
+
49
+ it 'does not include the Mashify middleware' do
50
+ client.middleware.handlers.index(Restforce::Middleware::Mashify).
51
+ should be_nil
52
+ end
53
+ end
54
+ end
55
+ end
56
+
15
57
  describe '#adapter' do
16
58
  before do
17
59
  client.stub :options => {:adapter => :typhoeus}
@@ -19,4 +61,4 @@ describe Restforce::Concerns::Connection do
19
61
 
20
62
  its(:adapter) { should eq(:typhoeus) }
21
63
  end
22
- end
64
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Restforce::Concerns::Streaming, :event_machine => true do
4
+ describe '.subscribe' do
5
+ let(:channels) { %w( channel1 channel2 ) }
6
+ let(:topics) { channels.map { |c| "/topic/#{c}" } }
7
+ let(:subscribe_block) { lambda{ 'subscribe' } }
8
+ let(:faye_double) { double('Faye') }
9
+
10
+ it 'subscribes to the topics with faye' do
11
+ faye_double.
12
+ should_receive(:subscribe).
13
+ with(topics, &subscribe_block)
14
+ client.stub :faye => faye_double
15
+
16
+ client.subscribe(channels, &subscribe_block)
17
+ end
18
+ end
19
+
20
+ describe '.faye' do
21
+ subject { client.faye }
22
+
23
+ context 'when authenticate! has already been called' do
24
+ before do
25
+ client.stub :options => {
26
+ :instance_url => '/url',
27
+ :api_version => '30.0',
28
+ :oauth_token => 'secret'
29
+ }
30
+ end
31
+
32
+ it 'connects to the streaming api' do
33
+ client.stub :authenticate! => OpenStruct.new({ :access_token => 'secret2' })
34
+ faye_double = double('Faye::Client')
35
+ Faye::Client.
36
+ should_receive(:new).
37
+ with("/url/cometd/30.0").
38
+ and_return(faye_double)
39
+ faye_double.should_receive(:set_header).with('Authorization', 'OAuth secret')
40
+ faye_double.should_receive(:set_header).with('Authorization', 'OAuth secret2')
41
+ faye_double.should_receive(:bind).with('transport:down').and_yield
42
+ faye_double.should_receive(:bind).with('transport:up').and_yield
43
+ subject
44
+ end
45
+ end
46
+
47
+ context 'when authenticate! has not been called' do
48
+ it 'raises an error' do
49
+ expect { subject }.to raise_error
50
+ end
51
+ end
52
+ end
53
+ end
@@ -25,7 +25,7 @@ describe Restforce do
25
25
  its(:adapter) { should eq Faraday.default_adapter }
26
26
  [:username, :password, :security_token, :client_id, :client_secret,
27
27
  :oauth_token, :refresh_token, :instance_url, :compress, :timeout,
28
- :proxy_uri, :authentication_callback].each do |attr|
28
+ :proxy_uri, :authentication_callback, :mashify].each do |attr|
29
29
  its(attr) { should be_nil }
30
30
  end
31
31
  end
@@ -55,7 +55,7 @@ describe Restforce do
55
55
  describe '#configure' do
56
56
  [:username, :password, :security_token, :client_id, :client_secret, :compress, :timeout,
57
57
  :oauth_token, :refresh_token, :instance_url, :api_version, :host, :authentication_retries,
58
- :proxy_uri, :authentication_callback].each do |attr|
58
+ :proxy_uri, :authentication_callback, :mashify].each do |attr|
59
59
  it "allows #{attr} to be set" do
60
60
  Restforce.configure do |config|
61
61
  config.send("#{attr}=", 'foobar')
@@ -39,7 +39,10 @@ describe Restforce::Middleware::Authentication do
39
39
  subject(:connection) { middleware.connection }
40
40
 
41
41
  its(:url_prefix) { should eq(URI.parse('https://login.salesforce.com')) }
42
- its(:proxy) { should eq({ :uri => URI.parse('https://not-a-real-site.com') }) }
42
+
43
+ it "should have a proxy URI" do
44
+ connection.proxy[:uri].should eq(URI.parse('https://not-a-real-site.com'))
45
+ end
43
46
 
44
47
  describe '.builder' do
45
48
  subject(:builder) { connection.builder }
@@ -2,10 +2,15 @@ require 'spec_helper'
2
2
 
3
3
  describe Restforce::Middleware::Mashify do
4
4
  let(:env) { { :body => JSON.parse(fixture('sobject/query_success_response')) } }
5
+ subject(:middleware) {
6
+ described_class.new(lambda {|env|
7
+ Faraday::Response.new(env)
8
+ }, client, options)
9
+ }
5
10
 
6
11
  describe '.call' do
7
- subject { lambda { middleware.call(env) } }
8
-
9
- it { should change { env[:body] }.to(kind_of(Restforce::Collection)) }
12
+ it "should change the body to a Restforce::Collection" do
13
+ expect( middleware.call(env).body ).to be_kind_of(Restforce::Collection)
14
+ end
10
15
  end
11
16
  end
@@ -2,8 +2,15 @@ require 'spec_helper'
2
2
 
3
3
  describe Restforce::SignedRequest do
4
4
  let(:client_secret) { 'foo' }
5
+ let(:digest) do
6
+ if RUBY_VERSION < '2.1'
7
+ OpenSSL::Digest::Digest.new('sha256')
8
+ else
9
+ OpenSSL::Digest.new('sha256')
10
+ end
11
+ end
12
+
5
13
  let(:message) do
6
- digest = OpenSSL::Digest::Digest.new('sha256')
7
14
  signature = Base64.encode64(OpenSSL::HMAC.digest(digest, client_secret, data))
8
15
  "#{signature}.#{data}"
9
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restforce
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric J. Holmes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-05 00:00:00.000000000 Z
11
+ date: 2014-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 0.8.4
19
+ version: 0.9.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.8.4
26
+ version: 0.9.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faraday_middleware
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -142,10 +142,10 @@ extensions: []
142
142
  extra_rdoc_files: []
143
143
  files:
144
144
  - .gitignore
145
- - .rspec
146
145
  - .travis.yml
147
146
  - CHANGELOG.md
148
147
  - Gemfile
148
+ - Gemfile.travis
149
149
  - Guardfile
150
150
  - LICENSE
151
151
  - README.md
@@ -179,6 +179,7 @@ files:
179
179
  - lib/restforce/middleware/mashify.rb
180
180
  - lib/restforce/middleware/multipart.rb
181
181
  - lib/restforce/middleware/raise_error.rb
182
+ - lib/restforce/patches/parts.rb
182
183
  - lib/restforce/signed_request.rb
183
184
  - lib/restforce/sobject.rb
184
185
  - lib/restforce/tooling/client.rb
@@ -236,6 +237,7 @@ files:
236
237
  - spec/unit/concerns/caching_spec.rb
237
238
  - spec/unit/concerns/canvas_spec.rb
238
239
  - spec/unit/concerns/connection_spec.rb
240
+ - spec/unit/concerns/streaming_spec.rb
239
241
  - spec/unit/config_spec.rb
240
242
  - spec/unit/data/client_spec.rb
241
243
  - spec/unit/mash_spec.rb
@@ -326,6 +328,7 @@ test_files:
326
328
  - spec/unit/concerns/caching_spec.rb
327
329
  - spec/unit/concerns/canvas_spec.rb
328
330
  - spec/unit/concerns/connection_spec.rb
331
+ - spec/unit/concerns/streaming_spec.rb
329
332
  - spec/unit/config_spec.rb
330
333
  - spec/unit/data/client_spec.rb
331
334
  - spec/unit/mash_spec.rb
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color