apidae 0.9.15 → 0.9.16

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: 89bdda0e07dc726d4b70c073ae22f593ee2965a9
4
- data.tar.gz: 7d2600b1a6d64a61c915e9bd7863dc2cd5a8d55a
3
+ metadata.gz: 44c3ad9d98d4c7845e73ba6d2979e9bbc34fc4b3
4
+ data.tar.gz: 14ba7bc27ce966673c67f4dfff6dda9fd5006ee2
5
5
  SHA512:
6
- metadata.gz: 284aafe30129b821731551b6823a6063f316420ab11afa39af83f8340c36a8f424864ceac9862486e366268d2a6205ada486d1660f71dc6c3fc202d06c0198d9
7
- data.tar.gz: c0b00e51b7f6498a307caafd0ee3e4da5d1f637b6fa11d2c3c44154b5d05db6bb427149ebbbaa86942298653f47cc9b558f1017508c082d849b5cc4ba23b129d
6
+ metadata.gz: 846477e653788caabc6f5f6240fedf35711bf73d7ffd4c0752ea9d515c680c75c0f009ab5e97636c64b47f3b6b79f74740692186df9fd7eae9a7b1b6c599e903
7
+ data.tar.gz: 15a4b43ddccf9f665145831dbbb5097d14802f652b38a5e56088657fc7fb90569cbf5afe559880cb750ae2c9200a43092868373bec74202f853fbe7efcd13961
@@ -46,7 +46,7 @@ module Apidae
46
46
  http.request(req)
47
47
  end
48
48
  e.update(status: Export::COMPLETE)
49
- if Rails.application.config.apidae_import_callback
49
+ if Rails.application.config.respond_to?(:apidae_import_callback)
50
50
  Rails.application.config.apidae_import_callback.call(e)
51
51
  end
52
52
  rescue Exception => ex
@@ -2,10 +2,11 @@ require_dependency "apidae/application_controller"
2
2
 
3
3
  module Apidae
4
4
  class ObjectsController < ApplicationController
5
- before_action :set_object, only: [:show, :edit, :update, :destroy]
5
+ before_action :set_object, only: [:show, :edit, :update, :destroy, :refresh]
6
6
  skip_before_action Rails.application.config.apidae_auth, only: [:index, :show]
7
7
 
8
8
  def index
9
+ session[:referrer] = request.referrer
9
10
  if params[:selection_id]
10
11
  @selection = Selection.find(params[:selection_id])
11
12
  @objects = @selection.objects.select(:id, :apidae_id, :title, :apidae_type, :updated_at)
@@ -18,42 +19,52 @@ module Apidae
18
19
  end
19
20
 
20
21
  def new
21
- @object = Obj.new
22
+ @obj = Obj.new
22
23
  end
23
24
 
24
25
  def edit
25
26
  end
26
27
 
27
28
  def create
28
- @object = Obj.new(object_params)
29
-
30
- if @object.save
31
- redirect_to @object, notice: 'Object was successfully created.'
29
+ @obj = Obj.new(object_params)
30
+ selection = params[:selection_apidae_id].blank? ? Selection.last : Selection.find_by_apidae_id(params[:selection_apidae_id])
31
+ if @obj.save && selection.refresh_obj(@obj.apidae_id)
32
+ redirect_to objects_url, notice: "L'objet a bien été importé"
32
33
  else
34
+ flash[:alert] = "Une erreur s'est produite lors de l'import de l'objet."
33
35
  render :new
34
36
  end
35
37
  end
36
38
 
37
39
  def update
38
- if @object.update(object_params)
39
- redirect_to @object, notice: 'Object was successfully updated.'
40
+ if @obj.update(object_params)
41
+ redirect_to @obj, notice: 'Object was successfully updated.'
40
42
  else
41
43
  render :edit
42
44
  end
43
45
  end
44
46
 
45
47
  def destroy
46
- @object.destroy
48
+ @obj.destroy
47
49
  redirect_to objects_url, notice: 'Object was successfully destroyed.'
48
50
  end
49
51
 
52
+ def refresh
53
+ referrer = (session.delete(:referrer) || objects_url)
54
+ if @obj && @obj.selections.first.refresh_obj(@obj.apidae_id)
55
+ redirect_to referrer, notice: "L'objet touristique a bien été mis à jour."
56
+ else
57
+ redirect_to referrer, alert: "Une erreur s'est produite lors de la mise à jour de l'objet."
58
+ end
59
+ end
60
+
50
61
  private
51
62
  def set_object
52
- @object = Obj.find(params[:id])
63
+ @obj = Obj.find(params[:id])
53
64
  end
54
65
 
55
66
  def object_params
56
- params.require(:object).permit!
67
+ params.require(:obj).permit!
57
68
  end
58
69
  end
59
70
  end
@@ -20,7 +20,7 @@ module Apidae
20
20
  else
21
21
  @project = Project.new(project_params)
22
22
  if @project.save
23
- referrer = session.delete(:referrer)
23
+ referrer = (session.delete(:referrer) || projects_url)
24
24
  redirect_to (referrer + "?apidae_project_id=#{@project.id}"), notice: 'Le projet a bien été créé'
