realogy 0.1.0 → 0.2.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
- SHA1:
3
- metadata.gz: 158674314e0de0322caa8cfaea2a2dad52a45149
4
- data.tar.gz: 4ee19dc86fcdb3ca33382f02e2ad7804ef6c025b
2
+ SHA256:
3
+ metadata.gz: 027741bd06711d8a56533a97c36c400cb05e63971fbd208c44918bc65620899e
4
+ data.tar.gz: 8211d5c915eef8636890f90498e233b61717dec03f2ab14b8a1afcbf81153b54
5
5
  SHA512:
6
- metadata.gz: acb855f47a001162b1fb682e6ae58520d7743554b84ce2d28d9aa652eb16cad5431884c6395d0e59d0339b9414f001c83638b2b782b7a2b8a9cbefdf1c60ea55
7
- data.tar.gz: e16951a7df7497e26776d456e2bc44daddc2be4b7dcd7633b342cd8536579a20eee315d7dee11798cdbad0daae91af6df21ced83c19b397e19becc567bce98c1
6
+ metadata.gz: 321e8dfb8d03406ee0d3e21587c2a556bb72ded74b643e21c80238f016baef083419182da5b5108e36c237784f39e8a22b01ddf86ea3433aed560a7577598442
7
+ data.tar.gz: 8b31fd0668825b169f51a187b6506230842de9c0456a416d71bcaf572834121c74120edfe39bd0bae6b4228d3a42b234f54ad1e0068373036dac7a63ca9c7a2e
data/README.md CHANGED
@@ -71,14 +71,35 @@ Catch-all that runs all other syncing tasks:
71
71
  rails realogy:sync_active_entities # Sync all active entities
72
72
  ```
73
73
 
74
- #### Delete Expired Entities
74
+ #### Syncing Entities Delta
75
+
76
+ There are a number of rake tasks for syncing entities within a delta span of time. Tasks default to last 15 minutes if not otherwise specified. These tasks will both update new/updated entities, as well as delete expired ones.
77
+
78
+ ```
79
+ rails realogy:sync_agents_delta # Sync agents delta for last 15 minutes
80
+ rails realogy:sync_agents_delta[10] # Sync agents delta for last 10 minutes
81
+
82
+ rails realogy:sync_companies_delta # Sync companies delta for last 15 minutes
83
+ rails realogy:sync_companies_delta[10] # Sync companies delta for last 10 minutes
84
+
85
+ rails realogy:sync_listings_delta # Sync listings delta for last 15 minutes
86
+ rails realogy:sync_listings_delta[10] # Sync listings delta for last 10 minutes
87
+
88
+ rails realogy:sync_offices_delta # Sync offices delta for last 15 minutes
89
+ rails realogy:sync_offices_delta[10] # Sync offices delta for last 10 minutes
90
+
91
+ rails realogy:sync_teams_delta # Sync teams delta for last 15 minutes
92
+ rails realogy:sync_teams_delta[10] # Sync teams delta for last 10 minutes
93
+ ```
94
+
95
+ #### Delete All Expired Entities
75
96
 
76
97
  ```
77
- rails realogy:delete_expired_agents # Delete Expired Agents
78
- rails realogy:delete_expired_companies # Delete Expired Companies
79
- rails realogy:delete_expired_listings # Delete Expired Listings
80
- rails realogy:delete_expired_offices # Delete Expired Offices
81
- rails realogy:delete_expired_teams # Delete Expired Teams
98
+ rails realogy:delete_expired_agents # Delete All Expired Agents
99
+ rails realogy:delete_expired_companies # Delete All Expired Companies
100
+ rails realogy:delete_expired_listings # Delete All Expired Listings
101
+ rails realogy:delete_expired_offices # Delete All Expired Offices
102
+ rails realogy:delete_expired_teams # Delete All Expired Teams
82
103
  ```
83
104
 
84
105
  Catch-all that runs all other deletion tasks:
@@ -111,11 +132,11 @@ realogy = Realogy::DataSync.client
111
132
  The calls to retrieve entities are:
112
133
 
113
134
  ```ruby
