rentlinx 0.6.4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2740162e7118e91691469b2e109bd986ba12035
4
- data.tar.gz: 7aeacb872e3d5d3918fcda207bc92495398023f1
3
+ metadata.gz: 3e9c6235c8891f0be05e492ba4811f8ea49caefb
4
+ data.tar.gz: 68324208bc855cc495a4f9e7abc74748b7f26b68
5
5
  SHA512:
6
- metadata.gz: a1c442c102d79edf089b9b930a4ef6c8208a0b952dee07319f9b0f252ac5cca186dd8a0e0631e178a2acb310a0decce6c3cc2c4ab369b05d23fab045353a53f9
7
- data.tar.gz: 9d8bdad6526f21b77cd77302a3f3fe3de6e2d1984b8e2a876c24012488b671a1c80a1345668730e52799254f5208f155d7eb2ac25dac37a8b55f00f1a6b3baff
6
+ metadata.gz: 2f2e8c07d583ad39c97f246f01c9b0a953509f56e2d37140afee8b88d43fa9d49930265889a38156efc0fb6cdb2d211da27e27a4ffb385e8675ecc94669e970d
7
+ data.tar.gz: 7bec813c58aac658c954d38fba18440a5772b0a6c2cf06e3ff615725e0a641f19879f255899ffb912057901ea34aede345527384ed66a594733c58465c27d848
data/lib/rentlinx.rb CHANGED
@@ -8,6 +8,8 @@ require 'rentlinx/models/property_photo'
8
8
  require 'rentlinx/models/unit_photo'
9
9
  require 'rentlinx/models/property_amenity'
10
10
  require 'rentlinx/models/unit_amenity'
11
+ require 'rentlinx/models/property_link'
12
+ require 'rentlinx/models/unit_link'
11
13
 
12
14
  module Rentlinx
13
15
  @username = nil
@@ -6,6 +6,7 @@ require 'rentlinx/modules/property_client_methods'
6
6
  require 'rentlinx/modules/unit_client_methods'
7
7
  require 'rentlinx/modules/photo_client_methods'
8
8
  require 'rentlinx/modules/amenity_client_methods'
9
+ require 'rentlinx/modules/link_client_methods'
9
10
 
10
11
  module Rentlinx
11
12
  class Client
@@ -13,6 +14,7 @@ module Rentlinx
13
14
  include Rentlinx::UnitClientMethods
14
15
  include Rentlinx::PhotoClientMethods
15
16
  include Rentlinx::AmenityClientMethods
17
+ include Rentlinx::LinkClientMethods
16
18
 
17
19
  def initialize
18
20
  raise Rentlinx::NotConfigured if Rentlinx.username.nil? ||
@@ -1,5 +1,6 @@
1
1
  require 'rentlinx/modules/photoable'
2
2
  require 'rentlinx/modules/amenityable'
3
+ require 'rentlinx/modules/linkable'
3
4
 
4
5
  module Rentlinx
5
6
  class Property < Base
@@ -44,6 +45,11 @@ module Rentlinx
44
45
  Rentlinx::PropertyAmenity
45
46
  end
46
47
 
48
+ include Rentlinx::Linkable
49
+ def link_class
50
+ Rentlinx::PropertyLink
51
+ end
52
+
47
53
  private
48
54
 
49
55
  def get_units_for_property_id(id)
@@ -0,0 +1,13 @@
1
+ module Rentlinx
2
+ class PropertyLink < Base
3
+ ATTRIBUTES = [:propertyID, :title, :url]
4
+
5
+ REQUIRED_ATTRIBUTES = [:propertyID, :title, :url]
6
+
7
+ attr_accessor(*ATTRIBUTES)
8
+
9
+ def to_hash
10
+ { url: url, title: title }
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,6 @@
1
1
  require 'rentlinx/modules/photoable'
2
2
  require 'rentlinx/modules/amenityable'
3
+ require 'rentlinx/modules/linkable'
3
4
 
4
5
  module Rentlinx
5
6
  class Unit < Base
@@ -24,6 +25,11 @@ module Rentlinx
24
25
  Rentlinx::UnitAmenity
25
26
  end
26
27
 
28
+ include Rentlinx::Linkable
29
+ def link_class
30
+ Rentlinx::UnitLink
31
+ end
32
+
27
33
  def photos
28
34
  super.select { |p| p.unitID == unitID }
29
35
  end
@@ -0,0 +1,9 @@
1
+ module Rentlinx
2
+ class UnitLink < PropertyLink
3
+ ATTRIBUTES += [:unitID]
4
+
5
+ REQUIRED_ATTRIBUTES += [:unitID]
6
+
7
+ attr_accessor(*ATTRIBUTES)
8
+ end
9
+ end
@@ -36,7 +36,7 @@ module Rentlinx
36
36
  when Rentlinx::PropertyAmenity
37
37
  unpost_property_amenity(amenity.propertyID, amenity.name)
38
38
  else
39
- raise TypeError, "Invalid type: #{type}"
39
+ raise TypeError, "Invalid type: #{amenity.class}"
40
40
  end
