you_got_listed 0.3.3 → 0.3.4

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.
@@ -1,9 +1,9 @@
1
1
  module YouGotListed
2
2
  class Accounts < Resource
3
-
3
+
4
4
  def search(optional_params = {})
5
5
  process_get("/accounts/search.php", optional_params)
6
6
  end
7
-
7
+
8
8
  end
9
9
  end
@@ -1,24 +1,24 @@
1
1
  module YouGotListed
2
2
  class Agent < Resource
3
-
3
+
4
4
  def find_all
5
5
  process_get("/agents/search.php")
6
6
  end
7
-
7
+
8
8
  def find_by_id(agent_id)
9
9
  get_agent(agent_id)
10
10
  end
11
-
11
+
12
12
  def find(agent_id)
13
13
  get_agent(agent_id, true)
14
14
  end
15
-
15
+
16
16
  private
17
-
17
+
18
18
  def get_agent(agent_id, raise_error = false)
19
19
  params = {:id => agent_id}
20
20
  process_get("/agents/search.php", params, raise_error)
21
21
  end
22
-
22
+
23
23
  end
24
24
  end
@@ -1,16 +1,16 @@
1
1
  module YouGotListed
2
2
  class Client
3
-
3
+
4
4
  include HTTParty
5
5
  format :xml
6
6
  base_uri "https://www.yougotlistings.com/api"
7
-
7
+
8
8
  attr_accessor :api_key
9
-
9
+
10
10
  def initialize(api_key)
11
11
  self.class.default_params :key => api_key
12
12
  end
13
-
13
+
14
14
  def perform_request(http_method, path, params = {})
15
15
  begin
16
16
  self.class.send(http_method, path, :query => params)
@@ -20,6 +20,6 @@ module YouGotListed
20
20
  {"YGLResponse" => {"responseCode" => "999", "Error" => "Unknown Error"}}
21
21
  end
22
22
  end
23
-
23
+
24
24
  end
25
25
  end
@@ -1,8 +1,8 @@
1
1
  module YouGotListed
2
2
  class Complex
3
-
3
+
4
4
  attr_accessor :client
5
-
5
+
6
6
  def initialize(listing, client)
7
7
  listing.each do |key, value|
8
8
  self.instance_variable_set('@'+key, value)
@@ -10,7 +10,7 @@ module YouGotListed
10
10
  end
11
11
  self.client = client
12
12
  end
13
-
13
+
14
14
  def properties
15
15
  return [] if self.listings.blank?
16
16
  props = []
@@ -25,11 +25,11 @@ module YouGotListed
25
25
  end
26
26
  props
27
27
  end
28
-
28
+
29
29
  def pictures
30
30
  self.photos.photo unless self.photos.blank? || self.photos.photo.blank?
31
31
  end
32
-
32
+
33
33
  def find_address(address_id)
34
34
  if addresses.address.is_a?(Array)
35
35
  addresses.address.find{|address| address.id == address_id}
@@ -37,6 +37,6 @@ module YouGotListed
37
37
  addresses.address
38
38
  end
39
39
  end
40
-
40
+
41
41
  end
42
42
  end
@@ -1,6 +1,6 @@
1
1
  module YouGotListed
2
2
  class Complexes < Resource
3
-
3
+
4
4
  def search(params = {})
5
5
  params[:page_count] ||= 20
6
6
  params[:page_index] ||= 1
@@ -9,22 +9,22 @@ module YouGotListed
9
9
  params[:detail_level] ||= 2
10
10
  SearchResponse.new(self.client.perform_request(:get, '/complexes/search.php', params), self.client, params[:page_count])
11
11
  end
12
-
12
+
13
13
  def find_by_id(complex_id)
14
14
  response = SearchResponse.new(self.client.perform_request(:get, '/complexes/search.php', {:complex_id => complex_id}), self.client, 20)
15
15
  (response.success? && response.property_complexes.size > 0) ? response.property_complexes.first : nil
16
16
  end
17
-
17
+
18
18
  class SearchResponse < YouGotListed::Response
