apidae 0.5.3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/apidae/obj.rb +99 -48
- data/lib/apidae/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e10874c1cd302b232c929a0d3f8f1aadc07a442d
|
4
|
+
data.tar.gz: 46282a888ab5032291bc08ec7d8c5864801c9a52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 826e57071ba3eebd560146fa243f9270f6354e1bbfb96680f668d7add65ffde05357edc2854f7d0ae3c2af2b647b287004e239faa3ef5e593542b087d3261512
|
7
|
+
data.tar.gz: 3a77efb3727a59029e018dbf4913683752c981c2fafafdaf2df9cbe5b37e0035557a0edd619d0db6f40fba83dda092b645fe20d407d52a6e9acb0a5f7637ad75
|
data/app/models/apidae/obj.rb
CHANGED
@@ -2,7 +2,6 @@ module Apidae
|
|
2
2
|
class Obj < ActiveRecord::Base
|
3
3
|
|
4
4
|
belongs_to :town, class_name: 'Apidae::Town', foreign_key: :town_insee_code, primary_key: :insee_code
|
5
|
-
# has_many :attached_files, class_name: 'Apidae::AttachedFile'
|
6
5
|
has_many :apidae_selection_objects, class_name: 'Apidae::SelectionObject', foreign_key: :apidae_object_id
|
7
6
|
has_many :selections, class_name: 'Apidae::Selection', source: :apidae_selection, through: :apidae_selection_objects
|
8
7
|
|
@@ -10,14 +9,14 @@ module Apidae
|
|
10
9
|
store_accessor :pictures_data, :pictures
|
11
10
|
store_accessor :attachments_data, :attachments
|
12
11
|
store_accessor :type_data, :categories, :themes, :capacity, :classification, :labels, :chains, :area, :track,
|
13
|
-
:products, :audience, :animals, :extra, :duration
|
14
|
-
store_accessor :entity_data, :entity_id, :entity_name
|
12
|
+
:products, :audience, :animals, :extra, :duration, :certifications
|
13
|
+
store_accessor :entity_data, :entity_id, :entity_name, :service_provider_id
|
15
14
|
store_accessor :contact, :telephone, :email, :website
|
16
|
-
store_accessor :location_data, :address, :place, :latitude, :longitude, :access
|
15
|
+
store_accessor :location_data, :address, :place, :latitude, :longitude, :access, :territories, :environments
|
17
16
|
store_accessor :openings_data, :openings_desc, :openings, :time_periods
|
18
|
-
store_accessor :rates_data, :rates_desc, :rates, :payment_methods
|
17
|
+
store_accessor :rates_data, :rates_desc, :rates, :payment_methods, :includes, :excludes
|
19
18
|
store_accessor :service_data, :services, :equipments, :comfort, :activities, :challenged, :languages
|
20
|
-
store_accessor :tags_data, :promo, :internal
|
19
|
+
store_accessor :tags_data, :promo, :internal, :linked
|
21
20
|
|
22
21
|
ACT = 'ACTIVITE'
|
23
22
|
COS = 'COMMERCE_ET_SERVICE'
|
@@ -65,25 +64,60 @@ module Apidae
|
|
65
64
|
end
|
66
65
|
|
67
66
|
def self.update_object(apidae_obj, object_data)
|
67
|
+
populate_fields(apidae_obj, object_data)
|
68
|
+
|
69
|
+
unless object_data[:aspects].blank?
|
70
|
+
groups_aspect = object_data[:aspects].find {|a| a[:aspect] == 'GROUPES'}
|
71
|
+
if groups_aspect
|
72
|
+
groups_aspect[:type] = apidae_obj.apidae_type
|
73
|
+
aspect_obj = Obj.new
|
74
|
+
populate_fields(aspect_obj, groups_aspect)
|
75
|
+
merge_fields(apidae_obj, aspect_obj)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
apidae_obj.save!
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.populate_fields(apidae_obj, object_data)
|
68
83
|
type_fields = TYPES_DATA[object_data[:type]]
|
69
84
|
apidae_obj.apidae_type = object_data[:type]
|
70
85
|
apidae_obj.apidae_subtype = node_id(object_data[type_fields[:node]], type_fields[:subtype])
|
71
86
|
apidae_obj.title = node_value(object_data, :nom)
|
72
87
|
apidae_obj.description_data = parse_desc_data(object_data[:presentation])
|
73
88
|
apidae_obj.contact = contact(object_data[:informations])
|
74
|
-
apidae_obj.location_data = parse_location_data(object_data[:localisation], object_data[type_fields[:node]]
|
75
|
-
|
89
|
+
apidae_obj.location_data = parse_location_data(object_data[:localisation], object_data[type_fields[:node]],
|
90
|
+
object_data[:territoires])
|
91
|
+
apidae_obj.town = town(object_data[:localisation])
|
76
92
|
apidae_obj.openings_data = parse_openings(object_data[:ouverture])
|
77
93
|
apidae_obj.rates_data = parse_rates(object_data[:descriptionTarif])
|
78
94
|
apidae_obj.reservation = parse_reservation(object_data[:reservation])
|
79
95
|
apidae_obj.type_data = parse_type_data(apidae_obj, object_data[type_fields[:node]], object_data[:prestations])
|
80
96
|
apidae_obj.pictures_data = pictures_urls(object_data[:illustrations])
|
81
97
|
apidae_obj.attachments_data = attachments_urls(object_data[:multimedias])
|
82
|
-
apidae_obj.entity_data = entity_fields(object_data[:informations])
|
98
|
+
apidae_obj.entity_data = entity_fields(object_data[:informations], object_data[type_fields[:node]])
|
83
99
|
apidae_obj.service_data = parse_service_data(object_data[:prestations], object_data[type_fields[:node]])
|
84
|
-
apidae_obj.tags_data = parse_tags_data(object_data[:presentation], object_data[:criteresInternes])
|
100
|
+
apidae_obj.tags_data = parse_tags_data(object_data[:presentation], object_data[:criteresInternes], object_data[:liens])
|
85
101
|
apidae_obj.meta_data = object_data[:metadonnees]
|
86
|
-
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.merge_fields(apidae_obj, aspect_obj)
|
105
|
+
apidae_obj.description_data.merge!(non_empty(aspect_obj.description_data)) if aspect_obj.description_data
|
106
|
+
apidae_obj.contact.merge!(non_empty(aspect_obj.contact)) if aspect_obj.contact
|
107
|
+
apidae_obj.location_data.merge!(non_empty(aspect_obj.location_data)) if aspect_obj.location_data
|
108
|
+
apidae_obj.openings_data.merge!(non_empty(aspect_obj.openings_data)) if aspect_obj.openings_data
|
109
|
+
apidae_obj.rates_data.merge!(non_empty(aspect_obj.rates_data)) if aspect_obj.rates_data
|
110
|
+
apidae_obj.reservation = aspect_obj.reservation unless aspect_obj.reservation.blank?
|
111
|
+
apidae_obj.type_data.merge!(non_empty(aspect_obj.type_data)) if aspect_obj.type_data
|
112
|
+
apidae_obj.pictures_data.merge!(non_empty(aspect_obj.pictures_data)) if aspect_obj.pictures_data
|
113
|
+
apidae_obj.attachments_data.merge!(non_empty(aspect_obj.attachments_data)) if aspect_obj.attachments_data
|
114
|
+
apidae_obj.service_data.merge!(non_empty(aspect_obj.service_data)) if aspect_obj.service_data
|
115
|
+
apidae_obj.tags_data.merge!(non_empty(aspect_obj.tags_data)) if aspect_obj.tags_data
|
116
|
+
apidae_obj.meta_data.merge!(non_empty(aspect_obj.meta_data)) if aspect_obj.meta_data
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.non_empty(data_hash)
|
120
|
+
data_hash.keep_if {|k, v| !v.blank?}
|
87
121
|
end
|
88
122
|
|
89
123
|
def self.parse_desc_data(data_hash)
|
@@ -126,9 +160,10 @@ module Apidae
|
|
126
160
|
|
127
161
|
def self.contact(information_hash)
|
128
162
|
contact_details = {}
|
129
|
-
|
130
|
-
|
131
|
-
|
163
|
+
unless information_hash.blank?
|
164
|
+
contact_entries = information_hash[:moyensCommunication] || []
|
165
|
+
contact_entries.each do |c|
|
166
|
+
case c[:type][:id]
|
132
167
|
when PHONE
|
133
168
|
contact_details[:telephone] ||= []
|
134
169
|
contact_details[:telephone] << c[:coordonnees][:fr]
|
@@ -139,12 +174,14 @@ module Apidae
|
|
139
174
|
contact_details[:website] ||= []
|
140
175
|
contact_details[:website] << c[:coordonnees][:fr]
|
141
176
|
else
|
177
|
+
end
|
142
178
|
end
|
143
179
|
end
|
144
180
|
contact_details
|
145
181
|
end
|
146
182
|
|
147
|
-
def self.parse_location_data(location_hash, type_data_hash)
|
183
|
+
def self.parse_location_data(location_hash, type_data_hash, territories)
|
184
|
+
loc_data = {}
|
148
185
|
unless location_hash.blank?
|
149
186
|
address_hash = location_hash[:adresse]
|
150
187
|
computed_address = []
|
@@ -153,19 +190,27 @@ module Apidae
|
|
153
190
|
computed_address << address_hash[:adresse2] unless address_hash[:adresse2].blank?
|
154
191
|
computed_address << address_hash[:adresse3] unless address_hash[:adresse3].blank?
|
155
192
|
end
|
156
|
-
loc_data
|
193
|
+
loc_data.merge!({address: computed_address})
|
194
|
+
loc_data.merge!({place: type_data_hash[:nomLieu]}) if type_data_hash
|
157
195
|
geoloc_details = location_hash[:geolocalisation]
|
158
196
|
if geoloc_details && geoloc_details[:valide] && geoloc_details[:geoJson]
|
159
197
|
loc_data[:latitude] = geoloc_details[:geoJson][:coordinates][1]
|
160
198
|
loc_data[:longitude] = geoloc_details[:geoJson][:coordinates][0]
|
161
199
|
end
|
162
200
|
loc_data[:access] = node_value(geoloc_details, :complement) if geoloc_details
|
163
|
-
loc_data
|
201
|
+
loc_data[:environments] = location_hash[:environnements].map {|e| e[:id]} if location_hash[:environnements]
|
164
202
|
end
|
203
|
+
loc_data[:territories] = territories.map {|t| t[:id]} unless territories.blank?
|
204
|
+
loc_data
|
165
205
|
end
|
166
206
|
|
167
|
-
def self.town(
|
168
|
-
|
207
|
+
def self.town(location_hash)
|
208
|
+
if location_hash
|
209
|
+
address_hash = location_hash[:adresse]
|
210
|
+
(!address_hash.blank? && address_hash[:commune]) ? Town.find_by_apidae_id(address_hash[:commune][:id]) : nil
|
211
|
+
else
|
212
|
+
nil
|
213
|
+
end
|
169
214
|
end
|
170
215
|
|
171
216
|
def self.parse_openings(openings_hash)
|
@@ -183,33 +228,34 @@ module Apidae
|
|
183
228
|
desc = rates_hash[:gratuit] ? 'gratuit' : node_value(rates_hash, :tarifsEnClair)
|
184
229
|
values = rates_hash[:periodes].blank? ? [] : rates_hash[:periodes].map {|p| build_rate(p)}
|
185
230
|
methods = rates_hash[:modesPaiement].blank? ? [] : rates_hash[:modesPaiement].map {|p| p[:id]}
|
186
|
-
{rates_desc: desc, rates: values, payment_methods: methods}
|
231
|
+
{rates_desc: desc, rates: values, payment_methods: methods, includes: node_value(rates_hash, :leTarifComprend), excludes: node_value(rates_hash, :leTarifNeComprendPas)}
|
187
232
|
end
|
188
233
|
end
|
189
234
|
|
190
|
-
def self.parse_type_data(apidae_obj,
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
235
|
+
def self.parse_type_data(apidae_obj, type_hash, presta_hash)
|
236
|
+
data_hash = type_hash || {}
|
237
|
+
prestations_hash = presta_hash || {}
|
238
|
+
apidae_obj.apidae_subtype = lists_ids(data_hash[:typesManifestation]).first if apidae_obj.apidae_type == FEM
|
239
|
+
apidae_obj.apidae_subtype = node_id(data_hash, :rubrique) if apidae_obj.apidae_type == EQU
|
240
|
+
apidae_obj.apidae_subtype = lists_ids(data_hash[:typesHebergement]).first if apidae_obj.apidae_type == SPA
|
241
|
+
{
|
242
|
+
categories: lists_ids(data_hash[:categories], data_hash[:typesDetailles], data_hash[:activiteCategories]),
|
243
|
+
themes: lists_ids(data_hash[:themes]),
|
244
|
+
capacity: (data_hash[:capacite] || {}).merge(presta_hash ? {group_min: presta_hash[:tailleGroupeMin], group_max: presta_hash[:tailleGroupeMax]} : {}),
|
245
|
+
classification: nodes_ids(data_hash[:classement], data_hash[:classementPrefectoral], data_hash[:classification]) +
|
246
|
+
lists_ids(data_hash[:classementsGuides]) + lists_ids(data_hash[:classements]),
|
247
|
+
labels: lists_ids(data_hash[:labels], prestations_hash[:labelsTourismeHandicap]) +
|
248
|
+
(node_id(data_hash, :typeLabel) ? [node_id(data_hash, :typeLabel)] : []),
|
249
|
+
chains: lists_ids(data_hash[:chaines]) + nodes_ids(data_hash[:chaineEtLabel]),
|
250
|
+
area: apidae_obj.apidae_type == DOS ? data_hash.except(:classification) : node_value(data_hash, :lieuDePratique),
|
251
|
+
track: apidae_obj.apidae_type == EQU ? data_hash[:itineraire] : nil,
|
252
|
+
products: lists_ids(data_hash[:typesProduit], data_hash[:aopAocIgps], data_hash[:specialites]),
|
253
|
+
audience: lists_ids(prestations_hash[:typesClientele]),
|
254
|
+
animals: prestations_hash[:animauxAcceptes] == 'ACCEPTES',
|
255
|
+
extra: apidae_obj.apidae_type == SPA ? node_value(data_hash, :formuleHebergement) : node_value(prestations_hash, :complementAccueil),
|
256
|
+
duration: apidae_obj.apidae_type == SPA ? {days: data_hash[:nombreJours], nights: data_hash[:nombreNuits]} : data_hash[:dureeSeance],
|
257
|
+
certifications: data_hash[:agrements].blank? ? [] : data_hash[:agrements].map {|a| {id: a[:type][:id], identifier: a[:numero]}}
|
258
|
+
}
|
213
259
|
end
|
214
260
|
|
215
261
|
def self.parse_service_data(data_hash, type_data_hash)
|
@@ -218,15 +264,16 @@ module Apidae
|
|
218
264
|
services: lists_ids(data_hash[:services]),
|
219
265
|
equipments: lists_ids(data_hash[:equipements]),
|
220
266
|
comfort: lists_ids(data_hash[:conforts]),
|
221
|
-
activities: lists_ids(data_hash[:activites], type_data_hash[:activites],
|
222
|
-
type_data_hash[:activitesSportives]
|
267
|
+
activities: lists_ids(data_hash[:activites], type_data_hash ? type_data_hash[:activites] : [],
|
268
|
+
type_data_hash ? type_data_hash[:activitesSportives] : [],
|
269
|
+
type_data_hash ? type_data_hash[:activitesCulturelles] : []),
|
223
270
|
challenged: lists_ids(data_hash[:tourismesAdaptes]),
|
224
271
|
languages: lists_ids(data_hash[:languesParlees])
|
225
272
|
}
|
226
273
|
end
|
227
274
|
end
|
228
275
|
|
229
|
-
def self.parse_tags_data(pres_data_hash, crit_data_hash)
|
276
|
+
def self.parse_tags_data(pres_data_hash, crit_data_hash, linked_data_hash)
|
230
277
|
tags = {}
|
231
278
|
if pres_data_hash
|
232
279
|
tags[:promo] = lists_ids(pres_data_hash[:typologiesPromoSitra])
|
@@ -234,6 +281,10 @@ module Apidae
|
|
234
281
|
unless crit_data_hash.blank?
|
235
282
|
tags[:internal] = crit_data_hash.map {|c| c[:id]}
|
236
283
|
end
|
284
|
+
unless linked_data_hash.blank? || linked_data_hash[:liensObjetsTouristiquesTypes].blank?
|
285
|
+
tags[:linked] = linked_data_hash[:liensObjetsTouristiquesTypes]
|
286
|
+
.map {|l| {apidae_id: l[:objetTouristique][:id], apidae_type: l[:objetTouristique][:type], category: l[:type]}}
|
287
|
+
end
|
237
288
|
tags
|
238
289
|
end
|
239
290
|
|
@@ -247,9 +298,9 @@ module Apidae
|
|
247
298
|
end
|
248
299
|
end
|
249
300
|
|
250
|
-
def self.entity_fields(information_hash)
|
301
|
+
def self.entity_fields(information_hash, type_data_hash)
|
251
302
|
if information_hash && information_hash[:structureGestion]
|
252
|
-
{entity_id: information_hash[:structureGestion][:id]}
|
303
|
+
{entity_id: information_hash[:structureGestion][:id], service_provider_id: node_id(type_data_hash, :prestataireActivites)}
|
253
304
|
end
|
254
305
|
end
|
255
306
|
|
data/lib/apidae/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apidae
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean-Baptiste Vilain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubyzip
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|