force 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +96 -0
  3. data/Gemfile +11 -0
  4. data/Gemfile.lock +107 -0
  5. data/Guardfile +8 -0
  6. data/LICENSE +22 -0
  7. data/README.md +421 -0
  8. data/Rakefile +10 -0
  9. data/coverage/assets/0.7.1/application.css +1110 -0
  10. data/coverage/assets/0.7.1/application.js +626 -0
  11. data/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
  12. data/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
  13. data/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
  14. data/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
  15. data/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
  16. data/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
  17. data/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
  18. data/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
  19. data/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
  20. data/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
  21. data/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
  22. data/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
  23. data/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
  24. data/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
  25. data/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
  26. data/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
  27. data/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
  28. data/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
  29. data/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
  30. data/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
  31. data/coverage/assets/0.7.1/favicon_green.png +0 -0
  32. data/coverage/assets/0.7.1/favicon_red.png +0 -0
  33. data/coverage/assets/0.7.1/favicon_yellow.png +0 -0
  34. data/coverage/assets/0.7.1/loading.gif +0 -0
  35. data/coverage/assets/0.7.1/magnify.png +0 -0
  36. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  37. data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  38. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  39. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  40. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  41. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  42. data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  43. data/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  44. data/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
  45. data/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  46. data/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
  47. data/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
  48. data/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  49. data/coverage/index.html +19808 -0
  50. data/force.gemspec +27 -0
  51. data/lib/force.rb +74 -0
  52. data/lib/force/abstract_client.rb +9 -0
  53. data/lib/force/attachment.rb +21 -0
  54. data/lib/force/client.rb +3 -0
  55. data/lib/force/collection.rb +45 -0
  56. data/lib/force/concerns/api.rb +321 -0
  57. data/lib/force/concerns/authentication.rb +39 -0
  58. data/lib/force/concerns/base.rb +59 -0
  59. data/lib/force/concerns/caching.rb +24 -0
  60. data/lib/force/concerns/canvas.rb +10 -0
  61. data/lib/force/concerns/connection.rb +74 -0
  62. data/lib/force/concerns/picklists.rb +87 -0
  63. data/lib/force/concerns/streaming.rb +31 -0
  64. data/lib/force/concerns/verbs.rb +67 -0
  65. data/lib/force/config.rb +140 -0
  66. data/lib/force/data/client.rb +18 -0
  67. data/lib/force/mash.rb +66 -0
  68. data/lib/force/middleware.rb +27 -0
  69. data/lib/force/middleware/authentication.rb +73 -0
  70. data/lib/force/middleware/authentication/password.rb +17 -0
  71. data/lib/force/middleware/authentication/token.rb +15 -0
  72. data/lib/force/middleware/authorization.rb +15 -0
  73. data/lib/force/middleware/caching.rb +22 -0
  74. data/lib/force/middleware/gzip.rb +31 -0
  75. data/lib/force/middleware/instance_url.rb +14 -0
  76. data/lib/force/middleware/logger.rb +40 -0
  77. data/lib/force/middleware/mashify.rb +16 -0
  78. data/lib/force/middleware/multipart.rb +55 -0
  79. data/lib/force/middleware/raise_error.rb +25 -0
  80. data/lib/force/signed_request.rb +48 -0
  81. data/lib/force/sobject.rb +68 -0
  82. data/lib/force/tooling/client.rb +11 -0
  83. data/lib/force/upload_io.rb +20 -0
  84. data/lib/force/version.rb +3 -0
  85. data/spec/fixtures/auth_error_response.json +4 -0
  86. data/spec/fixtures/auth_success_response.json +7 -0
  87. data/spec/fixtures/blob.jpg +0 -0
  88. data/spec/fixtures/expired_session_response.json +6 -0
  89. data/spec/fixtures/reauth_success_response.json +7 -0
  90. data/spec/fixtures/refresh_error_response.json +4 -0
  91. data/spec/fixtures/refresh_success_response.json +7 -0
  92. data/spec/fixtures/services_data_success_response.json +12 -0
  93. data/spec/fixtures/sobject/create_success_response.json +5 -0
  94. data/spec/fixtures/sobject/delete_error_response.json +1 -0
  95. data/spec/fixtures/sobject/describe_sobjects_success_response.json +31 -0
  96. data/spec/fixtures/sobject/list_sobjects_success_response.json +31 -0
  97. data/spec/fixtures/sobject/org_query_response.json +11 -0
  98. data/spec/fixtures/sobject/query_aggregate_success_response.json +23 -0
  99. data/spec/fixtures/sobject/query_empty_response.json +5 -0
  100. data/spec/fixtures/sobject/query_error_response.json +6 -0
  101. data/spec/fixtures/sobject/query_paginated_first_page_response.json +14 -0
  102. data/spec/fixtures/sobject/query_paginated_last_page_response.json +13 -0
  103. data/spec/fixtures/sobject/query_success_response.json +38 -0
  104. data/spec/fixtures/sobject/recent_success_response.json +18 -0
  105. data/spec/fixtures/sobject/search_error_response.json +6 -0
  106. data/spec/fixtures/sobject/search_success_response.json +16 -0
  107. data/spec/fixtures/sobject/sobject_describe_error_response.json +6 -0
  108. data/spec/fixtures/sobject/sobject_describe_success_response.json +1429 -0
  109. data/spec/fixtures/sobject/sobject_find_error_response.json +6 -0
  110. data/spec/fixtures/sobject/sobject_find_success_response.json +29 -0
  111. data/spec/fixtures/sobject/upsert_created_success_response.json +5 -0
  112. data/spec/fixtures/sobject/upsert_error_response.json +6 -0
  113. data/spec/fixtures/sobject/upsert_multiple_error_response.json +4 -0
  114. data/spec/fixtures/sobject/upsert_updated_success_response.json +0 -0
  115. data/spec/fixtures/sobject/write_error_response.json +6 -0
  116. data/spec/integration/abstract_client_spec.rb +306 -0
  117. data/spec/integration/data/client_spec.rb +90 -0
  118. data/spec/spec_helper.rb +20 -0
  119. data/spec/support/client_integration.rb +45 -0
  120. data/spec/support/concerns.rb +18 -0
  121. data/spec/support/event_machine.rb +14 -0
  122. data/spec/support/fixture_helpers.rb +45 -0
  123. data/spec/support/matchers.rb +11 -0
  124. data/spec/support/middleware.rb +76 -0
  125. data/spec/support/mock_cache.rb +13 -0
  126. data/spec/unit/abstract_client_spec.rb +11 -0
  127. data/spec/unit/attachment_spec.rb +15 -0
  128. data/spec/unit/collection_spec.rb +52 -0
  129. data/spec/unit/concerns/api_spec.rb +244 -0
  130. data/spec/unit/concerns/authentication_spec.rb +98 -0
  131. data/spec/unit/concerns/base_spec.rb +42 -0
  132. data/spec/unit/concerns/caching_spec.rb +29 -0
  133. data/spec/unit/concerns/canvas_spec.rb +30 -0
  134. data/spec/unit/concerns/connection_spec.rb +22 -0
  135. data/spec/unit/config_spec.rb +99 -0
  136. data/spec/unit/data/client_spec.rb +10 -0
  137. data/spec/unit/mash_spec.rb +36 -0
  138. data/spec/unit/middleware/authentication/password_spec.rb +31 -0
  139. data/spec/unit/middleware/authentication/token_spec.rb +24 -0
  140. data/spec/unit/middleware/authentication_spec.rb +67 -0
  141. data/spec/unit/middleware/authorization_spec.rb +11 -0
  142. data/spec/unit/middleware/gzip_spec.rb +66 -0
  143. data/spec/unit/middleware/instance_url_spec.rb +24 -0
  144. data/spec/unit/middleware/logger_spec.rb +19 -0
  145. data/spec/unit/middleware/mashify_spec.rb +11 -0
  146. data/spec/unit/middleware/raise_error_spec.rb +32 -0
  147. data/spec/unit/signed_request_spec.rb +24 -0
  148. data/spec/unit/sobject_spec.rb +86 -0
  149. data/spec/unit/tooling/client_spec.rb +7 -0
  150. data/tmp/rspec_guard_result +1 -0
  151. metadata +383 -0
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::Middleware::Authorization do
4
+ let(:options) { { :oauth_token => 'token' } }
5
+
6
+ describe '.call' do
7
+ subject { lambda { middleware.call(env) } }
8
+
9
+ it { should change { env[:request_headers]['Authorization'] }.to eq 'OAuth token' }
10
+ end
11
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::Middleware::Gzip do
4
+ let(:options) { { :oauth_token => 'token' } }
5
+
6
+ # Return a gzipped string.
7
+ def gzip(str)
8
+ StringIO.new.tap do |io|
9
+ gz = Zlib::GzipWriter.new(io)
10
+ gz.write(str)
11
+ gz.close
12
+ end.string
13
+ end
14
+
15
+ describe '.call' do
16
+ subject { lambda { middleware.call(env) } }
17
+
18
+ before do
19
+ app.should_receive(:on_complete) { middleware.on_complete(env) }
20
+ app.should_receive(:call) do
21
+ env[:body] = gzip fixture('sobject/query_success_response')
22
+ env[:response_headers]['Content-Encoding'] = 'gzip'
23
+ app
24
+ end
25
+ end
26
+
27
+ it 'decompresses the body' do
28
+ should change { env[:body] }.to(fixture('sobject/query_success_response'))
29
+ end
30
+
31
+ context 'when :compress is false' do
32
+ it { should_not change { env[:request_headers]['Accept-Encoding'] } }
33
+ end
34
+
35
+ context 'when :compress is true' do
36
+ before do
37
+ options[:compress] = true
38
+ end
39
+
40
+ it { should change { env[:request_headers]['Accept-Encoding'] }.to('gzip') }
41
+ end
42
+ end
43
+
44
+ describe '.decompress' do
45
+ let(:body) { gzip fixture('sobject/query_success_response') }
46
+
47
+ subject { middleware.decompress(body) }
48
+ it { should eq fixture('sobject/query_success_response') }
49
+ end
50
+
51
+ describe '.gzipped?' do
52
+ subject { middleware.gzipped?(env) }
53
+
54
+ context 'when gzipped' do
55
+ before do
56
+ env[:response_headers]['Content-Encoding'] = 'gzip'
57
+ end
58
+
59
+ it { should be_true }
60
+ end
61
+
62
+ context 'when not gzipped' do
63
+ it { should be_false }
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::Middleware::InstanceURL do
4
+ describe '.call' do
5
+ subject { lambda { middleware.call(nil) } }
6
+
7
+ context 'when the instance url is not set' do
8
+ before do
9
+ client.stub_chain :connection, :url_prefix => URI.parse('http:/')
10
+ end
11
+
12
+ it { should raise_error Force::UnauthorizedError }
13
+ end
14
+
15
+ context 'when the instance url is set' do
16
+ before do
17
+ client.stub_chain :connection, :url_prefix => URI.parse('http://foobar.com/')
18
+ app.should_receive(:call).once
19
+ end
20
+
21
+ it { should_not raise_error }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::Middleware::Logger do
4
+ let(:logger) { double('logger') }
5
+ let(:middleware) { described_class.new app, logger, options }
6
+
7
+ describe '.call' do
8
+ subject { lambda { middleware.call(env) } }
9
+
10
+ before do
11
+ app.should_receive(:call).once.and_return(app)
12
+ app.should_receive(:on_complete).once { middleware.on_complete(env) }
13
+ logger.should_receive(:debug).with('request')
14
+ logger.should_receive(:debug).with('response')
15
+ end
16
+
17
+ it { should_not raise_error }
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::Middleware::Mashify do
4
+ let(:env) { { :body => JSON.parse(fixture('sobject/query_success_response')) } }
5
+
6
+ describe '.call' do
7
+ subject { lambda { middleware.call(env) } }
8
+
9
+ it { should change { env[:body] }.to(kind_of(Force::Collection)) }
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::Middleware::RaiseError do
4
+ let(:body) { fixture('sobject/query_error_response') }
5
+ let(:env) { { :status => status, :body => body } }
6
+ let(:middleware) { described_class.new app }
7
+
8
+ describe '.on_complete' do
9
+ subject { lambda { middleware.on_complete(env) } }
10
+
11
+ context 'when the status code is 404' do
12
+ let(:status) { 404 }
13
+ it { should raise_error Faraday::Error::ResourceNotFound, 'INVALID_FIELD: error_message' }
14
+ end
15
+
16
+ context 'when the status code is 400' do
17
+ let(:status) { 400 }
18
+ it { should raise_error Faraday::Error::ClientError, 'INVALID_FIELD: error_message' }
19
+ end
20
+
21
+ context 'when the status code is 401' do
22
+ let(:status) { 401 }
23
+ it { should raise_error Force::UnauthorizedError, 'INVALID_FIELD: error_message' }
24
+ end
25
+
26
+ context 'when the status code is 413' do
27
+ let(:status) { 413 }
28
+ let(:body) { '' } #Zero length response
29
+ it { should raise_error Faraday::Error::ClientError, 'HTTP 413 - Request Entity Too Large' }
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::SignedRequest do
4
+ let(:client_secret) { 'foo' }
5
+ let(:message) do
6
+ digest = OpenSSL::Digest::Digest.new('sha256')
7
+ signature = Base64.encode64(OpenSSL::HMAC.digest(digest, client_secret, data))
8
+ "#{signature}.#{data}"
9
+ end
10
+
11
+ describe '.decode' do
12
+ subject { described_class.new(message, client_secret).decode }
13
+
14
+ context 'when the message is valid' do
15
+ let(:data) { Base64.encode64('{"key": "value"}') }
16
+ it { should eq('key' => 'value') }
17
+ end
18
+
19
+ context 'when the message is invalid' do
20
+ let(:message) { 'foobar.awdkjkj' }
21
+ it { should be_nil }
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::SObject do
4
+ let(:client) { double('Client') }
5
+ let(:hash) { JSON.parse(fixture('sobject/query_success_response'))['records'].first }
6
+ subject(:sobject) { described_class.new(hash, client) }
7
+
8
+ describe '#new' do
9
+ context 'with valid options' do
10
+ it { should be_a Force::SObject }
11
+ it { should have_client client }
12
+ its(:sobject_type) { should eq 'Whizbang' }
13
+ its(:Text_Label) { should eq 'Hi there!' }
14
+
15
+ describe 'children' do
16
+ subject(:children) { sobject.Whizbangs__r }
17
+
18
+ it { should be_a Force::Collection }
19
+
20
+ describe 'each child' do
21
+ it { should be_all { |sobject| expect(sobject).to be_a Force::SObject } }
22
+ it { should be_all { |sobject| expect(sobject).to have_client client } }
23
+ end
24
+ end
25
+
26
+ describe 'parent' do
27
+ subject(:parent) { sobject.ParentWhizbang__r }
28
+
29
+ it { should be_a Force::SObject }
30
+ its(:sobject_type) { should eq 'Whizbang' }
31
+ its(:Name) { should eq 'Parent Whizbang' }
32
+ it { should have_client client }
33
+ end
34
+ end
35
+ end
36
+
37
+ { :save => :update,
38
+ :save! => :update!,
39
+ :destroy => :destroy,
40
+ :destroy! => :destroy! }.each do |method, receiver|
41
+ describe ".#{method}" do
42
+ subject { lambda { sobject.send(method) } }
43
+
44
+ context 'when an Id was not queried' do
45
+ it { should raise_error ArgumentError, 'You need to query the Id for the record first.' }
46
+ end
47
+
48
+ context 'when an Id is present' do
49
+ before do
50
+ hash.merge!(:Id => '001D000000INjVe')
51
+ client.should_receive(receiver)
52
+ end
53
+
54
+ it { should_not raise_error }
55
+ end
56
+ end
57
+ end
58
+
59
+ describe '.describe' do
60
+ subject { lambda { sobject.describe } }
61
+
62
+ before do
63
+ client.should_receive(:describe).with('Whizbang')
64
+ end
65
+
66
+ it { should_not raise_error }
67
+ end
68
+
69
+ describe '.describe_layouts' do
70
+ let(:layout_id) { nil }
71
+ subject { lambda { sobject.describe_layouts } }
72
+
73
+ before do
74
+ client.should_receive(:describe_layouts).with('Whizbang', layout_id)
75
+ end
76
+
77
+ it { should_not raise_error }
78
+
79
+ context 'when a layout Id is specified' do
80
+ let(:layout_id) { '012E0000000RHEp' }
81
+ subject { lambda { sobject.describe_layouts(layout_id) } }
82
+
83
+ it { should_not raise_error }
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Force::Tooling::Client do
4
+ subject { described_class }
5
+
6
+ it { should < Force::AbstractClient }
7
+ end
@@ -0,0 +1 @@
1
+
metadata ADDED
@@ -0,0 +1,383 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: force
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eric J. Holmes
8
+ - Mattt Thompson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: 0.8.4
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: 0.8.4
28
+ - !ruby/object:Gem::Dependency
29
+ name: faraday_middleware
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: 0.8.8
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: 0.8.8
42
+ - !ruby/object:Gem::Dependency
43
+ name: json
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '>='
47
+ - !ruby/object:Gem::Version
48
+ version: 1.7.5
49
+ - - <
50
+ - !ruby/object:Gem::Version
51
+ version: 1.9.0
52
+ type: :runtime
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: 1.7.5
59
+ - - <
60
+ - !ruby/object:Gem::Version
61
+ version: 1.9.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: hashie
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.2.0
69
+ - - <
70
+ - !ruby/object:Gem::Version
71
+ version: '2.1'
72
+ type: :runtime
73
+ prerelease: false
74
+ version_requirements: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '>='
77
+ - !ruby/object:Gem::Version
78
+ version: 1.2.0
79
+ - - <
80
+ - !ruby/object:Gem::Version
81
+ version: '2.1'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 2.14.0
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ version: 2.14.0
96
+ - !ruby/object:Gem::Dependency
97
+ name: webmock
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: 1.13.0
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.13.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: simplecov
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ~>
115
+ - !ruby/object:Gem::Version
116
+ version: 0.7.1
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: 0.7.1
124
+ - !ruby/object:Gem::Dependency
125
+ name: faye
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - '>='
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ description: A lightweight ruby client for the Salesforce REST api.
139
+ email:
140
+ - eric@ejholmes.net
141
+ - mattt@heroku.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ./CHANGELOG.md
147
+ - ./coverage/assets/0.7.1/application.css
148
+ - ./coverage/assets/0.7.1/application.js
149
+ - ./coverage/assets/0.7.1/fancybox/blank.gif
150
+ - ./coverage/assets/0.7.1/fancybox/fancy_close.png
151
+ - ./coverage/assets/0.7.1/fancybox/fancy_loading.png
152
+ - ./coverage/assets/0.7.1/fancybox/fancy_nav_left.png
153
+ - ./coverage/assets/0.7.1/fancybox/fancy_nav_right.png
154
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_e.png
155
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_n.png
156
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png
157
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png
158
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_s.png
159
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_se.png
160
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png
161
+ - ./coverage/assets/0.7.1/fancybox/fancy_shadow_w.png
162
+ - ./coverage/assets/0.7.1/fancybox/fancy_title_left.png
163
+ - ./coverage/assets/0.7.1/fancybox/fancy_title_main.png
164
+ - ./coverage/assets/0.7.1/fancybox/fancy_title_over.png
165
+ - ./coverage/assets/0.7.1/fancybox/fancy_title_right.png
166
+ - ./coverage/assets/0.7.1/fancybox/fancybox-x.png
167
+ - ./coverage/assets/0.7.1/fancybox/fancybox-y.png
168
+ - ./coverage/assets/0.7.1/fancybox/fancybox.png
169
+ - ./coverage/assets/0.7.1/favicon_green.png
170
+ - ./coverage/assets/0.7.1/favicon_red.png
171
+ - ./coverage/assets/0.7.1/favicon_yellow.png
172
+ - ./coverage/assets/0.7.1/loading.gif
173
+ - ./coverage/assets/0.7.1/magnify.png
174
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
175
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
176
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
177
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
178
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png
179
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
180
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
181
+ - ./coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
182
+ - ./coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png
183
+ - ./coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png
184
+ - ./coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png
185
+ - ./coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png
186
+ - ./coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png
187
+ - ./coverage/index.html
188
+ - ./force.gemspec
189
+ - ./Gemfile
190
+ - ./Gemfile.lock
191
+ - ./Guardfile
192
+ - ./lib/force/abstract_client.rb
193
+ - ./lib/force/attachment.rb
194
+ - ./lib/force/client.rb
195
+ - ./lib/force/collection.rb
196
+ - ./lib/force/concerns/api.rb
197
+ - ./lib/force/concerns/authentication.rb
198
+ - ./lib/force/concerns/base.rb
199
+ - ./lib/force/concerns/caching.rb
200
+ - ./lib/force/concerns/canvas.rb
201
+ - ./lib/force/concerns/connection.rb
202
+ - ./lib/force/concerns/picklists.rb
203
+ - ./lib/force/concerns/streaming.rb
204
+ - ./lib/force/concerns/verbs.rb
205
+ - ./lib/force/config.rb
206
+ - ./lib/force/data/client.rb
207
+ - ./lib/force/mash.rb
208
+ - ./lib/force/middleware/authentication/password.rb
209
+ - ./lib/force/middleware/authentication/token.rb
210
+ - ./lib/force/middleware/authentication.rb
211
+ - ./lib/force/middleware/authorization.rb
212
+ - ./lib/force/middleware/caching.rb
213
+ - ./lib/force/middleware/gzip.rb
214
+ - ./lib/force/middleware/instance_url.rb
215
+ - ./lib/force/middleware/logger.rb
216
+ - ./lib/force/middleware/mashify.rb
217
+ - ./lib/force/middleware/multipart.rb
218
+ - ./lib/force/middleware/raise_error.rb
219
+ - ./lib/force/middleware.rb
220
+ - ./lib/force/signed_request.rb
221
+ - ./lib/force/sobject.rb
222
+ - ./lib/force/tooling/client.rb
223
+ - ./lib/force/upload_io.rb
224
+ - ./lib/force/version.rb
225
+ - ./lib/force.rb
226
+ - ./LICENSE
227
+ - ./Rakefile
228
+ - ./README.md
229
+ - ./tmp/rspec_guard_result
230
+ - spec/fixtures/auth_error_response.json
231
+ - spec/fixtures/auth_success_response.json
232
+ - spec/fixtures/blob.jpg
233
+ - spec/fixtures/expired_session_response.json
234
+ - spec/fixtures/reauth_success_response.json
235
+ - spec/fixtures/refresh_error_response.json
236
+ - spec/fixtures/refresh_success_response.json
237
+ - spec/fixtures/services_data_success_response.json
238
+ - spec/fixtures/sobject/create_success_response.json
239
+ - spec/fixtures/sobject/delete_error_response.json
240
+ - spec/fixtures/sobject/describe_sobjects_success_response.json
241
+ - spec/fixtures/sobject/list_sobjects_success_response.json
242
+ - spec/fixtures/sobject/org_query_response.json
243
+ - spec/fixtures/sobject/query_aggregate_success_response.json
244
+ - spec/fixtures/sobject/query_empty_response.json
245
+ - spec/fixtures/sobject/query_error_response.json
246
+ - spec/fixtures/sobject/query_paginated_first_page_response.json
247
+ - spec/fixtures/sobject/query_paginated_last_page_response.json
248
+ - spec/fixtures/sobject/query_success_response.json
249
+ - spec/fixtures/sobject/recent_success_response.json
250
+ - spec/fixtures/sobject/search_error_response.json
251
+ - spec/fixtures/sobject/search_success_response.json
252
+ - spec/fixtures/sobject/sobject_describe_error_response.json
253
+ - spec/fixtures/sobject/sobject_describe_success_response.json
254
+ - spec/fixtures/sobject/sobject_find_error_response.json
255
+ - spec/fixtures/sobject/sobject_find_success_response.json
256
+ - spec/fixtures/sobject/upsert_created_success_response.json
257
+ - spec/fixtures/sobject/upsert_error_response.json
258
+ - spec/fixtures/sobject/upsert_multiple_error_response.json
259
+ - spec/fixtures/sobject/upsert_updated_success_response.json
260
+ - spec/fixtures/sobject/write_error_response.json
261
+ - spec/integration/abstract_client_spec.rb
262
+ - spec/integration/data/client_spec.rb
263
+ - spec/spec_helper.rb
264
+ - spec/support/client_integration.rb
265
+ - spec/support/concerns.rb
266
+ - spec/support/event_machine.rb
267
+ - spec/support/fixture_helpers.rb
268
+ - spec/support/matchers.rb
269
+ - spec/support/middleware.rb
270
+ - spec/support/mock_cache.rb
271
+ - spec/unit/abstract_client_spec.rb
272
+ - spec/unit/attachment_spec.rb
273
+ - spec/unit/collection_spec.rb
274
+ - spec/unit/concerns/api_spec.rb
275
+ - spec/unit/concerns/authentication_spec.rb
276
+ - spec/unit/concerns/base_spec.rb
277
+ - spec/unit/concerns/caching_spec.rb
278
+ - spec/unit/concerns/canvas_spec.rb
279
+ - spec/unit/concerns/connection_spec.rb
280
+ - spec/unit/config_spec.rb
281
+ - spec/unit/data/client_spec.rb
282
+ - spec/unit/mash_spec.rb
283
+ - spec/unit/middleware/authentication/password_spec.rb
284
+ - spec/unit/middleware/authentication/token_spec.rb
285
+ - spec/unit/middleware/authentication_spec.rb
286
+ - spec/unit/middleware/authorization_spec.rb
287
+ - spec/unit/middleware/gzip_spec.rb
288
+ - spec/unit/middleware/instance_url_spec.rb
289
+ - spec/unit/middleware/logger_spec.rb
290
+ - spec/unit/middleware/mashify_spec.rb
291
+ - spec/unit/middleware/raise_error_spec.rb
292
+ - spec/unit/signed_request_spec.rb
293
+ - spec/unit/sobject_spec.rb
294
+ - spec/unit/tooling/client_spec.rb
295
+ homepage: https://github.com/heroku/force
296
+ licenses: []
297
+ metadata: {}
298
+ post_install_message:
299
+ rdoc_options: []
300
+ require_paths:
301
+ - lib
302
+ required_ruby_version: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - '>='
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ required_rubygems_version: !ruby/object:Gem::Requirement
308
+ requirements:
309
+ - - '>='
310
+ - !ruby/object:Gem::Version
311
+ version: '0'
312
+ requirements: []
313
+ rubyforge_project:
314
+ rubygems_version: 2.0.3
315
+ signing_key:
316
+ specification_version: 4
317
+ summary: A lightweight ruby client for the Salesforce REST api.
318
+ test_files:
319
+ - spec/fixtures/auth_error_response.json
320
+ - spec/fixtures/auth_success_response.json
321
+ - spec/fixtures/blob.jpg
322
+ - spec/fixtures/expired_session_response.json
323
+ - spec/fixtures/reauth_success_response.json
324
+ - spec/fixtures/refresh_error_response.json
325
+ - spec/fixtures/refresh_success_response.json
326
+ - spec/fixtures/services_data_success_response.json
327
+ - spec/fixtures/sobject/create_success_response.json
328
+ - spec/fixtures/sobject/delete_error_response.json
329
+ - spec/fixtures/sobject/describe_sobjects_success_response.json
330
+ - spec/fixtures/sobject/list_sobjects_success_response.json
331
+ - spec/fixtures/sobject/org_query_response.json
332
+ - spec/fixtures/sobject/query_aggregate_success_response.json
333
+ - spec/fixtures/sobject/query_empty_response.json
334
+ - spec/fixtures/sobject/query_error_response.json
335
+ - spec/fixtures/sobject/query_paginated_first_page_response.json
336
+ - spec/fixtures/sobject/query_paginated_last_page_response.json
337
+ - spec/fixtures/sobject/query_success_response.json
338
+ - spec/fixtures/sobject/recent_success_response.json
339
+ - spec/fixtures/sobject/search_error_response.json
340
+ - spec/fixtures/sobject/search_success_response.json
341
+ - spec/fixtures/sobject/sobject_describe_error_response.json
342
+ - spec/fixtures/sobject/sobject_describe_success_response.json
343
+ - spec/fixtures/sobject/sobject_find_error_response.json
344
+ - spec/fixtures/sobject/sobject_find_success_response.json
345
+ - spec/fixtures/sobject/upsert_created_success_response.json
346
+ - spec/fixtures/sobject/upsert_error_response.json
347
+ - spec/fixtures/sobject/upsert_multiple_error_response.json
348
+ - spec/fixtures/sobject/upsert_updated_success_response.json
349
+ - spec/fixtures/sobject/write_error_response.json
350
+ - spec/integration/abstract_client_spec.rb
351
+ - spec/integration/data/client_spec.rb
352
+ - spec/spec_helper.rb
353
+ - spec/support/client_integration.rb
354
+ - spec/support/concerns.rb
355
+ - spec/support/event_machine.rb
356
+ - spec/support/fixture_helpers.rb
357
+ - spec/support/matchers.rb
358
+ - spec/support/middleware.rb
359
+ - spec/support/mock_cache.rb
360
+ - spec/unit/abstract_client_spec.rb
361
+ - spec/unit/attachment_spec.rb
362
+ - spec/unit/collection_spec.rb
363
+ - spec/unit/concerns/api_spec.rb
364
+ - spec/unit/concerns/authentication_spec.rb
365
+ - spec/unit/concerns/base_spec.rb
366
+ - spec/unit/concerns/caching_spec.rb
367
+ - spec/unit/concerns/canvas_spec.rb
368
+ - spec/unit/concerns/connection_spec.rb
369
+ - spec/unit/config_spec.rb
370
+ - spec/unit/data/client_spec.rb
371
+ - spec/unit/mash_spec.rb
372
+ - spec/unit/middleware/authentication/password_spec.rb
373
+ - spec/unit/middleware/authentication/token_spec.rb
374
+ - spec/unit/middleware/authentication_spec.rb
375
+ - spec/unit/middleware/authorization_spec.rb
376
+ - spec/unit/middleware/gzip_spec.rb
377
+ - spec/unit/middleware/instance_url_spec.rb
378
+ - spec/unit/middleware/logger_spec.rb
379
+ - spec/unit/middleware/mashify_spec.rb
380
+ - spec/unit/middleware/raise_error_spec.rb
381
+ - spec/unit/signed_request_spec.rb
382
+ - spec/unit/sobject_spec.rb
383
+ - spec/unit/tooling/client_spec.rb