soapy_cake 1.15.0 → 1.16.0
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.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/lib/soapy_cake.rb +2 -3
- data/lib/soapy_cake/client.rb +9 -7
- data/lib/soapy_cake/request.rb +11 -8
- data/lib/soapy_cake/response.rb +4 -4
- data/lib/soapy_cake/response_value.rb +5 -7
- data/lib/soapy_cake/time_converter.rb +35 -0
- data/lib/soapy_cake/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/SoapyCake_Admin/creates_an_affiliate_and_returns_the_ID.yml +1 -1
- data/spec/fixtures/vcr_cassettes/SoapyCake_Admin/does_not_parse_a_transaction_id_as_an_integer.yml +2 -2
- data/spec/fixtures/vcr_cassettes/SoapyCake_Admin/returns_a_clicks_report_with_a_defined_time_range.yml +2 -2
- data/spec/fixtures/vcr_cassettes/SoapyCake_AdminTrack/_mass_conversion_insert/inserts_conversions.yml +1 -1
- data/spec/integration/soapy_cake/admin_spec.rb +5 -2
- data/spec/lib/soapy_cake/request_spec.rb +6 -0
- data/spec/lib/soapy_cake/response_value_spec.rb +19 -22
- data/spec/lib/soapy_cake/time_converter_spec.rb +37 -0
- data/spec/spec_helper.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27d71b226fedab0e2e0d7da24e6ade998e9468c1
|
4
|
+
data.tar.gz: ef9dbece2ee345c0c89dcbb8fa2a49cdcd46092b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49718d7793da7f77650c1df7bb034e76334d3b86c60450fb435f8309d480b9fba2d2be98cfc8e20e20c0912978482a8b41b530789d83f9b3ae732e03a9f52c29
|
7
|
+
data.tar.gz: 80f82b060367a774ee40971ab9d10ec7d40135a05cabd6fc4cccc57a08735ee88b49bb1a6b5eb758e1a458a9b2b991f27b45ea5a7a17c791d031ecdff4b476fd
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage Examples
|
25
25
|
|
26
|
-
First we assume that you set the `CAKE_DOMAIN`, `CAKE_API_KEY` and `
|
26
|
+
First we assume that you set the `CAKE_DOMAIN`, `CAKE_API_KEY` and `CAKE_TIME_ZONE`
|
27
27
|
environment variables.
|
28
28
|
|
29
29
|
Export all advertisers:
|
@@ -44,6 +44,12 @@ SoapyCake::Admin.new.affiliate_summary(
|
|
44
44
|
If you are interested in how we map methods to api endpoints take a look
|
45
45
|
at [api_versions.yml](api_versions.yml).
|
46
46
|
|
47
|
+
## Time/Date Handling
|
48
|
+
- Define `CAKE_TIME_ZONE`
|
49
|
+
- Specify dates with any timezone in requests (will be converted to the correct CAKE timezone)
|
50
|
+
- `Date` objects in requests will be treated as UTC (just like `.to_datetime` would do)
|
51
|
+
- Responses contain UTC dates which can be converted however you like
|
52
|
+
|
47
53
|
## Contributing
|
48
54
|
|
49
55
|
1. Fork it (https://github.com/ad2games/soapy_cake/fork)
|
data/lib/soapy_cake.rb
CHANGED
@@ -2,15 +2,14 @@ require 'nokogiri'
|
|
2
2
|
require 'saxerator'
|
3
3
|
require 'httparty'
|
4
4
|
require 'active_support/core_ext/hash/reverse_merge'
|
5
|
-
require 'active_support/core_ext/date'
|
6
|
-
require 'active_support/core_ext/numeric/time'
|
7
|
-
require 'active_support/core_ext/time/zones'
|
8
5
|
require 'active_support/core_ext/hash/transform_values'
|
6
|
+
require 'active_support/time'
|
9
7
|
|
10
8
|
require 'soapy_cake/version'
|
11
9
|
require 'soapy_cake/const'
|
12
10
|
require 'soapy_cake/helper'
|
13
11
|
require 'soapy_cake/error'
|
12
|
+
require 'soapy_cake/time_converter'
|
14
13
|
require 'soapy_cake/request'
|
15
14
|
require 'soapy_cake/response'
|
16
15
|
require 'soapy_cake/response_value'
|
data/lib/soapy_cake/client.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
module SoapyCake
|
2
2
|
class Client
|
3
|
-
attr_reader :domain, :api_key, :
|
3
|
+
attr_reader :domain, :api_key, :time_converter
|
4
4
|
|
5
5
|
def initialize(opts = {})
|
6
6
|
@domain = opts.fetch(:domain, ENV['CAKE_DOMAIN']) || fail(Error, 'Cake domain missing')
|
7
7
|
@api_key = opts.fetch(:api_key, ENV['CAKE_API_KEY']) || fail(Error, 'Cake API key missing')
|
8
|
-
|
9
|
-
|
8
|
+
|
9
|
+
time_offset = opts.fetch(:time_offset, ENV['CAKE_TIME_OFFSET'])
|
10
|
+
time_zone = opts.fetch(:time_zone, ENV['CAKE_TIME_ZONE'])
|
11
|
+
@time_converter = TimeConverter.new(time_zone, time_offset)
|
12
|
+
|
10
13
|
@opts = opts
|
11
14
|
end
|
12
15
|
|
@@ -20,11 +23,10 @@ module SoapyCake
|
|
20
23
|
|
21
24
|
def run(request)
|
22
25
|
request.api_key = api_key
|
23
|
-
request.
|
26
|
+
request.time_converter = time_converter
|
24
27
|
|
25
|
-
Response
|
26
|
-
|
27
|
-
.public_send(:"to_#{xml_response? ? 'xml' : 'enum'}")
|
28
|
+
response = Response.new(response_body(request), request.short_response?, time_converter)
|
29
|
+
xml_response? ? response.to_xml : response.to_enum
|
28
30
|
end
|
29
31
|
|
30
32
|
private
|
data/lib/soapy_cake/request.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module SoapyCake
|
2
2
|
class Request
|
3
|
-
|
3
|
+
DATE_CLASSES = [Date, Time, DateTime].freeze
|
4
|
+
|
5
|
+
attr_accessor :api_key, :time_converter
|
4
6
|
attr_reader :role, :service, :method, :opts
|
5
7
|
|
6
8
|
def initialize(role, service, method, opts = {})
|
@@ -40,7 +42,7 @@ module SoapyCake
|
|
40
42
|
def xml_params(xml)
|
41
43
|
xml.api_key api_key
|
42
44
|
opts.each do |k, v|
|
43
|
-
xml.public_send(k.to_sym, format_param(v))
|
45
|
+
xml.public_send(k.to_sym, format_param(k, v))
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
@@ -51,13 +53,14 @@ module SoapyCake
|
|
51
53
|
}
|
52
54
|
end
|
53
55
|
|
54
|
-
def format_param(value)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
value
|
56
|
+
def format_param(key, value)
|
57
|
+
return time_converter.to_cake(value) if DATE_CLASSES.include?(value.class)
|
58
|
+
|
59
|
+
if key.to_s.end_with?('_date')
|
60
|
+
fail Error, "You need to use a Time/DateTime/Date object for '#{key}'"
|
60
61
|
end
|
62
|
+
|
63
|
+
value
|
61
64
|
end
|
62
65
|
|
63
66
|
def version
|
data/lib/soapy_cake/response.rb
CHANGED
@@ -5,12 +5,12 @@ module SoapyCake
|
|
5
5
|
SHORT_ELEMENT_DEPTH = 3
|
6
6
|
ELEMENTS_DEPTH = 5
|
7
7
|
|
8
|
-
attr_reader :body, :short_response, :
|
8
|
+
attr_reader :body, :short_response, :time_converter
|
9
9
|
|
10
|
-
def initialize(body, short_response,
|
10
|
+
def initialize(body, short_response, time_converter)
|
11
11
|
@body = body
|
12
12
|
@short_response = short_response
|
13
|
-
@
|
13
|
+
@time_converter = time_converter
|
14
14
|
end
|
15
15
|
|
16
16
|
def to_enum
|
@@ -37,7 +37,7 @@ module SoapyCake
|
|
37
37
|
|
38
38
|
def typed_element(element)
|
39
39
|
walk_tree(element) do |value, key|
|
40
|
-
ResponseValue.new(key, value,
|
40
|
+
ResponseValue.new(key, value, time_converter).parse
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -6,17 +6,17 @@ module SoapyCake
|
|
6
6
|
# Known string ids that should not be parsed as integers
|
7
7
|
STRING_IDS = %w(tax_id transaction_id).freeze
|
8
8
|
|
9
|
-
def initialize(key, value,
|
9
|
+
def initialize(key, value, time_converter)
|
10
10
|
@key = key.to_s
|
11
11
|
@value = value
|
12
|
-
@
|
12
|
+
@time_converter = time_converter
|
13
13
|
end
|
14
14
|
|
15
15
|
def parse
|
16
16
|
return parse_int if id? && !string_id?
|
17
17
|
return false if false?
|
18
18
|
return true if true?
|
19
|
-
return
|
19
|
+
return time_converter.from_cake(value) if date?
|
20
20
|
|
21
21
|
# cast to primitive string to get rid of Saxerator string class
|
22
22
|
value.to_s
|
@@ -24,6 +24,8 @@ module SoapyCake
|
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
+
attr_reader :time_converter
|
28
|
+
|
27
29
|
def false?
|
28
30
|
value == 'false'
|
29
31
|
end
|
@@ -54,9 +56,5 @@ module SoapyCake
|
|
54
56
|
end
|
55
57
|
value.to_i
|
56
58
|
end
|
57
|
-
|
58
|
-
def parse_date
|
59
|
-
DateTime.parse(value + format('%+03d:00', @opts[:time_offset].to_i))
|
60
|
-
end
|
61
59
|
end
|
62
60
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module SoapyCake
|
2
|
+
class TimeConverter
|
3
|
+
def initialize(time_zone, time_offset = nil)
|
4
|
+
if time_offset
|
5
|
+
self.class.print_deprecation_warning
|
6
|
+
|
7
|
+
# Etc/GMT time zones have their sign reversed
|
8
|
+
time_zone = format('Etc/GMT%+d', -time_offset.to_i)
|
9
|
+
end
|
10
|
+
|
11
|
+
fail Error, 'Cake time zone missing' if time_zone.blank?
|
12
|
+
@zone = ActiveSupport::TimeZone[time_zone]
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_cake(date)
|
16
|
+
date = date.to_datetime if date.is_a?(Date)
|
17
|
+
date.in_time_zone(zone).strftime('%Y-%m-%dT%H:%M:%S')
|
18
|
+
end
|
19
|
+
|
20
|
+
def from_cake(value)
|
21
|
+
zone.parse(value).utc
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :zone
|
27
|
+
|
28
|
+
def self.print_deprecation_warning
|
29
|
+
return if @deprecation_warning_printed
|
30
|
+
@deprecation_warning_printed = true
|
31
|
+
|
32
|
+
STDERR.puts 'SoapyCake - DEPRECATED: Please use time_zone instead of time_offset.'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/soapy_cake/version.rb
CHANGED
data/spec/fixtures/vcr_cassettes/SoapyCake_Admin/creates_an_affiliate_and_returns_the_ID.yml
CHANGED
@@ -26,7 +26,7 @@ http_interactions:
|
|
26
26
|
<cake:contact_first_name>Foxy</cake:contact_first_name>
|
27
27
|
<cake:contact_last_name>Fox</cake:contact_last_name>
|
28
28
|
<cake:contact_email_address>foxy@forrest.com</cake:contact_email_address>
|
29
|
-
<cake:date_added>2015-06-
|
29
|
+
<cake:date_added>2015-06-15T02:00:00</cake:date_added>
|
30
30
|
</cake:Affiliate>
|
31
31
|
</env:Body>
|
32
32
|
</env:Envelope>
|
data/spec/fixtures/vcr_cassettes/SoapyCake_Admin/does_not_parse_a_transaction_id_as_an_integer.yml
CHANGED
@@ -12,8 +12,8 @@ http_interactions:
|
|
12
12
|
<env:Body>
|
13
13
|
<cake:Conversions>
|
14
14
|
<cake:api_key>cake-api-key</cake:api_key>
|
15
|
-
<cake:start_date>2015-04-
|
16
|
-
<cake:end_date>2015-04-
|
15
|
+
<cake:start_date>2015-04-11T02:00:00</cake:start_date>
|
16
|
+
<cake:end_date>2015-04-12T02:00:00</cake:end_date>
|
17
17
|
<cake:row_limit>1</cake:row_limit>
|
18
18
|
<cake:conversion_type>conversions</cake:conversion_type>
|
19
19
|
</cake:Conversions>
|
@@ -12,8 +12,8 @@ http_interactions:
|
|
12
12
|
<env:Body>
|
13
13
|
<cake:Clicks>
|
14
14
|
<cake:api_key>cake-api-key</cake:api_key>
|
15
|
-
<cake:start_date>2014-06-
|
16
|
-
<cake:end_date>2014-07-
|
15
|
+
<cake:start_date>2014-06-30T02:00:00</cake:start_date>
|
16
|
+
<cake:end_date>2014-07-01T02:00:00</cake:end_date>
|
17
17
|
<cake:row_limit>1</cake:row_limit>
|
18
18
|
</cake:Clicks>
|
19
19
|
</env:Body>
|
@@ -12,7 +12,7 @@ http_interactions:
|
|
12
12
|
<env:Body>
|
13
13
|
<cake:MassConversionInsert>
|
14
14
|
<cake:api_key>cake-api-key</cake:api_key>
|
15
|
-
<cake:conversion_date>2015-05-
|
15
|
+
<cake:conversion_date>2015-05-06T02:00:00</cake:conversion_date>
|
16
16
|
<cake:affiliate_id>16059</cake:affiliate_id>
|
17
17
|
<cake:campaign_id>13268</cake:campaign_id>
|
18
18
|
<cake:sub_affiliate/>
|
@@ -12,12 +12,15 @@ RSpec.describe SoapyCake::Admin do
|
|
12
12
|
hide_offers: false,
|
13
13
|
# hashes and id-params
|
14
14
|
billing_cycle: { billing_cycle_id: 1, billing_cycle_name: 'Weekly' },
|
15
|
-
# dates
|
16
|
-
date_created: DateTime.new(2014, 4, 28, 10, 52, 15.537),
|
17
15
|
# floats
|
18
16
|
minimum_payment_threshold: '0.0000'
|
19
17
|
)
|
20
18
|
|
19
|
+
# dates
|
20
|
+
expect(result.first[:date_created]).to be_a(Time)
|
21
|
+
expect(result.first[:date_created].to_s)
|
22
|
+
.to eq(Time.utc(2014, 4, 28, 8, 52, 15.537).to_s)
|
23
|
+
|
21
24
|
# strings should be actual Strings, not some Saxerator element class
|
22
25
|
expect(result.first[:affiliate_name].class).to eq(String)
|
23
26
|
|
@@ -4,4 +4,10 @@ RSpec.describe SoapyCake::Request do
|
|
4
4
|
described_class.new(:test, :does, :not_exist).xml
|
5
5
|
end.to raise_error(SoapyCake::Error, 'Unknown API call test::does::not_exist')
|
6
6
|
end
|
7
|
+
|
8
|
+
it 'raises when you pass non-date-like objects in date fields' do
|
9
|
+
expect do
|
10
|
+
described_class.new(:admin, :export, :offers, start_date: '2015-01-01').xml
|
11
|
+
end.to raise_error(SoapyCake::Error, /Date object for 'start_date'/)
|
12
|
+
end
|
7
13
|
end
|
@@ -1,58 +1,55 @@
|
|
1
1
|
RSpec.describe SoapyCake::ResponseValue do
|
2
|
-
|
3
|
-
|
2
|
+
let(:time_converter) { double('date converter') }
|
3
|
+
|
4
|
+
def parse(key, value)
|
5
|
+
described_class.new(key, value, time_converter).parse
|
4
6
|
end
|
5
7
|
|
6
8
|
describe '#parse' do
|
7
9
|
context 'booleans' do
|
8
10
|
it 'converts the string "true" to the true value' do
|
9
|
-
expect(
|
11
|
+
expect(parse(:foo, 'true')).to eq(true)
|
10
12
|
end
|
11
13
|
|
12
14
|
it 'converts the string "false" to the false value' do
|
13
|
-
expect(
|
15
|
+
expect(parse(:foo, 'false')).to eq(false)
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
17
19
|
context 'dates' do
|
18
|
-
it '
|
19
|
-
expect(
|
20
|
-
|
21
|
-
|
22
|
-
it 'properly applies the provided time offset' do
|
23
|
-
expect(subject(:foo, '2014-01-01T00:00:00', time_offset: 5).parse)
|
24
|
-
.to eq(DateTime.new(2014, 1, 1, 0).change(offset: '+0500'))
|
20
|
+
it 'delegates date-conversion to a TimeConverter instance' do
|
21
|
+
expect(time_converter).to receive(:from_cake)
|
22
|
+
.with('2014-06-30T01:00:00').and_return(:nice_date)
|
25
23
|
|
26
|
-
expect(
|
27
|
-
.to eq(DateTime.new(2014, 12, 31, 1).change(offset: '-0200'))
|
24
|
+
expect(parse(:foo, '2014-06-30T01:00:00')).to eq(:nice_date)
|
28
25
|
end
|
29
26
|
end
|
30
27
|
|
31
28
|
context 'strings' do
|
32
29
|
it 'parses a string' do
|
33
|
-
expect(
|
30
|
+
expect(parse(:foo, 'abc')).to eq('abc')
|
34
31
|
end
|
35
32
|
end
|
36
33
|
|
37
34
|
context 'IDs' do
|
38
35
|
it 'converts keys ending in "_id" to integers' do
|
39
|
-
expect(
|
36
|
+
expect(parse(:conversion_id, '42')).to eq(42)
|
40
37
|
end
|
41
38
|
|
42
39
|
it "doesn't convert ids in the blacklist to integers" do
|
43
|
-
expect(
|
44
|
-
expect(
|
45
|
-
expect(
|
40
|
+
expect(parse(:tax_id, '123abc')).to eq('123abc')
|
41
|
+
expect(parse(:other_tax_id, '123abc')).to eq('123abc')
|
42
|
+
expect(parse(:transaction_id, '123abc')).to eq('123abc')
|
46
43
|
end
|
47
44
|
|
48
45
|
it 'raises an error if not in the blacklist and non-digit characters are detected' do
|
49
|
-
expect {
|
46
|
+
expect { parse(:foo_id, '123abc') }.to raise_error(SoapyCake::Error)
|
50
47
|
end
|
51
48
|
|
52
49
|
it 'does not raise an error if the value is absent' do
|
53
|
-
expect(
|
54
|
-
expect(
|
55
|
-
expect(
|
50
|
+
expect(parse(:foo_id, '-1')).to eq(-1)
|
51
|
+
expect(parse(:foo_id, '')).to eq(0)
|
52
|
+
expect(parse(:foo_id, nil)).to eq(0)
|
56
53
|
end
|
57
54
|
end
|
58
55
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
RSpec.describe SoapyCake::TimeConverter do
|
2
|
+
subject { described_class.new('Europe/Berlin') }
|
3
|
+
|
4
|
+
describe '#to_cake' do
|
5
|
+
it 'converts a time-like object into a cake timestamp' do
|
6
|
+
expect(subject.to_cake(DateTime.new(2015, 1, 2, 12, 30))).to eq('2015-01-02T13:30:00')
|
7
|
+
expect(subject.to_cake(Time.utc(2015, 1, 2, 12, 30))).to eq('2015-01-02T13:30:00')
|
8
|
+
expect(subject.to_cake(Date.new(2015, 1, 2))).to eq('2015-01-02T01:00:00')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'respects DST' do
|
12
|
+
expect(subject.to_cake(Time.utc(2015, 1, 2, 12, 30))).to eq('2015-01-02T13:30:00')
|
13
|
+
expect(subject.to_cake(Time.utc(2015, 6, 2, 12, 30))).to eq('2015-06-02T14:30:00')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#from_cake' do
|
18
|
+
it 'parses cake dates into the specified time zone (including DST)' do
|
19
|
+
expect(subject.from_cake('2015-01-11T14:53:40.000')).to be_a(Time)
|
20
|
+
expect(subject.from_cake('2015-01-11T14:53:40.000'))
|
21
|
+
.to eq(Time.utc(2015, 1, 11, 13, 53, 40))
|
22
|
+
expect(subject.from_cake('2015-06-11T14:53:40.000'))
|
23
|
+
.to eq(Time.utc(2015, 6, 11, 12, 53, 40))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'legacy mode / CAKE_TIME_OFFSET' do
|
28
|
+
subject { described_class.new('Europe/Berlin', 5) }
|
29
|
+
|
30
|
+
it 'works as before (broken, without DST)' do
|
31
|
+
expect(STDERR).to receive(:puts).with(/Please use time_zone/)
|
32
|
+
|
33
|
+
expect(subject.to_cake(DateTime.new(2015, 1, 2, 12, 30))).to eq('2015-01-02T17:30:00')
|
34
|
+
expect(subject.to_cake(DateTime.new(2015, 6, 2, 12, 30))).to eq('2015-06-02T17:30:00')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -41,7 +41,7 @@ end
|
|
41
41
|
|
42
42
|
ENV['CAKE_API_KEY'] = 'cake-api-key' if ENV['CAKE_API_KEY'].blank?
|
43
43
|
ENV['CAKE_DOMAIN'] = 'cake-partner-domain.com' if ENV['CAKE_DOMAIN'].blank?
|
44
|
-
ENV['
|
44
|
+
ENV['CAKE_TIME_ZONE'] = 'Europe/Berlin' if ENV['CAKE_TIME_ZONE'].blank?
|
45
45
|
|
46
46
|
VCR.configure do |c|
|
47
47
|
c.configure_rspec_metadata!
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soapy_cake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ad2games GmbH
|
@@ -193,6 +193,7 @@ files:
|
|
193
193
|
- lib/soapy_cake/request.rb
|
194
194
|
- lib/soapy_cake/response.rb
|
195
195
|
- lib/soapy_cake/response_value.rb
|
196
|
+
- lib/soapy_cake/time_converter.rb
|
196
197
|
- lib/soapy_cake/version.rb
|
197
198
|
- soapy_cake.gemspec
|
198
199
|
- spec/fixtures/raw_response.xml
|
@@ -229,6 +230,7 @@ files:
|
|
229
230
|
- spec/lib/soapy_cake/request_spec.rb
|
230
231
|
- spec/lib/soapy_cake/response_spec.rb
|
231
232
|
- spec/lib/soapy_cake/response_value_spec.rb
|
233
|
+
- spec/lib/soapy_cake/time_converter_spec.rb
|
232
234
|
- spec/spec_helper.rb
|
233
235
|
- spec/support/admin_method_example.rb
|
234
236
|
homepage: http://ad2games.com
|
@@ -251,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
253
|
version: '0'
|
252
254
|
requirements: []
|
253
255
|
rubyforge_project:
|
254
|
-
rubygems_version: 2.4.
|
256
|
+
rubygems_version: 2.4.8
|
255
257
|
signing_key:
|
256
258
|
specification_version: 4
|
257
259
|
summary: Simple client for the CAKE API
|
@@ -290,5 +292,6 @@ test_files:
|
|
290
292
|
- spec/lib/soapy_cake/request_spec.rb
|
291
293
|
- spec/lib/soapy_cake/response_spec.rb
|
292
294
|
- spec/lib/soapy_cake/response_value_spec.rb
|
295
|
+
- spec/lib/soapy_cake/time_converter_spec.rb
|
293
296
|
- spec/spec_helper.rb
|
294
297
|
- spec/support/admin_method_example.rb
|