chatspry 0.0.1.pre1 → 0.0.1.pre2

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require helper
data/Gemfile CHANGED
@@ -1,2 +1,16 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
+
3
+ group :development, :test do
4
+ gem "pry"
5
+ end
6
+
7
+ group :test do
8
+ gem "json"
9
+ gem "multi_json"
10
+ gem "vcr"
11
+ gem "webmock"
12
+ gem "mime-types"
13
+ gem "rspec"
14
+ end
15
+
2
16
  gemspec
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
1
  require "bundler/gem_tasks"
2
-
2
+ require 'rspec/core/rake_task'
3
+ RSpec::Core::RakeTask.new(:spec)
4
+ task :default => :spec
data/chatspry.gemspec CHANGED
@@ -25,7 +25,11 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.require_paths = [ "lib" ]
27
27
 
28
- spec.add_development_dependency "bundler", "~> 1.6"
28
+ spec.add_dependency "faraday", "~> 0.9"
29
+ spec.add_dependency "hashie", ">= 2.0", "< 3.0"
30
+
31
+ spec.add_development_dependency "bundler", "~> 1.6"
32
+ spec.add_development_dependency "rspec", "~> 3.0.0"
29
33
  spec.add_development_dependency "rake"
30
34
 
31
35
  end
@@ -0,0 +1,30 @@
1
+ module Chatspry
2
+
3
+ module Authentication
4
+
5
+ def basic_authenticated?
6
+ !!(@identifier && @passphrase)
7
+ end
8
+
9
+ def token_authenticated?
10
+ !!@access_token
11
+ end
12
+
13
+ def user_authenticated?
14
+ basic_authenticated? || token_authenticated?
15
+ end
16
+
17
+ def application_authenticated?
18
+ !!application_authentication
19
+ end
20
+
21
+ private
22
+
23
+ def application_authentication
24
+ if @client_id && @client_secret
25
+ { client_id: @client_id, client_secret: @client_secret }
26
+ end
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,12 @@
1
+ module Chatspry
2
+ class Client
3
+ module User
4
+
5
+ def user(id = nil, options = {})
6
+ url = !!id ? "v1/user/#{ id }" : "v1/user"
7
+ get(url, options).user
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,106 @@
1
+ require "faraday"
2
+ require "faraday_middleware"
3
+ require "chatspry/configurable"
4
+ require "chatspry/authentication"
5
+ require "chatspry/client/user"
6
+
7
+ require "pry"
8
+
9
+ module Chatspry
10
+
11
+ class Client
12
+
13
+ include Chatspry::Authentication
14
+ include Chatspry::Configurable
15
+ include Chatspry::Client::User
16
+
17
+ def initialize(options = {})
18
+ Chatspry::Configurable.keys.each do |key|
19
+ instance_variable_set(:"@#{key}", options[key] || Chatspry.instance_variable_get(:"@#{key}"))
20
+ end
21
+ end
22
+
23
+ def same_options?(opts)
24
+ opts.hash == options.hash
25
+ end
26
+
27
+ def inspect
28
+ string = ["<Chatspry::Client:"]
29
+ string << "identifier: #{ @identifier }" if @identifier
30
+ string << "passphrase: #{ "*******" }" if @passphrase
31
+ string << "access_token: #{'*'*56}#{@access_token[56..-1] }" if @access_token
32
+ string << "client_secret: #{ '*'*36 }#{@client_secret[36..-1] }" if @client_secret
33
+ string = string.join " "
34
+ string.concat ">"
35
+ end
36
+
37
+ def connection
38
+ @connection ||= Faraday.new(faraday_options) do |conn|
39
+
40
+ conn.headers[:accept] = default_media_type
41
+ conn.headers[:user_agent] = user_agent
42
+
43
+ if token_authenticated?
44
+ conn.authorization "Bearer", @access_token
45
+ elsif application_authenticated?
46
+ conn.params = conn.params.merge application_authentication
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ def get(url, options = {})
54
+ request :get, url, options
55
+ end
56
+
57
+ def head(url, options = {})
58
+ request :head, url, options
59
+ end
60
+
61
+ def post(url, options = {})
62
+ request :post, url, options
63
+ end
64
+
65
+ def put(url, options = {})
66
+ request :put, url, options
67
+ end
68
+
69
+ def patch(url, options = {})
70
+ request :patch, url, options
71
+ end
72
+
73
+ def delete(url, options = {})
74
+ request :delete, url, options
75
+ end
76
+
77
+ def request(method, path, options = {})
78
+ headers = options.delete(:headers) || {}
79
+ if accept = options.delete(:accept)
80
+ headers[:accept] = accept
81
+ end
82
+
83
+ query = options.delete(:query) || {}
84
+ query = options.merge(query)
85
+
86
+ @last_response = response = connection.send(method, URI::Parser.new.escape(path.to_s), query, headers)
87
+ response.body
88
+ end
89
+
90
+ def last_response
91
+ @last_response if defined? @last_response
92
+ end
93
+
94
+ def faraday_options
95
+ opts = connection_options
96
+
97
+ opts[:builder] = middleware if middleware
98
+ opts[:proxy] = proxy if proxy
99
+ opts[:url] = api_endpoint
100
+
101
+ return opts
102
+ end
103
+
104
+ end
105
+
106
+ end
@@ -0,0 +1,71 @@
1
+ module Chatspry
2
+
3
+ module Configurable
4
+
5
+ attr_accessor :access_token, :client_id, :client_secret,
6
+ :default_media_type, :connection_options,
7
+ :middleware, :user_agent, :proxy
8
+
9
+ attr_writer :identifier, :passphrase, :web_endpoint, :api_endpoint
10
+
11
+ class << self
12
+
13
+ def keys
14
+ @keys ||= [
15
+ :access_token,
16
+ :client_id,
17
+ :client_secret,
18
+ :identifier,
19
+ :passphrase,
20
+
21
+ :web_endpoint,
22
+ :api_endpoint,
23
+
24
+ :default_media_type,
25
+ :connection_options,
26
+
27
+ :middleware,
28
+ :user_agent,
29
+ :proxy
30
+ ]
31
+ end
32
+ end
33
+
34
+ def configure
35
+ yield self
36
+ end
37
+
38
+ def reset!
39
+ Chatspry::Configurable.keys.each do |key|
40
+ instance_variable_set(:"@#{key}", Chatspry::Default.options[key])
41
+ end
42
+ self
43
+ end
44
+ alias setup reset!
45
+
46
+ def api_endpoint
47
+ File.join(@api_endpoint, "")
48
+ end
49
+
50
+ def web_endpoint
51
+ File.join(@web_endpoint, "")
52
+ end
53
+
54
+ def identifier
55
+ @identifier ||= begin
56
+ user.handle if token_authenticated?
57
+ end
58
+ end
59
+
60
+ def passphrase
61
+ @passphrase
62
+ end
63
+
64
+ private
65
+
66
+ def options
67
+ Hash[Chatspry::Configurable.keys.map{|key| [key, instance_variable_get(:"@#{key}")]}]
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,81 @@
1
+ require "chatspry/version"
2
+
3
+ module Chatspry
4
+
5
+ module Default
6
+
7
+ API_ENDPOINT = "http://api.chatspry.dev:8080".freeze
8
+ WEB_ENDPOINT = "http://chatspry.dev:4200".freeze
9
+
10
+ MEDIA_TYPE = "application/json".freeze
11
+ USER_AGENT = "Chatspry Ruby Gem #{ Chatspry::VERSION }".freeze
12
+
13
+ RACK_BUILDER_CLASS = defined?(Faraday::RackBuilder) ? Faraday::RackBuilder : Faraday::Builder
14
+
15
+ MIDDLEWARE = RACK_BUILDER_CLASS.new do |builder|
16
+ builder.adapter Faraday.default_adapter
17
+ builder.request :json
18
+
19
+ builder.response :mashify
20
+ builder.response :json, content_type: /\bjson$/
21
+ end
22
+
23
+ class << self
24
+
25
+ def options
26
+ Hash[Chatspry::Configurable.keys.map{|key| [key, send(key)]}]
27
+ end
28
+
29
+ def access_token
30
+ ENV["CHATSPRY_ACCESS_TOKEN"]
31
+ end
32
+
33
+ def api_endpoint
34
+ ENV["CHATSPRY_API_ENDPOINT"] || API_ENDPOINT
35
+ end
36
+
37
+ def web_endpoint
38
+ ENV["CHATSPRY_WEB_ENDPOINT"] || WEB_ENDPOINT
39
+ end
40
+
41
+ def client_id
42
+ ENV["CHATSPRY_CLIENT_ID"]
43
+ end
44
+
45
+ def client_secret
46
+ ENV["CHATSPRY_SECRET"]
47
+ end
48
+
49
+ def default_media_type
50
+ ENV["CHATSPRY_DEFAULT_MEDIA_TYPE"] || MEDIA_TYPE
51
+ end
52
+
53
+ def identifier
54
+ ENV["CHATSPRY_LOGIN"]
55
+ end
56
+
57
+ def passphrase
58
+ ENV["CHATSPRY_PASSPHRASE"]
59
+ end
60
+
61
+ def user_agent
62
+ ENV["CHATSPRY_USER_AGENT"] || USER_AGENT
63
+ end
64
+
65
+ def proxy
66
+ ENV["CHATSPRY_PROXY"]
67
+ end
68
+
69
+ def connection_options
70
+ { headers: { accept: default_media_type, user_agent: user_agent } }
71
+ end
72
+
73
+ def middleware
74
+ MIDDLEWARE
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
@@ -1,3 +1,3 @@
1
1
  module Chatspry
