justimmo_client 0.5.1 → 0.6.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.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +2 -2
- data/README.md +4 -5
- data/examples/client.rb +1 -1
- data/lib/justimmo_client/api/v1/interfaces/employee_interface.rb +30 -8
- data/lib/justimmo_client/api/v1/interfaces/justimmo_interface.rb +32 -0
- data/lib/justimmo_client/api/v1/interfaces/realty_interface.rb +93 -20
- data/lib/justimmo_client/api/v1/models/country.rb +1 -1
- data/lib/justimmo_client/api/v1/models/geo_location.rb +5 -3
- data/lib/justimmo_client/api/v1/models/realty.rb +1 -1
- data/lib/justimmo_client/api/v1/models/realty_price.rb +2 -1
- data/lib/justimmo_client/api/v1/models/realty_usage.rb +1 -1
- data/lib/justimmo_client/api/v1/representers/json/city_representer.rb +16 -0
- data/lib/justimmo_client/api/v1/representers/json/contact_representer.rb +6 -21
- data/lib/justimmo_client/api/v1/representers/json/country_representer.rb +13 -0
- data/lib/justimmo_client/api/v1/representers/json/employee_representer.rb +32 -0
- data/lib/justimmo_client/api/v1/representers/json/federal_state_representer.rb +15 -0
- data/lib/justimmo_client/api/v1/representers/json/{location_representer.rb → geo_location_representer.rb} +2 -1
- data/lib/justimmo_client/api/v1/representers/json/realty_area_representer.rb +27 -0
- data/lib/justimmo_client/api/v1/representers/json/realty_category_representer.rb +4 -12
- data/lib/justimmo_client/api/v1/representers/json/realty_price_representer.rb +31 -0
- data/lib/justimmo_client/api/v1/representers/json/realty_representer.rb +66 -0
- data/lib/justimmo_client/api/v1/representers/json/realty_room_count_representer.rb +21 -0
- data/lib/justimmo_client/api/v1/representers/json/realty_type_representer.rb +12 -0
- data/lib/justimmo_client/api/v1/representers/json/region_representer.rb +12 -0
- data/lib/justimmo_client/api/v1/requests/justimmo_request.rb +1 -9
- data/lib/justimmo_client/core/caching.rb +0 -16
- data/lib/justimmo_client/version.rb +1 -1
- metadata +14 -6
- data/lib/justimmo_client/api/v1/representers/json/attachment_image_representer.rb +0 -16
- data/lib/justimmo_client/api/v1/representers/json/attachment_representer.rb +0 -15
- data/lib/justimmo_client/api/v1/representers/json/realty_detail_representer.rb +0 -69
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1111c8bd67a8a48f624bc368fe44db21199b6e1a
|
|
4
|
+
data.tar.gz: 6d8c62a4cc9e2373ae2ff999b446027ed05998b4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 66da6c40804b2acdf9580898fdeccec4dcc0fc04ef4c1b5829754748a8f12d05126609981c1ccd61ad835187eb7e1f1d4a6d945289f284de6c52994e9eddef55
|
|
7
|
+
data.tar.gz: 19f6be67d186e5e7a4dd3ec56854f6556669624beb53bdb23b9e16cf8ce5745de506c61035d4efc2b6cdf9c5c3b8f6e04f8edfcdf1db0b1fdfb7630e3e29163f
|
data/.gitlab-ci.yml
CHANGED
data/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
[](https://gitlab.com/exacting/justimmo_client/commits/master)
|
|
2
|
+
[](https://exacting.gitlab.io/justimmo_client)
|
|
3
|
+
[](https://www.codacy.com/app/Exacting/justimmo_client?utm_source=gitlab.com&utm_medium=referral&utm_content=exacting/justimmo_client&utm_campaign=Badge_Grade)
|
|
4
4
|
[](http://inch-ci.org/github/exacting/justimmo-client-ruby)
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
# Justimmo Client
|
|
8
7
|
|
|
9
8
|
Ruby client for the [Justimmo](http://www.justimmo.at) [REST API](http://api-docs.justimmo.at/api/index.html).
|
|
@@ -46,7 +45,7 @@ end
|
|
|
46
45
|
```ruby
|
|
47
46
|
class RealtyController < ApplicationController
|
|
48
47
|
def index
|
|
49
|
-
@realties = JustimmoClient
|
|
48
|
+
@realties = JustimmoClient.realties(zip_code: 6020, limit: 5)
|
|
50
49
|
end
|
|
51
50
|
end
|
|
52
51
|
```
|
data/examples/client.rb
CHANGED
|
@@ -4,31 +4,53 @@ module JustimmoClient::V1
|
|
|
4
4
|
# Public employee query interface
|
|
5
5
|
module EmployeeInterface
|
|
6
6
|
extend JustimmoClient::Utils
|
|
7
|
+
extend JustimmoInterface
|
|
7
8
|
|
|
8
9
|
module_function
|
|
9
10
|
|
|
10
11
|
# @return [Array<Employee>]
|
|
11
12
|
def list
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
with_cache cache_key("employee/list"),
|
|
14
|
+
on_hit: ->(cached) do
|
|
15
|
+
representer(:employee, :json).for_collection.new([]).from_json(cached)
|
|
16
|
+
end,
|
|
17
|
+
on_miss: -> do
|
|
18
|
+
xml_response = request(:employee).list
|
|
19
|
+
model = Struct.new(:employees).new
|
|
20
|
+
represented = representer(:employee_list).new(model).from_xml(xml_response).employees
|
|
21
|
+
new_cache = representer(:employee, :json).for_collection.new(represented).to_json
|
|
22
|
+
[represented, new_cache]
|
|
23
|
+
end
|
|
15
24
|
rescue JustimmoClient::RetrievalFailed
|
|
16
25
|
[]
|
|
17
26
|
end
|
|
18
27
|
|
|
19
28
|
# @return [Employee]
|
|
20
29
|
def detail(id)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
with_cache cache_key("employee/detail", id: id),
|
|
31
|
+
on_hit: ->(cached) do
|
|
32
|
+
representer(:employee, :json).new(model(:employee).new).from_json(cached)
|
|
33
|
+
end,
|
|
34
|
+
on_miss: -> do
|
|
35
|
+
xml_response = request(:employee).detail(id)
|
|
36
|
+
model = model(:employee).new
|
|
37
|
+
represented = representer(:employee).new(model).from_xml(xml_response)
|
|
38
|
+
new_cache = representer(:employee, :json).new(represented).to_json
|
|
39
|
+
[represented, new_cache]
|
|
40
|
+
end
|
|
24
41
|
rescue JustimmoClient::RetrievalFailed
|
|
25
42
|
nil
|
|
26
43
|
end
|
|
27
44
|
|
|
28
45
|
# @return [Array<Integer>]
|
|
29
46
|
def ids
|
|
30
|
-
|
|
31
|
-
|
|
47
|
+
with_cache cache_key("employee/ids"),
|
|
48
|
+
on_hit: ->(cached) { ::JSON.parse(cached) },
|
|
49
|
+
on_miss: -> do
|
|
50
|
+
json_response = request(:employee).ids
|
|
51
|
+
json_parsed = ::JSON.parse(json_response).map(&:to_i)
|
|
52
|
+
[json_parsed, ::JSON.generate(json_parsed)]
|
|
53
|
+
end
|
|
32
54
|
rescue JustimmoClient::RetrievalFailed
|
|
33
55
|
[]
|
|
34
56
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JustimmoClient::V1
|
|
4
|
+
module JustimmoInterface
|
|
5
|
+
include JustimmoClient::Caching
|
|
6
|
+
include JustimmoClient::Logging
|
|
7
|
+
|
|
8
|
+
def cache_key(endpoint, params = {})
|
|
9
|
+
key = Digest::SHA256.new
|
|
10
|
+
key << endpoint
|
|
11
|
+
key << params.to_s
|
|
12
|
+
key.hexdigest
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def with_cache(key, on_hit:, on_miss:, **options)
|
|
16
|
+
log.debug("Looking up cache key #{key}")
|
|
17
|
+
data = nil
|
|
18
|
+
cached = cache.read(key)
|
|
19
|
+
|
|
20
|
+
if cached.nil?
|
|
21
|
+
log.debug("Cache miss for #{key}")
|
|
22
|
+
data, new_cache = on_miss.call()
|
|
23
|
+
cache.write(key, new_cache, options)
|
|
24
|
+
else
|
|
25
|
+
log.debug("Cache hit for #{key}")
|
|
26
|
+
data = on_hit.call(cached)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
data
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -4,8 +4,12 @@ require "json"
|
|
|
4
4
|
|
|
5
5
|
module JustimmoClient::V1
|
|
6
6
|
# Public realty query interface
|
|
7
|
+
#
|
|
8
|
+
# Glues all components together.
|
|
9
|
+
# Handles caching, parsing and converting XML and JSON into data models.
|
|
7
10
|
module RealtyInterface
|
|
8
11
|
extend JustimmoClient::Utils
|
|
12
|
+
extend JustimmoInterface
|
|
9
13
|
|
|
10
14
|
module_function
|
|
11
15
|
|
|
@@ -55,9 +59,17 @@ module JustimmoClient::V1
|
|
|
55
59
|
# @option options [String] :location
|
|
56
60
|
# @return [Array<Realty>] An array of basic realty objects, or an empty array on error.
|
|
57
61
|
def list(options = {})
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
with_cache cache_key("realty/list", options),
|
|
63
|
+
on_hit: ->(cached) do
|
|
64
|
+
representer(:realty, :json).for_collection.new([]).from_json(cached)
|
|
65
|
+
end,
|
|
66
|
+
on_miss: -> do
|
|
67
|
+
model = Struct.new(:realties).new
|
|
68
|
+
xml_response = request(:realty).list(options)
|
|
69
|
+
represented = representer(:realty_list).new(model).from_xml(xml_response).realties
|
|
70
|
+
new_cache = representer(:realty, :json).for_collection.new(realties).to_json
|
|
71
|
+
[represented, new_cache]
|
|
72
|
+
end
|
|
61
73
|
rescue JustimmoClient::RetrievalFailed
|
|
62
74
|
[]
|
|
63
75
|
end
|
|
@@ -66,9 +78,17 @@ module JustimmoClient::V1
|
|
|
66
78
|
# @param [Symbol, String] lang
|
|
67
79
|
# @return [Realty, nil] A detailed realty object, or nil if it could not be found.
|
|
68
80
|
def detail(id, lang: nil)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
81
|
+
with_cache cache_key("realty/detail", options),
|
|
82
|
+
on_hit: ->(cached) do
|
|
83
|
+
representer(:realty, :json).new(model(:realty)).from_json(cached)
|
|
84
|
+
end,
|
|
85
|
+
on_miss: -> do
|
|
86
|
+
xml_response = request(:realty).detail(id, lang: lang)
|
|
87
|
+
model = Struct.new(:realty).new
|
|
88
|
+
represented = representer(:realty_detail).new(model).from_xml(xml_response).realty
|
|
89
|
+
new_cache = representer(:realty, :json).new(realty).to_json
|
|
90
|
+
[represented, new_cache]
|
|
91
|
+
end
|
|
72
92
|
rescue JustimmoClient::RetrievalFailed
|
|
73
93
|
nil
|
|
74
94
|
end
|
|
@@ -82,8 +102,13 @@ module JustimmoClient::V1
|
|
|
82
102
|
# @option (see list)
|
|
83
103
|
# @return [Array<Integer>] An array of realty ids, empty array if no results.
|
|
84
104
|
def ids(options = {})
|
|
85
|
-
|
|
86
|
-
|
|
105
|
+
with_cache cache_key("realty/ids", options),
|
|
106
|
+
on_hit: ->(cached) { ::JSON.parse(cached) },
|
|
107
|
+
on_miss: -> do
|
|
108
|
+
json_response = request(:realty).ids(options)
|
|
109
|
+
json_parsed = ::JSON.parse(json_response).map(&:to_i)
|
|
110
|
+
[json_parsed, ::JSON.generate(json_parsed)]
|
|
111
|
+
end
|
|
87
112
|
rescue JustimmoClient::RetrievalFailed
|
|
88
113
|
[]
|
|
89
114
|
end
|
|
@@ -91,8 +116,16 @@ module JustimmoClient::V1
|
|
|
91
116
|
# @option options [Boolean] :all (false)
|
|
92
117
|
# @return [Array<RealtyCategory>]
|
|
93
118
|
def categories(options = {})
|
|
94
|
-
|
|
95
|
-
|
|
119
|
+
with_cache cache_key("realty/categories", options),
|
|
120
|
+
on_hit: ->(cached) do
|
|
121
|
+
representer(:realty_category, :json).for_collection.new([]).from_json(cached)
|
|
122
|
+
end,
|
|
123
|
+
on_miss: -> do
|
|
124
|
+
xml_response = request(:realty).categories(options)
|
|
125
|
+
represented = representer(:realty_category).for_collection.new([]).from_xml(xml_response)
|
|
126
|
+
new_cache = representer(:realty_category, :json).for_collection.new(represented).to_json
|
|
127
|
+
[represented, new_cache]
|
|
128
|
+
end
|
|
96
129
|
rescue JustimmoClient::RetrievalFailed
|
|
97
130
|
[]
|
|
98
131
|
end
|
|
@@ -100,8 +133,16 @@ module JustimmoClient::V1
|
|
|
100
133
|
# @option options [Boolean] :all (false)
|
|
101
134
|
# @return [Array<RealtyType>]
|
|
102
135
|
def types(options = {})
|
|
103
|
-
|
|
104
|
-
|
|
136
|
+
with_cache cache_key("realty/types", options),
|
|
137
|
+
on_hit: ->(cached) do
|
|
138
|
+
representer(:realty_type, :json).for_collection.new([]).from_json(cached)
|
|
139
|
+
end,
|
|
140
|
+
on_miss: -> do
|
|
141
|
+
xml_response = request(:realty).types(options)
|
|
142
|
+
represented = representer(:realty_type).for_collection.new([]).from_xml(xml_response)
|
|
143
|
+
new_cache = representer(:realty_type, :json).for_collection.new(represented).to_json
|
|
144
|
+
[represented, new_cache]
|
|
145
|
+
end
|
|
105
146
|
rescue JustimmoClient::RetrievalFailed
|
|
106
147
|
[]
|
|
107
148
|
end
|
|
@@ -109,8 +150,16 @@ module JustimmoClient::V1
|
|
|
109
150
|
# @option options [Boolean] :all (false)
|
|
110
151
|
# @return [Array<Country>]
|
|
111
152
|
def countries(options = {})
|
|
112
|
-
|
|
113
|
-
|
|
153
|
+
with_cache cache_key("realty/countries", options),
|
|
154
|
+
on_hit: ->(cached) do
|
|
155
|
+
representer(:country, :json).for_collection.new([]).from_json(cached)
|
|
156
|
+
end,
|
|
157
|
+
on_miss: -> do
|
|
158
|
+
xml_response = request(:realty).countries(options)
|
|
159
|
+
represented = representer(:country).for_collection.new([]).from_xml(xml_response)
|
|
160
|
+
new_cache = representer(:country, :json).for_collection.new(represented).to_json
|
|
161
|
+
[represented, new_cache]
|
|
162
|
+
end
|
|
114
163
|
rescue JustimmoClient::RetrievalFailed
|
|
115
164
|
[]
|
|
116
165
|
end
|
|
@@ -119,8 +168,16 @@ module JustimmoClient::V1
|
|
|
119
168
|
# @option options [Integer] :country (nil)
|
|
120
169
|
# @return [Array<FederalState>]
|
|
121
170
|
def federal_states(options = {})
|
|
122
|
-
|
|
123
|
-
|
|
171
|
+
with_cache cache_key("realty/federal_states", options),
|
|
172
|
+
on_hit: ->(cached) do
|
|
173
|
+
representer(:federal_states, :json).for_collection.new([]).from_json(cached)
|
|
174
|
+
end,
|
|
175
|
+
on_miss: -> do
|
|
176
|
+
xml_response = request(:realty).federal_states(options)
|
|
177
|
+
represented = representer(:federal_state).for_collection.new([]).from_xml(xml_response)
|
|
178
|
+
new_cache = representer(:federal_state, :json).for_collection.new(represented).to_json
|
|
179
|
+
[represented, new_cache]
|
|
180
|
+
end
|
|
124
181
|
rescue JustimmoClient::RetrievalFailed
|
|
125
182
|
[]
|
|
126
183
|
end
|
|
@@ -130,8 +187,16 @@ module JustimmoClient::V1
|
|
|
130
187
|
# @option options [Integer] :federal_state (nil)
|
|
131
188
|
# @return [Array<Region>]
|
|
132
189
|
def regions(options = {})
|
|
133
|
-
|
|
134
|
-
|
|
190
|
+
with_cache cache_key("realty/regions", options),
|
|
191
|
+
on_hit: ->(cached) do
|
|
192
|
+
representer(:region, :json).for_collection.new([]).from_json(cached)
|
|
193
|
+
end,
|
|
194
|
+
on_miss: -> do
|
|
195
|
+
xml_response = request(:realty).regions(options)
|
|
196
|
+
represented = representer(:region).for_collection.new([]).from_xml(xml_response)
|
|
197
|
+
new_cache = representer(:region, :json).for_collection.new(represented).to_json
|
|
198
|
+
[represented, new_cache]
|
|
199
|
+
end
|
|
135
200
|
rescue JustimmoClient::RetrievalFailed
|
|
136
201
|
[]
|
|
137
202
|
end
|
|
@@ -141,8 +206,16 @@ module JustimmoClient::V1
|
|
|
141
206
|
# @option options [Integer] :federal_state (nil)
|
|
142
207
|
# @return [Array<City>]
|
|
143
208
|
def zip_codes_and_cities(options = {})
|
|
144
|
-
|
|
145
|
-
|
|
209
|
+
with_cache cache_key("realty/cities", options),
|
|
210
|
+
on_hit: ->(cached) do
|
|
211
|
+
representer(:city, :json).for_collection.new([]).from_json(cached)
|
|
212
|
+
end,
|
|
213
|
+
on_miss: -> do
|
|
214
|
+
xml_response = request(:realty).zip_codes_and_cities(options)
|
|
215
|
+
represented = representer(:city).for_collection.new([]).from_xml(xml_response)
|
|
216
|
+
new_cache = representer(:city, :json).for_collection.new(represented).to_json
|
|
217
|
+
[represented, new_cache]
|
|
218
|
+
end
|
|
146
219
|
rescue JustimmoClient::RetrievalFailed
|
|
147
220
|
[]
|
|
148
221
|
end
|
|
@@ -10,7 +10,7 @@ module JustimmoClient::V1
|
|
|
10
10
|
# @return [$2]
|
|
11
11
|
attribute :proximity, String
|
|
12
12
|
attribute :federal_state, String
|
|
13
|
-
attribute :country,
|
|
13
|
+
attribute :country, String
|
|
14
14
|
attribute :zip_code, Integer
|
|
15
15
|
attribute :latitude, Float
|
|
16
16
|
attribute :longitude, Float
|
|
@@ -20,8 +20,10 @@ module JustimmoClient::V1
|
|
|
20
20
|
|
|
21
21
|
# @!group Instance Method Summary
|
|
22
22
|
|
|
23
|
-
def country=(
|
|
24
|
-
@country = IsoCountryCodes.find(
|
|
23
|
+
def country=(iso3_or_name)
|
|
24
|
+
@country = IsoCountryCodes.find(iso3_or_name).name
|
|
25
|
+
rescue IsoCountryCodes::UnknownCodeError
|
|
26
|
+
@country = iso3_or_name
|
|
25
27
|
end
|
|
26
28
|
|
|
27
29
|
def floor=(flr)
|
|
@@ -50,7 +50,7 @@ module JustimmoClient::V1
|
|
|
50
50
|
# @param date [String]
|
|
51
51
|
# @return [String, DateTime]
|
|
52
52
|
def available=(date)
|
|
53
|
-
@available = DateTime.parse(date)
|
|
53
|
+
@available = DateTime.parse(date) unless date.nil?
|
|
54
54
|
rescue ArgumentError
|
|
55
55
|
log.error("Failed to convert date: #{date}")
|
|
56
56
|
@available = date
|
|
@@ -36,7 +36,7 @@ module JustimmoClient::V1
|
|
|
36
36
|
rent rent_net rent_cold rent_including_heating rent_per_sqm deposit
|
|
37
37
|
].each do |meth|
|
|
38
38
|
define_method("#{meth}=") do |amount|
|
|
39
|
-
log.debug("Using currency #{currency.name} for #{meth}")
|
|
39
|
+
# log.debug("Using currency #{currency.name} for #{meth}")
|
|
40
40
|
instance_variable_set("@#{meth}", Monetize.parse(amount))
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -57,6 +57,7 @@ module JustimmoClient::V1
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def currency=(cur)
|
|
60
|
+
return if cur.nil?
|
|
60
61
|
@currency = Money::Currency.new(cur)
|
|
61
62
|
Money.default_currency = @currency
|
|
62
63
|
log.debug("Set currency to #{currency.name}")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JustimmoClient::V1
|
|
4
|
+
module JSON
|
|
5
|
+
class CityRepresenter < JustimmoRepresenter
|
|
6
|
+
property :id
|
|
7
|
+
property :country_id
|
|
8
|
+
property :region_id
|
|
9
|
+
property :zip_code
|
|
10
|
+
property :location
|
|
11
|
+
property :federal_state_id
|
|
12
|
+
|
|
13
|
+
collection_representer class: City
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -2,29 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
module JustimmoClient::V1
|
|
4
4
|
module JSON
|
|
5
|
-
class ContactRepresenter <
|
|
6
|
-
property :id
|
|
7
|
-
property :number
|
|
8
|
-
property :last_name
|
|
9
|
-
property :first_name
|
|
10
|
-
property :phone
|
|
11
|
-
property :phone_mobile
|
|
12
|
-
property :salutation
|
|
13
|
-
property :email
|
|
5
|
+
class ContactRepresenter < EmployeeRepresenter
|
|
14
6
|
property :email_feedback
|
|
7
|
+
property :email
|
|
8
|
+
property :last_name
|
|
15
9
|
property :company
|
|
16
|
-
property :
|
|
17
|
-
property :
|
|
18
|
-
property :
|
|
19
|
-
property :website
|
|
20
|
-
|
|
21
|
-
property :picture,
|
|
22
|
-
decorator: AttachmentImageRepresenter,
|
|
23
|
-
class: AttachmentImage
|
|
24
|
-
|
|
25
|
-
property :attachment,
|
|
26
|
-
decorator: AttachmentRepresenter,
|
|
27
|
-
class: Attachment
|
|
10
|
+
property :salutation
|
|
11
|
+
property :phone
|
|
12
|
+
property :mobile
|
|
28
13
|
end
|
|
29
14
|
end
|
|
30
15
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JustimmoClient::V1
|
|
4
|
+
module JSON
|
|
5
|
+
class EmployeeRepresenter < JustimmoRepresenter
|
|
6
|
+
property :id
|
|
7
|
+
property :number
|
|
8
|
+
property :first_name
|
|
9
|
+
property :last_name
|
|
10
|
+
property :salutation
|
|
11
|
+
property :position
|
|
12
|
+
property :phone
|
|
13
|
+
property :mobile
|
|
14
|
+
property :fax
|
|
15
|
+
property :email
|
|
16
|
+
property :street
|
|
17
|
+
property :zip_code
|
|
18
|
+
property :location
|
|
19
|
+
property :website
|
|
20
|
+
|
|
21
|
+
property :picture, class: Image do
|
|
22
|
+
%i[small medium big pfad_medium].each do |size|
|
|
23
|
+
property size,
|
|
24
|
+
setter: ->(represented:, fragment:, **) { represented.add_url(fragment, default: :user_big) },
|
|
25
|
+
getter: ->(represented:, **) { represented[size] }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
collection_representer class: Employee
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JustimmoClient::V1
|
|
4
|
+
module JSON
|
|
5
|
+
class FederalStateRepresenter < JustimmoRepresenter
|
|
6
|
+
property :id
|
|
7
|
+
property :name
|
|
8
|
+
property :country_id
|
|
9
|
+
property :fips
|
|
10
|
+
property :iso
|
|
11
|
+
|
|
12
|
+
collection_representer class: FederalState
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
module JustimmoClient::V1
|
|
4
4
|
module JSON
|
|
5
|
-
class
|
|
5
|
+
class GeoLocationRepresenter < JustimmoRepresenter
|
|
6
6
|
property :zip_code
|
|
7
7
|
property :location
|
|
8
8
|
property :federal_state
|
|
9
|
+
property :floor
|
|
9
10
|
property :country
|
|
10
11
|
property :latitude
|
|
11
12
|
property :longitude
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JustimmoClient::V1
|
|
4
|
+
module JSON
|
|
5
|
+
class RealtyAreaRepresenter < JustimmoRepresenter
|
|
6
|
+
%i[
|
|
7
|
+
balcony_terrace
|
|
8
|
+
balcony
|
|
9
|
+
office
|
|
10
|
+
garage
|
|
11
|
+
garden
|
|
12
|
+
total
|
|
13
|
+
surface
|
|
14
|
+
property
|
|
15
|
+
basement
|
|
16
|
+
storage
|
|
17
|
+
loggia
|
|
18
|
+
floor
|
|
19
|
+
parking
|
|
20
|
+
terrace
|
|
21
|
+
buildable
|
|
22
|
+
sales
|
|
23
|
+
living
|
|
24
|
+
].each { |k| property k }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -3,19 +3,11 @@
|
|
|
3
3
|
module JustimmoClient::V1
|
|
4
4
|
module JSON
|
|
5
5
|
class RealtyCategoryRepresenter < JustimmoRepresenter
|
|
6
|
-
property :
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
property :investment
|
|
10
|
-
end
|
|
6
|
+
property :id
|
|
7
|
+
property :name
|
|
8
|
+
property :sortablerank
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
property :buy
|
|
14
|
-
property :rent
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
property :type_id
|
|
18
|
-
property :sub_type_id
|
|
10
|
+
collection_representer class: RealtyCategory
|
|
19
11
|
end
|
|
20
12
|
end
|
|
21
13
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module JustimmoClient::V1
|
|
2
|
+
module JSON
|
|
3
|
+
class RealtyPriceRepresenter < JustimmoRepresenter
|
|
4
|
+
property :currency
|
|
5
|
+
property :purcase
|
|
6
|
+
property :purcase_net
|
|
7
|
+
property :on_demand
|
|
8
|
+
|
|
9
|
+
property :rent
|
|
10
|
+
property :rent_net
|
|
11
|
+
property :rent_vat
|
|
12
|
+
|
|
13
|
+
property :deposit
|
|
14
|
+
property :rent_cold
|
|
15
|
+
property :rent_including_heating
|
|
16
|
+
property :rent_per_sqm
|
|
17
|
+
property :operating_cost_per_sqm
|
|
18
|
+
|
|
19
|
+
property :provision
|
|
20
|
+
property :including_vat
|
|
21
|
+
property :commission
|
|
22
|
+
|
|
23
|
+
property :real_estate_taxes
|
|
24
|
+
property :land_registry
|
|
25
|
+
|
|
26
|
+
property :operating_cost
|
|
27
|
+
property :operating_cost_net
|
|
28
|
+
property :operating_cost_vat
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JustimmoClient::V1
|
|
4
|
+
module JSON
|
|
5
|
+
class RealtyRepresenter < JustimmoRepresenter
|
|
6
|
+
property :usage, class: RealtyUsage do
|
|
7
|
+
property :living
|
|
8
|
+
property :business
|
|
9
|
+
property :investment
|
|
10
|
+
end
|
|
11
|
+
property :marketing, class: RealtyMarketing do
|
|
12
|
+
property :buy
|
|
13
|
+
property :rent
|
|
14
|
+
end
|
|
15
|
+
property :type_id
|
|
16
|
+
property :sub_type_id
|
|
17
|
+
|
|
18
|
+
property :id
|
|
19
|
+
property :number
|
|
20
|
+
property :created_at
|
|
21
|
+
property :updated_at
|
|
22
|
+
property :status_id
|
|
23
|
+
property :title
|
|
24
|
+
property :teaser
|
|
25
|
+
property :description
|
|
26
|
+
property :floor
|
|
27
|
+
property :area,
|
|
28
|
+
decorator: RealtyAreaRepresenter,
|
|
29
|
+
class: RealtyArea
|
|
30
|
+
property :geo,
|
|
31
|
+
decorator: GeoLocationRepresenter,
|
|
32
|
+
class: GeoLocation
|
|
33
|
+
property :room_count,
|
|
34
|
+
decorator: RealtyRoomCountRepresenter,
|
|
35
|
+
class: RealtyRoomCount
|
|
36
|
+
|
|
37
|
+
property :openimmo_id
|
|
38
|
+
property :available
|
|
39
|
+
property :construction_year
|
|
40
|
+
property :contact,
|
|
41
|
+
decorator: ContactRepresenter,
|
|
42
|
+
class: Employee
|
|
43
|
+
property :description_furniture
|
|
44
|
+
property :furniture
|
|
45
|
+
property :price,
|
|
46
|
+
decorator: RealtyPriceRepresenter,
|
|
47
|
+
class: RealtyPrice
|
|
48
|
+
collection :images, class: Image do
|
|
49
|
+
property :category
|
|
50
|
+
property :origin
|
|
51
|
+
property :title
|
|
52
|
+
%i[pfad small medium big2 medium2 s220x155 fullhd].each do |size|
|
|
53
|
+
property size,
|
|
54
|
+
setter: ->(represented:, fragment:, **) { represented.add_url(fragment, default: :big) },
|
|
55
|
+
getter: ->(represented:, **) { represented[size] }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
property :documents
|
|
59
|
+
property :images360
|
|
60
|
+
property :videos
|
|
61
|
+
property :links
|
|
62
|
+
|
|
63
|
+
collection_representer class: Realty
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JustimmoClient::V1
|
|
4
|
+
module JSON
|
|
5
|
+
class RealtyRoomCountRepresenter < JustimmoRepresenter
|
|
6
|
+
%i[
|
|
7
|
+
store
|
|
8
|
+
bathroom
|
|
9
|
+
balcony_terrace
|
|
10
|
+
balcony
|
|
11
|
+
garden
|
|
12
|
+
garage
|
|
13
|
+
loggia
|
|
14
|
+
basement
|
|
15
|
+
toilet
|
|
16
|
+
parking_space
|
|
17
|
+
total
|
|
18
|
+
].each { |k| property k }
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -8,10 +8,9 @@ module JustimmoClient::V1
|
|
|
8
8
|
# @api private
|
|
9
9
|
module JustimmoRequest
|
|
10
10
|
include JustimmoClient::Logging
|
|
11
|
-
include JustimmoClient::Caching
|
|
12
11
|
|
|
13
12
|
def get(path, params = {})
|
|
14
|
-
|
|
13
|
+
request(path, params)
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
def request(path, params = {})
|
|
@@ -55,12 +54,5 @@ module JustimmoClient::V1
|
|
|
55
54
|
|
|
56
55
|
Retriable.retriable(options) { yield }
|
|
57
56
|
end
|
|
58
|
-
|
|
59
|
-
def cache_key(path, params)
|
|
60
|
-
key = Digest::SHA256.new
|
|
61
|
-
key << path
|
|
62
|
-
key << params.to_s
|
|
63
|
-
key.hexdigest
|
|
64
|
-
end
|
|
65
57
|
end
|
|
66
58
|
end
|
|
@@ -35,21 +35,5 @@ module JustimmoClient
|
|
|
35
35
|
def cache
|
|
36
36
|
JustimmoClient::Caching.cache
|
|
37
37
|
end
|
|
38
|
-
|
|
39
|
-
# TODO: JSON serialize/deserialize the cached value
|
|
40
|
-
def with_cache(key, **options)
|
|
41
|
-
log.debug("Looking up cache key #{key}")
|
|
42
|
-
data = cache.read(key)
|
|
43
|
-
|
|
44
|
-
if data.nil?
|
|
45
|
-
log.debug("Cache miss for #{key}")
|
|
46
|
-
data = yield
|
|
47
|
-
cache.write(key, data, options)
|
|
48
|
-
else
|
|
49
|
-
log.debug("Cache hit for #{key}")
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
data
|
|
53
|
-
end
|
|
54
38
|
end
|
|
55
39
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: justimmo_client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Patrick Auernig
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-10-
|
|
11
|
+
date: 2017-10-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -206,6 +206,7 @@ files:
|
|
|
206
206
|
- lib/justimmo_client.rb
|
|
207
207
|
- lib/justimmo_client/api/v1.rb
|
|
208
208
|
- lib/justimmo_client/api/v1/interfaces/employee_interface.rb
|
|
209
|
+
- lib/justimmo_client/api/v1/interfaces/justimmo_interface.rb
|
|
209
210
|
- lib/justimmo_client/api/v1/interfaces/realty_interface.rb
|
|
210
211
|
- lib/justimmo_client/api/v1/models/city.rb
|
|
211
212
|
- lib/justimmo_client/api/v1/models/country.rb
|
|
@@ -225,13 +226,20 @@ files:
|
|
|
225
226
|
- lib/justimmo_client/api/v1/models/realty_usage.rb
|
|
226
227
|
- lib/justimmo_client/api/v1/models/region.rb
|
|
227
228
|
- lib/justimmo_client/api/v1/representers/json.rb
|
|
228
|
-
- lib/justimmo_client/api/v1/representers/json/
|
|
229
|
-
- lib/justimmo_client/api/v1/representers/json/attachment_representer.rb
|
|
229
|
+
- lib/justimmo_client/api/v1/representers/json/city_representer.rb
|
|
230
230
|
- lib/justimmo_client/api/v1/representers/json/contact_representer.rb
|
|
231
|
+
- lib/justimmo_client/api/v1/representers/json/country_representer.rb
|
|
232
|
+
- lib/justimmo_client/api/v1/representers/json/employee_representer.rb
|
|
233
|
+
- lib/justimmo_client/api/v1/representers/json/federal_state_representer.rb
|
|
234
|
+
- lib/justimmo_client/api/v1/representers/json/geo_location_representer.rb
|
|
231
235
|
- lib/justimmo_client/api/v1/representers/json/justimmo_representer.rb
|
|
232
|
-
- lib/justimmo_client/api/v1/representers/json/
|
|
236
|
+
- lib/justimmo_client/api/v1/representers/json/realty_area_representer.rb
|
|
233
237
|
- lib/justimmo_client/api/v1/representers/json/realty_category_representer.rb
|
|
234
|
-
- lib/justimmo_client/api/v1/representers/json/
|
|
238
|
+
- lib/justimmo_client/api/v1/representers/json/realty_price_representer.rb
|
|
239
|
+
- lib/justimmo_client/api/v1/representers/json/realty_representer.rb
|
|
240
|
+
- lib/justimmo_client/api/v1/representers/json/realty_room_count_representer.rb
|
|
241
|
+
- lib/justimmo_client/api/v1/representers/json/realty_type_representer.rb
|
|
242
|
+
- lib/justimmo_client/api/v1/representers/json/region_representer.rb
|
|
235
243
|
- lib/justimmo_client/api/v1/representers/xml.rb
|
|
236
244
|
- lib/justimmo_client/api/v1/representers/xml/city_representer.rb
|
|
237
245
|
- lib/justimmo_client/api/v1/representers/xml/contact_representer.rb
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module JustimmoClient::V1
|
|
4
|
-
module JSON
|
|
5
|
-
class AttachmentImageRepresenter < JustimmoRepresenter
|
|
6
|
-
property :small
|
|
7
|
-
property :small2
|
|
8
|
-
property :medium
|
|
9
|
-
property :medium2
|
|
10
|
-
property :big
|
|
11
|
-
property :big2
|
|
12
|
-
property :fullhd
|
|
13
|
-
property :path
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module JustimmoClient::V1
|
|
4
|
-
module JSON
|
|
5
|
-
class AttachmentRepresenter < JustimmoRepresenter
|
|
6
|
-
property :category
|
|
7
|
-
property :origin
|
|
8
|
-
property :title
|
|
9
|
-
property :format
|
|
10
|
-
property :data,
|
|
11
|
-
decorator: AttachmentImageRepresenter,
|
|
12
|
-
class: AttachmentImage
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module JustimmoClient::V1
|
|
4
|
-
module JSON
|
|
5
|
-
class RealtyDetailRepresenter < JustimmoRepresenter
|
|
6
|
-
property :category,
|
|
7
|
-
decorator: RealtyCategoryRepresenter,
|
|
8
|
-
class: RealtyCategory
|
|
9
|
-
|
|
10
|
-
property :location,
|
|
11
|
-
decorator: LocationRepresenter,
|
|
12
|
-
class: Location
|
|
13
|
-
|
|
14
|
-
property :contact,
|
|
15
|
-
decorator: ContactRepresenter,
|
|
16
|
-
class: Contact
|
|
17
|
-
|
|
18
|
-
property :documents
|
|
19
|
-
property :images360
|
|
20
|
-
property :videos
|
|
21
|
-
property :links
|
|
22
|
-
|
|
23
|
-
property :title
|
|
24
|
-
property :description
|
|
25
|
-
property :description_furniture
|
|
26
|
-
property :furniture
|
|
27
|
-
|
|
28
|
-
property :balcony_terrace_area, as: :balkon_terrasse_flaeche
|
|
29
|
-
property :balcony_area, as: :balkons_flaeche
|
|
30
|
-
property :office_area, as: :bueroflaeche
|
|
31
|
-
property :garage_area, as: :garagen_flaeche
|
|
32
|
-
property :garden_area, as: :gartenflaeche
|
|
33
|
-
property :total_area, as: :gesamtflaeche
|
|
34
|
-
property :surface_area, as: :grundflaeche
|
|
35
|
-
property :property_area, as: :grundstueksflaeche
|
|
36
|
-
property :basement_area, as: :kellerflaeche
|
|
37
|
-
property :storage_area, as: :lagerflaeche
|
|
38
|
-
property :loggia_area, as: :loggias_flaeche
|
|
39
|
-
property :floor_area, as: :nutzflaeche
|
|
40
|
-
property :parking_area, as: :stellplatz_flaeche
|
|
41
|
-
property :terrace_area, as: :terrassen_flaeche
|
|
42
|
-
property :buildable_area, as: :verbaubare_flaeche
|
|
43
|
-
property :sales_area, as: :verkaufsflaeche
|
|
44
|
-
property :living_area, as: :wohnflaeche
|
|
45
|
-
property :store_rooms, as: :anzahl_abstellraum
|
|
46
|
-
property :bathrooms, as: :anzahl_badezimmer
|
|
47
|
-
property :balconies_terraces, as: :anzahl_balkon_terrassen
|
|
48
|
-
property :balconies, as: :anzahl_balkone
|
|
49
|
-
property :balconies, as: :anzahl_balkons
|
|
50
|
-
property :gardens, as: :anzahl_garten
|
|
51
|
-
property :garages, as: :anzahl_garagen
|
|
52
|
-
property :loggias, as: :anzahl_loggias
|
|
53
|
-
property :basements, as: :anzahl_keller
|
|
54
|
-
property :toilet_rooms, as: :anzahl_sep_wc
|
|
55
|
-
property :parking_spaces, as: :anzahl_stellplaetze
|
|
56
|
-
property :rooms, as: :anzahl_zimmer
|
|
57
|
-
|
|
58
|
-
property :available_from
|
|
59
|
-
property :status_id
|
|
60
|
-
property :id
|
|
61
|
-
property :number
|
|
62
|
-
property :openimmo_id
|
|
63
|
-
|
|
64
|
-
collection :attachments,
|
|
65
|
-
decorator: AttachmentRepresenter,
|
|
66
|
-
class: Attachment
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|