spark_api 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.1.2
@@ -16,8 +16,7 @@ module SparkApi
16
16
 
17
17
  # Constructor bootstraps the client with configuration and authorization class.
18
18
  # options - see Configuration::VALID_OPTION_KEYS
19
- # auth_klass - subclass of Authentication::BaseAuth Defaults to the original api auth system.
20
- def initialize(options={}, auth_klass=ApiAuth)
19
+ def initialize(options={})
21
20
  options = SparkApi.options.merge(options)
22
21
  Configuration::VALID_OPTION_KEYS.each do |key|
23
22
  send("#{key}=", options[key])
@@ -11,7 +11,6 @@ module SparkApi
11
11
  opts = {
12
12
  :headers => headers
13
13
  }
14
- domain = @endpoint
15
14
  if(force_ssl || self.ssl)
16
15
  opts[:ssl] = {:verify => false }
17
16
  opts[:url] = @endpoint.sub /^http:/, "https:"
@@ -15,6 +15,10 @@ module SparkApi
15
15
  else find_single(scope, options)
16
16
  end
17
17
  end
18
+
19
+ def all(*arguments)
20
+ find(:all, *arguments)
21
+ end
18
22
 
19
23
  def first(*arguments)
20
24
  find(:first, *arguments)
@@ -1,7 +1,7 @@
1
1
  module SparkApi
2
2
  module Models
3
- module Subresource
4
-
3
+ module Subresource
4
+
5
5
  def build_subclass
6
6
  Class.new(self)
7
7
  end
@@ -9,31 +9,51 @@ module SparkApi
9
9
  def find_by_listing_key(key, arguments={})
10
10
  collect(connection.get("/listings/#{key}#{self.path}", arguments))
11
11
  end
12
-
12
+
13
13
  def find_by_id(id, parent_id, arguments={})
14
14
  collect(connection.get("/listings/#{parent_id}#{self.path}/#{id}", arguments)).first
15
15
  end
16
-
16
+
17
17
  def parse_date_start_and_end_times(attributes)
18
18
  # Transform the date strings
19
19
  unless attributes['Date'].nil?
20
20
  date = Date.strptime attributes['Date'], '%m/%d/%Y'
21
21
  ['StartTime','EndTime'].each do |time|
22
22
  next if attributes[time].nil?
23
- format = '%m/%d/%YT%H:%M%z'
24
- if attributes[time].split(':').size > 3
25
- format = '%m/%d/%YT%H:%M:%S%z'
23
+ formatted_date = "#{attributes['Date']}T#{attributes[time]}"
24
+ datetime = nil
25
+
26
+ begin
27
+ datetime = DateTime.strptime(formatted_date, '%m/%d/%YT%l:%M %P')
28
+ rescue => ex
29
+ ; # Do nothing; doesn't matter
30
+ end
31
+
32
+ unless datetime
33
+ other_formats = ['%m/%d/%YT%H:%M%z', '%m/%d/%YT%H:%M:%S%z']
34
+ other_formats.each_with_index do |format, i|
35
+ begin
36
+ datetime = DateTime.strptime(formatted_date, format)
37
+ datetime = datetime.new_offset DateTime.now.offset
38
+ break
39
+ rescue => ex
40
+ next
41
+ end
42
+ end
43
+ end
44
+
45
+ # if we still don't have a valid time, raise an error
46
+ unless datetime
47
+ raise ArgumentError.new('invalid date')
26
48
  end
27
- formatted_date = "#{attributes['Date']}T#{attributes[time]} FORMAT: #{format}"
28
- datetime = DateTime.strptime(formatted_date, format)
29
- datetime = datetime.new_offset DateTime.now.offset
30
- attributes[time] = Time.local(datetime.year, datetime.month, datetime.day, datetime.hour, datetime.min,
31
- datetime.sec)
49
+
50
+ attributes[time] = Time.local(datetime.year, datetime.month, datetime.day,
51
+ datetime.hour, datetime.min, datetime.sec)
32
52
  end
33
53
  attributes['Date'] = date
34
54
  end
35
55
  end
36
-
56
+
37
57
  end
38
58
  end
39
59
  end