2
- VERSION = "0.0.1.pre1"
2
+ VERSION = "0.0.1.pre2"
3
3
  end
data/lib/chatspry.rb CHANGED
@@ -1,4 +1,26 @@
1
- require "chatspry/version"
1
+ require "chatspry/client"
2
+ require "chatspry/default"
2
3
 
3
4
  module Chatspry
5
+
6
+ class << self
7
+
8
+ include Chatspry::Configurable
9
+
10
+ def client
11
+ @client = Chatspry::Client.new(options) unless defined?(@client) && @client.same_options?(options)
12
+ @client
13
+ end
14
+
15
+ private
16
+
17
+ def method_missing(method_name, *args, &block)
18
+ return super unless client.respond_to?(method_name)
19
+ client.send(method_name, *args, &block)
20
+ end
21
+
22
+ end
23
+
4
24
  end
25
+
26
+ Chatspry.setup
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"http://api.chatspry.dev:8080/?foo=bar","body":{"encoding":"US-ASCII","base64_string":""},"headers":{"Accept":["application/json"],"User-Agent":["Chatspry Ruby Gem 0.0.1.pre1"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":404,"message":"Not Found"},"headers":{"Date":["Wed, 18 Jun 2014 19:14:31 GMT"],"Status":["404 Not Found"],"Connection":["close"],"X-Frame-Options":["SAMEORIGIN"],"X-Xss-Protection":["1; mode=block"],"X-Content-Type-Options":["nosniff"],"Content-Type":["text/plain"],"Cache-Control":["no-cache"],"X-Request-Id":["b8fd7b27-8285-4f5c-83f2-ee46c7338393"],"X-Runtime":["0.009932"]},"body":{"encoding":"US-ASCII","base64_string":"IA==\n"},"http_version":null},"recorded_at":"Wed, 18 Jun 2014 19:14:31 GMT"}],"recorded_with":"VCR 2.9.2"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"head","uri":"http://api.chatspry.dev:8080/?foo=bar","body":{"encoding":"US-ASCII","base64_string":""},"headers":{"Accept":["application/json"],"User-Agent":["Chatspry Ruby Gem 0.0.1.pre1"]}},"response":{"status":{"code":404,"message":"Not Found"},"headers":{"Date":["Wed, 18 Jun 2014 19:14:31 GMT"],"Status":["404 Not Found"],"Connection":["close"],"X-Frame-Options":["SAMEORIGIN"],"X-Xss-Protection":["1; mode=block"],"X-Content-Type-Options":["nosniff"],"Content-Type":["text/plain"],"Cache-Control":["no-cache"],"X-Request-Id":["3e2f3155-3f8d-4172-a3a6-794cc8c11e71"],"X-Runtime":["0.009586"]},"body":{"encoding":"US-ASCII","base64_string":""},"http_version":null},"recorded_at":"Wed, 18 Jun 2014 19:14:31 GMT"}],"recorded_with":"VCR 2.9.2"}
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"http://api.chatspry.dev:8080/v1/user","body":{"encoding":"US-ASCII","base64_string":""},"headers":{"Accept":["application/json"],"User-Agent":["Chatspry Ruby Gem 0.0.1.pre1"],"Authorization":["Bearer <ACCESS_TOKEN>"],"Accept-Encoding":["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"]}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Date":["Wed, 18 Jun 2014 19:14:31 GMT"],"Status":["200 OK"],"Connection":["close"],"X-Frame-Options":["SAMEORIGIN"],"X-Xss-Protection":["1; mode=block"],"X-Content-Type-Options":["nosniff"],"Access-Control-Allow-Credentials":["true"],"Access-Control-Allow-Methods":["GET,POST,PUT,DELETE,PATCH,OPTIONS"],"Access-Control-Allow-Headers":["*"],"Access-Control-Max-Age":["1728000"],"Content-Type":["application/json; charset=utf-8"],"Etag":["\"0a2327f04d9202b40e890296b3055c0f\""],"Cache-Control":["max-age=0, private, must-revalidate"],"X-Request-Id":["20e88c1c-e11b-496d-ae32-5344b27682a9"],"X-Runtime":["0.019083"]},"body":{"encoding":"US-ASCII","base64_string":"eyJ1c2VyIjp7ImlkIjoiN2EyYjI0MTktYzU5NC00MzU5LWFhMzUtMTVhNWJk\nNjMxOGRjIiwiaGFuZGxlIjoiPENIQVRTUFJZX0lERU5USUZJRVI+IiwibmFt\nZSI6IlBoaWxpcCBWaWVpcmEiLCJ1cGRhdGVkX2F0IjoxNDAzMDM2MjQ5LCJj\ncmVhdGVkX2F0IjoxNDAzMDM2MjQ5fX0=\n"},"http_version":null},"recorded_at":"Wed, 18 Jun 2014 19:14:31 GMT"}],"recorded_with":"VCR 2.9.2"}
@@ -0,0 +1,301 @@
1
+ require "helper"
2
+
3
+ describe Chatspry::Client do
4
+
5
+ before { Chatspry.reset! }
6
+ after { Chatspry.reset! }
7
+
8
+ describe "module configuration" do
9
+
10
+ before do
11
+ Chatspry.reset!
12
+ Chatspry.configure do |config|
13
+ Chatspry::Configurable.keys.each do |key|
14
+ config.send("#{key}=", "Some #{key}")
15
+ end
16
+ end
17
+ end
18
+
19
+ after { Chatspry.reset! }
20
+
21
+ it "inherits the module configuration" do
22
+ client = Chatspry::Client.new
23
+ Chatspry::Configurable.keys.each do |key|
24
+ expect(client.instance_variable_get(:"@#{key}")).to eq("Some #{key}")
25
+ end
26
+ end
27
+
28
+ describe "with class level configuration" do
29
+
30
+ let!(:opts) do
31
+ @opts = {
32
+ connection_options: {
33
+ ssl: { verify: false }
34
+ },
35
+ identifier: "zeeraw",
36
+ passphrase: "SecretPass1234!"
37
+ }
38
+ end
39
+
40
+ it "overrides module configuration" do
41
+
42
+ client = Chatspry::Client.new(opts)
43
+
44
+ expect(client.identifier).to eq("zeeraw")
45
+ expect(client.instance_variable_get(:"@passphrase")).to eq("SecretPass1234!")
46
+ expect(client.client_id).to eq(Chatspry.client_id)
47
+
48
+ end
49
+
50
+ it "can set configuration after initialization" do
51
+
52
+ client = Chatspry::Client.new
53
+ client.configure do |config|
54
+ @opts.each do |key, value|
55
+ config.send("#{key}=", value)
56
+ end
57
+ end
58
+
59
+ expect(client.identifier).to eq("zeeraw")
60
+ expect(client.instance_variable_get(:"@passphrase")).to eq("SecretPass1234!")
61
+ expect(client.client_id).to eq(Chatspry.client_id)
62
+
63
+ end
64
+
65
+ it "masks passphrases on inspect" do
66
+ client = Chatspry::Client.new(@opts)
67
+ inspected = client.inspect
68
+ expect(inspected).not_to include("SecretPass1234!")
69
+ end
70
+
71
+ it "masks tokens on inspect" do
72
+ client = Chatspry::Client.new(:access_token => '87614b09dd141c22800f96f11737ade5226d7ba8')
73
+ inspected = client.inspect
74
+ expect(inspected).not_to eq("87614b09dd141c22800f96f11737ade5226d7ba8")
75
+ end
76
+
77
+ it "masks client secrets on inspect" do
78
+ client = Chatspry::Client.new(:client_secret => '87614b09dd141c22800f96f11737ade5226d7ba8')
79
+ inspected = client.inspect
80
+ expect(inspected).not_to eq("87614b09dd141c22800f96f11737ade5226d7ba8")
81
+ end
82
+
83
+ end
84
+ end
85
+
86
+ describe "authentication" do
87
+
88
+ let!(:client) { Chatspry.client }
89
+ before { Chatspry.reset! }
90
+
91
+ describe "with module level config" do
92
+
93
+ before { Chatspry.reset! }
94
+
95
+ it "sets basic auth creds with .configure" do
96
+
97
+ Chatspry.configure do |config|
98
+ config.identifier = "berwyn"
99
+ config.passphrase = "canIhazCheezburgs"
100
+ end
101
+
102
+ expect(Chatspry.client).to be_basic_authenticated
103
+ end
104
+
105
+ it "sets basic auth creds with module methods" do
106
+
107
+ Chatspry.identifier = "berwyn"
108
+ Chatspry.passphrase = "canIhazCheezburgs"
109
+
110
+ expect(Chatspry.client).to be_basic_authenticated
111
+ end
112
+
113
+ it "sets oauth token with .configure" do
114
+
115
+ Chatspry.configure do |config|
116
+ config.access_token = "d255197b4937b385eb63d1f4677e3ffee61fbaea"
117
+ end
118
+
119
+ expect(Chatspry.client).not_to be_basic_authenticated
120
+ expect(Chatspry.client).to be_token_authenticated
121
+ end
122
+
123
+ it "sets oauth token with module methods" do
124
+ Chatspry.access_token = "d255197b4937b385eb63d1f4677e3ffee61fbaea"
125
+
126
+ expect(Chatspry.client).not_to be_basic_authenticated
127
+ expect(Chatspry.client).to be_token_authenticated
128
+ end
129
+
130
+ it "sets oauth application creds with .configure" do
131
+
132
+ Chatspry.configure do |config|
133
+ config.client_id = '97b4937b385eb63d1f46'
134
+ config.client_secret = 'd255197b4937b385eb63d1f4677e3ffee61fbaea'
135
+ end
136
+
137
+ expect(Chatspry.client).not_to be_basic_authenticated
138
+ expect(Chatspry.client).not_to be_token_authenticated
139
+ expect(Chatspry.client).to be_application_authenticated
140
+ end
141
+
142
+ it "sets oauth token with module methods" do
143
+
144
+ Chatspry.client_id = "97b4937b385eb63d1f46"
145
+ Chatspry.client_secret = "d255197b4937b385eb63d1f4677e3ffee61fbaea"
146
+
147
+ expect(Chatspry.client).not_to be_basic_authenticated
148
+ expect(Chatspry.client).not_to be_token_authenticated
149
+ expect(Chatspry.client).to be_application_authenticated
150
+ end
151
+
152
+ end
153
+
154
+ describe "with class level config" do
155
+
156
+ it "sets basic auth creds with .configure" do
157
+
158
+ client.configure do |config|
159
+ config.identifier = "aethe"
160
+ config.passphrase = "WhatIsWithThesePonies?"
161
+ end
162
+
163
+ expect(client).to be_basic_authenticated
164
+ end
165
+
166
+ it "sets basic auth creds with instance methods" do
167
+ client.identifier = "aethe"
168
+ client.passphrase = "WhatIsWithThesePonies?"
169
+ expect(client).to be_basic_authenticated
170
+ end
171
+
172
+ it "sets oauth token with .configure" do
173
+ client.access_token = "d255197b4937b385eb63d1f4677e3ffee61fbaea"
174
+ expect(client).not_to be_basic_authenticated
175
+ expect(client).to be_token_authenticated
176
+ end
177
+
178
+ it "sets oauth token with instance methods" do
179
+ client.access_token = "d255197b4937b385eb63d1f4677e3ffee61fbaea"
180
+ expect(client).not_to be_basic_authenticated
181
+ expect(client).to be_token_authenticated
182
+ end
183
+
184
+ it "sets oauth application creds with .configure" do
185
+
186
+ client.configure do |config|
187
+ config.client_id = "97b4937b385eb63d1f46"
188
+ config.client_secret = "d255197b4937b385eb63d1f4677e3ffee61fbaea"
189
+ end
190
+
191
+ expect(client).not_to be_basic_authenticated
192
+ expect(client).not_to be_token_authenticated
193
+ expect(client).to be_application_authenticated
194
+ end
195
+
196
+ it "sets oauth token with module methods" do
197
+ client.client_id = "97b4937b385eb63d1f46"
198
+ client.client_secret = "d255197b4937b385eb63d1f4677e3ffee61fbaea"
199
+
200
+ expect(client).not_to be_basic_authenticated
201
+ expect(client).not_to be_token_authenticated
202
+ expect(client).to be_application_authenticated
203
+ end
204
+
205
+ end
206
+
207
+ describe "when token authenticated", :vcr do
208
+
209
+ it "makes authenticated calls" do
210
+ client = oauth_client
211
+
212
+ root_request = stub_get("/").with(
213
+ headers: { authorization: "Bearer #{test_chatspry_token}" }
214
+ )
215
+
216
+ client.get("/")
217
+ assert_requested root_request
218
+ end
219
+
220
+ it "fetches and memorizes identifier" do
221
+ client = oauth_client
222
+
223
+ expect(client.identifier).to eq(test_chatspry_identifier)
224
+ assert_requested :get, chatspry_url("/v1/user")
225
+ end
226
+
227
+ end
228
+
229
+ describe "when application authenticated" do
230
+ it "makes authenticated calls" do
231
+ client = Chatspry.client
232
+ client.client_id = '97b4937b385eb63d1f46'
233
+ client.client_secret = 'd255197b4937b385eb63d1f4677e3ffee61fbaea'
234
+
235
+ root_request = stub_get("/?client_id=97b4937b385eb63d1f46&client_secret=d255197b4937b385eb63d1f4677e3ffee61fbaea")
236
+ client.get("/")
237
+ assert_requested root_request
238
+ end
239
+ end
240
+
241
+ end
242
+
243
+ describe ".connection" do
244
+
245
+ before { Chatspry.reset! }
246
+
247
+ it "acts like a Faraday connection" do
248
+ expect(Chatspry.client.connection).to be_kind_of Faraday::Connection
249
+ end
250
+
251
+ it "caches the connection" do
252
+ connection = Chatspry.client.connection
253
+ expect(connection.object_id).to eq(Chatspry.client.connection.object_id)
254
+ end
255
+
256
+ end
257
+
258
+ describe ".get", :vcr do
259
+
260
+ before(:each) { Chatspry.reset! }
261
+
262
+ it "handles query params" do
263
+ Chatspry.get "/", foo: "bar"
264
+ assert_requested :get, "http://api.chatspry.dev:8080?foo=bar", accept: "text/html"
265
+ end
266
+
267
+ it "handles headers" do
268
+ request = stub_get("/zen").with(
269
+ query: { foo: "bar" }, headers: {
270
+ accept: "text/plain"
271
+ }
272
+ )
273
+
274
+ Chatspry.get "/zen", foo: "bar", accept: "text/plain"
275
+ assert_requested request
276
+ end
277
+
278
+ end
279
+
280
+ describe ".head", :vcr do
281
+
282
+ before(:each) { Chatspry.reset! }
283
+
284
+ it "handles query params" do
285
+ Chatspry.head "/", foo: "bar"
286
+ assert_requested :head, "http://api.chatspry.dev:8080?foo=bar"
287
+ end
288
+
289
+ it "handles headers" do
290
+ request = stub_head("/zen").with(
291
+ query: { foo: "bar" }, headers: {
292
+ accept: "text/plain"
293
+ }
294
+ )
295
+
296
+ Chatspry.head "/zen", foo: "bar", accept: "text/plain"
297
+ assert_requested request
298
+
299
+ end
300
+ end
301
+ end
@@ -0,0 +1,48 @@
1
+ require 'helper'
2
+
3
+ describe Chatspry do
4
+
5
+ before { Chatspry.reset! }
6
+ after { Chatspry.reset! }
7
+
8
+ it "sets defaults" do
9
+ Chatspry::Configurable.keys.each do |key|
10
+ expect(Chatspry.instance_variable_get(:"@#{key}")).to eq( Chatspry::Default.send(key) )
11
+ end
12
+ end
13
+
14
+ describe ".client" do
15
+
16
+ it "creates an Chatspry::Client" do
17
+ expect(Chatspry.client).to be_kind_of Chatspry::Client
18
+ end
19
+
20
+ it "caches the client when the same options are passed" do
21
+ expect(Chatspry.client).to eq(Chatspry.client)
22
+ end
23
+
24
+ it "returns a fresh client when options are not the same" do
25
+ client = Chatspry.client
26
+ Chatspry.access_token = "87614b09dd141c22800f96f11737ade5226d7ba8"
27
+ client_two = Chatspry.client
28
+ client_three = Chatspry.client
29
+ expect(client).not_to eq(client_two)
30
+ expect(client_three).to eq(client_two)
31
+ end
32
+
33
+ end
34
+
35
+ describe ".configure" do
36
+
37
+ Chatspry::Configurable.keys.each do |key|
38
+ it "sets the #{ key.to_s.gsub('_', ' ') }" do
39
+ Chatspry.configure do |config|
40
+ config.send("#{key}=", key)
41
+ end
42
+ expect(Chatspry.instance_variable_get(:"@#{key}")).to eq(key)
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,35 @@
1
+ require "json"
2
+ require "chatspry"
3
+ require "rspec"
4
+ require "webmock/rspec"
5
+
6
+ RSpec.configure do |config|
7
+
8
+ config.filter_run :focus
9
+ config.run_all_when_everything_filtered = true
10
+
11
+ config.default_formatter = "doc" if config.files_to_run.one?
12
+
13
+ config.order = :random
14
+
15
+ Kernel.srand config.seed
16
+
17
+ config.expect_with :rspec do |expectations|
18
+ expectations.syntax = :expect
19
+ end
20
+
21
+ config.mock_with :rspec do |mocks|
22
+ mocks.syntax = :expect
23
+ mocks.verify_partial_doubles = true
24
+ end
25
+
26
+ end
27
+
28
+ require "support/fixture_configuration"
29
+ require "support/environment_defaults"
30
+ require "support/request_stubs"
31
+
32
+ def oauth_client
33
+ Chatspry::Client.new(:access_token => test_chatspry_token)
34
+ end
35
+
@@ -0,0 +1,19 @@
1
+ def test_chatspry_identifier
2
+ ENV.fetch "CHATSPRY_TEST_IDENTIFIER"
3
+ end
4
+
5
+ def test_chatspry_passphrase
6
+ ENV.fetch "CHATSPRY_TEST_PASSPHRASE"
7
+ end
8
+
9
+ def test_chatspry_token
10
+ ENV.fetch "CHATSPRY_TEST_TOKEN", "x" * 21
11
+ end
12
+
13
+ def test_chatspry_client_id
14
+ ENV.fetch "CHATSPRY_TEST_CLIENT_ID", "x" * 26
15
+ end
16
+
17
+ def test_chatspry_client_secret
18
+ ENV.fetch "CHATSPRY_TEST_CLIENT_SECRET", "x" * 32
19
+ end
@@ -0,0 +1,72 @@
1
+ require "vcr"
2
+
3
+ VCR.configure do |c|
4
+
5
+ c.configure_rspec_metadata!
6
+ c.filter_sensitive_data("<CHATSPRY_IDENTIFIER>") do
7
+ test_chatspry_identifier
8
+ end
9
+
10
+ c.filter_sensitive_data("<CHATSPRY_PASSPHRASE>") do
11
+ test_chatspry_passphrase
12
+ end
13
+
14
+ c.filter_sensitive_data("<ACCESS_TOKEN>") do
15
+ test_chatspry_token
16
+ end
17
+
18
+ c.filter_sensitive_data("<CHATSPRY_CLIENT_ID>") do
19
+ test_chatspry_client_id
20
+ end
21
+
22
+ c.filter_sensitive_data("<CHATSPRY_CLIENT_SECRET>") do
23
+ test_chatspry_client_secret
24
+ end
25
+
26
+ # c.before_http_request(:real?) do |request|
27
+
28
+ # next if request.headers['X-Vcr-Test-Repo-Setup']
29
+ # next unless request.uri.include? test_github_repository
30
+
31
+ # options = {
32
+ # :headers => {'X-Vcr-Test-Repo-Setup' => 'true'},
33
+ # :auto_init => true
34
+ # }
35
+
36
+ # test_repo = "#{test_github_login}/#{test_github_repository}"
37
+ # if !oauth_client.repository?(test_repo, options)
38
+ # Octokit.octokit_warn "NOTICE: Creating #{test_repo} test repository."
39
+ # oauth_client.create_repository(test_github_repository, options)
40
+ # end
41
+
42
+ # test_org_repo = "#{test_github_org}/#{test_github_repository}"
43
+ # if !oauth_client.repository?(test_org_repo, options)
44
+ # Octokit.octokit_warn "NOTICE: Creating #{test_org_repo} test repository."
45
+ # options[:organization] = test_github_org
46
+ # oauth_client.create_repository(test_github_repository, options)
47
+ # end
48
+
49
+ # end
50
+
51
+ # c.ignore_request do |request|
52
+ # !!request.headers['X-Vcr-Test-Repo-Setup']
53
+ # end
54
+
55
+ c.default_cassette_options = {
56
+ serialize_with: :json,
57
+ preserve_exact_body_bytes: true,
58
+ decode_compressed_response: true,
59
+ record: ENV['TRAVIS'] ? :none : :once
60
+ }
61
+
62
+ c.cassette_library_dir = File.expand_path("../../cassettes", __FILE__)
63
+ c.hook_into :webmock
64
+ end
65
+
66
+ def fixture_path
67
+ File.expand_path("../../fixtures", __FILE__)
68
+ end
69
+
70
+ def fixture(file)
71
+ File.new(fixture_path + "/" + file)
72
+ end
@@ -0,0 +1,27 @@
1
+ def stub_delete(url)
2
+ stub_request(:delete, chatspry_url(url))
3
+ end
4
+
5
+ def stub_get(url)
6
+ stub_request(:get, chatspry_url(url))
7
+ end
8
+
9
+ def stub_head(url)
10
+ stub_request(:head, chatspry_url(url))
11
+ end
12
+
13
+ def stub_patch(url)
14
+ stub_request(:patch, chatspry_url(url))
15
+ end
16
+
17
+ def stub_post(url)
18
+ stub_request(:post, chatspry_url(url))
19
+ end
20
+
21
+ def stub_put(url)
22
+ stub_request(:put, chatspry_url(url))
23
+ end
24
+
25
+ def chatspry_url(url)
26
+ url =~ /^http/ ? url : "http://api.chatspry.dev:8080#{url}"
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chatspry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre1
4
+ version: 0.0.1.pre2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,46 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-16 00:00:00.000000000 Z
12
+ date: 2014-06-18 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.9'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.9'
30
+ - !ruby/object:Gem::Dependency
31
+ name: hashie
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '2.0'
38
+ - - <
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '2.0'
49
+ - - <
50
+ - !ruby/object:Gem::Version
51
+ version: '3.0'
14
52
  - !ruby/object:Gem::Dependency
