james-ruminant 0.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/moo.rb CHANGED
@@ -3,6 +3,10 @@ require 'rubygems'
3
3
  require 'builder'
4
4
  require 'design'
5
5
 
6
+ require 'net/http'
7
+ require 'uri'
8
+ require 'hpricot'
9
+
6
10
  module Moo
7
11
  class Order < OptionsStruct.create(:api_key, :designs)
8
12
  def api_version
@@ -20,14 +24,34 @@ module Moo
20
24
  @designs.first.product_type if @designs.first
21
25
  end
22
26
 
23
- def to_xml(xml=Builder::XmlMarkup.new)
27
+ def to_xml(xml=nil)
28
+ xml = Builder::XmlMarkup.new(:target => (@xml_string ||= "")) unless xml
24
29
  eval File.open(File.expand_path(File.dirname(__FILE__) + "/template.xml.builder")).read
25
- xml
30
+ xml.target!
26
31
  end
27
32
 
33
+ attr_accessor :raw_response, :error_string, :error_code, :session_id, :start_url
28
34
  def submit
29
- @api = API.new
30
- @api.send_order(self)
35
+ res = Net::HTTP.post_form(URI.parse('http://www.moo.com/api/api.php'),
36
+ {'xml'=>self.to_xml, 'method'=>'direct'})
37
+ @raw_response = res.body
38
+ process_response
39
+ !error?
40
+ end
41
+
42
+ def process_response
43
+ @response = Hpricot(raw_response)
44
+ if error?
45
+ @error_string = @response.search('error_string').inner_html
46
+ @error_code = @response.search('error_code').inner_html
47
+ else
48
+ @session_id = @response.search('session_id').inner_html
49
+ @start_url = @response.search('start_url').inner_html
50
+ end
51
+ end
52
+
53
+ def error?
54
+ @error ||= (@response.search('error').inner_html == "true")
31
55
  end
32
56
  end
33
57
 
data/spec/moo_spec.rb CHANGED
@@ -41,4 +41,45 @@ describe "a moo order with a minicard" do
41
41
  it "should include the xml for the minicard" do
42
42
  @moo.to_xml.should include(@minicard.to_xml)
43
43
  end
44
+ end
45
+
46
+ describe "processing an XML response for failure" do
47
+ before :each do
48
+ @moo = Moo::Order.new :api_key => "TESTAPIKEY"
49
+ @moo.stub!(:raw_response).and_return('<?xml version="1.0" encoding="UTF-8"?> <moo> <response> <call>build</call> <error>true</error> </response> <payload> <error_code>1</error_code> <error_string>Error importing XML document</error_string> </payload> </moo>')
50
+ @moo.process_response
51
+ end
52
+
53
+ it "should set error? as true" do
54
+ @moo.error?.should be_true
55
+ end
56
+
57
+ it "should set error_string correctly" do
58
+ @moo.error_string.should == "Error importing XML document"
59
+ end
60
+
61
+ it "should set error_code correctly" do
62
+ @moo.error_code.should == "1"
63
+ end
64
+ end
65
+
66
+
67
+ describe "processing an XML response for success" do
68
+ before :each do
69
+ @moo = Moo::Order.new :api_key => "TESTAPIKEY"
70
+ @moo.stub!(:raw_response).and_return('<?xml version="1.0" encoding="UTF-8"?> <moo> <response> <call>build</call> <api_key>3ddbe3c0-17ac-c0a802d2-47bafd19-2473</api_key> </response> <payload> <session_id>d4c7a6d179fca910d67221a57a1bf966</session_id> <start_url>http://www.moo.com/make/designback.php?bid=1&pid=115&SID=d4c7a6d179fca910d67221a57a1bf966</start_url> </payload> </moo>')
71
+ @moo.process_response
72
+ end
73
+
74
+ it "should set error? as false" do
75
+ @moo.error?.should be_false
76
+ end
77
+
78
+ it "should set start_url correctly" do
79
+ @moo.start_url.should == "http://www.moo.com/make/designback.php?bid=1&pid=115&SID=d4c7a6d179fca910d67221a57a1bf966"
80
+ end
81
+
82
+ it "should set session_id correctly" do
83
+ @moo.session_id.should == "d4c7a6d179fca910d67221a57a1bf966"
84
+ end
44
85
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
2
- $:.unshift File.expand_path(File.dirname(__FILE__))
3
2
 
4
3
  require 'rubygems'
5
4
  require 'spec'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: james-ruminant
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Darling
@@ -12,22 +12,13 @@ date: 2008-07-24 00:00:00 -07:00
12
12
  default_executable:
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: ZenTest
15
+ name: hpricot builder
16
16
  version_requirement:
17
17
  version_requirements: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 3.4.2
22
- version:
23
- - !ruby/object:Gem::Dependency
24
- name: hoe
25
- version_requirement:
26
- version_requirements: !ruby/object:Gem::Requirement
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- version: 1.1.7
21
+ version: "0"
31
22
  version:
32
23
  description: A ruby library to regurgitate MOO products
33
24
  email: james@abscond.org
data/spec/all.rb DELETED
@@ -1,4 +0,0 @@
1
- dir = File.dirname(__FILE__)
2
- Dir[File.expand_path("#{dir}/**/*.rb")].uniq.each do |file|
3
- require file
4
- end