@@ -0,0 +1,14 @@
1
+ {"D": {
2
+ "Success": true,
3
+ "Results": [{
4
+ "Id": 1,
5
+ "Name": "My Example",
6
+ "Test": true
7
+ },
8
+ {
9
+ "Id": 2,
10
+ "Name": "My Example2",
11
+ "Test": false
12
+ }]}
13
+ }
14
+
@@ -6,8 +6,8 @@
6
6
  "ResourceUri": "/v1/listings/20060412165917817933000000/openhouses/20101127153422574618000000",
7
7
  "Id": "20101127153422574618000000",
8
8
  "Date": "10/01/2010",
9
- "StartTime": "09:00-07:00",
10
- "EndTime": "12:00-07:00"
9
+ "StartTime": "9:00 am",
10
+ "EndTime": "12:00 pm"
11
11
  },
12
12
  {
13
13
  "ResourceUri": "/v1/listings/20060412165917817933000000/openhouses/20101127153422174618000000",
@@ -18,4 +18,4 @@
18
18
  }
19
19
  ]
20
20
  }
21
- }
21
+ }
data/spec/mock_helper.rb CHANGED
@@ -113,7 +113,7 @@ def test_connection(stubs)
113
113
  end
114
114
 
115
115
  def stub_auth_request()
116
- stub_request(:post, "https://api.sparkapi.com/#{SparkApi.version}/session").
116
+ stub_request(:post, "#{SparkApi.endpoint}/#{SparkApi.version}/session").
117
117
  with(:query => {:ApiKey => "", :ApiSig => "806737984ab19be2fd08ba36030549ac"}).
118
118
  to_return(:body => fixture("session.json"))
119
119
  end
data/spec/spec_helper.rb CHANGED
@@ -31,7 +31,7 @@ end
31
31
 
32
32
  SparkApi.logger.info("Setup gem for rspec testing")
33
33
 
34
- def reset_config()
34
+ def reset_config
35
35
  SparkApi.reset
36
36
  SparkApi.configure do |config|
37
37
  config.api_user = "foobar"
@@ -0,0 +1,32 @@
1
+ require './spec/spec_helper'
2
+
3
+ class MyResource < Base
4
+ extend Finders
5
+ self.element_name = "my_resource"
6
+ end
7
+
8
+ describe Finders, "Finders model" do
9
+
10
+ before(:each) do
11
+ stub_auth_request
12
+ end
13
+
14
+ it "should get all results" do
15
+ stub_api_get("/my_resource", 'finders.json')
16
+ resources = MyResource.all
17
+ resources.size.should eq(2)
18
+ end
19
+
20
+ it "should get first result" do
21
+ stub_api_get("/my_resource", 'finders.json')
22
+ resource = MyResource.first
23
+ resource.Id.should eq(1)
24
+ end
25
+
26
+ it "should get last result" do
27
+ stub_api_get("/my_resource", 'finders.json')
28
+ resource = MyResource.last
29
+ resource.Id.should eq(2)
30
+ end
31
+
32
+ end
@@ -8,8 +8,8 @@ describe OpenHouse do
8
8
  'ResourceUri'=>"/v1/listings/20060412165917817933000000/openhouses/20101127153422574618000000",
9
9
  'Id'=>"20060412165917817933000000",
10
10
  'Date'=>"10/01/2010",
11
- 'StartTime'=>"09:00-07:00",
12
- 'EndTime'=>"12:00-07:00"
11
+ 'StartTime'=>"9:00 am",
12
+ 'EndTime'=>"12:00 pm"
13
13
  )
14
14
  end
15
15
 
@@ -17,20 +17,6 @@ describe OpenHouse do
17
17
  subject.class.should respond_to(:find_by_listing_key)
18
18
  end
19
19
 
20
- it "should return date and times" do
21
- start_time = DateTime.new(2010,10,1,9,0,0, "-0700")
22
- end_time = DateTime.new(2010,10,1,12,0,0, "-0700")
23
- subject.Date.should eq(Date.new(2010,10,1))
24
- # TRYING TO MAKE THIS BACKWARDS COMPATIBLE AND NOT HAPPY ABOUT IT
25
- if RUBY_VERSION < '1.9'
26
- subject.StartTime.should eq(Time.parse(start_time.to_s))
27
- subject.EndTime.should eq(Time.parse(end_time.to_s))
28
- else
29
- subject.StartTime.should eq(start_time.to_time)
30
- subject.EndTime.should eq(end_time.to_time)
31
- end
32
- end
33
-
34
20
  context "/listings/<listing_id>/openhouses", :support do
35
21
  on_get_it "should get open house for a listing" do
