apidae 1.1.1 → 1.2.3

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
2
  SHA1:
3
- metadata.gz: b537e9e99b7f05f62b0c694b52382e7ca9c56c89
4
- data.tar.gz: 7943e22b985c52739837a9db2c748b8891e634b1
3
+ metadata.gz: 0aba2cd1de094aeef3e30a618807daf0373c30e2
4
+ data.tar.gz: fe93f13f69bfc494f8217c803c4bf0c32f609c73
5
5
  SHA512:
6
- metadata.gz: c43827fbbacb7331fe032903e5ab2a5ac0f3e08e482811928d5a610d728c5734eaebd7c07bec35100c91fef71e688e56188ef68d422214336b0d924da8315f45
7
- data.tar.gz: be1a882acd0d0714cf655a60bdd71ac329530ba6a125db12940beee9d746cc0d3dd7d62e120bef1909777df51f337fab7402ac7fe24c6da9a9f6e5106ee893c1
6
+ metadata.gz: 362a44da5272c50d931b7511f67c1ce6e001b83e2e3fec284ffcb1641301304eabceb9c1a9e7629665ee6bc5cd47fd6e637057bce37b547e4a4f79b60a833202
7
+ data.tar.gz: 4c182bf514518cb48efe9f0262088486764c6c747d29d93c9e02b9a1c092557ec88d842ab56e7079d4929b549e16dadd9241dfd725628d4ebb9d821a256a8480
@@ -91,6 +91,11 @@ module Apidae
91
91
  logger.error("Error is : #{err}")
92
92
  success = false
93
93
  e.update(status: Export::CANCELLED)
94
+ rescue Exception => e
95
+ logger.error "Failed to import file : #{e.file_url}"
96
+ logger.error("Error is : #{err}")
97
+ success = false
98
+ e.update(status: Export::CANCELLED)
94
99
  end
95
100
  success
96
101
  end
@@ -34,17 +34,15 @@ module Apidae
34
34
  def create
35
35
  @obj = Obj.new(object_params)
36
36
  if Obj.find_by_apidae_id(@obj.apidae_id)
37
- redirect_to objects_url, alert: "Cet objet est déjà importé."
38
- else
39
- selection = params[:selection_apidae_id].blank? ? Selection.last : Selection.find_by_apidae_id(params[:selection_apidae_id])
40
- if @obj.save && selection.add_or_refresh_obj(@obj.apidae_id)
41
- redirect_to objects_url, notice: "L'objet a bien été importé"
42
- else
43
- flash[:alert] = "Une erreur s'est produite lors de l'import de l'objet."
44
- render :new
37
+ redirect_to objects_url, alert: "Cet objet est déjà importé." and return
38
+ elsif !params[:selection_apidae_id].blank?
39
+ selection = Selection.find_by_apidae_id(params[:selection_apidae_id])
40
+ if selection && selection.valid_api? && @obj.save && selection.add_or_refresh_obj(@obj.apidae_id)
41
+ redirect_to objects_url, notice: "L'objet a bien été importé" and return
45
42
  end
46
43
  end
47
-
44
+ flash[:alert] = "Une erreur s'est produite lors de l'import de l'objet."
45
+ render :new
48
46
  end
49
47
 
50
48
  def update
@@ -62,9 +60,20 @@ module Apidae
62
60
 
63
61
  def refresh
64
62
  referrer = (session.delete(:referrer) || objects_url)
65
- if @obj && @obj.selections.first.add_or_refresh_obj(@obj.apidae_id)
66
- redirect_to referrer, notice: "L'objet touristique a bien été mis à jour."
67
- else
63
+ begin
64
+ sel = @obj.selections.find {|s| s.valid_api?}
65
+ if sel && sel.add_or_refresh_obj(@obj.apidae_id)
66
+ redirect_to referrer, notice: "L'objet touristique a bien été mis à jour."
67
+ else
68
+ redirect_to referrer, alert: "Une erreur s'est produite lors de la mise à jour de l'objet."
69
+ end
70
+ rescue OpenURI::HTTPError => err
71
+ logger.error("Failed to refresh obj : #{@obj.apidae_id}")
72
+ logger.error("Error is : #{err}")
73
+ redirect_to referrer, alert: "Une erreur s'est produite lors de la mise à jour de l'objet. Veuillez vérifier que le projet Apidae comporte une clé API valide."
74
+ rescue Exception => ex
75
+ logger.error("Failed to refresh obj : #{@obj.apidae_id}")
76
+ logger.error("Error is : #{err}")
68
77
  redirect_to referrer, alert: "Une erreur s'est produite lors de la mise à jour de l'objet."
69
78
  end
70
79
  end
@@ -9,6 +9,9 @@ module Apidae
9
9
  TWITTER = 3755
10
10
  YELP = 4007
11
11
  TRIP_ADVISOR = 4000
12
+ FAX = 202
13
+ MOBILE_WEBSITE = 3769
14
+ SHORTY_URL = 4923
12
15
 
