apidae 0.9.35 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 554f08fb2b68d51b91e7439500fc93bbfa392cc010597072a4ca263b3d3e6929
4
- data.tar.gz: 8f92912b6d90880f7241398182cc46060bdef9ffb719e241edca1e6dd4da608f
2
+ SHA1:
3
+ metadata.gz: 1e5d13058f65857b20c5eb5ebcb31933047d458d
4
+ data.tar.gz: 57c158bf11ea28f28c25094e2e2b732289cd1b47
5
5
  SHA512:
6
- metadata.gz: bc5d8c7acdcce8af01ae63bef167e859b40474dca7ff9406a2b18c19747ab119d189d05404f0cbbaf9c81b86148baca14dfde59f7a520383fe41ff93cc4f9388
7
- data.tar.gz: c4935867c70676048c8f66a39d088cd8f803b6cb44def3d8adff9718aa8c2df496d3c71a753617bd58b6363134586428ed43b1b7524a8f7152227eb013bff07c
6
+ metadata.gz: '039e3d10fa484d795ad731c1a178b567f7c793b2a339ea835370f0a3c59318734ecb5bc9cd818073da9d4c16cdaf03d9d833f83c507d8589f39fe41d56c32657'
7
+ data.tar.gz: 188194787706a94cf7b04854bdd92266095ee95607b24a764ad2ccadda0fec50f076bb9d0631b7bb3454c02c80c74334bb5f313832d10ac012b86ec4ad3c3e23
@@ -30,22 +30,18 @@ module Apidae
30
30
  Town.import(zfile.read(TOWNS_FILE))
31
31
  logger.info "Completed #{Town.count} towns update"
32
32
  end
33
- ordered_files(zfile).each do |file|
34
- puts "processing #{file.name}"
33
+ zfile.each do |file|
35
34
  if file.file? && file.name.end_with?('.json')
36
35
  logger.info "Processing file : #{file.name}"
37
36
  if file.name.include?(MODIFIED_DIR)
38
37
  add_or_update_objects(zfile.read(file.name), result, project.locales, project.versions)
39
- end
40
- if file.name.include?(SELECTIONS_FILE)
41
- add_or_update_selections(project, zfile.read(file.name), result)
42
- end
43
- if file.name.include?(DELETED_FILE)
38
+ elsif file.name.include?(DELETED_FILE)
44
39
  delete_objects(zfile.read(file.name), result)
40
+ elsif file.name.include?(SELECTIONS_FILE)
41
+ add_or_update_selections(project, zfile.read(file.name), result)
45
42
  end
46
43
  end
47
44
  end
48
- project.cleanup_selections
49
45
  create(result.except(:selections)
50
46
  .merge({remote_file: (zip_file.is_a?(File) ? zip_file.path : zip_file), status: STATUS_COMPLETE, apidae_id: project_id}))
51
47
  logger.info "Import results : #{result}"
@@ -108,16 +104,12 @@ module Apidae
108
104
  end
109
105
  end
110
106
 
111
- def self.ordered_files(zfile)
112
- zfile.sort_by {|f| f.name.include?(MODIFIED_DIR) ? 0 : (f.name.include?(SELECTIONS_FILE) ? 1 : 2)}
113
- end
114
-
115
107
  def self.delete_objects(deleted_json, result)
116
108
  deleted_ids = JSON.parse(deleted_json)
117
109
  deleted_ids.each do |id|
118
110
  obj = Obj.find_by_apidae_id(id)
119
111
  if obj
120
- obj.destroy! if obj.selections.empty?
112
+ obj.destroy!
121
113
  result[:deleted] += 1
122
114
  else
123
115
  logger.info "skipping object deletion : #{id}"
@@ -171,9 +163,7 @@ module Apidae
171
163
  def self.add_or_update_selections(project, selections_json, result)
172
164
  selections_hashes = JSON.parse(selections_json, symbolize_names: true)
173
165
  deleted_ids = Selection.where(apidae_project_id: project.id).collect {|sel| sel.apidae_id}.uniq - selections_hashes.collect {|sel| sel[:id]}
174
- apidae_selection_ids = Selection.where(apidae_id: deleted_ids).map {|s| s.id}
175
- SelectionObject.where(apidae_selection_id: apidae_selection_ids).delete_all
176
- Selection.where(id: apidae_selection_ids).delete_all
166
+ Selection.where(apidae_id: deleted_ids).delete_all
177
167
  selections_hashes.each do |selection_data|