25
25
  else
26
26
  flash.now[:alert] = "Une erreur s'est produite lors la création du projet"
@@ -8,6 +8,8 @@ module Apidae
8
8
 
9
9
  AGENDA_ENDPOINT = 'agenda/detaille/list-identifiants'
10
10
  SELECTION_ENDPOINT = 'recherche/list-identifiants'
11
+ OBJECTS_ENDPOINT = 'recherche/list-objets-touristiques'
12
+
11
13
  MAX_COUNT = 100
12
14
  MAX_LOOPS = 10
13
15
 
@@ -70,6 +72,39 @@ module Apidae
70
72
  res
71
73
  end
72
74
 
75
+ def api_objects(opts = {})
76
+ key = cache_key(:objects)
77
+ res = $apidae_cache.read(key)
78
+ unless res
79
+ query_args = build_args(OBJECTS_ENDPOINT, opts.merge({selection_ids: [apidae_id]}))
80
+ res = query_objects_api(query_args, true)
81
+ $apidae_cache.write(key, res)
82
+ end
83
+ res
84
+ end
85
+
86
+ def api_object(apidae_obj_id)
87
+ query_args = build_args(OBJECTS_ENDPOINT, {obj_ids: [apidae_obj_id], fields: ["@all"]})
88
+ query_objects_api(query_args, true)
89
+ end
90
+
91
+ def refresh_obj(apidae_obj_id)
92
+ if apidae_project
93
+ res = api_object(apidae_obj_id)
94
+ if res[:results] && res[:results].length == 1
95
+ obj_data = res[:results].first.deep_symbolize_keys
96
+ obj = Obj.find_by_apidae_id(apidae_obj_id)
97
+ if obj
98
+ refreshed = Obj.update_object(obj, obj_data, apidae_project.locales, apidae_project.versions)
99
+ if refreshed && Rails.application.config.respond_to?(:apidae_obj_refresh_callback)
100
+ Rails.application.config.apidae_obj_refresh_callback.call(apidae_obj_id)
101
+ end
102
+ refreshed
103
+ end
104
+ end
105
+ end
106
+ end
107
+
73
108
  def as_text
74
109
  "#{label} (#{apidae_id})"
75
110
  end
@@ -110,6 +145,32 @@ module Apidae
110
145
  end
111
146
  end
112
147
 
148
+ def query_objects_api(query_args, all_results = false)
149
+ query_result = {}
150
+
151
+ if all_results
152
+ loops = 0
153
+ query_args[:first] = 0
154
+ query_args[:count] = MAX_COUNT
155
+ response = JSON.parse get_response(query_args), symbolize_names: false
156
+ total = response['numFound']
157
+ query_result[:results] = response['objetsTouristiques'] || {}
158
+
159
+ while total > results_count(query_result) && loops < MAX_LOOPS
160
+ loops += 1
161
+ query_args[:first] += MAX_COUNT
162
+ response = JSON.parse get_response(query_args), symbolize_names: false
163
+ merge_objects_results(response, query_result)
164
+ end
165
+ query_result[:count] = total
166
+ else
167
+ response = JSON.parse get_response(query_args), symbolize_names: false
168
+ query_result[:results] = response['objetsTouristiques'] || {}
169
+ query_result[:count] = response['numFound']
170
+ end
171
+ query_result
172
+ end
173
+
113
174
  def get_response(args)
114
175
  response = ''
115
176
  query = JSON.generate args.except(:url)
@@ -137,6 +198,15 @@ module Apidae
137
198
  end
138
199
  end
139
200
 
201
+ def merge_objects_results(response, result)
202
+ objects = response['objetsTouristiques']
203
+ unless objects.blank?
204
+ if result[:results] && result[:results].is_a?(Array)
205
+ result[:results] += objects
206
+ end
207
+ end
208
+ end
209
+
140
210
  def build_args(endpoint, opts = {})