41
41
  end
42
42
 
@@ -0,0 +1,72 @@
1
+ module Rentlinx
2
+ module LinkClientMethods
3
+ def post_links(links)
4
+ raise Rentlinx::InvalidObject, links.find { |a| !a.valid? } unless links.all?(&:valid?)
5
+ raise Rentlinx::InvalidObject, links unless links.all? { |p| p.propertyID == links.first.propertyID }
6
+ property_links = links.select { |l| l.class == Rentlinx::PropertyLink }
7
+ unit_links = links - property_links
8
+
9
+ post_property_links(property_links) unless property_links.empty?
10
+ post_unit_links(unit_links) unless unit_links.empty?
11
+ end
12
+
13
+ def get_links_for_property_id(id)
14
+ data = request('GET', "properties/#{id}/links")['data']
15
+ data.map do |link_data|
16
+ if link_data['unitID'].nil? || link_data['unitID'] == ''
17
+ link_data.delete('unitID')
18
+ PropertyLink.new(symbolize_data(link_data))
19
+ else
20
+ UnitLink.new(symbolize_data(link_data))
21
+ end
22
+ end
23
+ rescue Rentlinx::NotFound
24
+ return []
25
+ end
26
+
27
+ def get_links_for_unit(unit)
28
+ links = get_links_for_property_id(unit.propertyID)
29
+ links.select { |a| defined? a.unitID && a.unitID == unit.unitID }
30
+ end
31
+
32
+ def unpost_link(link)
33
+ case link
34
+ when Rentlinx::UnitLink
35
+ unpost_unit_link(link.unitID, link.url)
36
+ when Rentlinx::PropertyLink
37
+ unpost_property_link(link.propertyID, link.url)
38
+ else
39
+ raise TypeError, "Invalid type: #{link.class}"
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def post_property_links(links)
46
+ request('PUT', "properties/#{links.first.propertyID}/links", links.map(&:to_hash))
47
+ end
48
+
49
+ def post_unit_links(links)
50
+ hash = {}
51
+ links.each do |p|
52
+ if hash.keys.include?(p.unitID)
53
+ hash[p.unitID] << p
54
+ else
55
+ hash[p.unitID] = [p]
56
+ end
57
+ end
58
+
59
+ hash.each do |unitID, unit_links|
60
+ request('PUT', "units/#{unitID}/links", unit_links.map(&:to_hash))
61
+ end
62
+ end
63
+
64
+ def unpost_property_link(id, url)
65
+ request('DELETE', URI.encode("properties/#{id}/links/"), { url: url })
66
+ end
67
+
68
+ def unpost_unit_link(id, url)
69
+ request('DELETE', URI.encode("units/#{id}/links/"), { url: url })
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,38 @@
1
+ module Rentlinx
2
+ module Linkable
3
+ def post_with_links
4
+ post
5
+ post_links
6
+ end
7
+
8
+ def post_links
9
+ Rentlinx.client.post_links(@links)
10
+ end
11
+
12
+ def links
13
+ return @links if @links
14
+
15
+ @links =
16
+ if defined? unitID
17
+ Rentlinx.client.get_links_for_unit(self)
18
+ else
19
+ Rentlinx.client.get_links_for_property_id(propertyID)
20
+ end
21
+ end
22
+
23
+ def links=(link_list)
24
+ @links = link_list.map do |link|
25
+ link.propertyID = propertyID
26
+ link.unitID = unitID if defined? unitID
27
+ link
28
+ end
29
+ end
30
+
31
+ def add_link(options)
32
+ options.merge!(propertyID: propertyID)
33
+ options.merge!(unitID: unitID) if defined? unitID
34
+ @links ||= []
35
+ @links << link_class.new(options)
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module Rentlinx
2
- VERSION = '0.6.4'
2
+ VERSION = '0.7.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rentlinx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AppFolio, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-29 00:00:00.000000000 Z
11
+ date: 2015-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -67,12 +67,16 @@ files:
67
67
  - lib/rentlinx/models/base.rb
68
68
  - lib/rentlinx/models/property.rb
69
69
  - lib/rentlinx/models/property_amenity.rb
70
+ - lib/rentlinx/models/property_link.rb
70
71
  - lib/rentlinx/models/property_photo.rb
71
72
  - lib/rentlinx/models/unit.rb
72
73
  - lib/rentlinx/models/unit_amenity.rb
74
+ - lib/rentlinx/models/unit_link.rb
73
75
  - lib/rentlinx/models/unit_photo.rb
74
76
  - lib/rentlinx/modules/amenity_client_methods.rb
75
77
  - lib/rentlinx/modules/amenityable.rb
78
+ - lib/rentlinx/modules/link_client_methods.rb
79
+ - lib/rentlinx/modules/linkable.rb
76
80
  - lib/rentlinx/modules/photo_client_methods.rb
77
81
  - lib/rentlinx/modules/photoable.rb
78
82
  - lib/rentlinx/modules/property_client_methods.rb