178
168
  logger.info "Updating selection #{selection_data[:id]}"
179
169
  Selection.add_or_update(selection_data, project.id)
@@ -14,12 +14,12 @@ module Apidae
14
14
  store_accessor :pictures_data, :pictures
15
15
  store_accessor :attachments_data, :attachments
16
16
  store_accessor :type_data, :categories, :themes, :capacity, :classification, :labels, :chains, :area, :track,
17
- :products, :audience, :animals, :extra, :duration, :certifications, :business, :complement
17
+ :products, :audience, :animals, :extra, :duration, :certifications, :business
18
18
  store_accessor :entity_data, :entity_id, :entity_name, :service_provider_id
19
19
  store_accessor :contact, :telephone, :email, :website
20
20
  store_accessor :location_data, :address, :place, :latitude, :longitude, :access, :territories, :environments
21
- store_accessor :openings_data, :openings_desc, :openings_desc_mode, :openings, :time_periods, :openings_extra
22
- store_accessor :rates_data, :rates_desc, :rates_desc_mode, :rates, :payment_methods, :includes, :excludes, :rates_complement
21
+ store_accessor :openings_data, :openings_desc, :openings_desc_mode, :openings, :time_periods
22
+ store_accessor :rates_data, :rates_desc, :rates_desc_mode, :rates, :payment_methods, :includes, :excludes
23
23
  store_accessor :service_data, :services, :equipments, :comfort, :activities, :challenged, :languages
24
24
  store_accessor :booking_data, :booking_desc, :booking_entities
25
25
  store_accessor :tags_data, :promo, :internal, :linked
@@ -109,7 +109,11 @@ module Apidae
109
109
  end
110
110
 
111
111
  def in_version(v)
112
- versions.where(version: v).first
112
+ @cached_versions ||= {}
113
+ if @cached_versions[v].nil?
114
+ @cached_versions[v] = versions.where(version: v).first
115
+ end
116
+ @cached_versions[v]
113
117
  end
114
118
 
115
119
  def in_locale(l)
@@ -293,18 +297,12 @@ module Apidae
293
297
  when PHONE
294
298
  contact_details[:telephone] ||= []
295
299
  contact_details[:telephone] << c[:coordonnees][:fr]
