evoke_client 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,8 +4,16 @@ evoke-client is a simple rest-client utility for allowing your application to co
4
4
 
5
5
  ### Usage
6
6
 
7
- evoke = Evoke.new(:url => 'http://example.com/users/unsubscribe', :callback_at => (Time.now + 86400))
8
- evoke.save
7
+ # evoke = Evoke.new(:url => 'http://example.com/users/unsubscribe', :callback_at => (Time.now + 86400))
8
+ # evoke.save
9
+
10
+ Evoke.configure(...)
11
+ callback = Evoke::Callback.new(:url => 'http://example.com/users/unsubscribe', :callback_at => (Time.now + 86400))
12
+ callback.save
13
+
14
+ callback = Evoke::Callback.find(guid)
15
+ callback.destroy
16
+ callback.update
9
17
 
10
18
  # What happens if save fails
11
19
 
@@ -27,7 +35,7 @@ To modify host and port, just set the following:
27
35
 
28
36
  These should be automatically installed when you install evoke_client
29
37
 
30
- * [rest-client](http://github.com/adamwiggins/rest-client)
38
+ * [httparty](http://github.com/jnunemaker/httparty/)
31
39
 
32
40
  ## License
33
41
 
data/Rakefile CHANGED
@@ -1,17 +1,16 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
- require 'rake/testtask'
4
3
 
5
4
  desc 'Default task: run all tests'
6
5
  task :default => [:test]
7
6
 
8
- task(:set_test_env) { ENV['APP_ENV'] ||= 'test' }
9
-
10
- task(:environment) { }
11
-
12
- task :test => [:set_test_env]
13
7
  desc 'Run all tests'
14
- Rake::TestTask.new do |t|
15
- t.test_files = FileList['test/*_test.rb']
16
- t.verbose = true
8
+ task :test do
9
+ $:.concat ['./lib', './test']
10
+ Dir.glob("./test/*_test.rb").each { |test| require test }
11
+ end
12
+
13
+ desc "Open an irb session preloaded with this library"
14
+ task :console do
15
+ exec "irb -rubygems -I./lib -r evoke_client"
17
16
  end
@@ -1,11 +1,11 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "evoke_client"
3
- s.version = "0.2.0"
4
- s.date = "2009-06-07"
5
- s.summary = "Rest client interface for talking REST to the evoke service"
3
+ s.version = "0.2.1"
4
+ s.date = "2009-10-07"
5
+ s.summary = "Tool for interfacing with the Evoke web service"
6
6
  s.email = %w[gus@gusg.us]
7
7
  s.homepage = "http://github.com/thumblemonks/evoke_client"
8
- s.description = "Rest client interface for talking REST to the evoke service"
8
+ s.description = "Tool for interfacing with the Evoke web service. See http://github.com/thumblemonks/evoke"
9
9
  s.authors = %w[Justin\ Knowlden]
10
10
  s.post_install_message = %q{Choosy wizards choose Thumble Monks.}
11
11
 
@@ -13,23 +13,25 @@ Gem::Specification.new do |s|
13
13
  s.rdoc_options = ["--main", "README.markdown"]
14
14
  s.extra_rdoc_files = ["README.markdown"]
15
15
 
16
- s.add_dependency("rest-client", [">= 0.9.2"])
16
+ s.add_dependency("httparty", [">= 0.4.4"])
17
17
 
18
- # run git ls-files to get an updated list
19
18
  s.files = %w[
20
19
  MIT-LICENSE
21
20
  README.markdown
22
- Rakefile
23
21
  evoke_client.gemspec
24
22
  lib/evoke_client.rb
25
23
  lib/evoke_client/base.rb
26
- lib/evoke_client/stub.rb
27
- lib/query_string.rb
28
- shoulda_macros/rest_client.rb
24
+ lib/evoke_client/mock.rb
29
25
  ]
30
-
26
+
31
27
  s.test_files = %w[
32
- test/evoke_client_test.rb
33
- test/test_helper.rb
28
+ Rakefile
29
+ test/configuration_test.rb
30
+ test/create_or_update_test.rb
31
+ test/create_test.rb
32
+ test/destroy_test.rb
33
+ test/find_test.rb
34
+ test/teststrap.rb
35
+ test/update_test.rb
34
36
  ]
35
37
  end
@@ -1,33 +1,8 @@
1
- require 'query_string'
2
1
  require 'evoke_client/base'
3
- require 'evoke_client/stub'
2
+ require 'httparty'
4
3
 
5
- class Evoke
6
- class ConnectionRefused < Exception; end
7
-
8
- # Configuration
9
-
10
- def self.test?; @test == true; end
11
- def self.test=(setting) @test = setting; end
12
-
13
- def self.host; @host || 'evoke.thumblemonks.com'; end
14
- def self.host=(host) @host = host; end
15
-
16
- def self.port; @port; end
17
- def self.port=(port) @port = port; end
18
-
19
- def self.host_and_port
20
- [host, port].compact.join(':')
21
- end
22
-
23
- # Logic
24
-
25
- def self.create_or_update!(*args)
26
- prepare(*args).save
27
- end
28
-
29
- def self.prepare(*args)
30
- (test? ? EvokeClient::Stub : EvokeClient::Base).new(*args)
31
- end
32
-
4
+ Evoke::Callback.instance_eval do
5
+ include HTTParty
6
+ base_uri "http://localhost:3000"
7
+ format :json
33
8
  end
@@ -1,23 +1,60 @@
1
- require 'restclient'
1
+ module Evoke
2
+ class RecordError < Exception; end
3
+ class RecordInvalid < RecordError; end
4
+ class RecordNotFound < RecordError; end
2
5
 
3
- module EvokeClient
4
- class Base
5
- attr_reader :params, :headers
6
+ def self.configure(base_uri)
7
+ Evoke::Callback.base_uri(base_uri)
8
+ end
6
9
 
7
- def initialize(params={})
8
- @evoke = ::RestClient::Resource.new("http://#{Evoke.host_and_port}/callbacks")
9
- @params = params
10
- @params[:callback_at] = @params[:callback_at].utc if @params[:callback_at]
11
- @params[:data] = @params[:data].to_query_string if @params[:data]
10
+ class Callback
11
+ def self.find(guid)
12
+ callback = get("/callbacks/#{guid}")
13
+ callback.empty? ? nil : new(callback.merge(:new_record => false))
14
+ end
15
+
16
+ def self.create_or_update(data)
17
+ callback = (find(data["guid"]) || new(data)).update_attributes(data)
18
+ callback.save
19
+ callback
20
+ end
21
+
22
+ def initialize(data)
23
+ @new_record = determine_if_new_record(data.delete(:new_record))
24
+ @data = data
25
+ end
26
+
27
+ def new_record?; @new_record; end
28
+
29
+ def update_attributes(new_data)
30
+ @data = @data.merge(new_data)
31
+ self
12
32
  end
13
33
 
14
34
  def save
15
- @evoke[params[:guid]].get
16
- @evoke[params[:guid]].put(@params)
17
- rescue ::RestClient::ResourceNotFound
18
- @evoke.post(@params)
19
- rescue Errno::ECONNREFUSED
20
- raise Evoke::ConnectionRefused, "Connection refused while connecting to #{Evoke.host_and_port}"
21
- end
22
- end # Base
23
- end # EvokeClient
35
+ args = (new_record? ? [:post, "/callbacks"] : [:put, "/callbacks/#{guid}"]) + [{:query => @data}]
36
+ handle_response(self.class.send(*args)) { |response| @data = response }
37
+ end
38
+
39
+ def destroy
40
+ handle_response(self.class.delete("/callbacks/#{guid}")) { |response| nil }
41
+ end
42
+
43
+ def method_missing(method, *args, &block)
44
+ @data.include?(method.to_s) ? @data[method.to_s] : super
45
+ end
46
+ private
47
+ def handle_response(response, &block)
48
+ case response.code
49
+ when 404 then raise(Evoke::RecordNotFound)
50
+ when 422 then raise(Evoke::RecordInvalid, response["errors"])
51
+ when 200..201 then yield(response)
52
+ else raise(Evoke::RecordError, "#{response.code} - #{response.message}")
53
+ end
54
+ end
55
+
56
+ def determine_if_new_record(condition)
57
+ condition.nil? || condition
58
+ end
59
+ end # Callback
60
+ end # Evoke
@@ -0,0 +1,76 @@
1
+ require 'evoke_client/base'
2
+ require 'httparty'
3
+
4
+ module Evoke
5
+ module HTTMockParty
6
+ def self.included(base)
7
+ base.extend ClassMethods
8
+ end
9
+
10
+ module ClassMethods
11
+ def base_uri(uri=nil)
12
+ @base_uri = uri if uri
13
+ @base_uri
14
+ end
15
+
16
+ def format(fmt=nil)
17
+ @format = fmt if fmt
18
+ @format
19
+ end
20
+
21
+ #
22
+ # The mock part. Your code will call these methods and get a real HTTParty::Response
23
+
24
+ def get(path, query={}) HTTMockParty.router("get").dispatch(path, query); end
25
+ def post(path, query={}) HTTMockParty.router("post").dispatch(path, query); end
26
+ def put(path, query={}) HTTMockParty.router("put").dispatch(path, query); end
27
+ def delete(path, query={}) HTTMockParty.router("delete").dispatch(path, query); end
28
+ end # ClassMethods
29
+
30
+ #
31
+ # The shunt part. Setting up routers for responses
32
+
33
+ def self.get(path, query={}) router("get").maps(path, query); end
34
+ def self.post(path, query={}) router("post").maps(path, query); end
35
+ def self.put(path, query={}) router("put").maps(path, query); end
36
+ def self.delete(path, query={}) router("delete").maps(path, query); end
37
+
38
+ class Router
39
+ def initialize; @routes = {}; end
40
+ def maps(*args) @routes[args.inspect] = Responder.new; end
41
+ def dispatch(*args) @routes[args.inspect].process; end
42
+ end
43
+
44
+ class Responder
45
+ def process
46
+ HTTParty::Response.new(@delegate || "", @body, @code, @message, @headers)
47
+ end
48
+
49
+ def ok; status(200, "Ok"); end
50
+ def created; status(201, "Created"); end
51
+ def not_found; status(404, "Not Found"); end
52
+ def unprocessable_entity; status(422, "Unprocessable Entity"); end
53
+ def internal_server_error; status(500, "Internal Server Error"); end
54
+
55
+ def responds(delegate, body="", code=nil, message=nil, headers={})
56
+ @delegate, @body, @code, @message, @headers = delegate, body, code, message, headers
57
+ self
58
+ end
59
+ private
60
+ def status(code, message)
61
+ @code, @message = code, message
62
+ self
63
+ end
64
+ end
65
+
66
+ private
67
+ def self.routers; @routers ||= {}; end
68
+ def self.router(method) routers[method] ||= Router.new; end
69
+ end # HTTMockParty
70
+ end # Evoke
71
+
72
+ Evoke::Callback.instance_eval do
73
+ include Evoke::HTTMockParty
74
+ base_uri "http://test:3000"
75
+ format :json
76
+ end
@@ -0,0 +1,13 @@
1
+ require 'teststrap'
2
+
3
+ context "configuring evoke client" do
4
+ context "with defaults" do
5
+ asserts("base_uri") { Evoke::Callback.base_uri }.equals("http://test:3000")
6
+ asserts("format") { Evoke::Callback.format }.equals(:json)
7
+ end # with defaults
8
+
9
+ context "with custom base_uri" do
10
+ setup { Evoke.configure("http://yo.ma.ma:3000/") }
11
+ asserts("base_uri") { Evoke::Callback.base_uri }.equals("http://yo.ma.ma:3000/")
12
+ end
13
+ end # configuring evoke client
@@ -0,0 +1,33 @@
1
+ require 'teststrap'
2
+
3
+ context "create or update" do
4
+
5
+ context "when callback does not exist" do
6
+ setup do
7
+ Evoke::HTTMockParty.get('/callbacks/poster').not_found
8
+ Evoke::HTTMockParty.post('/callbacks', :query => {"guid" => "poster"}).
9
+ responds({"url" => "http://poster"}).created
10
+ Evoke::Callback.create_or_update({"guid" => "poster"})
11
+ end
12
+
13
+ should "post to callbacks and update itself accordingly" do
14
+ topic.url
15
+ end.equals("http://poster")
16
+ end # when callback does not exist
17
+
18
+ context "when callback does exist" do
19
+ setup do
20
+ Evoke::HTTMockParty.get('/callbacks/putter').
21
+ responds({"url" => "http://putter", "guid" => "putter"}).ok
22
+ Evoke::HTTMockParty.put('/callbacks/putter',
23
+ :query => {"guid" => "putter", "url" => "http://putter.back"}).
24
+ responds({"url" => "http://putter.new"}).ok
25
+ Evoke::Callback.create_or_update({"guid" => "putter", "url" => "http://putter.back"})
26
+ end
27
+
28
+ should "put to callbacks and update itself accordingly" do
29
+ topic.url
30
+ end.equals("http://putter.new")
31
+ end # when callback does exist
32
+
33
+ end # create or update
@@ -0,0 +1,48 @@
1
+ require 'teststrap'
2
+
3
+ context "creating a callback" do
4
+
5
+ context "with valid data" do
6
+ setup do
7
+ good_response = {"url" => "http://foo.bar"}
8
+ Evoke::HTTMockParty.post('/callbacks', :query => {"url" => "http://good"}).
9
+ responds(good_response).created
10
+ callback = Evoke::Callback.new("url" => "http://good")
11
+ callback.save
12
+ callback
13
+ end
14
+
15
+ asserts("url is populated from returned values") do
16
+ topic.url
17
+ end.equals("http://foo.bar")
18
+
19
+ end # with valid data
20
+
21
+ context "with invalid data" do
22
+
23
+ setup do
24
+ bad_response = {"errors" => ["blah"]}
25
+ Evoke::HTTMockParty.post('/callbacks', :query => {"url" => "http://bad"}).
26
+ responds(bad_response).unprocessable_entity
27
+ Evoke::Callback.new("url" => "http://bad")
28
+ end
29
+
30
+ should "raise error and include save errors in exception message" do
31
+ topic.save
32
+ end.raises(Evoke::RecordInvalid, ["blah"])
33
+
34
+ end # with valid data
35
+
36
+ context "with some unknown error code" do
37
+
38
+ setup do
39
+ Evoke::HTTMockParty.post('/callbacks', :query => {"url" => "http://unknown"}).internal_server_error
40
+ Evoke::Callback.new("url" => "http://unknown")
41
+ end
42
+
43
+ should "raise and error with 500 response code message" do
44
+ topic.save
45
+ end.raises(Evoke::RecordError, "500 - Internal Server Error")
46
+
47
+ end # with valid data
48
+ end # creating a callback
@@ -0,0 +1,32 @@
1
+ require 'teststrap'
2
+
3
+ context "destroying a callback" do
4
+ context "that actually exists" do
5
+ setup do
6
+ Evoke::HTTMockParty.delete('/callbacks/good').ok
7
+ Evoke::Callback.new("guid" => "good")
8
+ end
9
+
10
+ asserts("nil is returned from destroy") { topic.destroy }.nil
11
+ end # that actually exists
12
+
13
+ context "that causes some failure" do
14
+ setup do
15
+ Evoke::HTTMockParty.delete('/callbacks/bad').responds({"errors" => ["sucka"]}).unprocessable_entity
16
+ Evoke::Callback.new("guid" => "bad")
17
+ end
18
+
19
+ asserts "error is raised with errors in exception message" do
20
+ topic.destroy
21
+ end.raises(Evoke::RecordInvalid, ["sucka"])
22
+ end # that causes some failure
23
+
24
+ context "that does not exist" do
25
+ setup do
26
+ Evoke::HTTMockParty.delete('/callbacks/what').not_found
27
+ Evoke::Callback.new("guid" => "what")
28
+ end
29
+
30
+ should("raise an error") { topic.destroy }.raises(Evoke::RecordNotFound)
31
+ end # that does not exist
32
+ end # destroying a callback
@@ -0,0 +1,31 @@
1
+ require 'teststrap'
2
+
3
+ context "finding a callback" do
4
+ context "that exists" do
5
+ setup do
6
+ good_data = {"url" => "http://foo.bar", "http_method" => "get"}
7
+ Evoke::HTTMockParty.get('/callbacks/a1b2c3').responds(good_data).ok
8
+ Evoke::Callback.find('a1b2c3')
9
+ end
10
+
11
+ should("return a Callback object") { topic }.kind_of(Evoke::Callback)
12
+ should("not be a new record") { !topic.new_record? }
13
+
14
+ asserts("url attribute is accessible as method") do
15
+ topic.url
16
+ end.equals("http://foo.bar")
17
+
18
+ asserts("http_method attribute is accessible as method") do
19
+ topic.http_method
20
+ end.equals("get")
21
+ end
22
+
23
+ context "that does not exist" do
24
+ setup do
25
+ Evoke::HTTMockParty.get('/callbacks/blah').not_found
26
+ Evoke::Callback.find('blah')
27
+ end
28
+
29
+ asserts("result") { topic }.nil
30
+ end
31
+ end # finding a callback
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'riot'
3
+ require 'evoke_client/mock'
@@ -0,0 +1,49 @@
1
+ require 'teststrap'
2
+
3
+ context "updating attributes of a callback" do
4
+ setup do
5
+ callback = Evoke::Callback.new("guid" => "meme", "url" => "http://foo.bar", "http_method" => "get")
6
+ callback.update_attributes("guid" => "mom", "url" => "http://a.b")
7
+ callback
8
+ end
9
+
10
+ asserts("guid updated") { topic.guid }.equals("mom")
11
+ asserts("url updated") { topic.url }.equals("http://a.b")
12
+ asserts("http_method is unchanged") { topic.http_method }.equals("get")
13
+ end # updating attributes of a callback
14
+
15
+ context "updating a callback" do
16
+
17
+ context "that actually exists" do
18
+ setup do
19
+ Evoke::HTTMockParty.put('/callbacks/good', :query => {"guid" => "good", "url" => "http://a.b"}).
20
+ responds({"url" => "http://foo.bar"}).ok
21
+ callback = Evoke::Callback.new("guid" => "good", "url" => "http://a.b", :new_record => false)
22
+ callback.save
23
+ callback
24
+ end
25
+
26
+ asserts("url is updated from results") { topic.url }.equals("http://foo.bar")
27
+ end # that actually exists
28
+
29
+ context "that causes some failure" do
30
+ setup do
31
+ Evoke::HTTMockParty.put('/callbacks/bad', :query => {"guid" => "bad"}).
32
+ responds({"errors" => ["mutha"]}).unprocessable_entity
33
+ Evoke::Callback.new("guid" => "bad", :new_record => false)
34
+ end
35
+
36
+ should("raise an error") { topic.save }.raises(Evoke::RecordInvalid)
37
+ should("include errors in exception message") { topic.save }.raises(Evoke::RecordInvalid, "mutha")
38
+ end # that causes some failure
39
+
40
+ context "that does not exist" do
41
+ setup do
42
+ Evoke::HTTMockParty.put('/callbacks/what', :query => {"guid" => "what"}).not_found
43
+ Evoke::Callback.new("guid" => "what", :new_record => false)
44
+ end
45
+
46
+ should("raise an error") { topic.save }.raises(Evoke::RecordNotFound)
47
+ end # that does not exist
48
+
49
+ end # updating a callback
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evoke_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Knowlden
@@ -9,20 +9,20 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-07 00:00:00 -05:00
12
+ date: 2009-10-07 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rest-client
16
+ name: httparty
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.2
23
+ version: 0.4.4
24
24
  version:
25
- description: Rest client interface for talking REST to the evoke service
25
+ description: Tool for interfacing with the Evoke web service. See http://github.com/thumblemonks/evoke
26
26
  email:
27
27
  - gus@gusg.us
28
28
  executables: []
@@ -34,13 +34,10 @@ extra_rdoc_files:
34
34
  files:
35
35
  - MIT-LICENSE
36
36
  - README.markdown
37
- - Rakefile
38
37
  - evoke_client.gemspec
39
38
  - lib/evoke_client.rb
40
39
  - lib/evoke_client/base.rb
41
- - lib/evoke_client/stub.rb
42
- - lib/query_string.rb
43
- - shoulda_macros/rest_client.rb
40
+ - lib/evoke_client/mock.rb
44
41
  has_rdoc: true
45
42
  homepage: http://github.com/thumblemonks/evoke_client
46
43
  licenses: []
@@ -69,7 +66,13 @@ rubyforge_project:
69
66
  rubygems_version: 1.3.5
70
67
  signing_key:
71
68
  specification_version: 3
72
- summary: Rest client interface for talking REST to the evoke service
69
+ summary: Tool for interfacing with the Evoke web service
73
70
  test_files:
74
- - test/evoke_client_test.rb
75
- - test/test_helper.rb
71
+ - Rakefile
72
+ - test/configuration_test.rb
73
+ - test/create_or_update_test.rb
74
+ - test/create_test.rb
75
+ - test/destroy_test.rb
76
+ - test/find_test.rb
77
+ - test/teststrap.rb
78
+ - test/update_test.rb
@@ -1,7 +0,0 @@
1
- module EvokeClient
2
- class Stub
3
- def initialize(params={}); end
4
-
5
- def save; end
6
- end # Stub
7
- end # EvokeClient
@@ -1,16 +0,0 @@
1
- module EvokeClient
2
- module Hash
3
- def to_query_string
4
- map do |key, val|
5
- "#{key}=#{val}"
6
- end.join('&')
7
- end
8
- end # Hash
9
-
10
- module String
11
- alias_method :to_query_string, :to_s
12
- end # String
13
- end # EvokeClient
14
-
15
- Hash.instance_eval { include EvokeClient::Hash }
16
- String.instance_eval { include EvokeClient::String }
@@ -1,16 +0,0 @@
1
- module EvokeClient
2
- module RestClient
3
- module Shoulda
4
- def expect_restful_request(method, *args)
5
- ::RestClient::Resource.any_instance.expects(method).with(*args)
6
- end
7
-
8
- def expect_restful_request_failure(method, *raises)
9
- ::RestClient::Resource.any_instance.expects(method).raises(*raises)
10
- end
11
-
12
- end # Shoulda
13
- end # RestClient
14
- end # EvokeClient
15
-
16
- Test::Unit::TestCase.instance_eval { include EvokeClient::RestClient::Shoulda }
@@ -1,104 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
2
-
3
- class EvokeTest < Test::Unit::TestCase
4
- def setup
5
- @params = {:url => 'foo', :callback_at => Time.now}
6
- end
7
-
8
- def teardown
9
- Evoke.test = false
10
- end
11
-
12
- context "preparing an evokation" do
13
- setup do
14
- @data = {:foo => 'bar', 'goo' => 'car'}
15
- @expected_data = "foo=bar&goo=car"
16
- @evoke = Evoke.prepare(@params.merge(:data => @data))
17
- end
18
-
19
- before_should("convert times to UTC") { Time.any_instance.expects(:utc) }
20
-
21
- should "convert data to a single escaped parameter string" do
22
- assert_match /foo=bar&?/, @evoke.params[:data]
23
- assert_match /goo=car&?/, @evoke.params[:data]
24
- end
25
- end
26
-
27
- context "saving" do
28
- context "a new callback" do
29
- setup do
30
- expect_restful_request_failure(:get, ::RestClient::ResourceNotFound)
31
- expect_restful_request(:post, @params)
32
- @evoke = Evoke.prepare(@params)
33
- end
34
- should("try and post params after not finding a resource") { @evoke.save }
35
- end
36
-
37
- context "an existing callback" do
38
- setup do
39
- expect_restful_request(:get)
40
- expect_restful_request(:put, @params)
41
- @evoke = Evoke.prepare(@params)
42
- end
43
- should("try and put params after finding a resource") { @evoke.save }
44
- end
45
- end
46
-
47
- context "create_or_update!" do
48
- should "initialize instance and call save" do
49
- fake_evoke = EvokeClient::Base.new
50
- EvokeClient::Base.expects(:new).with(@params).returns(fake_evoke)
51
- fake_evoke.expects(:save)
52
- Evoke.create_or_update!(@params)
53
- end
54
- end
55
-
56
- context "connection refused" do
57
- setup do
58
- expect_restful_request_failure(:get, Errno::ECONNREFUSED)
59
- end
60
-
61
- should "reraise Evoke::ConnectionRefused when saving" do
62
- assert_raise(Evoke::ConnectionRefused) { Evoke.prepare({}).save }
63
- end
64
-
65
- should "reraise Evoke::ConnectionRefused when storing" do
66
- assert_raise(Evoke::ConnectionRefused) { Evoke.create_or_update!({}) }
67
- end
68
- end
69
-
70
- context "host and port:" do
71
- context "when unchanged" do
72
- setup do
73
- Evoke.host = nil
74
- Evoke.port = nil
75
- end
76
- should("return default host") { assert_equal 'evoke.thumblemonks.com', Evoke.host }
77
- should("return default port") { assert_nil Evoke.port }
78
- should("return default host and port") { assert_equal 'evoke.thumblemonks.com', Evoke.host_and_port }
79
- end
80
-
81
- context "when changed" do
82
- setup do
83
- Evoke.host = 'example.com'
84
- Evoke.port = 4567
85
- end
86
-
87
- should("return specified host") { assert_equal 'example.com', Evoke.host }
88
- should("return specified port") { assert_equal 4567, Evoke.port }
89
- should("return specified host and port") { assert_equal 'example.com:4567', Evoke.host_and_port }
90
- end
91
- end
92
-
93
- context "when test mode is on" do
94
- setup do
95
- Evoke.test = true
96
- @evoke = Evoke.prepare({})
97
- end
98
-
99
- should "expect an EvokeClient::Stub class" do
100
- assert_kind_of EvokeClient::Stub, @evoke
101
- end
102
- end
103
-
104
- end
@@ -1,11 +0,0 @@
1
- require 'rubygems'
2
- require 'shoulda'
3
- require 'mocha'
4
- require 'redgreen'
5
-
6
- Shoulda.autoload_macros(File.join(File.dirname(__FILE__), '..'), ['.'])
7
-
8
- require 'evoke_client'
9
-
10
- Evoke.host = 'localhost'
11
- Evoke.port = 4567