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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +10 -0
  3. data/lib/justimmo_client/api/v1/interfaces/justimmo_interface.rb +1 -0
  4. data/lib/justimmo_client/api/v1/interfaces/realty_interface.rb +6 -5
  5. data/lib/justimmo_client/api/v1/models/attachment.rb +38 -0
  6. data/lib/justimmo_client/api/v1/models/city.rb +1 -1
  7. data/lib/justimmo_client/api/v1/models/country.rb +19 -10
  8. data/lib/justimmo_client/api/v1/models/employee.rb +26 -19
  9. data/lib/justimmo_client/api/v1/models/geo_location.rb +3 -5
  10. data/lib/justimmo_client/api/v1/models/justimmo_base.rb +1 -0
  11. data/lib/justimmo_client/api/v1/models/realty.rb +33 -36
  12. data/lib/justimmo_client/api/v1/models/realty_cost.rb +68 -0
  13. data/lib/justimmo_client/api/v1/models/realty_marketing.rb +1 -4
  14. data/lib/justimmo_client/api/v1/models/realty_price.rb +33 -57
  15. data/lib/justimmo_client/api/v1/models/realty_usage.rb +1 -5
  16. data/lib/justimmo_client/api/v1/representers/json/attachment_representer.rb +14 -0
  17. data/lib/justimmo_client/api/v1/representers/json/employee_representer.rb +3 -7
  18. data/lib/justimmo_client/api/v1/representers/json/realty_representer.rb +92 -37
  19. data/lib/justimmo_client/api/v1/representers/xml/attachment_representer.rb +31 -0
  20. data/lib/justimmo_client/api/v1/representers/xml/employee_representer.rb +11 -22
  21. data/lib/justimmo_client/api/v1/representers/xml/justimmo_representer.rb +1 -0
  22. data/lib/justimmo_client/api/v1/representers/xml/realty_price_representer.rb +4 -1
  23. data/lib/justimmo_client/api/v1/representers/xml/realty_representer.rb +192 -1
  24. data/lib/justimmo_client/api/v1/representers/xml/realty_type_representer.rb +2 -0
  25. data/lib/justimmo_client/autoload.rb +1 -0
  26. data/lib/justimmo_client/core/api_helpers.rb +29 -0
  27. data/lib/justimmo_client/core/config.rb +7 -1
  28. data/lib/justimmo_client/core/utils.rb +1 -25
  29. data/lib/justimmo_client/interface.rb +1 -0
  30. data/lib/justimmo_client/version.rb +1 -1
  31. data/locales/de.yml +3 -0
  32. metadata +8 -14
  33. data/lib/justimmo_client/api/v1/models/file.rb +0 -64
  34. data/lib/justimmo_client/api/v1/models/image.rb +0 -10
  35. data/lib/justimmo_client/api/v1/representers/json/contact_representer.rb +0 -15
  36. data/lib/justimmo_client/api/v1/representers/json/geo_location_representer.rb +0 -15
  37. data/lib/justimmo_client/api/v1/representers/json/realty_area_representer.rb +0 -27
  38. data/lib/justimmo_client/api/v1/representers/json/realty_price_representer.rb +0 -43
  39. data/lib/justimmo_client/api/v1/representers/json/realty_room_count_representer.rb +0 -21
  40. data/lib/justimmo_client/api/v1/representers/xml/contact_representer.rb +0 -15
  41. data/lib/justimmo_client/api/v1/representers/xml/realty_area_representer.rb +0 -28
  42. data/lib/justimmo_client/api/v1/representers/xml/realty_detail_representer.rb +0 -96
  43. data/lib/justimmo_client/api/v1/representers/xml/realty_list_representer.rb +0 -85
  44. data/lib/justimmo_client/api/v1/representers/xml/realty_room_count_representer.rb +0 -22
@@ -1,50 +1,55 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "monetize"
4
-
5
3
  module JustimmoClient::V1
6
4
  class RealtyPrice < JustimmoBase
7
5
  # @!group Attributes
8
6
 
