honest_renter 0.0.0 → 1.0.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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile.lock +23 -1
  5. data/LICENSE.txt +22 -0
  6. data/README.md +116 -1
  7. data/Rakefile +11 -0
  8. data/honest_renter.gemspec +6 -1
  9. data/lib/authenticator.rb +76 -0
  10. data/lib/client.rb +11 -0
  11. data/lib/honest_renter.rb +12 -0
  12. data/lib/request.rb +71 -0
  13. data/lib/requests/expandable.rb +10 -0
  14. data/lib/requests/filter.rb +9 -0
  15. data/lib/requests/find_all.rb +27 -0
  16. data/lib/requests/find_all_by_filter.rb +38 -0
  17. data/lib/requests/find_by_id.rb +23 -0
  18. data/lib/requests/post.rb +15 -0
  19. data/lib/requires.rb +18 -0
  20. data/lib/response.rb +30 -0
  21. data/lib/session.rb +20 -0
  22. data/models/applicant.rb +42 -0
  23. data/models/base_model.rb +57 -0
  24. data/models/candidate.rb +31 -0
  25. data/models/child.rb +20 -0
  26. data/models/code.rb +27 -0
  27. data/models/cooccupant.rb +20 -0
  28. data/models/country.rb +16 -0
  29. data/models/email.rb +21 -0
  30. data/models/emergency_contact.rb +20 -0
  31. data/models/ethnicity.rb +16 -0
  32. data/models/failed_login.rb +21 -0
  33. data/models/gender.rb +16 -0
  34. data/models/inbox_filters.rb +26 -0
  35. data/models/invite_settings.rb +23 -0
  36. data/models/member.rb +24 -0
  37. data/models/name.rb +22 -0
  38. data/models/notification.rb +18 -0
  39. data/models/notification_type.rb +19 -0
  40. data/models/organization.rb +23 -0
  41. data/models/participant.rb +21 -0
  42. data/models/person.rb +30 -0
  43. data/models/pet.rb +22 -0
  44. data/models/pet_age_category.rb +18 -0
  45. data/models/pet_size_category.rb +18 -0
  46. data/models/pet_type.rb +18 -0
  47. data/models/phone.rb +24 -0
  48. data/models/phone_type.rb +18 -0
  49. data/models/position.rb +23 -0
  50. data/models/reason_for_archive.rb +18 -0
  51. data/models/reason_for_eviction.rb +18 -0
  52. data/models/reason_for_exclusion.rb +18 -0
  53. data/models/reference.rb +20 -0
  54. data/models/relationship_type.rb +19 -0
  55. data/models/reminder.rb +19 -0
  56. data/models/residence.rb +25 -0
  57. data/models/smoking_status_category.rb +18 -0
  58. data/models/sort_by_option.rb +18 -0
  59. data/models/time_of_day.rb +18 -0
  60. data/models/title.rb +17 -0
  61. data/models/user.rb +20 -0
  62. data/models/vehicle.rb +21 -0
  63. data/modules/requests_unsupported.rb +21 -0
  64. data/modules/unrequestable.rb +23 -0
  65. data/test/fixtures/ethnicities/find_all.json +38 -0
  66. data/test/fixtures/members/find.json +31 -0
  67. data/test/fixtures/titles/find_all_by_filters.json +11 -0
  68. data/test/integration/find_all_by_filters_test.rb +12 -0
  69. data/test/integration/find_all_test.rb +11 -0
  70. data/test/integration/find_test.rb +10 -0
  71. data/test/lib/authenticator_test.rb +75 -0
  72. data/test/lib/requests/filter_test.rb +14 -0
  73. data/test/lib/requests/find_all_by_filter_test.rb +44 -0
  74. data/test/lib/requests/find_all_test.rb +59 -0
  75. data/test/lib/requests/find_by_id_test.rb +30 -0
  76. data/test/lib/requests/post_test.rb +38 -0
  77. data/test/lib/response_test.rb +46 -0
  78. data/test/lib/session_test.rb +45 -0
  79. data/test/models/base_model_test.rb +62 -0
  80. data/test/test_helper.rb +76 -0
  81. data/version.rb +1 -1
  82. metadata +134 -2