15
53
  name: bundler
16
54
  requirement: !ruby/object:Gem::Requirement
@@ -27,6 +65,22 @@ dependencies:
27
65
  - - ~>
28
66
  - !ruby/object:Gem::Version
29
67
  version: '1.6'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ requirement: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: 3.0.0
30
84
  - !ruby/object:Gem::Dependency
31
85
  name: rake
32
86
  requirement: !ruby/object:Gem::Requirement
@@ -51,6 +105,7 @@ extensions: []
51
105
  extra_rdoc_files: []
52
106
  files:
53
107
  - .gitignore
108
+ - .rspec
54
109
  - .ruby-version
55
110
  - Gemfile
56
111
  - LICENSE.txt
@@ -58,7 +113,21 @@ files:
58
113
  - Rakefile
59
114
  - chatspry.gemspec
60
115
  - lib/chatspry.rb
116
+ - lib/chatspry/authentication.rb
117
+ - lib/chatspry/client.rb
118
+ - lib/chatspry/client/user.rb
119
+ - lib/chatspry/configurable.rb
120
+ - lib/chatspry/default.rb
61
121
  - lib/chatspry/version.rb
122
+ - spec/cassettes/Chatspry_Client/_get/handles_query_params.json
123
+ - spec/cassettes/Chatspry_Client/_head/handles_query_params.json
124
+ - spec/cassettes/Chatspry_Client/authentication/when_token_authenticated/fetches_and_memorizes_identifier.json
125
+ - spec/chatspry/client_spec.rb
126
+ - spec/chatspry_spec.rb
127
+ - spec/helper.rb
128
+ - spec/support/environment_defaults.rb
129
+ - spec/support/fixture_configuration.rb
130
+ - spec/support/request_stubs.rb
62
131
  homepage: http://developer.chatspry.com/
63
132
  licenses:
64
133
  - MIT
@@ -84,4 +153,13 @@ rubygems_version: 1.8.23.2
84
153
  signing_key:
85
154
  specification_version: 3
86
155
  summary: API wrapper for chatspry in ruby
87
- test_files: []
156
+ test_files:
157
+ - spec/cassettes/Chatspry_Client/_get/handles_query_params.json
158
+ - spec/cassettes/Chatspry_Client/_head/handles_query_params.json
159
+ - spec/cassettes/Chatspry_Client/authentication/when_token_authenticated/fetches_and_memorizes_identifier.json
160
+ - spec/chatspry/client_spec.rb
161
+ - spec/chatspry_spec.rb
162
+ - spec/helper.rb
163
+ - spec/support/environment_defaults.rb
164
+ - spec/support/fixture_configuration.rb
165
+ - spec/support/request_stubs.rb