justimmo_client 0.4.3 → 0.4.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.
- checksums.yaml +4 -4
- data/lib/justimmo_client/api/v1/requests/realty_request.rb +55 -18
- data/lib/justimmo_client/core/config.rb +2 -2
- data/lib/justimmo_client/errors.rb +13 -17
- data/lib/justimmo_client/option_parser.rb +18 -6
- data/lib/justimmo_client/realty.rb +1 -0
- data/lib/justimmo_client/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6889b2849895ac84cbda9609a4d40847104acd88
|
4
|
+
data.tar.gz: a90c60aef5e69d154704b24a15b13f7eef656f0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7168d63aa6ff0d8c4901f0893c78b268840457d048caffb9d271c6e658f4ed030caa779dcf1299eb88cae19d9d18e4d3ad1142f02e4c652e24e14853a78fffc0
|
7
|
+
data.tar.gz: 48f3d5ba3187aa261ea3ae2f72cf946ce9c616e8abbeb1c40734c2d2bacd58a7fd686e3288c5d3b0c8727206946fbff40c0c6742fe90945ae065397760c8b5a2
|
@@ -18,7 +18,7 @@ module JustimmoClient::V1
|
|
18
18
|
type: :objektart,
|
19
19
|
subtype: :subobjektart,
|
20
20
|
tag: :tagname,
|
21
|
-
|
21
|
+
rooms: :zimmer,
|
22
22
|
area: :flaeche,
|
23
23
|
living_area: :wohnflaeche,
|
24
24
|
floor_area: :nutzflaeche,
|
@@ -36,7 +36,9 @@ module JustimmoClient::V1
|
|
36
36
|
last_name: :nachname,
|
37
37
|
phone: :tel,
|
38
38
|
location: :ort,
|
39
|
-
all: :alle
|
39
|
+
all: :alle,
|
40
|
+
rent: :miete,
|
41
|
+
purcase: :kauf
|
40
42
|
}.freeze
|
41
43
|
|
42
44
|
module_function
|
@@ -46,34 +48,44 @@ module JustimmoClient::V1
|
|
46
48
|
# @param [Hash] params
|
47
49
|
# @return [String] The requested XML.
|
48
50
|
def list(**params)
|
49
|
-
|
51
|
+
with_error_handler do
|
52
|
+
get("objekt/list", list_option_parser.parse(params))
|
53
|
+
end
|
50
54
|
end
|
51
55
|
|
52
56
|
# @param [Integer] id
|
53
57
|
# @param [String, Symbol] lang
|
54
58
|
# @return [String] The requested XML.
|
55
59
|
def detail(id, lang: nil)
|
56
|
-
|
60
|
+
with_error_handler do
|
61
|
+
get("objekt/detail", detail_option_parser.parse(id: id, lang: lang))
|
62
|
+
end
|
57
63
|
end
|
58
64
|
|
59
65
|
# @param [Integer] id
|
60
66
|
# @param [Hash] params
|
61
67
|
# @return [String] The requested XML.
|
62
68
|
def inquiry(id, **params)
|
63
|
-
|
69
|
+
with_error_handler do
|
70
|
+
get("objekt/anfrage", inquiry_option_parser.parse(params.update(id: id)))
|
71
|
+
end
|
64
72
|
end
|
65
73
|
|
66
74
|
# @param [Hash] params
|
67
75
|
# @return [String] A JSON string containing an array of ids.
|
68
76
|
def ids(**params)
|
69
|
-
|
77
|
+
with_error_handler do
|
78
|
+
get("objekt/ids", list_option_parser.parse(params))
|
79
|
+
end
|
70
80
|
end
|
71
81
|
|
72
82
|
# @todo implement this
|
73
83
|
# @param [Hash] params
|
74
84
|
# @return [File] The PDF file.
|
75
85
|
def expose(**params)
|
76
|
-
|
86
|
+
with_error_handler do
|
87
|
+
get("objekt/expose", params)
|
88
|
+
end
|
77
89
|
end
|
78
90
|
|
79
91
|
# @!group Basic Data Requests
|
@@ -81,26 +93,34 @@ module JustimmoClient::V1
|
|
81
93
|
# @param [Boolean] all (false)
|
82
94
|
# @return [String] The requested XML.
|
83
95
|
def categories(all: false)
|
84
|
-
|
96
|
+
with_error_handler do
|
97
|
+
get("objekt/kategorien", alle: all ? 1 : 0)
|
98
|
+
end
|
85
99
|
end
|
86
100
|
|
87
101
|
# @param [Boolean] all (false)
|
88
102
|
# @return [String] The requested XML.
|
89
103
|
def types(all: false)
|
90
|
-
|
104
|
+
with_error_handler do
|
105
|
+
get("objekt/objektarten", alle: all ? 1 : 0)
|
106
|
+
end
|
91
107
|
end
|
92
108
|
|
93
109
|
# @param [Boolean] all (false)
|
94
110
|
# @return [String] The requested XML.
|
95
111
|
def countries(all: false)
|
96
|
-
|
112
|
+
with_error_handler do
|
113
|
+
get("objekt/laender", alle: all ? 1 : 0)
|
114
|
+
end
|
97
115
|
end
|
98
116
|
|
99
117
|
# @param [Boolean] all (false)
|
100
118
|
# @param [Integer, String] country
|
101
119
|
# @return [String] The requested XML.
|
102
120
|
def federal_states(country:, all: false)
|
103
|
-
|
121
|
+
with_error_handler do
|
122
|
+
get("objekt/bundeslaender", land: country, alle: all ? 1 : 0)
|
123
|
+
end
|
104
124
|
end
|
105
125
|
|
106
126
|
# @param [Boolean] all (false)
|
@@ -108,7 +128,9 @@ module JustimmoClient::V1
|
|
108
128
|
# @param [Integer] federal_state
|
109
129
|
# @return [String] The requested XML.
|
110
130
|
def regions(country: nil, federal_state: nil, all: false)
|
111
|
-
|
131
|
+
with_error_handler do
|
132
|
+
get("objekt/regionen", land: country, bundesland: federal_state, alle: all ? 1 : 0)
|
133
|
+
end
|
112
134
|
end
|
113
135
|
|
114
136
|
# @param [Boolean] all (false)
|
@@ -116,7 +138,16 @@ module JustimmoClient::V1
|
|
116
138
|
# @param [Integer] federal_state
|
117
139
|
# @return [String] The requested XML.
|
118
140
|
def zip_codes_and_cities(country: nil, federal_state: nil, all: false)
|
119
|
-
|
141
|
+
with_error_handler do
|
142
|
+
get("objekt/plzsUndOrte", land: country, bundesland: federal_state, alle: all ? 1 : 0)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def with_error_handler
|
147
|
+
yield
|
148
|
+
rescue JustimmoClient::OptionParserError => e
|
149
|
+
log.error(e)
|
150
|
+
raise JustimmoClient::RetrievalFailed, e
|
120
151
|
end
|
121
152
|
|
122
153
|
# @!group Option Parsers
|
@@ -131,9 +162,9 @@ module JustimmoClient::V1
|
|
131
162
|
options.add :limit
|
132
163
|
options.add :offset
|
133
164
|
options.add :lang
|
134
|
-
options.add :orderby, values: %
|
135
|
-
options.add :ordertype, values: %
|
136
|
-
options.add :picturesize, values: %
|
165
|
+
options.add :orderby, values: %i[price zip_code number created_at updated_at published_at]
|
166
|
+
options.add :ordertype, values: %i[asc desc]
|
167
|
+
options.add :picturesize, values: %i[small_unbranded small2_unbranded small3_unbranded medium_unbranded big_unbranded big2_unbranded medium big big2]
|
137
168
|
options.add :with_projects, type: :bool
|
138
169
|
options.group :filter do |f|
|
139
170
|
f.add :price_min
|
@@ -146,8 +177,8 @@ module JustimmoClient::V1
|
|
146
177
|
f.add :zip_code
|
147
178
|
f.add :zip_code_min
|
148
179
|
f.add :zip_code_max
|
149
|
-
f.add :
|
150
|
-
f.add :
|
180
|
+
f.add :rooms_min
|
181
|
+
f.add :rooms_max
|
151
182
|
f.add :number
|
152
183
|
f.add :number_min
|
153
184
|
f.add :number_max
|
@@ -166,8 +197,14 @@ module JustimmoClient::V1
|
|
166
197
|
f.add :project_id
|
167
198
|
f.add :type
|
168
199
|
f.add :parent_id
|
200
|
+
f.add :rent, type: :bool
|
201
|
+
f.add :purcase, type: :bool
|
169
202
|
f.add :updated_at_min, as: :aktualisiert_am_von
|
170
203
|
f.add :updated_at_max, as: :aktualisiert_am_bis
|
204
|
+
f.add :location do |key, value|
|
205
|
+
cities = JustimmoClient::Realty.zip_codes_and_cities
|
206
|
+
[:zip_code, cities.select { |x| x.location == value }.first&.zip_code]
|
207
|
+
end
|
171
208
|
end
|
172
209
|
end
|
173
210
|
end
|
@@ -32,10 +32,10 @@ module JustimmoClient
|
|
32
32
|
|
33
33
|
def validate
|
34
34
|
missing = REQUIRED.select { |r| @_config[r].nil? }
|
35
|
-
raise MissingConfiguration, missing unless missing.empty?
|
35
|
+
raise JustimmoClient::MissingConfiguration, missing unless missing.empty?
|
36
36
|
|
37
37
|
supported_ver = SUPPORTED_API_VERSIONS.include?(api_ver)
|
38
|
-
raise UnsupportedAPIVersion, api_ver unless supported_ver
|
38
|
+
raise JustimmoClient::UnsupportedAPIVersion, api_ver unless supported_ver
|
39
39
|
end
|
40
40
|
|
41
41
|
def url
|
@@ -3,11 +3,13 @@
|
|
3
3
|
# Exceptions for internal use
|
4
4
|
module JustimmoClient::Errors
|
5
5
|
JustimmoError = Class.new(StandardError)
|
6
|
-
InitializationError = Class.new(JustimmoError)
|
7
6
|
|
8
7
|
# Raised when configuration validation fails.
|
9
8
|
ConfigurationError = Class.new(JustimmoError)
|
10
9
|
|
10
|
+
# Raised when option parsing fails
|
11
|
+
OptionParserError = Class.new(JustimmoError)
|
12
|
+
|
11
13
|
# Raised when authentication with the API fails.
|
12
14
|
class AuthenticationFailed < JustimmoError
|
13
15
|
def initialize
|
@@ -22,37 +24,31 @@ module JustimmoClient::Errors
|
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
|
-
#
|
26
|
-
class
|
27
|
-
def initialize(
|
28
|
-
super("
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# A key could not be found in the specified mapping.
|
33
|
-
class KeyNotFound < JustimmoError
|
34
|
-
def initialize(key, map)
|
35
|
-
super("Key #{key} not found in #{map} mapping.")
|
27
|
+
# Raised when the option parser rejects an option
|
28
|
+
class InvalidOption < OptionParserError
|
29
|
+
def initialize(key)
|
30
|
+
super("Option '#{key}' not supported")
|
36
31
|
end
|
37
32
|
end
|
38
33
|
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
# Raised when the option parser rejects a value
|
35
|
+
class InvalidValue < OptionParserError
|
36
|
+
def initialize(value)
|
37
|
+
super("'#{value}' is not in the list of accepted values")
|
42
38
|
end
|
43
39
|
end
|
44
40
|
|
45
41
|
# Raised when an unsupported API version is set.
|
46
42
|
class UnsupportedAPIVersion < ConfigurationError
|
47
43
|
def initialize(version)
|
48
|
-
super("API Version #{version} not supported
|
44
|
+
super("API Version #{version} not supported")
|
49
45
|
end
|
50
46
|
end
|
51
47
|
|
52
48
|
# Raised on missing required configuration options.
|
53
49
|
class MissingConfiguration < ConfigurationError
|
54
50
|
def initialize(missing)
|
55
|
-
super("Required configuration missing: #{missing}
|
51
|
+
super("Required configuration missing: #{missing}")
|
56
52
|
end
|
57
53
|
end
|
58
54
|
end
|
@@ -19,8 +19,8 @@ module JustimmoClient
|
|
19
19
|
parse unless options.empty?
|
20
20
|
end
|
21
21
|
|
22
|
-
def add(key, **options)
|
23
|
-
add_option(key, options)
|
22
|
+
def add(key, **options, &block)
|
23
|
+
add_option(key, options, &block)
|
24
24
|
end
|
25
25
|
|
26
26
|
def group(groupname)
|
@@ -33,7 +33,7 @@ module JustimmoClient
|
|
33
33
|
out = {}
|
34
34
|
|
35
35
|
options.each do |key, value|
|
36
|
-
raise
|
36
|
+
raise JustimmoClient::InvalidOption, key unless @options.key?(key.to_sym)
|
37
37
|
group = group_of(key)
|
38
38
|
|
39
39
|
if group
|
@@ -49,12 +49,13 @@ module JustimmoClient
|
|
49
49
|
|
50
50
|
private
|
51
51
|
|
52
|
-
def add_option(key, **options)
|
52
|
+
def add_option(key, **options, &block)
|
53
53
|
@options[key.to_sym] = {
|
54
54
|
group: @context,
|
55
55
|
type: options[:type],
|
56
56
|
as: options[:as],
|
57
|
-
values: options[:values]
|
57
|
+
values: options[:values],
|
58
|
+
mod: block_given? ? block : nil
|
58
59
|
}
|
59
60
|
end
|
60
61
|
|
@@ -62,6 +63,15 @@ module JustimmoClient
|
|
62
63
|
@options.dig(key, :group)
|
63
64
|
end
|
64
65
|
|
66
|
+
def has_mod?(key)
|
67
|
+
@options.dig(key, :mod).is_a?(Proc)
|
68
|
+
end
|
69
|
+
|
70
|
+
def apply_mod(key, value)
|
71
|
+
new_key, new_value = @options.dig(key, :mod).call(key, value)
|
72
|
+
[(new_key || key), (new_value || value)]
|
73
|
+
end
|
74
|
+
|
65
75
|
def mapping(key)
|
66
76
|
@mappings.fetch(key, key)
|
67
77
|
end
|
@@ -84,7 +94,9 @@ module JustimmoClient
|
|
84
94
|
|
85
95
|
def parse_option(key, value)
|
86
96
|
values = @options.dig(key, :values)
|
87
|
-
raise
|
97
|
+
raise JustimmoClient::InvalidValue, value unless values.nil? || values.include?(value)
|
98
|
+
|
99
|
+
key, value = apply_mod(key.to_sym, value) if has_mod?(key)
|
88
100
|
|
89
101
|
coerced =
|
90
102
|
case @options.dig(key, :type)
|
@@ -51,6 +51,7 @@ module JustimmoClient
|
|
51
51
|
# @option options [Integer] :parent_id
|
52
52
|
# @option options [DateTime] :updated_at_min
|
53
53
|
# @option options [DateTime] :updated_at_max
|
54
|
+
# @option options [String] :location
|
54
55
|
# @example Filter by zip code and limit to three results.
|
55
56
|
# JustimmoClient::Realty.list(zip_code: 6800, limit: 3)
|
56
57
|
# @return [Array<Object>] An array of basic realty objects, or an empty array on error.
|
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.
|
4
|
+
version: 0.4.4
|
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-
|
11
|
+
date: 2017-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|