296
- contact_details[:telephone_details] ||= []
297
- contact_details[:telephone_details] << {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
298
300
  when EMAIL
299
301
  contact_details[:email] ||= []
300
302
  contact_details[:email] << c[:coordonnees][:fr]
301
- contact_details[:email_details] ||= []
302
- contact_details[:email_details] << {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
303
303
  when WEBSITE
304
304
  contact_details[:website] ||= []
305
305
  contact_details[:website] << c[:coordonnees][:fr]
306
- contact_details[:website_details] ||= []
307
- contact_details[:website_details] << {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
308
306
  else
309
307
  end
310
308
  end
@@ -345,14 +343,14 @@ module Apidae
345
343
  end
346
344
  end
347
345
 
346
+ # Note : use internal format for openings storage (ideally Apihours one, to merge data from both sources)
348
347
  def self.parse_openings(openings_hash, *locales)
349
348
  if openings_hash && openings_hash[:periodeEnClair]
350
349
  {
351
350
  openings_desc: node_value(openings_hash, :periodeEnClair, *locales),
352
351
  openings_desc_mode: openings_hash[:periodeEnClairGenerationMode] == 'AUTOMATIQUE' ? MODE_AUTO : MODE_MANUAL,
353
352
  openings: openings_hash[:periodesOuvertures],
354
- time_periods: lists_ids(openings_hash[:indicationsPeriode]),
355
- openings_extra: lists_ids(openings_hash[:ouverturesComplementaires])
353
+ time_periods: lists_ids(openings_hash[:indicationsPeriode])
356
354
  }
357
355
  end
358
356
  end
@@ -366,8 +364,7 @@ module Apidae
366
364
  rates_desc: desc, rates: values, payment_methods: methods,
367
365
  rates_desc_mode: rates_hash[:tarifsEnClairGenerationMode] == 'AUTOMATIQUE' ? MODE_AUTO : MODE_MANUAL,
368
366
  includes: node_value(rates_hash, :leTarifComprend, *locales),
369
- excludes: node_value(rates_hash, :leTarifNeComprendPas, *locales),
370
- rates_complement: node_value(rates_hash, :complement, *locales)
367
+ excludes: node_value(rates_hash, :leTarifNeComprendPas, *locales)
371
368
  }
372
369
  end
373
370
  end
@@ -382,7 +379,7 @@ module Apidae
382
379
  categories: lists_ids(data_hash[:categories], data_hash[:typesDetailles], data_hash[:activiteCategories]),
383
380
  themes: lists_ids(data_hash[:themes]),
384
381
  capacity: (data_hash[:capacite] || {})
385
- .merge(presta_hash ? {group_min: (presta_hash[:nombrePersonnesMinimum] || presta_hash[:tailleGroupeMin]), group_max: presta_hash[:tailleGroupeMax],
382
+ .merge(presta_hash ? {group_min: presta_hash[:tailleGroupeMin], group_max: presta_hash[:tailleGroupeMax],
386
383
  age_min: presta_hash[:ageMin], age_max: presta_hash[:ageMax]} : {}),
387
384
  classification: nodes_ids(data_hash[:classement], data_hash[:classementPrefectoral], data_hash[:classification]) +
388
385
  lists_ids(data_hash[:classementsGuides]) + lists_ids(data_hash[:classements]),
@@ -397,8 +394,7 @@ module Apidae
397
394
  extra: apidae_obj.apidae_type == SPA ? node_value(data_hash, :formuleHebergement, *locales) : node_value(prestations_hash, :complementAccueil, *locales),
398
395
  duration: apidae_obj.apidae_type == SPA ? {days: data_hash[:nombreJours], nights: data_hash[:nombreNuits]} : data_hash[:dureeSeance],
399
396
  certifications: data_hash[:agrements].blank? ? [] : data_hash[:agrements].map {|a| {id: a[:type][:id], identifier: a[:numero]}},
400
- business: business_hash,
401
- complement: apidae_obj.apidae_type == SPA ? node_value(prestations_hash, :complementAccueil, *locales) : {},
397
+ business: business_hash
402
398
  }
403
399
  end
404
400
 
@@ -427,7 +423,7 @@ module Apidae
427
423
  end
428
424
  unless linked_data_hash.blank? || linked_data_hash[:liensObjetsTouristiquesTypes].blank?
429
425
  tags[:linked] = linked_data_hash[:liensObjetsTouristiquesTypes]
430
- .map {|l| {apidae_id: l[:objetTouristique][:id], apidae_type: l[:objetTouristique][:type], category: l[:type], name: l[:objetTouristique][:nom]}}
426
+ .map {|l| {apidae_id: l[:objetTouristique][:id], apidae_type: l[:objetTouristique][:type], category: l[:type]}}
431
427
  end
432
428
  tags
433
429
  end
@@ -461,7 +457,7 @@ module Apidae
461
457
 
462
458
  def self.build_rate(rate_period)
463
459
  {
464
- id: rate_period[:identifiant], from: rate_period[:dateDebut], to: rate_period[:dateFin],
460
+ id: rate_period[:identifiant], start_date: rate_period[:dateDebut], end_date: rate_period[:dateFin],
465
461
  values: rate_period[:tarifs].blank? ? [] : rate_period[:tarifs].map {|t| {min: t[:minimum], max: t[:maximum], type: t[:type][:id], details: node_value(t, :precisionTarif)}}
466
462
  }
467
463
  end
@@ -20,11 +20,5 @@ module Apidae
20
20
  def versions=(values)
21
21
  self.versions_data = values.blank? ? nil : values.join('|')
22
22
  end
23
-
24
- def cleanup_selections
25
- apidae_selections.reload.each do |s|
26
- s.cleanup
27
- end
28
- end
29
23
  end
30
24
  end
@@ -42,20 +42,6 @@ module Apidae
42
42
  SelectionObject.where(apidae_selection_id: apidae_sel.id, apidae_object_id: removed_ids).delete_all
43
43
  end
44
44
 
45
- def cleanup
46
- obsolete_count = apidae_selection_objects
47
- .joins("LEFT JOIN apidae_objs ON apidae_objs.id = apidae_selection_objects.apidae_object_id")
48
- .where("apidae_objs.id IS NULL")
49
- .delete_all
50
- logger.info "Cleaned up #{obsolete_count} obsolete selection-objects associations for selection #{apidae_id}"
51
-
52
- dups = apidae_selection_objects.reload.group(:apidae_object_id)
53
- .select("COUNT(id), apidae_object_id, ARRAY_AGG(id) AS so_ids")
54
- .having("COUNT(id) > ?", 1).map {|so| so.so_ids}
55
- dups_count = apidae_selection_objects.where(id: dups.map {|d| d.sort[1..-1]}.flatten).delete_all
56
- logger.info "Cleaned up #{dups_count} duplicate selection-objects associations for selection #{apidae_id}"
57
- end
58
-
59
45
  def results(where_clause, offset, size)
60
46
  objects.includes(:town).limit(size).offset(offset).where(where_clause)
61
47
  end
@@ -79,7 +65,7 @@ module Apidae
79
65
  key = cache_key(:agenda, from, to)
80
66
  res = $apidae_cache.read(key)
81
67
  unless res
82
- query_args = build_args(AGENDA_ENDPOINT, {selection_ids: [apidae_id], from: from, to: to, count: 200})
68
+ query_args = build_args(AGENDA_ENDPOINT, {selection_ids: [apidae_id], from: from, to: to})
83
69
  res = query_api(query_args, true)
84
70
  $apidae_cache.write(key, res)
85
71
  end
@@ -130,7 +116,7 @@ module Apidae
130
116
  obj = Obj.update_object(obj, obj_data, apidae_project.locales, apidae_project.versions)
131
117
  else
132
118
  obj = Obj.add_object(obj_data, apidae_project.locales, apidae_project.versions)
133
- SelectionObject.create(apidae_selection_id: id, apidae_object_id: obj.id)
119
+ SelectionObject.create(apidae_selection_id: id, apidae_object_id: added_obj.id)
134
120
  end
135
121
  if Rails.application.config.respond_to?(:apidae_obj_refresh_callback)
136
122
  Rails.application.config.apidae_obj_refresh_callback.call(obj.apidae_id)
@@ -149,15 +135,14 @@ module Apidae
149
135
 
150
136
  if all_results
151
137
  loops = 0
152
- max_loops = only_ids ? 50 : MAX_LOOPS
153
138
  query_args[:first] = 0
154
- query_args[:count] ||= MAX_COUNT
139
+ query_args[:count] = MAX_COUNT
155
140
  query_args[:locales] ||= apidae_project && !apidae_project.locales.blank? ? apidae_project.locales : [DEFAULT_LOCALE]
156
141
  response = JSON.parse get_response(query_args), symbolize_names: false
157
142
  total = response['numFound']
158
143
  query_result[:results] = (only_ids ? response['objetTouristiqueIds'] : response['objetsTouristiques']) || {}
159
144
 
160
- while total > results_count(query_result) && loops < max_loops
145
+ while total > results_count(query_result) && loops < MAX_LOOPS
161
146
  loops += 1
162
147
  query_args[:first] += MAX_COUNT
163
148
  response = JSON.parse get_response(query_args), symbolize_names: false
@@ -8,10 +8,9 @@ module Apidae
8
8
  LOCALE_ZH = 'zh'
9
9
  LOCALE_ES = 'es'
10
10
  LOCALE_PT_BR = 'pt-BR'
11
- LOCALE_JP = 'jp'
12
11
 
13
12
  DEFAULT_LOCALE = LOCALE_FR
14
- ALL_LOCALES = [LOCALE_FR, LOCALE_EN, LOCALE_IT, LOCALE_DE, LOCALE_NL, LOCALE_RU, LOCALE_ZH, LOCALE_ES, LOCALE_PT_BR, LOCALE_JP]
13
+ ALL_LOCALES = [LOCALE_FR, LOCALE_EN, LOCALE_IT, LOCALE_DE, LOCALE_NL, LOCALE_RU, LOCALE_ZH, LOCALE_ES, LOCALE_PT_BR]
15
14
 
16
15
  STANDARD_VERSION = 'STANDARD'
17
16
  WINTER_VERSION = 'HIVER'
@@ -32,7 +32,6 @@ fr:
32
32
  ru: Russe
33
33
  zh: Chinois
34
34
  'pt-BR': Brésilien
35
- jp: Japonais
36
35
  versions:
37
36
  STANDARD: Standard
38
37
  HIVER: Hiver
@@ -1,3 +1,3 @@
1
1
  module Apidae
2
- VERSION = "0.9.35"
2
+ VERSION = "0.10.0"
3
3
  end