authorize_net_reporting 0.0.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.
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .rvmrc
6
+ doc/*
7
+ .yardoc/*
8
+ pkg/*
9
+ .yardopts
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in authorize_net_reporting.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # WORK IN PROGRESS!!!!
2
+ # AuhtorizeNetReporting
3
+
4
+ AuthorizeNetReporting allows you to retrieve Authorize.net transaction details through the [Transaction Details API](http://developer.authorize.net/api/transaction_details/)
5
+
6
+ # Sample Usage
7
+ **Go to [Authorize.net](http://authorize.net) to obtain your key/login**
8
+
9
+ ````ruby
10
+ require 'rubygems'
11
+
12
+ require 'authorize_net_reporting'
13
+
14
+ report = AuthorizeNetReporting::Report.new({ :mode => ['test'|'live'], :key => 'your_api_key', :login => 'your_api_login' })
15
+ ````
16
+
17
+ **All settled batched with a date range**
18
+
19
+
20
+ ````ruby
21
+ #It will default to the last 12 hours if no date range is provided
22
+ report.settled_batch_list({ :first_settlement_date => "2011/04/20", :last_settlement_date => "2011/05/20", :include_statistics => true })
23
+ ````
24
+
25
+ **Statistics for a specific batch**
26
+
27
+ ````ruby
28
+ report.batch_statistics(1049686)
29
+ ````
30
+
31
+ **Data for all transactions in a specified batch**
32
+
33
+ ````ruby
34
+ report.transaction_list(1049686)
35
+ ````
36
+
37
+ **Unsettled Transactions**
38
+
39
+ ````ruby
40
+ report.unsettled_transaction_list
41
+ ````
42
+
43
+ **Detailed information about one specific transaction**
44
+
45
+ ````ruby
46
+ report.transaction_details(2157585857)
47
+ ````
48
+
49
+ # LICENSE:
50
+
51
+ (The MIT License)
52
+
53
+ Copyright (c) 2011:
54
+
55
+ [Jazmin Schroeder](http://jazminschroeder.com)
56
+
57
+ Permission is hereby granted, free of charge, to any person obtaining
58
+ a copy of this software and associated documentation files (the
59
+ 'Software'), to deal in the Software without restriction, including
60
+ without limitation the rights to use, copy, modify, merge, publish,
61
+ distribute, sub license, and/or sell copies of the Software, and to
62
+ permit persons to whom the Software is furnished to do so, subject to
63
+ the following conditions:
64
+
65
+ The above copyright notice and this permission notice shall be
66
+ included in all copies or substantial portions of the Software.
67
+
68
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
69
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
70
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
71
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
72
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
73
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
74
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "authorize_net_reporting/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "authorize_net_reporting"
7
+ s.version = AuthorizeNetReporting::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jazmin Schroeder"]
10
+ s.email = ["jazminschroeder@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Authorize.net Transaction Details API }
13
+ s.description = %q{Retrieve transaction details through the Authorize.net Transaction Details API }
14
+
15
+ s.rubyforge_project = "authorize_net_reporting"
16
+ s.add_dependency 'httparty'
17
+ s.add_dependency 'builder'
18
+ s.add_development_dependency "rspec"
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+ end
@@ -0,0 +1,12 @@
1
+ # Helper methods
2
+ module Common
3
+ # Converts string to underscore
4
+ def underscore(str)
5
+ str.gsub(/(.)([A-Z])/,'\1_\2').downcase
6
+ end
7
+ # Converts string to camelCase format
8
+ def camelize(str)
9
+ str.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
10
+ end
11
+ end
12
+
@@ -0,0 +1,41 @@
1
+ require 'builder'
2
+ require 'httparty'
3
+ require 'date'
4
+ module AuthorizeNetReporting
5
+ # Gateway to connect to Authorize.net web services in order to interact with Reporting API
6
+ class Gateway
7
+ include HTTParty
8
+ headers 'Content-Type' => 'text/xml'
9
+ format :xml
10
+
11
+ # Authorize.net Developer TEST API
12
+ # Note: Authorize.net requires the use of a developer test payment gateway account, you may have to request one from Authorize.net Developer Center
13
+ TEST_URL = "https://apitest.authorize.net/xml/v1/request.api"
14
+
15
+ # Authorize.net Production API
16
+ LIVE_URL = "https://api.authorize.net/xml/v1/request.api"
17
+
18
+ # Authorize.net XML schema
19
+ XMLNS = "AnetApi/xml/v1/schema/AnetApiSchema.xsd"
20
+
21
+ # Make Http request
22
+ # param[String] xml api request
23
+ def send_xml(xml)
24
+ begin
25
+ Gateway.post(api_url, :body => xml)
26
+ rescue
27
+ nil
28
+ end
29
+ end
30
+
31
+ # Using test or live mode?
32
+ def mode
33
+ @mode
34
+ end
35
+
36
+ # AuthorizeNet API Url test/live
37
+ def api_url
38
+ mode.eql?('test') ? TEST_URL : LIVE_URL
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,145 @@
1
+ # AuthorizeNetReporting::Report
2
+ module AuthorizeNetReporting
3
+ # Initialize AuthorizeNetReporting::Report class
4
+ #
5
+ # report = AuthorizeNetReporting::Report.new({ :mode => ['test'|'live'], :key => 'your api key', :login => 'your api_login' })
6
+ class Report < Gateway
7
+ include Common
8
+ # Set API login, password and mode(live/test)
9
+ #
10
+ # AuthorizeNetReporting::Report.new({ :mode => ['test'|'live'], :key => 'your api key', :login => 'your api_login' })
11
+ # @param [Hash] { :mode => ['test'|'live'], :key => 'your api key', :login => 'your api_login' }
12
+ def initialize(options = {})
13
+ requires!(options, :mode, :key, :login)
14
+ @mode, @key, @login = options[:mode], options[:key], options[:login]
15
+ end
16
+
17
+ # Authorize.net API function: getSettledBatchListRequest
18
+ #
19
+ # This function returns Batch ID, Settlement Time, & Settlement State for all settled batches with a range of dates.
20
+ # optionally you can include __:include_statistics => true__ to receive batch statistics by payment type and batch totals.
21
+ #
22
+ # If no dates are specified, then the default is the last 24 hours.
23
+ # @param [Hash] options { :first_settlement_date => "2011/04/20", :last_settlement_date => "2011/05/20", :include_statistics => true }
24
+ def settled_batch_list(options = {})
25
+ process_request(__method__, options)
26
+ end
27
+
28
+ # Authorize.net API function getBatchStatisticsRequest
29
+ #
30
+ # Returns statistics for a single batch, specified by the batch ID.
31
+ # @param [Integer] batch_id
32
+ def batch_statistics(batch_id)
33
+ process_request(__method__, {:batch_id => batch_id})
34
+ end
35
+
36
+ # Authorize.net API function getTransactionListRequest
37
+ #
38
+ # Returns data for all transactions in a specified batch.
39
+ # @param [Integer] batch_id
40
+ def transaction_list(batch_id)
41
+ process_request(__method__, {:batch_id => batch_id})
42
+ end
43
+
44
+ # Authorize.net API function getUnsettledTransactionListRequest
45
+ #
46
+ # Returns data for unsettled transactions. This API function return data for up to 1000 of the most recent transactions
47
+ def unsettled_transaction_list
48
+ process_request(__method__)
49
+ end
50
+
51
+ # Authorize.net API function getTransactionDetailsRequest
52
+ #
53
+ # Get detailed information about one specific transaction
54
+ # @param [Integer] transaction_id, The transaction ID
55
+ def transaction_details(transaction_id)
56
+ process_request(__method__, {:transaction_id => transaction_id})
57
+ end
58
+
59
+ private
60
+ # Process request
61
+ # @param [Symbol] api_function requested, ':settled_batch_list', ':batch_statistics', ':transaction_details', ':transactions_list'
62
+ # @param [Hash] options, options to be passed to API request, '{:batch_id => 12345}'
63
+ def process_request(api_function, options = {})
64
+ xml = build_request(api_function, options)
65
+ response = send_xml(xml)
66
+ handle_response(api_function,response)
67
+ end
68
+
69
+ # Validates that required parameters are present
70
+ # @param [Hash] hash
71
+ # @param [Symbol] params required :mode, :key
72
+ def requires!(hash, *params)
73
+ params.each do |param|
74
+ raise ArgumentError, "Missing Required Parameter #{param}" unless hash.has_key?(param)
75
+ end
76
+ end
77
+
78
+ # Build xml request file for specified API function and options requested
79
+ # @param[String], api_fundtion requested ':settled_batch_list', 'batch_statistics', ':transaction_details', ':transactions_list'
80
+ # @param [Hash] options, options to be passed to API request, '{:batch_id => 12345}'
81
+ def build_request(api_function, options = {})
82
+ api_request = "get#{camelize(api_function.to_s)}Request"
83
+ xml = Builder::XmlMarkup.new(:indent => 2)
84
+ xml.instruct!(:xml, :version => '1.0', :encoding => 'utf-8')
85
+ xml.tag!(api_request, :xmlns => XMLNS) do
86
+ xml.tag!('merchantAuthentication') do
87
+ xml.tag!('name', @login)
88
+ xml.tag!('transactionKey', @key)
89
+ end
90
+ send("build_#{underscore(api_request)}", xml, options)
91
+ end
92
+ end
93
+
94
+ def build_get_settled_batch_list_request(xml, options) #:nodoc:
95
+ xml.tag!("includeStatistics", true) if options[:include_statistics]
96
+ if options[:first_settlement_date] and options[:last_settlement_date]
97
+ xml.tag!("firstSettlementDate", Date.parse(options[:first_settlement_date]).strftime("%Y-%m-%dT00:00:00Z"))
98
+ xml.tag!("lastSettlementDate", Date.parse(options[:last_settlement_date]).strftime("%Y-%m-%dT00:00:00Z"))
99
+ end
100
+ xml.target!
101
+ end
102
+
103
+ def build_get_batch_statistics_request(xml, options) #:nodoc:
104
+ xml.tag!("batchId", options[:batch_id])
105
+ xml.target!
106
+ end
107
+
108
+ def build_get_transaction_list_request(xml, options) #:nodoc:
109
+ xml.tag!("batchId", options[:batch_id])
110
+ xml.target!
111
+ end
112
+
113
+ def build_get_unsettled_transaction_list_request(xml, options) #:nodoc:
114
+ xml.target!
115
+ end
116
+
117
+ def build_get_transaction_details_request(xml, options) #:nodoc:
118
+ xml.tag!('transId', options[:transaction_id])
119
+ xml.target!
120
+ end
121
+
122
+ # Call to Response.parse to handle response if transaction is successful, otherwise raise StandardError
123
+ def handle_response(api_function, response)
124
+ response_message = get_response_message(api_function, response)
125
+ if response_message =~ /successful/
126
+ eval("AuthorizeNetReporting::Response.parse_#{api_function}(#{response.parsed_response})")
127
+ elsif response_message =~ /found/
128
+ ["transaction_details", "batch_statistics"].include?(api_function.to_s) ? nil : []
129
+ else
130
+ raise StandardError, response_message
131
+ end
132
+ end
133
+
134
+ # Extract response message from response for specified api_function
135
+ def get_response_message(api_function, response)
136
+ api_response = "get#{camelize(api_function.to_s)}Response"
137
+ if response.parsed_response[api_response]
138
+ message = response.parsed_response[api_response]["messages"]["message"]["text"]
139
+ else
140
+ message = response.parsed_response["ErrorResponse"]["messages"]["message"]["text"] rescue "Unable to execute transaction"
141
+ end
142
+ message.downcase
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,100 @@
1
+ module AuthorizeNetReporting
2
+ # AuthorizeNetReporting::Response parses the response from Authorize.net API and turns results into objects setting attributes for easy integration
3
+
4
+ class Response
5
+ extend Common
6
+ # Parse response for settled_batch_list
7
+ def self.parse_settled_batch_list(response)
8
+ batch_list = response["getSettledBatchListResponse"]["batchList"]["batch"]
9
+ batches = []
10
+ batch_list.each do |batch|
11
+ statistics = extract_batch_statistics(batch)
12
+ params = to_single_hash(batch)
13
+ params.merge!("statistics" => statistics) unless statistics.blank?
14
+ batches << create_class("Batch", params)
15
+ end
16
+ batches
17
+ end
18
+
19
+ # Parse response for batch_statistics
20
+ def self.parse_batch_statistics(response)
21
+ batch = response["getBatchStatisticsResponse"]["batch"]
22
+ statistics = extract_batch_statistics(batch)
23
+ params = to_single_hash(batch)
24
+ params.merge!("statistics" => statistics) unless statistics.blank?
25
+ create_class("Batch", params)
26
+ end
27
+
28
+ # Parse response for transaction_list
29
+ def self.parse_transaction_list(response)
30
+ transactions = [response["getTransactionListResponse"]["transactions"]["transaction"]].flatten
31
+ transaction_list = []
32
+ transactions.each do |transaction|
33
+ transaction_list << create_class("AuthorizeNetTransaction", to_single_hash(transaction))
34
+ end
35
+ transaction_list
36
+ end
37
+
38
+
39
+ # Parse response unsettled_transaction
40
+ def self.parse_unsettled_transaction_list(response)
41
+ unsettled_transactions = [response["getUnsettledTransactionListResponse"]["transactions"]["transaction"]]
42
+ transactions = []
43
+ unsettled_transactions.each do |transaction|
44
+ transactions << create_class("AuthorizeNetTransaction", to_single_hash(transaction))
45
+ end
46
+ transactions
47
+ end
48
+
49
+
50
+ # Parse response transaction_details
51
+ def self.parse_transaction_details(response)
52
+ params = response["getTransactionDetailsResponse"]["transaction"]
53
+ create_class("AuthorizeNetTransaction", to_single_hash(params))
54
+ end
55
+
56
+ # Handle batch statistics
57
+ def self.extract_batch_statistics(batch)
58
+ statistics = []
59
+ if batch["statistics"]
60
+ batch_statistics = [batch["statistics"]["statistic"]].flatten
61
+ batch_statistics.each do |statistic|
62
+ statistic = statistic.inject({}) {|h, (key,value)| h[underscore(key)] = value; h}
63
+ statistics << statistic
64
+ end
65
+ end
66
+ statistics
67
+ end
68
+
69
+ # Convert response nested hash into a single hash
70
+ # param[Hash] hash
71
+ def self.to_single_hash(hash)
72
+ hash.each do |key, value|
73
+ case value
74
+ when Hash then to_single_hash(value)
75
+ when String, Integer then (@temp_hash||={})[underscore(key)] = value
76
+ end
77
+ end
78
+ @temp_hash
79
+ end
80
+
81
+ #Create objects dinamicaly
82
+ def self.create_class(class_name, params)
83
+ if AuthorizeNetReporting.const_defined?(class_name)
84
+ klass = AuthorizeNetReporting.const_get(class_name)
85
+ else
86
+ klass = AuthorizeNetReporting.const_set(class_name, Class.new)
87
+ klass.class_eval do
88
+ define_method(:initialize) do |params|
89
+ params.each do |key, value|
90
+ self.class.__send__(:attr_accessor, key)
91
+ instance_variable_set("@#{key}", value)
92
+ end
93
+ end
94
+ end
95
+ end
96
+ klass.new(params)
97
+ end
98
+ end
99
+ end
100
+
@@ -0,0 +1,3 @@
1
+ module AuthorizeNetReporting
2
+ VERSION = "0.0.1" #:nodoc:
3
+ end
@@ -0,0 +1,7 @@
1
+ # @author: Jazmin Schroeder
2
+ # July/20011
3
+ require 'authorize_net_reporting/common'
4
+ require 'authorize_net_reporting/gateway'
5
+ require 'authorize_net_reporting/report'
6
+ require 'authorize_net_reporting/response'
7
+
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+ describe AuthorizeNetReporting::Report do
3
+ let(:test_mode) do
4
+ #TEST API LOGIN: 3vk59E5BgM - API KEY:4c8FeAW7ebq5U733
5
+ { :mode => "test", :login=>"3vk59E5BgM", :key => "4c8FeAW7ebq5U733" }
6
+ end
7
+
8
+ let(:live_mode) do
9
+ { :mode => "live", :key=>"key", :login => "login" }
10
+ end
11
+ context "missing requirements" do
12
+ it "should raise exception" do
13
+ lambda { AuthorizeNetReporting::Report.new }.should raise_error(ArgumentError)
14
+ end
15
+ end
16
+ describe "API URL in live mode" do
17
+ subject { AuthorizeNetReporting::Report.new(live_mode) }
18
+ it "should be live url" do
19
+ subject.api_url.should eql(AuthorizeNetReporting::Report::LIVE_URL)
20
+ end
21
+ end
22
+
23
+ before(:each) do
24
+ @authorize_net_reporting = AuthorizeNetReporting::Report.new(test_mode)
25
+ end
26
+
27
+ describe "API URL in test mode" do
28
+ it 'should be test url' do
29
+ @authorize_net_reporting.api_url.should eql(AuthorizeNetReporting::Report::TEST_URL)
30
+ end
31
+ end
32
+
33
+ describe "settled_batch_list" do
34
+ context "when there are not batches settled" do
35
+ it "should return an empty array" do
36
+ @authorize_net_reporting.settled_batch_list.should be_empty
37
+ end
38
+ end
39
+ context "when there are settled batches" do
40
+ it "should return batches" do
41
+ batches = @authorize_net_reporting.settled_batch_list({:first_settlement_date => "2011/04/20", :last_settlement_date => "2011/05/20"})
42
+ batches.size.should eql(4)
43
+ end
44
+ end
45
+ context "when request include statistics" do
46
+ it "should return statistis as an Array" do
47
+ batches = @authorize_net_reporting.settled_batch_list({:first_settlement_date => "2011/04/20", :last_settlement_date => "2011/05/20", :include_statistics => true})
48
+ batches.first.statistics.should be_an_instance_of(Array)
49
+ end
50
+ end
51
+ end
52
+
53
+ describe "batch_statistics" do
54
+ it "should return an array statistics for given batch" do
55
+ @authorize_net_reporting.batch_statistics(1049686).statistics.should be_an_instance_of(Array)
56
+ end
57
+ end
58
+
59
+ describe "transactions_list" do
60
+ it "should return all transactions in a specified batch" do
61
+ transactions = @authorize_net_reporting.transaction_list(1049686)
62
+ transactions.size.should eql(4)
63
+ end
64
+ end
65
+
66
+ describe "unsettled_transaction_list" do
67
+ it "should return unsettled transactions" do
68
+ transactions = @authorize_net_reporting.unsettled_transaction_list
69
+ transactions.should be_an_instance_of(Array)
70
+ end
71
+ end
72
+
73
+ describe "transaction_details" do
74
+ it "should return transaction if transaction_exists" do
75
+ transaction = @authorize_net_reporting.transaction_details(2157585857)
76
+ transaction.should be_an_instance_of(AuthorizeNetReporting::AuthorizeNetTransaction)
77
+ end
78
+ it "should return nil if transaction doesn't exist" do
79
+ @authorize_net_reporting.transaction_details(0).should be_nil
80
+ end
81
+ end
82
+ end
@@ -0,0 +1 @@
1
+ require 'authorize_net_reporting'
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: authorize_net_reporting
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jazmin Schroeder
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-04 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: httparty
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: builder
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id003
49
+ description: "Retrieve transaction details through the Authorize.net Transaction Details API "
50
+ email:
51
+ - jazminschroeder@gmail.com
52
+ executables: []
53
+
54
+ extensions: []
55
+
56
+ extra_rdoc_files: []
57
+
58
+ files:
59
+ - .gitignore
60
+ - .rspec
61
+ - Gemfile
62
+ - README.md
63
+ - Rakefile
64
+ - authorize_net_reporting.gemspec
65
+ - lib/authorize_net_reporting.rb
66
+ - lib/authorize_net_reporting/common.rb
67
+ - lib/authorize_net_reporting/gateway.rb
68
+ - lib/authorize_net_reporting/report.rb
69
+ - lib/authorize_net_reporting/response.rb
70
+ - lib/authorize_net_reporting/version.rb
71
+ - spec/authorize_net_reporting_spec.rb
72
+ - spec/spec_helper.rb
73
+ has_rdoc: true
74
+ homepage: ""
75
+ licenses: []
76
+
77
+ post_install_message:
78
+ rdoc_options: []
79
+
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ requirements: []
95
+
96
+ rubyforge_project: authorize_net_reporting
97
+ rubygems_version: 1.5.0
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: Authorize.net Transaction Details API
101
+ test_files: []
102
+