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 +4 -4
- data/app/controllers/apidae/import_controller.rb +5 -0
- data/app/controllers/apidae/objects_controller.rb +21 -12
- data/app/models/apidae/apidae_data_parser.rb +27 -12
- data/app/models/apidae/export.rb +9 -0
- data/app/models/apidae/obj.rb +2 -1
- data/app/models/apidae/selection.rb +10 -5
- data/app/views/apidae/import/_form.html.erb +4 -3
- data/lib/apidae/version.rb +1 -1
- data/test/dummy/log/development.log +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0aba2cd1de094aeef3e30a618807daf0373c30e2
|
4
|
+
data.tar.gz: fe93f13f69bfc494f8217c803c4bf0c32f609c73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
39
|
-
selection =
|
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
|
-
|
66
|
-
|
67
|
-
|
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
|
|
data/app/models/apidae/export.rb
CHANGED
@@ -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)
|
data/app/models/apidae/obj.rb
CHANGED
@@ -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, :
|
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:
|
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
|
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
|
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
|
-
|
14
|
-
|
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] %>">
|
data/lib/apidae/version.rb
CHANGED
@@ -63,3 +63,5 @@ Migrating to AddLocalesDataToApidaeProjects (20190123214635)
|
|
63
63
|
[1m[35m (0.2ms)[0m [1m[35mCOMMIT[0m
|
64
64
|
[1m[35m (0.2ms)[0m [1m[34mSELECT pg_advisory_unlock(6140174353533887940)[0m
|
65
65
|
[1m[35m (0.2ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
66
|
+
[1m[36mApidae::Obj Load (26.8ms)[0m [1m[34mSELECT 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)[0m
|
67
|
+
[1m[36mApidae::Obj Load (2.4ms)[0m [1m[34mSELECT 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)[0m
|
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.
|
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-
|
11
|
+
date: 2020-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|