@@ -0,0 +1,27 @@
1
+ module HonestRenter
2
+ class FindAll
3
+ include Expandable
4
+
5
+ def initialize(resource_name, session, limit = nil, offset = nil)
6
+ @resource_name = resource_name
7
+ @session = session
8
+ @limit = limit
9
+ @offset = offset
10
+ end
11
+
12
+ def call
13
+ client = HonestRenter::Client.new
14
+ request = HonestRenter::Request.new(client, @session)
15
+ query = {}.tap do |params|
16
+ unless @expansions.nil? || @expansions.empty?
17
+ params[:expand] = JSON(@expansions)
18
+ end
19
+
20
+ params[:limit] = @limit unless @limit.nil?
21
+ params[:offset] = @offset unless @offset.nil?
22
+ end
23
+
24
+ request.get(@resource_name, query)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,38 @@
1
+ module HonestRenter
2
+ class FindAllByFilter
3
+ include Expandable
4
+
5
+ def initialize(resource_name, session, limit = nil, offset = nil)
6
+ @resource_name = resource_name
7
+ @session = session
8
+ @limit = limit
9
+ @offset = offset
10
+ end
11
+
12
+ def add_filter(filter)
13
+ @filters ||=[]
14
+ @filters << filter
15
+
16
+ self
17
+ end
18
+
19
+ def call
20
+ client = HonestRenter::Client.new
21
+ request = HonestRenter::Request.new(client, @session)
22
+ query = {}.tap do |params|
23
+ unless @expansions.nil? || @expansions.empty?
24
+ params[:expand] = JSON(@expansions)
25
+ end
26
+
27
+ Array(@filters).each do |filter|
28
+ params[filter.key] = filter.value
29
+ end
30
+
31
+ params[:limit] = @limit unless @limit.nil?
32
+ params[:offset] = @offset unless @offset.nil?
33
+ end
34
+
35
+ request.get(@resource_name, query)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ module HonestRenter
2
+ class FindById
3
+ include Expandable
4
+
5
+ def initialize(id, resource_name, session)
6
+ @id = id
7
+ @resource_name = resource_name
8
+ @session = session
9
+ end
10
+
11
+ def call
12
+ client = HonestRenter::Client.new
13
+ request = HonestRenter::Request.new(client, @session)
14
+ url = "#{ @resource_name }/#{ @id }"
15
+
16
+ query = {}.tap do |params|
17
+ params[:expand] = JSON(@expansions) unless Array(@expansions).empty?
18
+ end
19
+
20
+ request.get(url, query)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ module HonestRenter
2
+ class Post
3
+ def initialize(resource_name, body, session=nil)
4
+ @resource_name = resource_name
5
+ @body = body
6
+ @session = session
7
+ end
8
+
9
+ def call
10
+ client = HonestRenter::Client.new
11
+ request = HonestRenter::Request.new(client, @session)
12
+ request.post(@resource_name, @body)
13
+ end
14
+ end
15
+ end
data/lib/requires.rb ADDED
@@ -0,0 +1,18 @@
1
+ # master require file for whole tree
2
+ require_relative 'client'
3
+ require_relative 'request'
4
+ require_relative 'response'
5
+ require_relative 'session'
6
+ require_relative 'authenticator'
7
+ require_relative '../models/base_model'
8
+ require_relative 'requests/expandable'
9
+
10
+ [
11
+ '../../modules',
12
+ '../../models',
13
+ '../requests'
14
+ ].each do |dir|
15
+ Dir[File.expand_path("#{dir}/*.rb", __FILE__)].each do |file|
16
+ require file
17
+ end
18
+ end
data/lib/response.rb ADDED
@@ -0,0 +1,30 @@
1
+ module HonestRenter
2
+ class Response
3
+ class MalformedResponse < StandardError; end
4
+ class RequestError < StandardError; end
5
+
6
+ attr_reader :body, :headers, :error
7
+
8
+ HAPPY_STATUSES = [200, 300].freeze
9
+
10
+ def initialize(raw_response)
11
+ @status = raw_response.status
12
+ @headers = raw_response.headers
13
+
14
+ begin
15
+ @body = JSON.parse(raw_response.body)
16
+ rescue JSON::ParserError, TypeError => e
17
+ raise MalformedResponse,
18
+ "Honest Renter response body not valid JSON, #{ raw_response.body } given"
19
+ end
20
+
21
+ if @body.key?('error')
22
+ @error = RequestError.new(@body['error']['message'])
23
+ end
24
+ end
25
+
26
+ def success?
27
+ HAPPY_STATUSES.include?(@status.floor)
28
+ end
29
+ end
30
+ end
data/lib/session.rb ADDED
@@ -0,0 +1,20 @@
1
+ module HonestRenter
2
+ class Session
3
+ attr_reader :honr_authentication_token, :honr_session
4
+
5
+ def initialize(honr_authentication_token, honr_session)
6
+ @honr_authentication_token = honr_authentication_token.to_s
7
+ @honr_session = JSON.parse(honr_session) rescue nil
8
+ end
9
+
10
+ def expires_at
11
+ return Time.now if @honr_session.nil?
12
+ Time.at(@honr_session['expires'])
13
+ end
14
+
15
+ def expired?
16
+ return true if @honr_session.nil? || !@honr_session.is_a?(Hash)
17
+ expires_at < Time.now
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ module HonestRenter
2
+ class Applicant < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :account,
6
+ :administration,
7
+ :approved,
8
+ :archived,
9
+ :assessments,
10
+ :candidate,
11
+ :children,
12
+ :code,
13
+ :comments,
14
+ :cooccupants,
15
+ :correctedAddress,
16
+ :desired_move_in_date,
17
+ :fields,
18
+ :invitation,
19
+ :invite_cooccupants,
20
+ :location,
21
+ :location_is_correct,
22
+ :metadata,
23
+ :norm,
24
+ :number_of_adults,
25
+ :number_of_children,
26
+ :reason_for_archiving,
27
+ :reminders,
28
+ :results,
29
+ :sent_return_code,
30
+ :unit,
31
+ :viewings
32
+ ].freeze
33
+
34
+ attr_accessor *ATTRIBUTES
35
+
36
+ class << self
37
+ def attr_name
38
+ 'applicants'
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,57 @@
1
+ module HonestRenter
2
+ class BaseModel
3
+ def initialize(data)
4
+ data.each do |key, value|
5
+ snaked = HonestRenter.snake_case(key)
6
+ if self.respond_to?(snaked)
7
+ send(:"#{snaked}=", value)
8
+ end
9
+ end
10
+ end
11
+
12
+ def to_h
13
+ {}.tap do |hash|
14
+ instance_variables.each do |variable|
15
+ name = variable.to_s[1..-1]
16
+ value = instance_variable_get(variable)
17
+ hash[name] = value
18
+ end
19
+ end
20
+ end
21
+
22
+ class << self
23
+ def find_all(session, limit=nil, offset=nil)
24
+ args = [session, limit, offset].compact
25
+ response = HonestRenter::FindAll.new(attr_name, *args).call
26
+ raise response.error unless response.success?
27
+ initialize_all_from_response(response)
28
+ end
29
+
30
+ def find(id, session)
31
+ response = HonestRenter::FindById.new(id, attr_name, session).call
32
+ raise response.error unless response.success?
33
+ new(response.body["data"])
34
+ end
35
+
36
+ def find_all_by_filters(filters, session, limit=nil, offset=nil)
37
+ args = [session, limit, offset].compact
38
+ request = HonestRenter::FindAllByFilter.new(attr_name, *args)
39
+ filters.each { |filter| request.add_filter(filter) }
40
+ response = request.call
41
+
42
+ raise response.error unless response.success?
43
+ initialize_all_from_response(response)
44
+ end
45
+
46
+ private
47
+
48
+ def initialize_all_from_response(response)
49
+ response.body['data'].map do |data|
50
+ new(data)
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ private_constant :BaseModel
57
+ end
@@ -0,0 +1,31 @@
1
+ module HonestRenter
2
+ class Candidate < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :administrations,
6
+ :best_time_to_contact,
7
+ :currently_employed,
8
+ :emergency_contacts,
9
+ :explination_for_background_checks,
10
+ :explination_for_eviction,
11
+ :has_been_evicted,
12
+ :has_explination_for_background_check,
13
+ :has_pet,
14
+ :has_problems_with_landlord,
15
+ :has_vehicle,
16
+ :problems_with_landlord,
17
+ :residences,
18
+ :smoking_status,
19
+ :pets,
20
+ :vehicles
21
+ ].freeze
22
+
23
+ attr_accessor *ATTRIBUTES
24
+
25
+ class << self
26
+ def attr_name
27
+ 'candidates'
28
+ end
29
+ end
30
+ end
31
+ end
data/models/child.rb ADDED
@@ -0,0 +1,20 @@
1
+ module HonestRenter
2
+ class Child < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :age,
6
+ :applicant,
7
+ :created
8
+ ].freeze
9
+
10
+ attr_accessor *ATTRIBUTES
11
+
12
+ include Unrequestable
13
+
14
+ class << self
15
+ def attr_name
16
+ 'child'
17
+ end
18
+ end
19
+ end
20
+ end
data/models/code.rb ADDED
@@ -0,0 +1,27 @@
1
+ module HonestRenter
2
+ class Code < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :account,
6
+ :administration,
7
+ :applicant,
8
+ :assessments,
9
+ :created,
10
+ :email,
11
+ :expires,
12
+ :location,
13
+ :metadata,
14
+ :person,
15
+ :unit,
16
+ :value
17
+ ].freeze
18
+
19
+ attr_accessor *ATTRIBUTES
20
+
21
+ class << self
22
+ def attr_name
23
+ 'codes'
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ module HonestRenter
2
+ class Cooccupant < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :applicant,
6
+ :created,
7
+ :occupant,
8
+ :person,
9
+ :relationship
10
+ ].freeze
11
+
12
+ attr_accessor *ATTRIBUTES
13
+
14
+ class << self
15
+ def attr_name
16
+ 'cooccupants'
17
+ end
18
+ end
19
+ end
20
+ end
data/models/country.rb ADDED
@@ -0,0 +1,16 @@
1
+ module HonestRenter
2
+ class Country < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :country
6
+ ].freeze
7
+
8
+ attr_accessor *ATTRIBUTES
9
+
10
+ class << self
11
+ def attr_name
12
+ 'countries'
13
+ end
14
+ end
15
+ end
16
+ end
data/models/email.rb ADDED
@@ -0,0 +1,21 @@
1
+ module HonestRenter
2
+ class Email < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :address,
6
+ :confirmed,
7
+ :created,
8
+ :flagged,
9
+ :organization,
10
+ :person
11
+ ].freeze
12
+
13
+ attr_accessor *ATTRIBUTES
14
+
15
+ class << self
16
+ def attr_name
17
+ 'emails'
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ module HonestRenter
2
+ class EmergencyContact < BaseModel
3
+ ATTRIBUTES = [
4
+ :id,
5
+ :candidate,
6
+ :contact,
7
+ :relationship
8
+ ].freeze
9
+
10
+ attr_accessor *ATTRIBUTES
11
+
12
+ include Unrequestable
13
+
14
+ class << self
15
+ def attr_name
16
+ 'emergency_contacts'
17
+ end
18
+ end
19
+ end
20
+ end