36
22
  stub_auth_request
@@ -0,0 +1,74 @@
1
+ require './spec/spec_helper'
2
+
3
+ require 'time'
4
+
5
+ describe Subresource do
6
+ let(:dummy_class) do
7
+ Class.new do
8
+ extend(Subresource)
9
+ end
10
+ end
11
+
12
+ it "should handle times without tz offset" do
13
+ times = {'Date' => '10/01/2012', 'StartTime' => '9:00 am', 'EndTime' => '12:00 pm'}
14
+ start_time = Time.local(2012,10,1,9,0,0)
15
+ end_time = Time.local(2012,10,1,12,0,0)
16
+ date = Date.new(2012,10,1)
17
+
18
+ dummy_class.parse_date_start_and_end_times(times)
19
+
20
+ times['Date'].should eq(date)
21
+
22
+ if RUBY_VERSION < '1.9'
23
+ times['StartTime'].should eq(Time.parse(start_time.to_s))
24
+ times['EndTime'].should eq(Time.parse(end_time.to_s))
25
+ else
26
+ times['StartTime'].should eq(start_time.to_time)
27
+ times['EndTime'].should eq(end_time.to_time)
28
+ end
29
+ end
30
+
31
+ it "should handle times with tz offset" do
32
+ times = {'Date' => '10/01/2012', 'StartTime' => '09:00-0700', 'EndTime' => '12:00-0700'}
33
+ start_time = DateTime.new(2012,10,1,9,0,0,'-0700')
34
+ end_time = DateTime.new(2012,10,1,12,0,0,'-0700')
35
+ date = Date.new(2012,10,1)
36
+
37
+ dummy_class.parse_date_start_and_end_times(times)
38
+
39
+ times['Date'].should eq(date)
40
+
41
+ if RUBY_VERSION < '1.9'
42
+ times['StartTime'].should eq(Time.parse(start_time.to_s))
43
+ times['EndTime'].should eq(Time.parse(end_time.to_s))
44
+ else
45
+ times['StartTime'].should eq(start_time.to_time)
46
+ times['EndTime'].should eq(end_time.to_time)
47
+ end
48
+ end
49
+
50
+ it "should handle times with tz offset and seconds" do
51
+ times = {'Date' => '10/01/2012', 'StartTime' => '09:12:34-0700', 'EndTime' => '12:43:21-0700'}
52
+ start_time = DateTime.new(2012,10,1,9,12,34,'-0700')
53
+ end_time = DateTime.new(2012,10,1,12,43,21,'-0700')
54
+ date = Date.new(2012,10,1)
55
+
56
+ dummy_class.parse_date_start_and_end_times(times)
57
+
58
+ times['Date'].should eq(date)
59
+
60
+ if RUBY_VERSION < '1.9'
61
+ times['StartTime'].should eq(Time.parse(start_time.to_s))
62
+ times['EndTime'].should eq(Time.parse(end_time.to_s))
63
+ else
64
+ times['StartTime'].should eq(start_time.to_time)
65
+ times['EndTime'].should eq(end_time.to_time)
66
+ end
67
+ end
68
+
69
+ it "should raise an exception for unsupported formats" do
70
+ times = {'Date' => '10/01/2012', 'StartTime' => '_9:00_ _am_', 'EndTime' => '_12:00_ _pm_'}
71
+
72
+ expect {dummy_class.parse_date_start_and_end_times(times)}.to raise_error(ArgumentError)
73
+ end
74
+ end
@@ -8,8 +8,8 @@ describe TourOfHome do
8
8
  'ResourceUri'=>"/listings/20060725224713296297000000/tourofhomes/20101127153422574618000000",
9
9
  'Id'=>"20101127153422574618000000",
10
10
  'Date'=>"10/01/2010",
11
- 'StartTime'=>"09:00:00-07:00",
12
- 'EndTime'=>"23:00:00-07:00",
11
+ 'StartTime'=>"9:00 am",
12
+ 'EndTime'=>"11:00 pm",
13
13
  'Comments'=>"Wonderful home; must see!",
14
14
  'AdditionalInfo'=> [{"Hosted By"=>"Joe Smith"}, {"Host Phone"=>"123-456-7890"}, {"Tour Area"=>"North-Central"}]
15
15
  )
@@ -19,20 +19,6 @@ describe TourOfHome do
19
19
  subject.class.should respond_to(:find_by_listing_key)