141
211
  {
142
212
  url: "#{Rails.application.config.apidae_api_url}/#{endpoint}",
@@ -145,6 +215,7 @@ module Apidae
145
215
  first: opts[:first] || 0,
146
216
  count: opts[:count] || MAX_COUNT,
147
217
  selectionIds: opts[:selection_ids],
218
+ identifiants: opts[:obj_ids],
148
219
  dateDebut: opts[:from],
149
220
  dateFin: opts[:to],
150
221
  center: opts[:lat] && opts[:lng] ? {type: 'Point', coordinates: [opts[:lng], opts[:lat]]} : nil,
@@ -2,5 +2,5 @@
2
2
 
3
3
  <%= render 'form' %>
4
4
 
5
- <%= link_to 'Show', @object %> |
5
+ <%= link_to 'Show', @obj %> |
6
6
  <%= link_to 'Back', objects_path %>
@@ -1,6 +1,7 @@
1
1
  <%= render layout: "/layouts/#{Rails.application.config.apidae_layout}" do |styles| %>
2
2
  <div id="apidae_header" class="<%= styles[:header] %>">
3
- <%= link_to 'Retour', @selection ? selections_path : root_path, class: styles[:back] %>
3
+ <%= link_to 'Importer un objet', apidae.new_object_path, class: styles[:objects] %>
4
+ <%= link_to 'Retour', @selection ? apidae.selections_path : root_path, class: styles[:back] %>
4
5
  <h1 class="<%= styles[:h1] %>">Apidae - <%= @selection ? "Sélection \"#{@selection.label}\"" : "Tous les objets touristiques" %></h1>
5
6
  </div>
6
7
  <div id="apidae_dashboard" class="<%= styles[:wrapper] %>">
@@ -12,6 +13,7 @@
12
13
  <th>Identifiant</th>
13
14
  <th>Type</th>
14
15
  <th>Mise à jour</th>
16
+ <th></th>
15
17
  </tr>
16
18
  </thead>
17
19
  <tbody class="<%= styles[:table_body] %>">
@@ -21,6 +23,8 @@
21
23
  <td><%= object.apidae_id %></td>
22
24
  <td><%= object.apidae_type %></td>
23
25
  <td><%= object.updated_at.strftime('Le %d/%m/%Y à %H:%M') if object.updated_at %></td>
26
+ <td><%= link_to 'Rafraîchir', apidae.refresh_object_path(object), method: :post,
27
+ data: {confirm: 'Voulez-vous vraiment rafraîchir cet objet ? Les données existantes seront écrasées.'} %></td>
24
28
  </tr>
25
29
  <% end %>
26
30
  <% if @objects.empty? %>
@@ -1,5 +1,33 @@
1
- <h1>New Object</h1>
1
+ <%= render layout: "/layouts/#{Rails.application.config.apidae_layout}" do |styles| %>
2
+ <div id="apidae_header" class="<%= styles[:header] %>">
3
+ <%= link_to 'Retour', :back, class: styles[:back] %>
4
+ <h1 class="<%= styles[:h1] %>">Apidae - Importer un objet</h1>
5
+ </div>
6
+ <div id="apidae_new_object" class="<%= styles[:wrapper] %>">
7
+ <div id="apidae_form" class="<%= styles[:body] %>">
8
+ <%= form_for(@obj, url: objects_url, class: styles[:form]) do |f| %>
9
+ <% if @obj.errors.any? %>
10
+ <div id="apidae_form_errors">
11
+ <ul>
12
+ <% @obj.errors.full_messages.each do |message| %>
13
+ <li><%= message %></li>
14
+ <% end %>
15
+ </ul>
16
+ </div>
17
+ <% end %>
2
18
 
3
- <%= render 'form' %>
4
-
5
- <%= link_to 'Back', objects_path %>
19
+ <div class="<%= styles[:form_field] %>">
20
+ <div><%= f.label :apidae_id %></div>
21
+ <div><%= f.text_field :apidae_id %></div>
22
+ </div>
23
+ <div class="<%= styles[:form_field] %>">
24
+ <div><%= label_tag :selection_apidae_id %></div>
25
+ <div><%= text_field_tag :selection_apidae_id %></div>
26
+ </div>
27
+ <div class="<%= styles[:form_actions] %>">
28
+ <%= f.submit 'Valider' %>
29
+ </div>
30
+ <% end %>
31
+ </div>
32
+ </div>
33
+ <% end %>
@@ -1,8 +1,13 @@
1
1
  Apidae::Engine.routes.draw do
2
2
 
3
- resources :objects, only: [:index, :show], path: 'objets'
3
+ resources :objects, only: [:index, :show, :new, :create], path: 'objets' do
4
+ post 'refresh', on: :member
5
+ end
6
+
4
7
  resources :selections, only: [:index] do
5
- resources :objects, only: [:index], path: 'objets'
8
+ resources :objects, only: [:index], path: 'objets' do
9
+ post 'refresh', on: :member
10
+ end
6
11
  end
7
12
  resources :references, only: [:index]
8
13
  resources :projects, only: [:index, :new, :create, :edit, :update, :destroy], path: 'projets'
@@ -0,0 +1,5 @@
1
+ class AddDescriptionToApidaeTowns < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :apidae_towns, :description, :string
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Apidae
2
- VERSION = "0.9.15"
2
+ VERSION = "0.9.16"
3
3
  end
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.9.15
4
+ version: 0.9.16
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: 2019-10-02 00:00:00.000000000 Z
11
+ date: 2019-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -168,6 +168,7 @@ files:
168
168
  - db/migrate/20190127210921_migrate_localized_apidae_obj_fields.rb
169
169
  - db/migrate/20190127213602_migrate_localized_apidae_references.rb
170
170
  - db/migrate/20190304142446_migrate_desc_apidae_obj_fields.rb
171
+ - db/migrate/20190328122424_add_description_to_apidae_towns.rb
171
172
  - db/migrate/20190418133435_add_index_on_apidae_obj.rb
172
173
  - db/migrate/20190517153215_add_description_to_apidae_towns.rb
173
174
  - lib/apidae.rb