9
7
  # @!macro [attach] attribute
10
8
  # @return [$2]
11
- attribute :currency, Money::Currency
9
+ attribute :currency, Symbol, default: :EUR
12
10
  attribute :provision, Boolean
13
11
  attribute :including_vat, Boolean
14
12
  attribute :on_demand, Boolean
15
13
  attribute :real_estate_taxes, Float
16
14
  attribute :land_registry, Float
17
- attribute :commission, Integer
18
- attribute :purcase, Money
19
- attribute :purcase_net, Money
15
+ attribute :commission, String
20
16
  attribute :rent_vat, Integer
21
- attribute :rent, Money
22
- attribute :rent_net, Money
23
- attribute :rent_cold, Money
24
- attribute :rent_including_heating, Money
25
- attribute :rent_per_sqm, Money
26
- attribute :deposit, Money
27
17
  attribute :operating_cost_vat, Integer
28
- attribute :operating_cost, Money
29
- attribute :operating_cost_net, Money
30
- attribute :operating_cost_per_sqm, Money
18
+ attribute :purcase, RealtyCost
19
+ attribute :purcase_net, RealtyCost
20
+ attribute :rent, RealtyCost
21
+ attribute :rent_net, RealtyCost
22
+ attribute :rent_cold, RealtyCost
23
+ attribute :rent_cold_net, RealtyCost
24
+ attribute :rent_including_heating, RealtyCost
25
+ attribute :rent_per_sqm, RealtyCost
26
+ attribute :operating_cost, RealtyCost
27
+ attribute :operating_cost_net, RealtyCost
28
+ attribute :operating_cost_per_sqm, RealtyCost
29
+ attribute :deposit, RealtyCost
31
30
 
32
31
  # @!group Instance Method Summary
33
32
 