19
-
19
+
20
20
  attr_accessor :limit, :paginator_cache, :client
21
-
21
+
22
22
  def initialize(response, client, limit = 20, raise_error = false)
23
23
  super(response, raise_error)
24
24
  self.limit = limit
25
25
  self.client = client
26
26
  end
27
-
27
+
28
28
  def property_complexes
29
29
  return [] if self.ygl_response.complexes.blank?
30
30
  props = []
@@ -37,7 +37,7 @@ module YouGotListed
37
37
  end
38
38
  props
39
39
  end
40
-
40
+
41
41
  def paginator
42
42
  paginator_cache if paginator_cache
43
43
  self.paginator_cache = WillPaginate::Collection.create(
@@ -48,6 +48,6 @@ module YouGotListed
48
48
  end
49
49
  end
50
50
  end
51
-
51
+
52
52
  end
53
53
  end
@@ -1,17 +1,17 @@
1
1
  module YouGotListed
2
2
  class Error < Exception
3
-
3
+
4
4
  attr_reader :code, :error
5
-
5
+
6
6
  def initialize(code, error)
7
7
  @code = code
8
8
  @error = error
9
9
  super(message)
10
10
  end
11
-
11
+
12
12
  def message
13
13
  "YouGotListed Error: #{@error} (code: #{@code})"
14
14
  end
15
-
15
+
16
16
  end
17
17
  end
@@ -1,13 +1,13 @@
1
1
  module YouGotListed
2
2
  class Lead < Resource
3
-
3
+
4
4
  def create(lead_params = {}, raise_error = false)
5
5
  process_post("/leads/insert.php", lead_params, raise_error)
6
6
  end
7
-
7
+
8
8
  def create!(lead_params = {})
9
9
  create(lead_params, true)
10
10
  end
11
-
11
+
12
12
  end
13
13
  end
@@ -1,8 +1,8 @@
1
1
  module YouGotListed
2
2
  class Listing
3
-
3
+
4
4
  attr_accessor :client
5
-
5
+
6
6
  def initialize(listing, client)
7
7
  listing.each do |key, value|
8
8
  self.instance_variable_set('@'+key, value)
@@ -12,22 +12,23 @@ module YouGotListed
12
12
  end
13
13
  self.client = client
14
14
  end
15
-
15
+
16
16
  def similar_listings(limit = 6)
17
17
  min_baths = ((self.baths.to_i - 1) <= 0 ? 0 : (self.baths.to_i - 1))
18
18
  max_baths = self.baths.to_i + 1
19
19
  min_rent = (self.price.to_i * 0.9).to_i
20
20
  max_rent = (self.price.to_i * 1.1).to_i
21
+ min_beds = ((self.beds.to_i - 1) <= 0 ? 0 : (self.beds.to_i - 1))
22
+ max_beds = self.beds.to_i + 1
21
23
  search_params = {
22
24
  :limit => limit + 1,
23
25
  :min_rent => min_rent,
24
26
  :max_rent => max_rent,
25
- :min_bed => ((self.beds.to_i - 1) <= 0 ? 0 : (self.beds.to_i - 1)),
26
- :max_bed => self.beds.to_i + 1,
27
+ :min_bed => min_beds,
28
+ :max_bed => max_beds,
27
29
  :baths => [min_baths, self.baths, max_baths].join(','),
28
30
  :city_neighborhood => self.city_neighborhood
29
31
  }
30
-
31
32
  similar = []
32
33
  listings = YouGotListed::Listings.new(self.client)
33
34
  listings.search(search_params).properties.each do |prop|
@@ -36,38 +37,38 @@ module YouGotListed
36
37
  end
37
38
  similar
38
39
  end
39
-
40
+
40
41
  def town_neighborhood
41
42
  str = self.city
42
43
  str += " - #{neighborhood}" unless self.neighborhood.blank?
43
44
  str
44
45
  end
45
-
46
+
46
47
  def city_neighborhood
47
48
  str = self.city
48
49
  str += ":#{neighborhood}" unless self.neighborhood.blank?
49
50
  str
50
51
  end
51
-
52
+
52
53
  def pictures
53
54
  (self.photos.photo.is_a?(Array) ? self.photos.photo : [self.photos.photo]) unless self.photos.blank? || self.photos.photo.blank?
54
55
  end
55
-
56
+
56
57
  def main_picture
57
58
  pictures.first if pictures
58
59
  end
59
-
60
+
60
61
  def mls_listing?
61
62
  source && source == "MLS"
62
63
  end
63
-
64
+
64
65
  def latitude
65
66
  @latitude.to_f unless @latitude.blank?
66
67
  end
67
-
68
+
68
69
  def longitude
69
70
  @longitude.to_f unless @longitude.blank?
70
71
  end
71
-
72
+
72
73
  end
73
74
  end
@@ -1,6 +1,6 @@
1
1
  module YouGotListed
2
2
  class Listings < Resource
3
-
3
+
4
4
  def search(params = {})
5
5
  params[:page_count] ||= 20
6
6
  params[:page_index] ||= 1
@@ -9,7 +9,7 @@ module YouGotListed
9
9
  params[:detail_level] ||= 2
10
10
  SearchResponse.new(self.client.perform_request(:get, '/rentals/search.php', params), self.client, params[:page_count])
11
11
  end
12
-
12
+
13
13
  def featured(params = {}, featured_tag = 'Featured Rentals')
14
14
  if params[:tags].blank?
15
15
  params[:tags] = featured_tag
@@ -18,13 +18,13 @@ module YouGotListed
18
18
  end
19
19
  search(params)
20
20
  end
21
-
21
+
22
22
  def find_by_id(listing_id)
23
23
  params = {:listing_id => listing_id, :detail_level => 2}
24
24
  response = SearchResponse.new(self.client.perform_request(:get, '/rentals/search.php', params), self.client, 20)
25
25
  (response.success? && response.properties.size > 0) ? response.properties.first : nil
26
26
  end
27
-
27
+
28
28
  def find_all(params = {})
29
29
  params[:page_count] ||= 20
30
30
  all_listings = []
@@ -43,7 +43,7 @@ module YouGotListed
43
43
  end
44
44
  all_listings.flatten
45
45
  end
46
-
46
+
47
47
  def find_all_by_ids(listing_ids, include_off_market = true)
48
48
  listing_ids = listing_ids.split(',') if listing_ids.is_a?(String)
49
49
  all_listings = []
@@ -61,19 +61,19 @@ module YouGotListed
61
61
  end
62
62
  all_listings.compact.flatten
63
63
  end
64
-
64
+
65
65
  class SearchResponse < YouGotListed::Response
66
-
66
+
67
67
  attr_accessor :limit, :paginator_cache, :client
68
-
68
+
69
69
  def initialize(response, client, limit = 20, raise_error = false)
70
70
  super(response, raise_error)
71
71
  self.limit = limit
72
72
  self.client = client
73
73
  end
74
-
74
+
75
75
  def properties
76
- return [] if self.ygl_response.listings.blank?
76
+ return [] if !self.success? || self.ygl_response.listings.blank?
77
77
  props = []
78
78
  if self.ygl_response.listings.listing.is_a?(Array)
79
79
  self.ygl_response.listings.listing.each do |listing|
@@ -84,11 +84,11 @@ module YouGotListed
84
84
  end
85
85
  props
86
86
  end
87
-
87
+
88
88
  def mls_results?
89
89
  @has_mls_properties ||= properties.any?{|property| property.mls_listing?}
90
90
  end
91
-
91
+
92
92
  def paginator
93
93
  paginator_cache if paginator_cache
94
94
  self.paginator_cache = WillPaginate::Collection.create(
@@ -99,6 +99,6 @@ module YouGotListed
99
99
  end
100
100
  end
101
101
  end
102
-
102
+
103
103
  end
104
104
  end
@@ -1,19 +1,19 @@
1
1
  module YouGotListed
2
2
  class Resource
3
-
3
+
4
4
  attr_accessor :client
5
-
5
+
6
6
  def initialize(client)
7
7
  self.client = client
8
8
  end
9
-
9
+
10
10
  def process_get(path, params = {}, raise_error = false)
11
11
  Response.new(self.client.perform_request(:get, path, params), raise_error)
12
12
  end
13
-
13
+
14
14
  def process_post(path, params = {}, raise_error = false)
15
15
  Response.new(self.client.perform_request(:post, path, params), raise_error)
16
16
  end
17
-
17
+
18
18
  end
19
19
  end
@@ -1,18 +1,29 @@
1
1
  module YouGotListed
2
2
  class Response
3
-
3
+
4
4
  attr_accessor :ygl_response
5
-
5
+
6
6
  def initialize(response, raise_error = true)
7
- rash = Hashie::Rash.new(response)
8
- self.ygl_response = rash.ygl_response
9
- raise Error.new(self.ygl_response.response_code, self.ygl_response.error) if !success? && raise_error
7
+ if !response.respond_to?(:each_pair)
8
+ self.ygl_response = nil
9
+ raise Error.new('empty_response', 'Empty Response') if raise_error
10
+ else
11
+ rash = Hashie::Rash.new(response)
12
+ self.ygl_response = rash.ygl_response
13
+ if !success? && raise_error
14
+ if self.ygl_response.respond_to?(:response_code)
15
+ raise Error.new(self.ygl_response.response_code, self.ygl_response.error)
16
+ else
17
+ raise Error.new('empty_response', 'Empty Response')
18
+ end
19
+ end
20
+ end
10
21
  end
11
-
22
+
12
23
  def success?
13
24
  self.ygl_response && self.ygl_response.respond_to?(:response_code) && self.ygl_response.response_code.to_i < 300
14
25
  end
15
-
26
+
16
27
  def method_missing(method_name, *args)
17
28
  if self.ygl_response.respond_to?(method_name)
18
29
  self.ygl_response.send(method_name)
@@ -20,6 +31,6 @@ module YouGotListed
20
31
  super
21
32
  end
22
33
  end
23
-
34
+
24
35
  end
25
36
  end
@@ -1,3 +1,3 @@
1
1
  module YouGotListed
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.4'
3
3
  end
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'httparty'
3
- require 'hashie'
4
3
  require 'rash'
5
4
  require 'will_paginate/collection'
6
5
  require 'active_support/core_ext/array/grouping'
File without changes
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" standalone="yes"?>
2
+ <YGLResponse></YGLResponse>
@@ -1,26 +1,26 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe YouGotListed::Accounts do
4
-
4
+
5
5
  before do
6
6
  @ygl = new_ygl
7
7
  @accounts = YouGotListed::Accounts.new(@ygl)
8
8
  end
9
-
9
+
10
10
  context "search" do
11
11
  before do
12
12
  VCR.use_cassette('accounts.search') do
13
13
  @response = @accounts.search
14
14
  end
15
15
  end
16
-
16
+
17
17
  it "should be a success" do
18
18
  @response.success?.should be_true
19
19
  end
20
-
20
+
21
21
  it "should set accounts on the response" do
22
22
  @response.ygl_response.accounts.should be_kind_of(Hashie::Rash)
23
23
  end
24
24
  end
25
-
25
+
26
26
  end
@@ -1,29 +1,29 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe YouGotListed::Agent do
4
-
4
+
5
5
  before do
6
6
  @ygl = new_ygl
7
7
  @agent = YouGotListed::Agent.new(@ygl)
8
8
  end
9
-
9
+
10
10
  context "find_all" do
11
11
  before do
12
12
  VCR.use_cassette('agent.find_all') do
13
13
  @response = @agent.find_all
14
14
  end
15
15
  end
16
-
16
+
17
17
  it "should be a success" do
18
18
  @response.success?.should be_true
19
19
  end
20
-
20
+
21
21
  it "should return an array of agents" do
22
22
  @response.agents.agent.should_not be_nil
23
23
  @response.agents.agent.should be_kind_of(Array)
24
24
  end
25
25
  end
26
-
26
+
27
27
  context "successful find" do
28
28
  before do
29
29
  VCR.use_cassette('agent.find_all') do
@@ -33,17 +33,17 @@ describe YouGotListed::Agent do
33
33
  @response = @agent.find(@valid_agent_id)
34
34
  end
35
35
  end
36
-
36
+
37
37
  it "should be a success" do
38
38
  @response.success?.should be_true
39
39
  end
40
-
40
+
41
41
  it "should return an array of agents" do
42
42
  @response.agents.agent.should_not be_nil
43
43
  @response.agents.agent.should be_kind_of(Hashie::Rash)
44
44
  end
45
45
  end
46
-
46
+
47
47
  context "unsuccessful find" do
48
48
  it "should raise an exception" do
49
49
  lambda {
@@ -53,7 +53,7 @@ describe YouGotListed::Agent do
53
53
  }.should raise_exception(YouGotListed::Error, "YouGotListed Error: Invalid user id. (code: 301)")
54
54
  end
55
55
  end
56
-
56
+
57
57
  context "successful find_by_id" do
58
58
  before do
59
59
  VCR.use_cassette('agent.find_all') do
@@ -63,17 +63,17 @@ describe YouGotListed::Agent do
63
63
  @response = @agent.find_by_id(@valid_agent_id)
64
64
  end
65
65
  end
66
-
66
+
67
67
  it "should be a success" do
68
68
  @response.success?.should be_true
69
69
  end
70
-
70
+
71
71
  it "should return an array of agents" do
72
72
  @response.agents.agent.should_not be_nil
73
73
  @response.agents.agent.should be_kind_of(Hashie::Rash)
74
74
  end
75
75
  end
76
-
76
+
77
77
  context "unsuccessful find_by_id" do
78
78
  it "should raise an exception" do
79
79
  lambda {
@@ -82,7 +82,7 @@ describe YouGotListed::Agent do
82
82
  end
83
83
  }.should_not raise_exception
84
84
  end
85
-
85
+
86
86
  it "should not be a success" do
87
87
  VCR.use_cassette('agent.find.error') do
88
88
  @response = @agent.find_by_id('AG-001-0499957')
@@ -90,5 +90,5 @@ describe YouGotListed::Agent do
90
90
  @response.success?.should be_false
91
91
  end
92
92
  end
93
-
93
+
94
94
  end
@@ -1,17 +1,17 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe YouGotListed::Client do
4
-
4
+
5
5
  before do
6
6
  @ygl = new_ygl
7
7
  end
8
-
8
+
9
9
  it "should set the api_key" do
10
10
  @ygl.class.default_params.should == {:key => YGL_API_KEY}
11
11
  end
12
-
12
+
13
13
  it "should set the base uri" do
14
14
  @ygl.class.base_uri.should == "https://www.yougotlistings.com/api"
15
15
  end
16
-
16
+
17
17
  end
@@ -1,20 +1,20 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe YouGotListed::Complex do
4
-
4
+
5
5
  before do
6
6
  @ygl = new_ygl
7
7
  @complex = YouGotListed::Complex.new(valid_complex_rash, @ygl)
8
8
  end
9
-
9
+
10
10
  it "should return photos for pictures" do
11
11
  @complex.pictures.should == @complex.photos.photo
12
12
  end
13
-
13
+
14
14
  it "should create methods from all hash keys" do
15
15
  @complex.should respond_to("id", "name", "addresses", "public_notes", "photos", "listings")
16
16
  end
17
-
17
+
18
18
  it "should return an array of properties" do
19
19
  @complex.properties.should be_kind_of(Array)
20
20
  @complex.properties.each do |property|
@@ -22,5 +22,5 @@ describe YouGotListed::Complex do
22
22
  end
23
23
  @complex.properties.size.should == 2
24
24
  end
25
-
25
+
26
26
  end