114
- realogy.get_active_agents()
115
- realogy.get_active_companies()
116
- realogy.get_active_listings()
117
- realogy.get_active_offices()
118
- realogy.get_active_teams()
135
+ realogy.get_active_agents
136
+ realogy.get_active_companies
137
+ realogy.get_active_listings
138
+ realogy.get_active_offices
139
+ realogy.get_active_teams
119
140
  ```
120
141
 
121
142
  When no argument is submitted, all entities are returned. Filters can be applied for `brandCode` or `countryCode` though, provided as keys in a hash. For example:
@@ -136,7 +157,27 @@ realogy.get_active_agents({brandCode: "SIR", countryCode: "SE"})
136
157
 
137
158
  #### Retrieve delta of objects
138
159
 
139
- TODO
160
+ The calls to retrieve entities that have recently changed are:
161
+
162
+ ```ruby
163
+ realogy.get_agents_delta
164
+ realogy.get_companies_delta
165
+ realogy.get_listings_delta
166
+ realogy.get_offices_delta
167
+ realogy.get_teams_delta
168
+ ```
169
+
170
+ Each hash in the returned arrays includes a key `action` that returns either `Delete` or `Upsert` to indicate if the object has been deleted or created/updated.
171
+
172
+ When no argument is passed, the delta returned is for the last 15 minutes. A custom minutes delta can be passed in:
173
+
174
+ ```ruby
175
+ realogy.get_agents_delta({since: 15.minutes.ago}) # 15 minutes is the default
176
+ realogy.get_companies_delta({since: 1.hour.ago})
177
+ realogy.get_listings_delta({since: 2.hours.ago})
178
+ realogy.get_offices_delta({since: 5.minutes.ago})
179
+ realogy.get_teams_delta({since: 1.day.ago})
180
+ ```
140
181
 
141
182
  #### Retrieve JSON object
142
183
 
@@ -23,11 +23,11 @@ module Realogy
23
23
  }
24
24
 
25
25
  DELTA_API_ENDPOINTS = {
26
- get_agent_delta: "agents/delta",
27
- get_company_delta: "companies/delta",
28
- get_listing_delta: "listings/delta",
29
- get_office_delta: "offices/delta",
30
- get_team_delta: "teams/delta"
26
+ get_agents_delta: "agents/delta",
27
+ get_companies_delta: "companies/delta",
28
+ get_listings_delta: "listings/delta",
29
+ get_offices_delta: "offices/delta",
30
+ get_teams_delta: "teams/delta"
31
31
  }
32
32
 
33
33
  DETAILS_API_ENDPOINTS = {
@@ -51,6 +51,22 @@ module Realogy
51
51
  return perform_api_call(endpoint, params)
52
52
  end
53
53
  end
54
+
55
+ DELTA_API_ENDPOINTS.keys.each do |method_name|
56
+ define_method method_name do |*args|
57
+ entities = []
58
+ hash = args.first.is_a?(Hash) ? args.first : {since: 15.minutes.ago}
59
+ params = {'since': JSON[hash[:since].to_json]}
60
+ endpoint = DELTA_API_ENDPOINTS[method_name]
61
+ response = perform_api_call(endpoint, params)
62
+ entities << response["data"]
63
+ while response["nextLink"].present?
64
+ response = perform_simple_call(response["nextLink"])
65
+ entities << response["data"]
66
+ end
67
+ return entities.flatten
68
+ end
69
+ end
54
70
 
55
71
  DETAILS_API_ENDPOINTS.keys.each do |method_name|
56
72
  define_method method_name do |id|
@@ -67,6 +83,17 @@ module Realogy
67
83
  return URI([ENV["REALOGY_API_BASE_URL"], endpoint].join("/"))
68
84
  end
69
85
 
86
+ def perform_simple_call(url)
87
+ uri = URI(url)
88
+ request = Net::HTTP::Get.new(uri)
89
+ request['Ocp-Apim-Subscription-Key'] = ENV["REALOGY_SUBSCRIPTION_KEY"]
90
+ request['Authorization'] = "Bearer #{auth_token}"
91
+ response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
92
+ http.request(request)
93
+ end
94
+ return JSON(response.body)
95
+ end
96
+
70
97
  def perform_api_call(endpoint, params)
71
98
  query = params.present? ? URI.encode_www_form(params) : ""
72
99
  uri = uri_for_endpoint(endpoint)
@@ -10,7 +10,7 @@ class Realogy::Entity < ApplicationRecord
10
10
  end
11
11
 
12
12
  def self.triage hash
13
- @object = self.find_or_initialize_by(entity_id: hash["entityId"])
13
+ @object = self.find_or_initialize_by(entity_id: [hash["entityId"], hash["id"]].compact.first)
14
14
  @object.last_update_on = hash["lastUpdateOn"]
15
15
  @object.populate if @object.needs_updating?
16
16
  end
@@ -59,7 +59,7 @@ namespace :realogy do
59
59
  call = ["get_active_", plural].join.to_sym
60
60
  existing = klass.select(:entity_id).pluck(:entity_id)
61
61
  current = Realogy::DataSync.client.__send__(call).map{|e| e["entityId"]}
62
- klass.where(entity_id: (existing - current)).delete_all
62
+ klass.where(entity_id: (existing - current)).destroy_all
63
63
  end
64
64
 
65
65
  desc "Delete all expired entities"
@@ -92,5 +92,49 @@ namespace :realogy do
92
92
  delete_expired_entities_of_type Realogy::Team
93
93
  end
94
94
 
95
+ def perform_delta_update_for klass, since
96
+ return unless %w(agents companies listings offices teams).include?(plural = klass.to_s.tableize.split("/").last)
97
+ call = "get_#{plural}_delta".to_sym
98
+ Realogy::DataSync.client.send(call, {since: since.to_i.minutes.ago}).each do |hash|
99
+ case hash["action"]
100
+ when "Delete"
101
+ klass.find_by(entity_id: hash["id"]).try(:destroy)
102
+ when "Upsert"
103
+ hash["class"] = klass.to_s
104
+ active_job_configured? ? PopulateRealogyEntityJob.perform_later(hash) : klass::triage(hash)
105
+ end
106
+ end
107
+ end
108
+
109
+ desc "Delta update for Agents. Optionally provide delta in minutes."
110
+ task :sync_agents_delta, [:since_minutes] => [:environment] do |t, args|
111
+ args.with_defaults(since_minutes: 15)
112
+ perform_delta_update_for Realogy::Agent, args[:since_minutes]
113
+ end
114
+
115
+ desc "Delta update for Companies. Optionally provide delta in minutes."
116
+ task :sync_companies_delta, [:since_minutes] => [:environment] do |t, args|
117
+ args.with_defaults(since_minutes: 15)
118
+ perform_delta_update_for Realogy::Company, args[:since_minutes]
119
+ end
120
+
121
+ desc "Delta update for Listings. Optionally provide delta in minutes."
122
+ task :sync_listings_delta, [:since_minutes] => [:environment] do |t, args|
123
+ args.with_defaults(since_minutes: 15)
124
+ perform_delta_update_for Realogy::Listing, args[:since_minutes]
125
+ end
126
+
127
+ desc "Delta update for Offices. Optionally provide delta in minutes."
128
+ task :sync_offices_delta, [:since_minutes] => [:environment] do |t, args|
129
+ args.with_defaults(since_minutes: 15)
130
+ perform_delta_update_for Realogy::Office, args[:since_minutes]
131
+ end
132
+
133
+ desc "Delta update for Teams. Optionally provide delta in minutes."
134
+ task :sync_teams_delta, [:since_minutes] => [:environment] do |t, args|
135
+ args.with_defaults(since_minutes: 15)
136
+ perform_delta_update_for Realogy::Team, args[:since_minutes]
137
+ end
138
+
95
139
 
96
140
  end
@@ -1,3 +1,3 @@
1
1
  module Realogy
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/realogy-0.1.0.gem ADDED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: realogy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Edlund
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-20 00:00:00.000000000 Z
11
+ date: 2018-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -126,6 +126,7 @@ files:
126
126
  - lib/realogy/railtie.rb
127
127
  - lib/realogy/tasks/realogy.rake
128
128
  - lib/realogy/version.rb
129
+ - realogy-0.1.0.gem
129
130
  - realogy.gemspec
130
131
  homepage: https://github.com/arcticleo/realogy
131
132
  licenses:
@@ -147,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
148
  version: '0'
148
149
  requirements: []
149
150
  rubyforge_project:
150
- rubygems_version: 2.6.14
151
+ rubygems_version: 2.7.6
151
152
  signing_key:
152
153
  specification_version: 4
153
154
  summary: Encapsulation of Realogy's DataSync API.