34
- %w[purcase purcase_net
35
- operating_cost operating_cost_net operating_cost_per_sqm
36
- rent rent_net rent_cold rent_including_heating rent_per_sqm deposit
33
+ %i[
34
+ purcase purcase_net deposit
35
+ rent rent_net rent_cold rent_cold_net rent_including_heating rent_per_sqm
36
+ operating_cost operating_cost_net operating_cost_per_sqm
37
37
  ].each do |meth|
38
- define_method("#{meth}=") do |amount|
39
- log.debug("Using currency #{currency&.name} for #{meth}")
40
- instance_variable_set("@#{meth}", Monetize.parse(amount))
38
+ define_method("#{meth}=") do |args|
39
+ options =
40
+ case args
41
+ when Hash then args.deep_symbolize_keys
42
+ when String then { amount: args, currency: @currency }
43
+ else return
44
+ end
45
+ instance_variable_set("@#{meth}", RealtyCost.new(options))
41
46
  end
42
47
  end
43
48
 
44
49
  def on_demand?
45
- return on_demand unless on_demand.nil?
46
- return purcase.zero? unless purcase.nil?
47
- return rent.zero? unless rent.nil?
50
+ return on_demand if on_demand
51
+ return purcase.zero? if purcase
52
+ return rent.zero? if rent
48
53
  true
49
54
  end
50
55
 
@@ -56,30 +61,9 @@ module JustimmoClient::V1
56
61
  !purcase.nil?
57
62
  end
58
63
 
59
- def currency=(cur)
60
- @currency = Money::Currency.new(cur) unless cur.nil?
61
- Money.default_currency = @currency || :eur
62
- log.debug("Set currency to #{currency.name}")
63
- end
64
-
65
- # FIXME: this needs some proper analysis of the input string
66
- def commission=(text)
67
- @commission = text.to_i
68
- end
69
-
70
- def commission
71
- return nil unless @commission
72
-
73
- if purcase?
74
- (get / 100 * @commission) * 1.20
75
- else
76
- (get * @commission) * 1.20
77
- end
78
- end
79
-
80
- def rent_vat
81
- return nil unless rent? && rent_net && @rent_vat
82
- rent_net / 100 * @rent_vat
64
+ # TODO: add more additional costs
65
+ def additional
66
+ [operating_cost].map(&:to_f).sum
83
67
  end
84
68
 
85
69
  def get
@@ -91,15 +75,7 @@ module JustimmoClient::V1
91
75
  end
92
76
 
93
77
  def to_s
94
- on_demand? ? "on demand" : get.format
95
- end
96
-
97
- def as_json
98
- @attributes.to_s
99
- end
100
-
101
- def inspect
102
- "#<#{self.class} #{self}>"
78
+ on_demand? ? translate("price.on_demand") : get.to_s
103
79
  end
104
80
  end
105
81
  end
@@ -24,11 +24,7 @@ module JustimmoClient::V1
24
24
  # @!group Instance Method Summary
25
25
 
26
26
  def to_a
27
- tmp = []
28
- tmp << :living if living?
29
- tmp << :business if business?
30
- tmp << :investment if investment?
31
- tmp
27
+ attributes.select { |_k, v| v }.keys
32
28
  end
33
29
 
34
30
  def map(&block)
@@ -0,0 +1,14 @@
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 :url
10
+
11
+ collection_representer class: Attachment
12
+ end
13
+ end
14
+ end
@@ -18,13 +18,9 @@ module JustimmoClient::V1
18
18
  property :location
19
19
  property :website
20
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
21
+ collection :attachments,
22
+ decorator: AttachmentRepresenter,
23
+ class: Attachment
28
24
 
29
25
  collection_representer class: Employee
30
26
  end
@@ -3,18 +3,8 @@
3
3
  module JustimmoClient::V1
4
4
  module JSON
5
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
6
  property :type_id
16
7
  property :sub_type_id
17
-
18
8
  property :id
19
9
  property :number
20
10
  property :created_at
@@ -23,43 +13,108 @@ module JustimmoClient::V1
23
13
  property :title
24
14
  property :teaser
25
15
  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
16
  property :openimmo_id
38
17
  property :available
39
18
  property :construction_year
40
- property :contact,
41
- decorator: ContactRepresenter,
42
- class: Employee
43
19
  property :description_furniture
44
20
  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
21
  property :documents
59
22
  property :images360
60
23
  property :videos
61
24
  property :links
62
25
 
26
+ property :usage, class: RealtyUsage do
27
+ property :living
28
+ property :business
29
+ property :investment
30
+ end
31
+
32
+ property :marketing, class: RealtyMarketing do
33
+ property :buy
34
+ property :rent
35
+ end
36
+
37
+ property :area, class: RealtyArea do
38
+ property :balcony_terrace
39
+ property :balcony
40
+ property :office
41
+ property :garage
42
+ property :garden
43
+ property :total
44
+ property :surface
45
+ property :property
46
+ property :basement
47
+ property :storage
48
+ property :loggia
49
+ property :floor
50
+ property :parking
51
+ property :terrace
52
+ property :buildable
53
+ property :sales
54
+ property :living
55
+ end
56
+
57
+ property :geo, class: GeoLocation do
58
+ property :zip_code
59
+ property :location
60
+ property :federal_state
61
+ property :floor
62
+ property :country
63
+ property :latitude
64
+ property :longitude
65
+ end
66
+
67
+ property :room_count, class: RealtyRoomCount do
68
+ property :store
69
+ property :bathroom
70
+ property :balcony_terrace
71
+ property :balcony
72
+ property :garden
73
+ property :garage
74
+ property :loggia
75
+ property :basement
76
+ property :toilet
77
+ property :parking_space
78
+ property :total
79
+ end
80
+
81
+ property :contact, decorator: EmployeeRepresenter, class: Employee do
82
+ property :email_feedback
83
+ property :email
84
+ property :last_name
85
+ property :company
86
+ property :salutation
87
+ property :phone
88
+ property :mobile
89
+ end
90
+
91
+ property :price, class: RealtyPrice do
92
+ property :purcase
93
+ property :purcase_net
94
+ property :rent
95
+ property :rent_net
96
+ property :rent_cold
97
+ property :rent_including_heating
98
+ property :deposit
99
+ property :rent_per_sqm
100
+ property :operating_cost
101
+ property :operating_cost_net
102
+ property :operating_cost_per_sqm
103
+ property :currency
104
+ property :commission
105
+ property :rent_vat
106
+ property :provision
107
+ property :including_vat
108
+ property :on_demand
109
+ property :real_estate_taxes
110
+ property :land_registry
111
+ property :operating_cost_vat
112
+ end
113
+
114
+ collection :attachments,
115
+ decorator: AttachmentRepresenter,
116
+ class: Attachment
117
+
63
118
  collection_representer class: Realty
64
119
  end
65
120
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JustimmoClient::V1
4
+ module XML
5
+ class AttachmentRepresenter < JustimmoRepresenter
6
+ property :category,
7
+ as: :gruppe,
8
+ attribute: true,
9
+ parse_filter: ->(fragment, _opt) do
10
+ case fragment
11
+ when "TITELBILD" then :title_image
12
+ when "BILD" then :image
13
+ else nil
14
+ end
15
+ end
16
+
17
+ property :origin,
18
+ as: :location,
19
+ attribute: true,
20
+ parse_filter: ->(fragment, _opt) { fragment.downcase }
21
+
22
+ property :title, as: :anhangtitel
23
+
24
+ nested :daten do
25
+ property :url, as: :pfad
26
+ end
27
+
28
+ collection_representer class: Attachment
29
+ end
30
+ end
31
+ end
@@ -18,29 +18,18 @@ module JustimmoClient::V1
18
18
  property :location, as: :ort
19
19
  property :website, as: :url
20
20
 
21
- property :picture,
22
- as: :bild,
23
- class: Image do
24
- %i[small medium big pfad_medium].each do |size|
25
- property size, setter: ->(represented:, fragment:, **) { represented.add_url(fragment, default: :user_big) }
26
- end
27
- end
21
+ collection :attachments,
22
+ as: :anhang,
23
+ wrap: :anhaenge,
24
+ decorator: AttachmentRepresenter,
25
+ class: Attachment
28
26
 
29
- # NOTE: Just contains the picture again
30
- # Comment it out for now in case we still need it later.
31
- #
32
- # nested :user_defined_anyfield do
33
- # property :attachment,
34
- # as: :anhang,
35
- # class: Image do
36
- # property :category, as: :gruppe, attribute: true
37
- # property :origin, as: :location, attribute: true
38
- # property :title, as: :anhangtitel
39
- # nested :daten do
40
- # property :path, as: :pfad, setter: ->(represented:, fragment:, **) { represented.add_url(fragment, default: :user_big) }
41
- # end
42
- # end
43
- # end
27
+ nested :bild do
28
+ property :pfad,
29
+ setter: ->(fragment:, represented:, **) do
30
+ represented.attachments << Attachment.new(url: fragment)
31
+ end
32
+ end
44
33
  end
45
34
  end
46
35
  end
@@ -6,6 +6,7 @@ module JustimmoClient::V1
6
6
  module XML
7
7
  class JustimmoRepresenter < Representable::Decorator
8
8
  include Representable::XML
9
+ extend JustimmoClient::Logging
9
10
 
10
11
  defaults render_nil: true
11
12
  end
@@ -7,8 +7,10 @@ module JustimmoClient::V1
7
7
  property :currency, as: :iso_waehrung, attribute: true
8
8
  end
9
9
 
10
- property :purcase, as: :kaufpreis
10
+ property :purcase, as: :kaufpreis
11
11
  property :purcase_net, as: :kaufpreisnetto
12
+ # property :purcase_per_sqm, as: :kaufpreis_pro_qm
13
+
12
14
  nested :kaufpreis do
13
15
  property :on_demand, as: :auf_anfrage, attribute: true
14
16
  end
@@ -21,6 +23,7 @@ module JustimmoClient::V1
21
23
 
22
24
  property :deposit, as: :kaution
23
25
  property :rent_cold, as: :kaltmiete
26
+ property :rent_cold_net, as: :nettokaltmiete
24
27
  property :rent_including_heating, as: :warmmiete
25
28
  property :rent_per_sqm, as: :mietpreis_pro_qm
26
29
  property :operating_cost_per_sqm, as: :betriebskosten_pro_qm
@@ -2,7 +2,153 @@
2
2
 
3
3
  module JustimmoClient::V1
4
4
  module XML
5
- class RealtyRepresenter < JustimmoRepresenter
5
+ REALTY_ROOMS = {
6
+ store: :anzahl_abstellraum,
7
+ bathroom: :anzahl_badezimmer,
8
+ balcony_terrace: :anzahl_balkon_terrassen,
9
+ balcony: :anzahl_balkone,
10
+ garden: :anzahl_garten,
11
+ garage: :anzahl_garagen,
12
+ loggia: :anzahl_loggias,
13
+ basement: :anzahl_keller,
14
+ toilet: :anzahl_sep_wc,
15
+ parking_space: :anzahl_stellplaetze,
16
+ total: :anzahl_zimmer
17
+ }.freeze
18
+
19
+ REALTY_AREAS = {
20
+ balcony_terrace: :balkon_terrasse_flaeche,
21
+ balcony: :balkons_flaeche,
22
+ office: :bueroflaeche,
23
+ garage: :garagen_flaeche,
24
+ garden: :gartenflaeche,
25
+ total: :gesamtflaeche,
26
+ surface: :grundflaeche,
27
+ property: :grundstuecksflaeche,
28
+ basement: :kellerflaeche,
29
+ storage: :lagerflaeche,
30
+ loggia: :loggias_flaeche,
31
+ floor: :nutzflaeche,
32
+ parking: :stellplatz_flaeche,
33
+ terrace: :terrassen_flaeche,
34
+ buildable: :verbaubare_flaeche,
35
+ sales: :verkaufsflaeche,
36
+ living: :wohnflaeche
37
+ }.freeze
38
+
39
+ FILTERS = {
40
+ sanitize_newline: ->(frag, _opt) { frag.gsub("\r\n", "\n") },
41
+ str_to_a: ->(frag, _opt) { frag.split(",").map(&:strip) }
42
+ }.freeze
43
+
44
+ private_constant :REALTY_ROOMS
45
+ private_constant :REALTY_AREAS
46
+ private_constant :FILTERS
47
+
48
+ class RealtyListRepresenter < JustimmoRepresenter
49
+ property :title, as: :titel
50
+ property :teaser, as: :dreizeiler
51
+ property :description,
52
+ as: :objektbeschreibung,
53
+ parse_filter: FILTERS[:sanitize_newline]
54
+
55
+ property :status_id
56
+ property :created_at, as: :erstellt_am
57
+ property :updated_at, as: :aktualisiert_am
58
+
59
+ property :id
60
+ property :number, as: :objektnummer
61
+
62
+ # nesting
63
+
64
+ { first_image: :erstes_bild,
65
+ second_image: :zweites_bild
66
+ }.each do |key, api|
67
+ property api, setter: ->(represented:, fragment:, **) do
68
+ represented.attachments << Attachment.new(url: fragment)
69
+ end
70
+ end
71
+
72
+ { location: :ort,
73
+ zip_code: :plz,
74
+ proximity: :naehe,
75
+ floor: :etage
76
+ }.each do |key, value|
77
+ property value, setter: ->(represented:, fragment:, **) do
78
+ represented.geo ||= GeoLocation.new
79
+ represented.geo.send("#{key}=", fragment)
80
+ end
81
+ end
82
+
83
+ { purcase: :kaufpreis,
84
+ rent_cold: :gesamtmiete
85
+ }.each do |key, value|
86
+ property value, setter: ->(represented:, fragment:, **) do
87
+ represented.price ||= RealtyPrice.new
88
+ represented.price.send("#{key}=", fragment)
89
+ end
90
+ end
91
+
92
+ REALTY_AREAS.each do |key, value|
93
+ property key,
94
+ as: value,
95
+ setter: ->(fragment:, represented:, **) do
96
+ represented.area ||= RealtyArea.new
97
+ represented.area[key] = fragment
98
+ end
99
+ end
100
+
101
+ REALTY_ROOMS.each do |key, value|
102
+ property key,
103
+ as: value,
104
+ setter: ->(fragment:, represented:, **) do
105
+ represented.room_count ||= RealtyRoomCount.new
106
+ represented.room_count[key] = fragment
107
+ end
108
+ end
109
+ end
110
+
111
+ class RealtyRepresenter < RealtyListRepresenter
112
+ property :geo,
113
+ decorator: GeoLocationRepresenter,
114
+ class: GeoLocation
115
+
116
+ property :contact, as: :kontaktperson, class: Employee do
117
+ property :email_feedback
118
+ property :email, as: :email_direkt
119
+ property :last_name, as: :name
120
+ property :company, as: :firma
121
+ property :salutation, as: :anrede
122
+ property :phone, as: :tel_zentrale
123
+ property :mobile, as: :tel_handy
124
+ end
125
+
126
+ property :price,
127
+ as: :preise,
128
+ decorator: RealtyPriceRepresenter,
129
+ class: RealtyPrice
130
+
131
+ property :area, as: :flaechen, class: RealtyArea do
132
+ REALTY_AREAS.each { |k, v| property k, as: v }
133
+ end
134
+
135
+ property :room_count, as: :flaechen, class: RealtyRoomCount do
136
+ REALTY_ROOMS.each { |k, v| property k, as: v }
137
+ end
138
+
139
+ property :documents, as: :dokumente
140
+ property :videos
141
+ property :images360, as: :bilder360
142
+ property :links
143
+
144
+ collection :attachments,
145
+ as: :anhang,
146
+ wrap: :anhaenge,
147
+ decorator: AttachmentRepresenter,
148
+ class: Attachment
149
+
150
+ # Unnesting
151
+
6
152
  nested :category, as: :objektkategorie do
7
153
  property :usage, as: :nutzungsart, class: RealtyUsage do
8
154
  property :living, as: :WOHNEN, attribute: true
@@ -27,6 +173,51 @@ module JustimmoClient::V1
27
173
  options[:doc].css("user_defined_simplefield[feldname=sub_objektart_id]").text
28
174
  end
29
175
  end
176
+
177
+ nested :ausstattung do
178
+ end
179
+
180
+ nested :zustand_angaben do
181
+ property :construction_year, as: :baujahr
182
+ end
183
+
184
+ nested :freitexte do
185
+ property :title, as: :objekttitel
186
+
187
+ property :description,
188
+ as: :objektbeschreibung,
189
+ parse_filter: FILTERS[:sanitize_newline]
190
+
191
+ property :description_furniture,
192
+ as: :ausstatt_beschr,
193
+ parse_filter: FILTERS[:str_to_a]
194
+
195
+ nested :user_defined_anyfield do
196
+ property :furniture, as: :justimmo_moeblierung
197
+ end
198
+ end
199
+
200
+ nested :verwaltung_objekt do
201
+ property :available, as: :verfuegbar_ab
202
+
203
+ property :status_id
204
+
205
+ property :created_at,
206
+ as: :user_defined_simplefield,
207
+ parse_filter: ->(_fragment, options) { options[:doc].css("user_defined_simplefield[feldname=erstellt_am]").text }
208
+
209
+ property :updated_at,
210
+ as: :user_defined_simplefield,
211
+ parse_filter: ->(_fragment, options) { options[:doc].css("user_defined_simplefield[feldname=aktualisiert_am]").text }
212
+ end
213
+
214
+ nested :verwaltung_techn do
215
+ property :id, as: :objektnr_intern
216
+ property :number, as: :objektnr_extern
217
+ property :openimmo_id, as: :openimmo_obid
218
+ end
219
+
220
+ collection_representer class: Realty
30
221
  end
31
222
  end
32
223
  end