20
20
  end
21
21
 
22
- it "should return tour date and times" do
23
- start_time = DateTime.new(2010,10,1,9,0,0, "-0700")
24
- end_time = DateTime.new(2010,10,1,23,0,0, "-0700")
25
- subject.Date.should eq(Date.new(2010,10,1))
26
- # TRYING TO MAKE THIS BACKWARDS COMPATIBLE AND NOT HAPPY ABOUT IT
27
- if RUBY_VERSION < '1.9'
28
- subject.StartTime.should eq(Time.parse(start_time.to_s))
29
- subject.EndTime.should eq(Time.parse(end_time.to_s))
30
- else
31
- subject.StartTime.should eq(start_time.to_time)
32
- subject.EndTime.should eq(end_time.to_time)
33
- end
34
- end
35
-
36
22
  context "/listings/<listing_id>/tourofhomes", :support do
37
23
  on_get_it "should get home tours for a listing" do
38
24
  stub_auth_request
@@ -51,6 +51,10 @@ describe SparkApi::MultiClient do
51
51
  SparkApi.client.api_key.should eq('demo_key')
52
52
  end
53
53
  end
54
+
55
+ after(:all) do
56
+ reset_config
57
+ end
54
58
 
55
59
  end
56
60
 
@@ -128,7 +128,7 @@ describe SparkApi::Paginate do
128
128
 
129
129
  # non unit-y real world test of paginations with listings
130
130
  context "paginating listings" do
131
- before do
131
+ before(:each) do
132
132
  stub_auth_request
133
133
  end
134
134
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spark_api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 1
10
- version: 1.1.1
9
+ - 2
10
+ version: 1.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brandon Hornseth
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-08-31 00:00:00 Z
19
+ date: 2012-09-07 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -387,6 +387,7 @@ files:
387
387
  - spec/fixtures/listings/virtual_tours_index.json
388
388
  - spec/fixtures/listings/document_index.json
389
389
  - spec/fixtures/listings/constraints.json
390
+ - spec/fixtures/finders.json
390
391
  - spec/fixtures/notifications/notifications.json
391
392
  - spec/fixtures/notifications/new_empty.json
392
393
  - spec/fixtures/notifications/unread.json
@@ -428,9 +429,11 @@ files:
428
429
  - spec/unit/spark_api/models/shared_listing_spec.rb
429
430
  - spec/unit/spark_api/models/note_spec.rb
430
431
  - spec/unit/spark_api/models/connect_prefs_spec.rb
432
+ - spec/unit/spark_api/models/subresource_spec.rb
431
433
  - spec/unit/spark_api/models/photo_spec.rb
432
434
  - spec/unit/spark_api/models/base_spec.rb
433
435
  - spec/unit/spark_api/models/tour_of_home_spec.rb
436
+ - spec/unit/spark_api/models/finders_spec.rb
434
437
  - spec/unit/spark_api/models/system_info_spec.rb
435
438
  - spec/unit/spark_api/models/standard_fields_spec.rb
436
439
  - spec/unit/spark_api/faraday_middleware_spec.rb
@@ -550,6 +553,7 @@ test_files:
550
553
  - spec/fixtures/listings/virtual_tours_index.json
551
554
  - spec/fixtures/listings/document_index.json
552
555
  - spec/fixtures/listings/constraints.json
556
+ - spec/fixtures/finders.json
553
557
  - spec/fixtures/notifications/notifications.json
554
558
  - spec/fixtures/notifications/new_empty.json
555
559
  - spec/fixtures/notifications/unread.json
@@ -591,9 +595,11 @@ test_files:
591
595
  - spec/unit/spark_api/models/shared_listing_spec.rb
592
596
  - spec/unit/spark_api/models/note_spec.rb
593
597
  - spec/unit/spark_api/models/connect_prefs_spec.rb
598
+ - spec/unit/spark_api/models/subresource_spec.rb
594
599
  - spec/unit/spark_api/models/photo_spec.rb
595
600
  - spec/unit/spark_api/models/base_spec.rb
596
601
  - spec/unit/spark_api/models/tour_of_home_spec.rb
602
+ - spec/unit/spark_api/models/finders_spec.rb
597
603
  - spec/unit/spark_api/models/system_info_spec.rb
598
604
  - spec/unit/spark_api/models/standard_fields_spec.rb
599
605
  - spec/unit/spark_api/faraday_middleware_spec.rb