apidae 1.1.1 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
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