13
16
  CONTACTS_MAP = {
14
17
  'telephone' => PHONE,
@@ -18,7 +21,10 @@ module Apidae
18
21
  'google' => GOOGLE,
19
22
  'trip_advisor' => TRIP_ADVISOR,
20
23
  'twitter' => TWITTER,
21
- 'yelp' => YELP
24
+ 'yelp' => YELP,
25
+ 'fax' => FAX,
26
+ 'mobile_website' => MOBILE_WEBSITE,
27
+ 'shorty_url' => SHORTY_URL
22
28
  }
23
29
 
24
30
  MODE_AUTO = 'auto'
@@ -161,28 +167,37 @@ module Apidae
161
167
  case c[:type][:id]
162
168
  when PHONE, ALT_PHONE
163
169
  contact_details[:telephone] ||= {}
164
- contact_details[:telephone][c[:identifiant]] = c[:coordonnees][:fr]
170
+ contact_details[:telephone][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
165
171
  when EMAIL
166
172
  contact_details[:email] ||= {}
167
- contact_details[:email][c[:identifiant]] = c[:coordonnees][:fr]
173
+ contact_details[:email][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
168
174
  when WEBSITE
169
175
  contact_details[:website] ||= {}
170
- contact_details[:website][c[:identifiant]] = c[:coordonnees][:fr]
176
+ contact_details[:website][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
171
177
  when GOOGLE
172
178
  contact_details[:google] ||= {}
173
- contact_details[:google][c[:identifiant]] = c[:coordonnees][:fr]
179
+ contact_details[:google][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
174
180
  when FACEBOOK
175
181
  contact_details[:facebook] ||= {}
176
- contact_details[:facebook][c[:identifiant]] = c[:coordonnees][:fr]
182
+ contact_details[:facebook][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
177
183
  when TWITTER
178
184
  contact_details[:twitter] ||= {}
179
- contact_details[:twitter][c[:identifiant]] = c[:coordonnees][:fr]
185
+ contact_details[:twitter][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
180
186
  when YELP
181
187
  contact_details[:yelp] ||= {}
182
- contact_details[:yelp][c[:identifiant]] = c[:coordonnees][:fr]
188
+ contact_details[:yelp][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
183
189
  when TRIP_ADVISOR
184
190
  contact_details[:trip_advisor] ||= {}
185
- contact_details[:trip_advisor][c[:identifiant]] = c[:coordonnees][:fr]
191
+ contact_details[:trip_advisor][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
192
+ when FAX
193
+ contact_details[:fax] ||= {}
194
+ contact_details[:fax][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
195
+ when MOBILE_WEBSITE
196
+ contact_details[:mobile_website] ||= {}
197
+ contact_details[:mobile_website][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
198
+ when SHORTY_URL
199
+ contact_details[:shorty_url] ||= {}
200
+ contact_details[:shorty_url][c[:identifiant]] = {value: c[:coordonnees][:fr], description: c.dig(:observation, :libelleFr)}
186
201
  else
187
202
  end
188
203
  end
@@ -230,7 +245,7 @@ module Apidae
230
245
  def self.parse_rates(rates_hash, *locales)
231
246
  if rates_hash
232
247
  desc = rates_hash[:gratuit] ? {DEFAULT_LOCALE => 'gratuit'} : node_value(rates_hash, :tarifsEnClair, *locales)
233
- values = rates_hash[:periodes].blank? ? [] : rates_hash[:periodes].map {|p| build_rate(p)}
248
+ values = rates_hash[:periodes].blank? ? [] : rates_hash[:periodes].map {|p| build_rate(p, *locales)}
234
249
  methods = rates_hash[:modesPaiement].blank? ? [] : rates_hash[:modesPaiement].map {|p| p[:id]}
235
250
  {
236
251
  rates_desc: desc, rates: values, payment_methods: methods,
@@ -331,10 +346,10 @@ module Apidae
331
346
 
332
347
  private
333
348
 
334
- def self.build_rate(rate_period)
349
+ def self.build_rate(rate_period, *locales)
335
350
  {
336
351
  id: rate_period[:identifiant], start_date: rate_period[:dateDebut], end_date: rate_period[:dateFin],
337
- 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)}}
352
+ 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, *locales)}}
338
353
  }
339
354
  end
340
355
 
@@ -7,6 +7,15 @@ module Apidae
7
7
 
8
8
  validates_presence_of :file_url, :project_id
9
9
 
10
+ before_save :normalize_url
11
+
12
+ def normalize_url
13
+ self.file_url = file_url.strip
14
+ unless file_url.include?('/')
15
+ self.file_url = "http://export.apidae-tourisme.com/exports/#{file_url}"
16
+ end
17
+ end
18
+
10
19
  # Note : handle reset case
11
20
  def self.pending
12
21
  where(remote_status: 'SUCCESS', status: PENDING).order(:id)
@@ -16,7 +16,8 @@ module Apidae
16
16
  store_accessor :type_data, :categories, :themes, :capacity, :classification, :labels, :chains, :area, :track,
17
17
  :products, :audience, :animals, :animals_desc, :extra, :duration, :certifications, :business
18
18
  store_accessor :entity_data, :entity_id, :entity_name, :service_provider_id
19
- store_accessor :contact_data, :telephone, :email, :website, :google, :facebook, :twitter, :yelp, :trip_advisor, :contacts
19
+ store_accessor :contact_data, :telephone, :email, :website, :google, :facebook, :twitter, :yelp, :trip_advisor, :fax,
20
+ :mobile_website, :shorty_url, :contacts
20
21
  store_accessor :location_data, :address, :place, :latitude, :longitude, :access, :territories, :environments
21
22
  store_accessor :openings_data, :openings_desc, :openings_desc_mode, :openings, :time_periods, :openings_extra
22
23
  store_accessor :rates_data, :rates_desc, :rates_desc_mode, :rates, :payment_methods, :includes, :excludes
@@ -50,6 +50,10 @@ module Apidae
50
50
  objects.where(where_clause).count
51
51
  end
52
52
 
53
+ def valid_api?
54
+ apidae_project && !apidae_project.api_key.blank? && !apidae_project.apidae_id.blank?
55
+ end
56
+
53
57
  def api_results(opts = {})
54
58
  key = cache_key(:results)
55
59
  res = $apidae_cache.read(key)
@@ -83,13 +87,13 @@ module Apidae
83
87
  res
84
88
  end
85
89
 
86
- def api_object(apidae_obj_id)
87
- query_args = build_args(OBJECTS_ENDPOINT, {obj_ids: [apidae_obj_id], fields: ["@all"]})
90
+ def api_object(apidae_obj_id, fields = ["@all"])
91
+ query_args = build_args(OBJECTS_ENDPOINT, {obj_ids: [apidae_obj_id], fields: fields})
88
92
  query_api(query_args, true, false)
89
93
  end
90
94
 
91
95
  def add_or_refresh_obj(apidae_obj_id)
92
- if apidae_project
96
+ if valid_api?
93
97
  res = api_object(apidae_obj_id)
94
98
  if res[:results] && res[:results].length == 1
95
99
  obj_data = res[:results].first.deep_symbolize_keys
@@ -99,7 +103,7 @@ module Apidae
99
103
  end
100
104
 
101
105
  def add_or_refresh_objs(fields = ["@all"])
102
- if apidae_project
106
+ if valid_api?
103
107
  res = api_objects({fields: fields})
104
108
  if res[:results] && res[:results].length > 0
105
109
  res[:results].each do |result|
@@ -116,8 +120,9 @@ module Apidae
116
120
  obj = Obj.update_object(obj, obj_data, apidae_project.locales, apidae_project.versions)
117
121
  else
118
122
  obj = Obj.add_object(obj_data, apidae_project.locales, apidae_project.versions)
119
- SelectionObject.create(apidae_selection_id: id, apidae_object_id: added_obj.id)
120
123
  end
124
+ SelectionObject.create(apidae_selection_id: id, apidae_object_id: obj.id) unless objects.include?(obj)
125
+
121
126
  if Rails.application.config.respond_to?(:apidae_obj_refresh_callback)
122
127
  Rails.application.config.apidae_obj_refresh_callback.call(obj.apidae_id)
123
128
  end
@@ -9,9 +9,10 @@
9
9
  </div>
10
10
  <% end %>
11
11
  <p>
12
- Pour que les données soient importées correctement,
13
- vos projets doivent être configurés pour exporter les données au format <strong>JSON V2</strong>, en
14
- <strong>groupant les objets exportés</strong>.
12
+ Pour que les données soient importées correctement, vos projets doivent être configurés pour exporter les données
13
+ au format <strong>JSON V2</strong>, en <strong>groupant les objets exportés</strong>. L'adresse du fichier d'export
14
+ est à récupérer dans :<br/>
15
+ <em>Page du projet Apidae > Onglet "Calcul des sélections et Exports " > Accéder à la ficher de l'export > Champ "Fichier d'export"</em>
15
16
  </p>
16
17
 
17
18
  <div class="<%= styles[:form_field] %>">
@@ -1,3 +1,3 @@
1
1
  module Apidae
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.3"
3
3
  end
@@ -63,3 +63,5 @@ Migrating to AddLocalesDataToApidaeProjects (20190123214635)
63
63
   (0.2ms) COMMIT
64
64
   (0.2ms) SELECT pg_advisory_unlock(6140174353533887940)
65
65
   (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
66
+ Apidae::Obj Load (26.8ms) SELECT apidae_id, COUNT(id) FROM "apidae_objs" WHERE "apidae_objs"."root_obj_id" IS NULL GROUP BY "apidae_objs"."apidae_id" HAVING (COUNT(id) > 1)
67
+ Apidae::Obj Load (2.4ms) SELECT apidae_id, COUNT(id) FROM "apidae_objs" WHERE "apidae_objs"."root_obj_id" IS NULL GROUP BY "apidae_objs"."apidae_id" HAVING (COUNT(id) > 1)
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: 1.1.1
4
+ version: 1.2.3
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: 2020-06-03 00:00:00.000000000 Z
11
+ date: 2020-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails