oas 1.2.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,47 +1,89 @@
1
- OAS Ruby Client [![Build Status](https://secure.travis-ci.org/realmedia/oas-ruby-client.png)][travis] [![Dependency Status](https://gemnasium.com/realmedia/oas-ruby-client.png?travis)][gemnasium]
2
- ================
1
+ # OAS Ruby Client [![Build Status](https://secure.travis-ci.org/realmedia/oas-ruby-client.png)][travis] [![Dependency Status](https://gemnasium.com/realmedia/oas-ruby-client.png?travis)][gemnasium]
3
2
  Ruby client for the OpenAdstream API
4
3
 
5
4
  [travis]: http://travis-ci.org/realmedia/oas-ruby-client
6
5
  [gemnasium]: https://gemnasium.com/realmedia/oas-ruby-client
7
6
 
8
- Installation
9
- ------------
7
+ ## Installation
10
8
 
11
9
  `oas` is available through [Rubygems](http://rubygems.org/gems/oas) and can be installed via:
12
10
 
13
11
  gem install oas
14
12
 
15
- Usage Example
16
- --------------
17
- require "oas"
18
- require "pp"
19
-
20
- # Configure OAS
21
- OAS.configure do |config|
22
- config.endpoint = OAS_ENDPOINT
23
- config.account = OAS_ACCOUNT
24
- config.username = OAS_USERNAME
25
- config.password = OAS_PASSWORD
26
- end
27
-
28
- # Build OAS message (Ex: Nokogiri)
29
- msg = Nokogiri::XML::Builder.new(:encoding => "utf-8") do |xml|
30
- xml.AdXML {
31
- xml.Request(:type => 'Site') {
32
- xml.Database(:action => 'list') {
33
- xml.SearchCriteria {
34
- xml.Id "%"
35
- }
36
- }
37
- }
13
+ ## Usage
14
+
15
+ Applications that make requests on behalf a single user to a single account can pass configuration options as a block to the `OAS.configure` method.
16
+
17
+ ```ruby
18
+ OAS.configure do |config|
19
+ config.endpoint = OAS_ENDPOINT
20
+ config.account = OAS_ACCOUNT
21
+ config.username = OAS_USERNAME
22
+ config.password = OAS_PASSWORD
23
+ end
24
+ ```
25
+ Applications that make requests on behalf of multiple users to multiple accounts should avoid using the global configuration and instantiate `OAS::Client` objects. If the endpoint is the same, you can specify it globally.
26
+
27
+ ```ruby
28
+ OAS.configure do |config|
29
+ config.endpoint = OAS_ENDPOINT
30
+ end
31
+
32
+ client = OAS::Client.new(
33
+ :account => "oas_account",
34
+ :username => "oas_username",
35
+ :password => "oas_password"
36
+ )
37
+ ```
38
+ Requests should be created using an `OAS::AdXML` object. Each request type will yield a `Nokogiri::XML::Builder` object.
39
+
40
+ ```ruby
41
+ doc = OAS::AdXML.new
42
+ doc.request do |req|
43
+ req.Advertiser do |xml|
44
+ xml.Database(:action => 'read') {
45
+ xml.Advertiser {
46
+ xml.Id "DPadvtest"
47
+ }
48
+ }
49
+ end
50
+ end
51
+ ```
52
+ Multiple requests can be sent in the same call.
53
+
54
+ ```ruby
55
+ doc = OAS::AdXML.new
56
+ doc.request do |req|
57
+ req.Site do |xml|
58
+ xml.Database(:action => "read") {
59
+ xml.Site {
60
+ xml.Id "247media"
61
+ }
62
+ }
63
+ end
64
+ req.Site do |xml|
65
+ xml.Database(:action => "read") {
66
+ xml.Site {
67
+ xml.Id "realmedia"
38
68
  }
39
- end
69
+ }
70
+ end
71
+ end
72
+ ```
73
+ Executing the request
40
74
 
41
- # Make request
42
- pp OAS.client.request(msg).to_hash
75
+ ```ruby
76
+ adxml = OAS.execute(doc) # or client.execute(doc)
77
+ adxml.each_response do |res|
78
+ if res.success?
79
+ # res.to_hash
80
+ else
81
+ # res.error_code
82
+ # res.error_text
83
+ end
84
+ end
85
+ ```
43
86
 
44
- Copyright
45
- ---------
87
+ ## Copyright
46
88
  Copyright (c) 2011 Realmedia Latin America.
47
89
  See [LICENSE](https://github.com/realmedia/oas-ruby-client/blob/master/LICENSE) for details.
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ Bundler::GemHelper.install_tasks
3
3
 
4
4
  require 'rake/testtask'
5
5
  Rake::TestTask.new do |t|
6
- t.libs = ["test"]
6
+ t.libs = ["lib","test"]
7
7
  t.verbose = true
8
8
  t.test_files = FileList['test/**/test_*.rb']
9
9
  end
data/lib/oas.rb CHANGED
@@ -1,11 +1,14 @@
1
+ require 'oas/error'
1
2
  require 'oas/configuration'
2
3
  require 'oas/client'
4
+ require 'oas/version'
3
5
 
4
6
  module OAS
5
7
  extend Configuration
6
8
 
7
9
  def self.client(options={})
8
- @client ||= OAS::Client.new(options)
10
+ @client = OAS::Client.new(options) unless defined?(@client)
11
+ @client
9
12
  end
10
13
 
11
14
  def self.method_missing(method, *args, &block)
data/lib/oas/adxml.rb ADDED
@@ -0,0 +1,75 @@
1
+ require 'nokogiri'
2
+
3
+ module OAS
4
+ class AdXML
5
+ def self.parse(str)
6
+ new Nokogiri.XML(str)
7
+ end
8
+
9
+ module Utils
10
+ def parser
11
+ @parser ||= Nori.new(:advanced_typecasting => false, :convert_tags_to => lambda { |tag| tag.to_sym })
12
+ end
13
+ attr_writer :parser
14
+
15
+ def to_s
16
+ @doc.to_xml
17
+ end
18
+ alias_method :to_xml, :to_s
19
+
20
+ def to_hash
21
+ @hash ||= parser.parse(@doc.to_xml)
22
+ end
23
+ end
24
+
25
+ class Request
26
+ def initialize(root)
27
+ @root = root
28
+ end
29
+
30
+ def method_missing method, *args, &block # :nodoc:
31
+ Nokogiri::XML::Builder.with(@root) do |xml|
32
+ xml.Request(:type => method.to_s) { |xml| block.call(xml) if block_given? }
33
+ end
34
+ end
35
+ end
36
+
37
+ class Response
38
+ include Utils
39
+
40
+ attr_reader :error_code
41
+ attr_reader :error_text
42
+
43
+ def initialize(doc)
44
+ @doc = doc
45
+ @error_code = @error_text = nil
46
+ error = @doc.xpath('/Response//Exception').first rescue nil
47
+ if error
48
+ @error_code = error['errorCode'].to_i
49
+ @error_text = error.text
50
+ end
51
+ end
52
+
53
+ def success?
54
+ !error_code
55
+ end
56
+ end
57
+
58
+ include Utils
59
+
60
+ def initialize(doc = nil)
61
+ @doc = doc
62
+ @doc = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') { |xml| xml.AdXML }.doc if @doc.nil?
63
+ end
64
+
65
+ def request
66
+ yield Request.new(@doc.root)
67
+ end
68
+
69
+ def each_response
70
+ @doc.xpath('/AdXML/Response').each do |node|
71
+ yield Response.new(node)
72
+ end
73
+ end
74
+ end
75
+ end
data/lib/oas/client.rb CHANGED
@@ -1,39 +1,53 @@
1
- require 'httpclient'
1
+ require 'oas/adxml'
2
2
  require 'savon'
3
- require 'oas/response'
4
3
 
5
4
  module OAS
6
- class Client
5
+ class Client
7
6
  attr_accessor *Configuration::VALID_OPTIONS_KEYS
8
- attr_accessor :driver
9
7
 
10
- def initialize(options={})
11
- options = OAS.options.merge(options)
8
+ def initialize(opts={})
9
+ options = OAS.options.merge(opts)
12
10
  Configuration::VALID_OPTIONS_KEYS.each do |key|
13
11
  send("#{key}=", options[key])
14
12
  end
15
- end
16
13
 
17
- def driver
18
- @driver ||= Savon::Client.new do |client|
14
+ @savon = Savon::Client.new do |client|
19
15
  client.endpoint endpoint.to_s
20
16
  client.namespace "http://api.oas.tfsm.com/"
21
17
  client.namespace_identifier :n1
22
18
  client.convert_request_keys_to :camelcase
23
- client.log false
19
+ client.logger logger
20
+ client.log !!logger
24
21
  end
25
22
  end
26
23
 
27
- def request(msg)
28
- doc = msg.respond_to?(:to_xml) ? msg.to_xml : msg
29
- res = driver.call :oas_xml_request, message: Hash["String_1", account.to_s, "String_2", username.to_s, "String_3", password.to_s, "String_4", doc.to_s]
30
- OAS::Response.new(res.body[:oas_xml_request_response][:result])
31
- rescue Savon::SOAPFault => e
32
- raise e.to_hash[:fault][:faultstring]
24
+ def execute(request)
25
+ response = @savon.call :oas_xml_request, message: Hash["String_1", account.to_s, "String_2", username.to_s, "String_3", password.to_s, "String_4", request.to_xml.to_s]
26
+ OAS::AdXML.parse response.body[:oas_xml_request_response][:result]
33
27
  rescue Savon::HTTPError => e
34
- raise "Something went wrong. HTTP #{e.http.code}"
35
- rescue Savon::InvalidResponseError
36
- raise "Invalid server response"
28
+ _raise_http_error!(e)
29
+ rescue Savon::InvalidResponseError => e
30
+ raise OAS::Error.new(e.message)
31
+ end
32
+
33
+ private
34
+
35
+ def _raise_http_error!(e)
36
+ case e.http.code
37
+ when 403
38
+ raise OAS::Error::HTTP::Forbidden.new
39
+ when 500
40
+ raise OAS::Error::HTTP::InternalServerError.new
41
+ when 502
42
+ raise OAS::Error::HTTP::BadGateway.new
43
+ when 503
44
+ raise OAS::Error::HTTP::ServiceUnavailable.new
45
+ when 504
46
+ raise OAS::Error::HTTP::GatewayTimeout.new
47
+ else
48
+ raise OAS::Error::HTTP.new(e.to_s)
49
+ end
37
50
  end
51
+
38
52
  end
39
53
  end
@@ -5,7 +5,8 @@ module OAS
5
5
  :endpoint,
6
6
  :account,
7
7
  :username,
8
- :password].freeze
8
+ :password,
9
+ :logger].freeze
9
10
 
10
11
  # The endpoint that will be used to connect if none is set
11
12
  DEFAULT_ENDPOINT = "https://oas.realmediadigital.com/oasapi/OaxApi".freeze
@@ -40,6 +41,7 @@ module OAS
40
41
  self.account = DEFAULT_ACCOUNT
41
42
  self.username = DEFAULT_USERNAME
42
43
  self.password = DEFAULT_PASSWORD
44
+ self.logger = nil
43
45
  end
44
46
  end
45
- end
47
+ end
data/lib/oas/error.rb ADDED
@@ -0,0 +1,9 @@
1
+ module OAS
2
+ class Error < StandardError; end
3
+ class Error::HTTP < Error; end
4
+ class Error::HTTP::Forbidden < Error::HTTP; end
5
+ class Error::HTTP::BadGateway < Error::HTTP; end
6
+ class Error::HTTP::GatewayTimeout < Error::HTTP; end
7
+ class Error::HTTP::InternalServerError < Error::HTTP; end
8
+ class Error::HTTP::ServiceUnavailable < Error::HTTP; end
9
+ end
data/lib/oas/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OAS
2
- VERSION = "1.2.0"
2
+ VERSION = '2.1.0'
3
3
  end
data/oas.gemspec CHANGED
@@ -19,12 +19,10 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency "httpclient", "~> 2.3"
23
- s.add_dependency "savon", "~> 2.0"
24
- s.add_dependency "nori", "~> 2.0"
22
+ s.add_dependency "nokogiri", "~> 1.5"
23
+ s.add_dependency "nori", "~> 2.0"
24
+ s.add_dependency "savon", "~> 2.0"
25
25
 
26
- s.add_development_dependency "minitest", "~> 4.3"
26
+ s.add_development_dependency "rake", "~> 0.9"
27
27
  s.add_development_dependency "webmock", "~> 1.9"
28
- s.add_development_dependency "rake"
29
- s.add_development_dependency "simplecov"
30
28
  end
data/test/helper.rb CHANGED
@@ -1,6 +1,2 @@
1
- require 'simplecov'
2
- SimpleCov.start
3
-
4
1
  require 'minitest/autorun'
5
- require 'minitest/pride'
6
2
  require 'oas'
@@ -0,0 +1,69 @@
1
+ require 'helper'
2
+
3
+ class TestAdXML < MiniTest::Unit::TestCase
4
+ def setup
5
+ @doc = OAS::AdXML.new
6
+ end
7
+
8
+ def test_set_encoding
9
+ assert_match 'UTF-8', @doc.to_xml
10
+ end
11
+
12
+ def test_set_root_node
13
+ new_doc = Nokogiri.XML @doc.to_xml
14
+ assert_equal 'AdXML', new_doc.root.name
15
+ end
16
+
17
+ def test_convert_to_hash
18
+ assert @doc.to_hash.has_key?(:AdXML)
19
+ end
20
+
21
+ def test_adxml_parsing
22
+ assert_kind_of OAS::AdXML, OAS::AdXML.parse("<AdXML></AdXML>")
23
+ end
24
+
25
+ def test_response_iterator
26
+ str = <<-EOXML
27
+ <AdXML>
28
+ <Response>
29
+ <Campaign/>
30
+ </Response>
31
+ <Response>
32
+ <Campaign/>
33
+ </Response>
34
+ </AdXML>
35
+ EOXML
36
+ responses = []
37
+ doc = OAS::AdXML.new Nokogiri.XML(str)
38
+ doc.each_response do |res|
39
+ responses << res
40
+ assert_kind_of OAS::AdXML::Response, res
41
+ assert_equal 'Response', Nokogiri.XML(res.to_xml).root.name
42
+ end
43
+ assert_equal 2, responses.size
44
+ end
45
+
46
+ def test_request_builder
47
+ @doc.request do |req|
48
+ req.Site do |xml|
49
+ assert_kind_of Nokogiri::XML::Builder, xml
50
+ end
51
+ end
52
+
53
+ new_doc = Nokogiri.XML(@doc.to_xml)
54
+ assert_equal 1, new_doc.xpath("/AdXML/Request[@type='Site']").length
55
+ end
56
+
57
+ def test_chain_request_blocks
58
+ @doc.request do |req|
59
+ req.Site
60
+ req.Site
61
+ end
62
+ @doc.request do |req|
63
+ req.Campaign
64
+ end
65
+
66
+ new_doc = Nokogiri.XML(@doc.to_xml)
67
+ assert_equal 3, new_doc.xpath('/AdXML/Request').length
68
+ end
69
+ end
data/test/test_client.rb CHANGED
@@ -5,45 +5,87 @@ class TestClient < MiniTest::Unit::TestCase
5
5
  include WebMock::API
6
6
 
7
7
  def setup
8
- OAS.reset!
9
- @client = OAS::Client.new
8
+ @client = OAS::Client.new(
9
+ :account => "test_account",
10
+ :username => "test_user",
11
+ :password => "test_password"
12
+ )
13
+ @request = Class.new do
14
+ def to_xml; '<AdXML></AdXML>' end
15
+ end.new
10
16
  end
11
17
 
12
18
  def teardown
19
+ OAS.reset!
13
20
  WebMock.reset!
14
21
  end
15
22
 
16
23
  def fixture(file)
17
- File.new(File.join(File.expand_path("../fixtures", __FILE__), file))
24
+ File.new(File.join(File.expand_path('../fixtures', __FILE__), file))
18
25
  end
19
26
 
20
- def test_call_with_string_xml
21
- res = Class.new do
22
- def body; { :oas_xml_request_response => { :result => "<AdXML></AdXML>" } } end
23
- end.new
24
- @client.driver = MiniTest::Mock.new
25
- @client.driver.expect :call, res, [:oas_xml_request, message: Hash["String_1", @client.account.to_s, "String_2", @client.username.to_s, "String_3", @client.password.to_s, "String_4", "<AdXML></AdXML>"]]
26
- @client.request("<AdXML></AdXML>")
27
- @client.driver.verify
27
+ def test_execute_request
28
+ stub_request(:post, @client.endpoint.to_s)
29
+ .to_return(:status => 200, :body => fixture('response.xml'))
30
+
31
+ assert_kind_of OAS::AdXML, @client.execute(@request)
32
+ assert_requested(:post, @client.endpoint.to_s, :times => 1) do |req|
33
+ doc = Nokogiri.XML(req.body)
34
+ node = doc.xpath("/env:Envelope/env:Body/n1:OasXmlRequest").first
35
+ return false unless !!node
36
+ node.xpath("./String_1").first.text == @client.account &&
37
+ node.xpath("./String_2").first.text == @client.username &&
38
+ node.xpath("./String_3").first.text == @client.password &&
39
+ node.xpath("./String_4").first.text == @request.to_xml
40
+ end
28
41
  end
29
42
 
30
- def test_call_with_object_respond_to_xml
31
- doc = Class.new do
32
- def to_xml; "<AdXML></AdXML>" end
33
- end.new
34
- res = Class.new do
35
- def body; { :oas_xml_request_response => { :result => "<AdXML></AdXML>" } } end
36
- end.new
37
- @client.driver = MiniTest::Mock.new
38
- @client.driver.expect :call, res, [:oas_xml_request, message: Hash["String_1", @client.account.to_s, "String_2", @client.username.to_s, "String_3", @client.password.to_s, "String_4", doc.to_xml]]
39
- @client.request(doc)
40
- @client.driver.verify
43
+
44
+ def test_raise_http_error
45
+ stub_request(:post, @client.endpoint.to_s).to_return(:status => 599)
46
+
47
+ assert_raises OAS::Error::HTTP do
48
+ @client.execute(@request)
49
+ end
41
50
  end
42
51
 
43
- def test_correctly_parse_soap_response
44
- stub_request(:post, @client.endpoint.to_s)
45
- .to_return(:status => 200, :body => fixture("successful_response.xml"))
46
- res = @client.request("<AdXML></AdXML>")
47
- assert_kind_of OAS::Response, res
52
+ def test_raise_http_forbidden_error
53
+ stub_request(:post, @client.endpoint.to_s).to_return(:status => 403)
54
+
55
+ assert_raises OAS::Error::HTTP::Forbidden do
56
+ @client.execute(@request)
57
+ end
58
+ end
59
+
60
+ def test_raise_http_internal_server_error_error
61
+ stub_request(:post, @client.endpoint.to_s).to_return(:status => 500)
62
+
63
+ assert_raises OAS::Error::HTTP::InternalServerError do
64
+ @client.execute(@request)
65
+ end
66
+ end
67
+
68
+ def test_raise_http_bad_gateway_error
69
+ stub_request(:post, @client.endpoint.to_s).to_return(:status => 502)
70
+
71
+ assert_raises OAS::Error::HTTP::BadGateway do
72
+ @client.execute(@request)
73
+ end
74
+ end
75
+
76
+ def test_raise_http_service_unavailable_error
77
+ stub_request(:post, @client.endpoint.to_s).to_return(:status => 503)
78
+
79
+ assert_raises OAS::Error::HTTP::ServiceUnavailable do
80
+ @client.execute(@request)
81
+ end
82
+ end
83
+
84
+ def test_raise_http_gateway_timeout_error
85
+ stub_request(:post, @client.endpoint.to_s).to_return(:status => 504)
86
+
87
+ assert_raises OAS::Error::HTTP::GatewayTimeout do
88
+ @client.execute(@request)
89
+ end
48
90
  end
49
91
  end
@@ -0,0 +1,12 @@
1
+ require 'helper'
2
+
3
+ class TestConfiguration < MiniTest::Unit::TestCase
4
+ def test_should_set_configuration_keys
5
+ OAS::Configuration::VALID_OPTIONS_KEYS.each do |key|
6
+ OAS.configure do |config|
7
+ config.send("#{key}=", key)
8
+ assert_equal key, OAS.send(key)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,22 +1,34 @@
1
1
  require 'helper'
2
2
 
3
- class TestResponse < MiniTest::Unit::TestCase
4
- def setup
5
- doc = <<EOF
6
- <AdXML>
7
- <Response>
8
- </Response>
9
- </AdXML>
10
- EOF
11
- @response = OAS::Response.new(doc)
3
+ class TestAdXMLResponse < MiniTest::Unit::TestCase
4
+ def test_successful_response
5
+ node = <<-EOXML
6
+ <Response>
7
+ <Campaign>
8
+ <Overview>
9
+ <Id>DPtestcampaign-01</Id>
10
+ </Overview>
11
+ </Campaign>
12
+ </Response>
13
+ EOXML
14
+ res = OAS::AdXML::Response.new Nokogiri.XML(node)
15
+ assert res.to_hash.has_key?(:Response)
16
+ assert res.success?
17
+ assert_nil res.error_code
18
+ assert_nil res.error_text
12
19
  end
13
20
 
14
- def test_convert_to_hash
15
- assert @response.to_hash.has_key?(:AdXML)
16
- assert @response.to_hash[:AdXML].has_key?(:Response)
17
- end
18
-
19
- def test_convert_to_string_without_spaces_and_line_breaks
20
- assert_equal "<AdXML><Response></Response></AdXML>", @response.to_s
21
+ def test_unsuccessful_response
22
+ node = <<-EOXML
23
+ <Response>
24
+ <Campaign>
25
+ <Exception errorCode="512">Campaign ID already exists in Open AdStream</Exception>
26
+ </Campaign>
27
+ </Response>
28
+ EOXML
29
+ res = OAS::AdXML::Response.new Nokogiri.XML(node)
30
+ refute res.success?
31
+ assert_equal 512, res.error_code
32
+ assert_equal 'Campaign ID already exists in Open AdStream', res.error_text
21
33
  end
22
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oas
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,16 +9,16 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-03 00:00:00.000000000 Z
12
+ date: 2013-07-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: httpclient
15
+ name: nokogiri
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '2.3'
21
+ version: '1.5'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,9 +26,9 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: '2.3'
29
+ version: '1.5'
30
30
  - !ruby/object:Gem::Dependency
31
- name: savon
31
+ name: nori
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
@@ -44,7 +44,7 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  version: '2.0'
46
46
  - !ruby/object:Gem::Dependency
47
- name: nori
47
+ name: savon
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
@@ -60,13 +60,13 @@ dependencies:
60
60
  - !ruby/object:Gem::Version
61
61
  version: '2.0'
62
62
  - !ruby/object:Gem::Dependency
63
- name: minitest
63
+ name: rake
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: '4.3'
69
+ version: '0.9'
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: '4.3'
77
+ version: '0.9'
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: webmock
80
80
  requirement: !ruby/object:Gem::Requirement
@@ -91,38 +91,6 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: '1.9'
94
- - !ruby/object:Gem::Dependency
95
- name: rake
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: simplecov
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
94
  description: Ruby client for the OpenAdstream API
127
95
  email:
128
96
  - damian.caruso@gmail.com
@@ -137,15 +105,17 @@ files:
137
105
  - README.md
138
106
  - Rakefile
139
107
  - lib/oas.rb
108
+ - lib/oas/adxml.rb
140
109
  - lib/oas/client.rb
141
110
  - lib/oas/configuration.rb
142
- - lib/oas/response.rb
111
+ - lib/oas/error.rb
143
112
  - lib/oas/version.rb
144
113
  - oas.gemspec
145
- - test/fixtures/successful_response.xml
114
+ - test/fixtures/response.xml
146
115
  - test/helper.rb
116
+ - test/test_adxml.rb
147
117
  - test/test_client.rb
148
- - test/test_oas.rb
118
+ - test/test_configuration.rb
149
119
  - test/test_response.rb
150
120
  homepage: http://github.com/realmedia/oas-ruby-client
151
121
  licenses: []
@@ -159,18 +129,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
129
  - - ! '>='
160
130
  - !ruby/object:Gem::Version
161
131
  version: '0'
162
- segments:
163
- - 0
164
- hash: 67502451
165
132
  required_rubygems_version: !ruby/object:Gem::Requirement
166
133
  none: false
167
134
  requirements:
168
135
  - - ! '>='
169
136
  - !ruby/object:Gem::Version
170
137
  version: '0'
171
- segments:
172
- - 0
173
- hash: 67502451
174
138
  requirements: []
175
139
  rubyforge_project: oas
176
140
  rubygems_version: 1.8.24
@@ -178,3 +142,4 @@ signing_key:
178
142
  specification_version: 3
179
143
  summary: Ruby client for the OpenAdstream API
180
144
  test_files: []
145
+ has_rdoc:
data/lib/oas/response.rb DELETED
@@ -1,31 +0,0 @@
1
- require 'nori'
2
-
3
- module OAS
4
- class Response
5
- attr_writer :parser
6
-
7
- def initialize(doc)
8
- @doc = doc
9
- end
10
-
11
- def parser
12
- @parser ||= Nori.new(:advanced_typecasting => false, :convert_tags_to => lambda { |tag| tag.to_sym })
13
- end
14
-
15
- def to_s
16
- raw
17
- end
18
-
19
- def raw
20
- @raw ||= begin
21
- raw = ""
22
- @doc.each_line { |l| raw << l.strip }
23
- raw
24
- end
25
- end
26
-
27
- def to_hash
28
- parser.parse(raw)
29
- end
30
- end
31
- end
data/test/test_oas.rb DELETED
@@ -1,15 +0,0 @@
1
- require 'helper'
2
-
3
- class TestOas < MiniTest::Unit::TestCase
4
-
5
- describe "#configure" do
6
- OAS::Configuration::VALID_OPTIONS_KEYS.each do |key|
7
- it "should set the #{key}" do
8
- OAS.configure do |config|
9
- config.send("#{key}=", key)
10
- assert_equal key, OAS.send(key)
11
- end
12
- end
13
- end
14
- end
15
- end