justimmo_client 0.6.3 → 0.6.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.simplecov +10 -0
- data/lib/justimmo_client/api/v1/interfaces/justimmo_interface.rb +1 -0
- data/lib/justimmo_client/api/v1/interfaces/realty_interface.rb +6 -5
- data/lib/justimmo_client/api/v1/models/attachment.rb +38 -0
- data/lib/justimmo_client/api/v1/models/city.rb +1 -1
- data/lib/justimmo_client/api/v1/models/country.rb +19 -10
- data/lib/justimmo_client/api/v1/models/employee.rb +26 -19
- data/lib/justimmo_client/api/v1/models/geo_location.rb +3 -5
- data/lib/justimmo_client/api/v1/models/justimmo_base.rb +1 -0
- data/lib/justimmo_client/api/v1/models/realty.rb +33 -36
- data/lib/justimmo_client/api/v1/models/realty_cost.rb +68 -0
- data/lib/justimmo_client/api/v1/models/realty_marketing.rb +1 -4
- data/lib/justimmo_client/api/v1/models/realty_price.rb +33 -57
- data/lib/justimmo_client/api/v1/models/realty_usage.rb +1 -5
- data/lib/justimmo_client/api/v1/representers/json/attachment_representer.rb +14 -0
- data/lib/justimmo_client/api/v1/representers/json/employee_representer.rb +3 -7
- data/lib/justimmo_client/api/v1/representers/json/realty_representer.rb +92 -37
- data/lib/justimmo_client/api/v1/representers/xml/attachment_representer.rb +31 -0
- data/lib/justimmo_client/api/v1/representers/xml/employee_representer.rb +11 -22
- data/lib/justimmo_client/api/v1/representers/xml/justimmo_representer.rb +1 -0
- data/lib/justimmo_client/api/v1/representers/xml/realty_price_representer.rb +4 -1
- data/lib/justimmo_client/api/v1/representers/xml/realty_representer.rb +192 -1
- data/lib/justimmo_client/api/v1/representers/xml/realty_type_representer.rb +2 -0
- data/lib/justimmo_client/autoload.rb +1 -0
- data/lib/justimmo_client/core/api_helpers.rb +29 -0
- data/lib/justimmo_client/core/config.rb +7 -1
- data/lib/justimmo_client/core/utils.rb +1 -25
- data/lib/justimmo_client/interface.rb +1 -0
- data/lib/justimmo_client/version.rb +1 -1
- data/locales/de.yml +3 -0
- metadata +8 -14
- data/lib/justimmo_client/api/v1/models/file.rb +0 -64
- data/lib/justimmo_client/api/v1/models/image.rb +0 -10
- data/lib/justimmo_client/api/v1/representers/json/contact_representer.rb +0 -15
- data/lib/justimmo_client/api/v1/representers/json/geo_location_representer.rb +0 -15
- data/lib/justimmo_client/api/v1/representers/json/realty_area_representer.rb +0 -27
- data/lib/justimmo_client/api/v1/representers/json/realty_price_representer.rb +0 -43
- data/lib/justimmo_client/api/v1/representers/json/realty_room_count_representer.rb +0 -21
- data/lib/justimmo_client/api/v1/representers/xml/contact_representer.rb +0 -15
- data/lib/justimmo_client/api/v1/representers/xml/realty_area_representer.rb +0 -28
- data/lib/justimmo_client/api/v1/representers/xml/realty_detail_representer.rb +0 -96
- data/lib/justimmo_client/api/v1/representers/xml/realty_list_representer.rb +0 -85
- data/lib/justimmo_client/api/v1/representers/xml/realty_room_count_representer.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cfd5491bed0810ae55db2737e4b792c04966d6f
|
4
|
+
data.tar.gz: 5b3560ac4d3c240c33db62ab5812139bb4ac27b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e57be8e672d31c7ba436234bff8524baaa893ec69a0c60994c4a2da78fb5e8886c4088ee0aac2cf55a2c2fdad1e8e48d4ff0185222c302a0647d53ad44390c6c
|
7
|
+
data.tar.gz: 508c6a5368a493d5b463f2c472c99f909d1c5a8bc8de4daa80237bd90f6c8fb1c213b2a10e9eeff2a108df5029e864c897f3bf4527336c87c70357006c053c6d
|
data/.simplecov
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
SimpleCov.start do
|
2
|
+
add_filter "/bin/"
|
3
|
+
add_filter "/cache/"
|
4
|
+
add_filter "/examples/"
|
5
|
+
add_filter "/spec/"
|
6
|
+
add_group "V1/Models", "lib/justimmo_client/api/v1/models"
|
7
|
+
add_group "V1/Representers", "lib/justimmo_client/api/v1/representers"
|
8
|
+
add_group "V1/Requests", "lib/justimmo_client/api/v1/requests"
|
9
|
+
add_group "V1/Interfaces", "lib/justimmo_client/api/v1/interfaces"
|
10
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "json"
|
4
|
+
require "nokogiri"
|
4
5
|
|
5
6
|
module JustimmoClient::V1
|
6
7
|
# Public realty query interface
|
@@ -64,9 +65,10 @@ module JustimmoClient::V1
|
|
64
65
|
representer(:realty, :json).for_collection.new([]).from_json(cached)
|
65
66
|
end,
|
66
67
|
on_miss: -> do
|
67
|
-
|
68
|
-
|
69
|
-
|
68
|
+
doc = Nokogiri::XML(request(:realty).list(options))
|
69
|
+
doc.at_css("query-result").remove
|
70
|
+
xml_response = doc.to_xml
|
71
|
+
represented = representer(:realty).for_collection.new([]).from_xml(xml_response)
|
70
72
|
new_cache = representer(:realty, :json).for_collection.new(represented).to_json
|
71
73
|
[represented, new_cache]
|
72
74
|
end
|
@@ -84,8 +86,7 @@ module JustimmoClient::V1
|
|
84
86
|
end,
|
85
87
|
on_miss: -> do
|
86
88
|
xml_response = request(:realty).detail(id, lang: lang)
|
87
|
-
|
88
|
-
represented = representer(:realty_detail).new(model).from_xml(xml_response).realty
|
89
|
+
represented = representer(:realty).for_collection.new([]).from_xml(xml_response).first
|
89
90
|
new_cache = representer(:realty, :json).new(represented).to_json
|
90
91
|
[represented, new_cache]
|
91
92
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "uri"
|
4
|
+
|
5
|
+
module JustimmoClient::V1
|
6
|
+
class Attachment < JustimmoBase
|
7
|
+
BASE_URL = "https://files.justimmo.at/public"
|
8
|
+
|
9
|
+
private_constant :BASE_URL
|
10
|
+
|
11
|
+
attribute :category, Symbol
|
12
|
+
attribute :origin, Symbol
|
13
|
+
attribute :title, String
|
14
|
+
attribute :format, String
|
15
|
+
attribute :type, String
|
16
|
+
attribute :file, String
|
17
|
+
|
18
|
+
def url=(value)
|
19
|
+
path = URI.parse(value).path.sub("/public/", "")
|
20
|
+
@type, size, file = path.split("/")
|
21
|
+
@format ||= ::File.extname(file).tr(".", "")
|
22
|
+
@file = ::File.basename(file, ".#{@format}")
|
23
|
+
@size = size.start_with?("user") ? :user_big : :big
|
24
|
+
end
|
25
|
+
|
26
|
+
def url(size = nil)
|
27
|
+
size ||= @size
|
28
|
+
"#{BASE_URL}/#{@type}/#{size}/#{file}.#{format}"
|
29
|
+
end
|
30
|
+
|
31
|
+
alias to_s url
|
32
|
+
alias [] url
|
33
|
+
|
34
|
+
def inspect
|
35
|
+
"#<#{self.class} #{self}>"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -9,36 +9,45 @@ module JustimmoClient::V1
|
|
9
9
|
# @!macro [attach] attribute
|
10
10
|
# @return [$2]
|
11
11
|
attribute :id, Integer
|
12
|
-
attribute :alpha2, String
|
13
|
-
attribute :alpha3, String
|
12
|
+
attribute :alpha2, String, default: ""
|
13
|
+
attribute :alpha3, String, default: ""
|
14
|
+
attribute :name, String, default: ""
|
14
15
|
|
15
16
|
# @!group Instance Method Summary
|
16
17
|
|
17
18
|
def initialize(**options)
|
19
|
+
@country = find_country(options[:name])
|
20
|
+
return unless @country
|
21
|
+
options.update(name: @country.name, alpha2: @country.alpha2, alpha3: @country.alpha3)
|
18
22
|
super(options)
|
19
|
-
@country = nil
|
20
23
|
end
|
21
24
|
|
22
25
|
def alpha2=(code)
|
23
|
-
@country ||= IsoCountryCodes.find(code)
|
24
26
|
@alpha2 ||= @country.alpha2
|
25
27
|
end
|
26
28
|
|
27
29
|
def alpha3=(code)
|
28
|
-
@country ||= IsoCountryCodes.find(code)
|
29
30
|
@alpha3 ||= @country.alpha3
|
30
31
|
end
|
31
32
|
|
32
|
-
def name
|
33
|
-
@country&.name
|
34
|
-
end
|
35
|
-
|
36
33
|
def to_s
|
37
|
-
|
34
|
+
name
|
38
35
|
end
|
39
36
|
|
40
37
|
def inspect
|
41
38
|
"#<#{self.class} #{self}>"
|
42
39
|
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def find_country(name_or_code)
|
44
|
+
if name_or_code.size <= 3
|
45
|
+
IsoCountryCodes.find(name_or_code)
|
46
|
+
else
|
47
|
+
IsoCountryCodes.search_by_name(name_or_code)
|
48
|
+
end
|
49
|
+
rescue IsoCountryCodes::UnknownCodeError
|
50
|
+
nil
|
51
|
+
end
|
43
52
|
end
|
44
53
|
end
|
@@ -6,31 +6,38 @@ module JustimmoClient::V1
|
|
6
6
|
|
7
7
|
# @!macro [attach] attribute
|
8
8
|
# @return [$2]
|
9
|
-
attribute :id,
|
10
|
-
attribute :number,
|
11
|
-
attribute :email,
|
12
|
-
attribute :phone,
|
13
|
-
attribute :mobile,
|
14
|
-
attribute :fax,
|
15
|
-
attribute :last_name,
|
16
|
-
attribute :first_name,
|
17
|
-
attribute :salutation,
|
18
|
-
attribute :company,
|
19
|
-
attribute :street,
|
20
|
-
attribute :zip_code,
|
21
|
-
attribute :location,
|
9
|
+
attribute :id, Integer
|
10
|
+
attribute :number, Integer
|
11
|
+
attribute :email, String
|
12
|
+
attribute :phone, String
|
13
|
+
attribute :mobile, String
|
14
|
+
attribute :fax, String
|
15
|
+
attribute :last_name, String
|
16
|
+
attribute :first_name, String
|
17
|
+
attribute :salutation, String
|
18
|
+
attribute :company, String
|
19
|
+
attribute :street, String
|
20
|
+
attribute :zip_code, Integer
|
21
|
+
attribute :location, String
|
22
22
|
attribute :email_feedback, String
|
23
|
-
attribute :website,
|
24
|
-
attribute :
|
25
|
-
attribute :
|
26
|
-
attribute :position, String
|
23
|
+
attribute :website, String
|
24
|
+
attribute :position, String
|
25
|
+
attribute :attachments, Array[Attachment], default: []
|
27
26
|
|
28
27
|
# @!group Instance Method Summary
|
29
28
|
|
30
|
-
def
|
31
|
-
|
29
|
+
def images
|
30
|
+
attachments.select { |x| x.type == "pic" }
|
32
31
|
end
|
33
32
|
|
33
|
+
alias pictures images
|
34
|
+
|
35
|
+
def image(index = 0)
|
36
|
+
images[index]
|
37
|
+
end
|
38
|
+
|
39
|
+
alias picture image
|
40
|
+
|
34
41
|
def full_name(surname_first: false, with_salutation: true)
|
35
42
|
name = [first_name, last_name]
|
36
43
|
name.reverse! if surname_first
|
@@ -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, Country
|
14
14
|
attribute :zip_code, Integer
|
15
15
|
attribute :latitude, Float
|
16
16
|
attribute :longitude, Float
|
@@ -20,10 +20,8 @@ module JustimmoClient::V1
|
|
20
20
|
|
21
21
|
# @!group Instance Method Summary
|
22
22
|
|
23
|
-
def country=(
|
24
|
-
@country =
|
25
|
-
rescue IsoCountryCodes::UnknownCodeError
|
26
|
-
@country = iso3_or_name
|
23
|
+
def country=(name)
|
24
|
+
@country = Country.new(name: name)
|
27
25
|
end
|
28
26
|
|
29
27
|
def floor=(flr)
|
@@ -8,43 +8,40 @@ module JustimmoClient::V1
|
|
8
8
|
# @return [$2]
|
9
9
|
attribute :id, Integer
|
10
10
|
attribute :number, Integer
|
11
|
-
attribute :title, String
|
11
|
+
attribute :title, String, default: ""
|
12
12
|
attribute :description, String, default: ""
|
13
|
-
attribute :teaser, String, default:
|
14
|
-
attribute :usage, RealtyUsage
|
15
|
-
attribute :marketing, RealtyMarketing
|
13
|
+
attribute :teaser, Array[String], default: []
|
16
14
|
attribute :type_id, Integer
|
17
15
|
attribute :sub_type_id, Integer
|
18
|
-
attribute :geo, GeoLocation
|
19
|
-
attribute :area, RealtyArea
|
20
|
-
attribute :room_count, RealtyRoomCount
|
21
|
-
attribute :price, RealtyPrice
|
22
16
|
attribute :status_id, Integer
|
23
|
-
attribute :floor, String
|
24
17
|
attribute :openimmo_id, String
|
25
|
-
attribute :
|
26
|
-
attribute :
|
27
|
-
attribute :
|
28
|
-
attribute :
|
29
|
-
attribute :
|
30
|
-
attribute :
|
31
|
-
attribute :
|
32
|
-
attribute :links, Array
|
18
|
+
attribute :description_furniture, Array[String], default: []
|
19
|
+
attribute :furniture, Array[String], default: []
|
20
|
+
attribute :attachments, Array[Attachment], default: []
|
21
|
+
attribute :documents, Array, default: []
|
22
|
+
attribute :videos, Array, default: []
|
23
|
+
attribute :images360, Array, default: []
|
24
|
+
attribute :links, Array, default: []
|
33
25
|
attribute :construction_year, Integer
|
34
26
|
attribute :available, DateTime
|
35
27
|
attribute :created_at, DateTime
|
36
28
|
attribute :updated_at, DateTime
|
29
|
+
attribute :contact, Employee
|
30
|
+
attribute :usage, RealtyUsage
|
31
|
+
attribute :marketing, RealtyMarketing
|
32
|
+
attribute :geo, GeoLocation
|
33
|
+
attribute :area, RealtyArea
|
34
|
+
attribute :room_count, RealtyRoomCount
|
35
|
+
attribute :price, RealtyPrice
|
37
36
|
|
38
37
|
# @!group Instance Method Summary
|
39
38
|
|
40
|
-
def
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
@marketing = RealtyMarketing.new
|
47
|
-
@price = RealtyPrice.new
|
39
|
+
def images
|
40
|
+
attachments.select { |x| x.type == "pic" }
|
41
|
+
end
|
42
|
+
|
43
|
+
def title_image
|
44
|
+
attachments.select { |x| x.category == :title_image }.first
|
48
45
|
end
|
49
46
|
|
50
47
|
# @param date [String]
|
@@ -52,7 +49,7 @@ module JustimmoClient::V1
|
|
52
49
|
def available=(date)
|
53
50
|
@available = DateTime.parse(date) unless date.nil?
|
54
51
|
rescue ArgumentError
|
55
|
-
log.
|
52
|
+
log.debug("Failed to convert date: #{date}")
|
56
53
|
@available = date
|
57
54
|
end
|
58
55
|
|
@@ -60,24 +57,24 @@ module JustimmoClient::V1
|
|
60
57
|
@description =
|
61
58
|
if @teaser.empty?
|
62
59
|
parts = desc.partition("</ul>\n")
|
63
|
-
|
64
|
-
parts.last
|
60
|
+
self.teaser = parts[0..1].join
|
61
|
+
parts.last
|
65
62
|
else
|
66
63
|
desc
|
67
64
|
end
|
68
65
|
end
|
69
66
|
|
70
|
-
def
|
71
|
-
@
|
72
|
-
|
73
|
-
|
74
|
-
|
67
|
+
def teaser=(tea)
|
68
|
+
@teaser =
|
69
|
+
case tea
|
70
|
+
when Array then tea
|
71
|
+
when String then tea&.gsub(/<\/?(ul|li)>/, "")&.strip&.split("\n")
|
72
|
+
else []
|
73
|
+
end
|
75
74
|
end
|
76
75
|
|
77
76
|
def type
|
78
|
-
|
79
|
-
|
80
|
-
def sub_type
|
77
|
+
@type ||= RealtyInterface.types.select { |x| x.id == type_id }.first
|
81
78
|
end
|
82
79
|
end
|
83
80
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "monetize"
|
4
|
+
|
5
|
+
module JustimmoClient::V1
|
6
|
+
class Money < Virtus::Attribute
|
7
|
+
def coerce(value)
|
8
|
+
::Monetize.parse(value)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Currency < Virtus::Attribute
|
13
|
+
include JustimmoClient::Logging
|
14
|
+
|
15
|
+
def coerce(value)
|
16
|
+
::Money::Currency.new(value)
|
17
|
+
rescue ::Money::Currency::UnknownCurrency
|
18
|
+
::Money.default_currency
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class RealtyCost < JustimmoBase
|
23
|
+
attribute :currency, Currency
|
24
|
+
attribute :amount, Money
|
25
|
+
|
26
|
+
def /(other)
|
27
|
+
amount / other
|
28
|
+
end
|
29
|
+
|
30
|
+
def *(other)
|
31
|
+
amount * other
|
32
|
+
end
|
33
|
+
|
34
|
+
def +(other)
|
35
|
+
amount + ::Money.new(other)
|
36
|
+
end
|
37
|
+
|
38
|
+
def -(other)
|
39
|
+
amount - ::Money.new(other)
|
40
|
+
end
|
41
|
+
|
42
|
+
def zero?
|
43
|
+
amount.zero?
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_s
|
47
|
+
amount.format
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_f
|
51
|
+
amount.to_f
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_h
|
55
|
+
{ currency: currency.id, amount: amount.to_f }
|
56
|
+
end
|
57
|
+
|
58
|
+
def to_json(*args)
|
59
|
+
to_h.to_json(args)
|
60
|
+
end
|
61
|
+
|
62
|
+
alias as_json to_json
|
63
|
+
|
64
|
+
def inspect
|
65
|
+
"#<#{self.class} #{self}>"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|