apidae 0.6.3 → 0.7.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 +4 -4
- data/app/controllers/apidae/dashboard_controller.rb +1 -0
- data/app/controllers/apidae/import_controller.rb +12 -17
- data/app/controllers/apidae/projects_controller.rb +35 -0
- data/app/models/apidae/file_import.rb +12 -11
- data/app/models/apidae/obj.rb +1 -1
- data/app/models/apidae/project.rb +5 -0
- data/app/models/apidae/selection.rb +5 -3
- data/app/views/apidae/dashboard/index.html.erb +1 -0
- data/app/views/apidae/projects/edit.html.erb +33 -0
- data/app/views/apidae/projects/index.html.erb +35 -0
- data/app/views/apidae/references/index.html.erb +2 -2
- data/config/routes.rb +1 -0
- data/db/migrate/20181024072424_add_project_id_to_selections.rb +5 -0
- data/db/migrate/20181024072843_create_apidae_projects.rb +10 -0
- data/lib/apidae/engine.rb +3 -0
- data/lib/apidae/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44825ff63506e2a48c0e3c3a9a283c804daae923
|
4
|
+
data.tar.gz: 2cd5dc90fe25340322d26717f75c2ca5757da753
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff6e9558ab78808534e1030184b40e1b3f4ca0cae89bc5692178726af3787592526b8991328e11c611b70d4818722fcaf57db5c6f410f9ce472496fbbf2c80aa
|
7
|
+
data.tar.gz: ff6c592151798073270a602ac0a2b3907bb51dafac6f6c3b9d4452f70e505280729af898f58f43f8de0312d2d49918f4490320f07c67fb510b305d789dd00436
|
@@ -16,25 +16,20 @@ module Apidae
|
|
16
16
|
# urlRecuperation : une chaine de caractères. L’URL de récupération du fichier d’export.
|
17
17
|
# urlConfirmation : une chaine de caractères. L’URL de confirmation.
|
18
18
|
def callback
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
req
|
28
|
-
Net::HTTP.start(uri.hostname, uri.port) do |http|
|
29
|
-
http.request(req, params.to_unsafe_h.to_query)
|
30
|
-
end
|
19
|
+
export = Export.new(project_id: params[:projetId], remote_status: params[:statut], oneshot: params[:ponctuel] == 'true',
|
20
|
+
reset: params[:reinitialisation] == 'true', file_url: params[:urlRecuperation],
|
21
|
+
confirm_url: params[:urlConfirmation], status: Export::PENDING)
|
22
|
+
if export.save
|
23
|
+
if Rails.application.config.respond_to?(:apidae_propagate_callback)
|
24
|
+
uri = URI(Rails.application.config.apidae_propagate_callback)
|
25
|
+
req = Net::HTTP::Post.new(uri)
|
26
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: (uri.scheme == "https")) do |http|
|
27
|
+
http.request(req, params.to_unsafe_h.to_query)
|
31
28
|
end
|
32
|
-
head :ok
|
33
|
-
else
|
34
|
-
head :internal_server_error
|
35
29
|
end
|
30
|
+
head :ok
|
36
31
|
else
|
37
|
-
head :
|
32
|
+
head :internal_server_error
|
38
33
|
end
|
39
34
|
end
|
40
35
|
|
@@ -44,7 +39,7 @@ module Apidae
|
|
44
39
|
begin
|
45
40
|
open(e.file_url) do |f|
|
46
41
|
begin
|
47
|
-
FileImport.import(f)
|
42
|
+
FileImport.import(f, e.project_id)
|
48
43
|
uri = URI(e.confirm_url)
|
49
44
|
req = Net::HTTP::Post.new(uri)
|
50
45
|
Net::HTTP.start(uri.hostname, uri.port) do |http|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_dependency "apidae/application_controller"
|
2
|
+
|
3
|
+
module Apidae
|
4
|
+
class ProjectsController < ApplicationController
|
5
|
+
before_action :set_project, only: [:edit, :update]
|
6
|
+
|
7
|
+
def index
|
8
|
+
@projects = Project.all
|
9
|
+
end
|
10
|
+
|
11
|
+
def edit
|
12
|
+
session[:referrer] = request.referrer
|
13
|
+
end
|
14
|
+
|
15
|
+
def update
|
16
|
+
if @project.update(project_params)
|
17
|
+
referrer = session.delete(:referrer)
|
18
|
+
redirect_to referrer, notice: 'Le projet a bien été mis à jour'
|
19
|
+
else
|
20
|
+
flash.now[:alert] = "Une erreur s'est produite lors la mise à jour du projet"
|
21
|
+
render :edit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def set_project
|
28
|
+
@project = Project.find(params[:id])
|
29
|
+
end
|
30
|
+
|
31
|
+
def project_params
|
32
|
+
params.require(:project).permit(:name, :api_key)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -14,7 +14,7 @@ module Apidae
|
|
14
14
|
DELETED_FILE = 'objets_supprimes.json'
|
15
15
|
SELECTIONS_FILE = 'selections.json'
|
16
16
|
|
17
|
-
def self.import(zip_file)
|
17
|
+
def self.import(zip_file, project_id)
|
18
18
|
Zip::File.open(zip_file) do |zfile|
|
19
19
|
result = {created: 0, updated: 0, deleted: 0, selections: []}
|
20
20
|
Reference.import(zfile.read(REFERENCES_FILE))
|
@@ -30,21 +30,21 @@ module Apidae
|
|
30
30
|
elsif file.name.include?(DELETED_FILE)
|
31
31
|
delete_objects(zfile.read(file.name), result)
|
32
32
|
elsif file.name.include?(SELECTIONS_FILE)
|
33
|
-
add_or_update_selections(zfile.read(file.name), result)
|
33
|
+
add_or_update_selections(project_id, zfile.read(file.name), result)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
-
create(result.except(:selections).merge({remote_file: zip_file, status: STATUS_COMPLETE}))
|
37
|
+
create(result.except(:selections).merge({remote_file: (zip_file.is_a?(File) ? zip_file.path : zip_file), status: STATUS_COMPLETE}))
|
38
38
|
logger.info "Import results : #{result}"
|
39
39
|
result
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def self.import_dir(dir)
|
43
|
+
def self.import_dir(project_id, dir)
|
44
44
|
result = {created: 0, updated: 0, deleted: 0, selections: []}
|
45
45
|
import_updates(File.join(dir, MODIFIED_DIR), result)
|
46
46
|
import_deletions(File.join(dir, DELETED_FILE), result)
|
47
|
-
import_selections(File.join(dir,SELECTIONS_FILE), result)
|
47
|
+
import_selections(project_id, File.join(dir, SELECTIONS_FILE), result)
|
48
48
|
logger.info "Import results : #{result}"
|
49
49
|
result
|
50
50
|
end
|
@@ -140,20 +140,21 @@ module Apidae
|
|
140
140
|
# end
|
141
141
|
# end
|
142
142
|
|
143
|
-
def self.import_selections(json_file, result)
|
143
|
+
def self.import_selections(project_id, json_file, result)
|
144
144
|
selections_json = File.read(json_file)
|
145
|
-
add_or_update_selections(selections_json, result)
|
145
|
+
add_or_update_selections(project_id, selections_json, result)
|
146
146
|
end
|
147
147
|
|
148
|
-
def self.add_or_update_selections(selections_json, result)
|
148
|
+
def self.add_or_update_selections(project_id, selections_json, result)
|
149
149
|
selections_hashes = JSON.parse(selections_json, symbolize_names: true)
|
150
|
-
|
150
|
+
project = Project.find_or_create_by(apidae_id: project_id)
|
151
|
+
deleted_ids = Selection.where(apidae_project_id: project.id).collect {|sel| sel.apidae_id}.uniq - selections_hashes.collect {|sel| sel[:id]}
|
151
152
|
Selection.where(apidae_id: deleted_ids).delete_all
|
152
153
|
selections_hashes.each do |selection_data|
|
153
154
|
logger.info "Updating selection #{selection_data[:id]}"
|
154
|
-
Selection.add_or_update(selection_data)
|
155
|
+
Selection.add_or_update(selection_data, project.id)
|
155
156
|
end
|
156
|
-
result[:selections] = Selection.
|
157
|
+
result[:selections] = Selection.where(apidae_project_id: project_id)
|
157
158
|
.collect {|sel| {apidae_id: sel.apidae_id, reference: sel.reference, objects: sel.objects.count}}
|
158
159
|
end
|
159
160
|
end
|
data/app/models/apidae/obj.rb
CHANGED
@@ -125,7 +125,7 @@ module Apidae
|
|
125
125
|
{
|
126
126
|
short_desc: node_value(data_hash, :descriptifCourt),
|
127
127
|
long_desc: node_value(data_hash, :descriptifDetaille),
|
128
|
-
theme_desc: data_hash[:descriptifsThematises].blank? ?
|
128
|
+
theme_desc: data_hash[:descriptifsThematises].blank? ? {} : Hash[data_hash[:descriptifsThematises].map {|th| [node_id(th, :theme), node_value(th, :description)]}],
|
129
129
|
private_desc: private_data.blank? ? {} : Hash[private_data.map {|d| [d[:nomTechnique], node_value(d, :descriptif)]}]
|
130
130
|
}
|
131
131
|
end
|
@@ -4,6 +4,7 @@ module Apidae
|
|
4
4
|
class Selection < ActiveRecord::Base
|
5
5
|
has_many :apidae_selection_objects, class_name: 'Apidae::SelectionObject', foreign_key: :apidae_selection_id
|
6
6
|
has_many :objects, class_name: 'Apidae::Obj', source: :apidae_object, through: :apidae_selection_objects
|
7
|
+
belongs_to :apidae_project, optional: true, class_name: 'Apidae::Project', foreign_key: :apidae_project_id
|
7
8
|
|
8
9
|
AGENDA_ENDPOINT = 'agenda/detaille/list-identifiants'
|
9
10
|
SELECTION_ENDPOINT = 'recherche/list-identifiants'
|
@@ -13,9 +14,10 @@ module Apidae
|
|
13
14
|
validates_presence_of :apidae_id, :reference
|
14
15
|
before_validation :generate_reference, on: :create
|
15
16
|
|
16
|
-
def self.add_or_update(selection_data)
|
17
|
+
def self.add_or_update(selection_data, apidae_proj_id)
|
17
18
|
apidae_sel = Selection.where(apidae_id: selection_data[:id]).first_or_initialize
|
18
19
|
apidae_sel.label = selection_data[:nom]
|
20
|
+
apidae_sel.apidae_project_id = apidae_proj_id
|
19
21
|
apidae_sel.save!
|
20
22
|
|
21
23
|
# Note : should be done with basic collection assignment, but can't make it work...
|
@@ -134,8 +136,8 @@ module Apidae
|
|
134
136
|
def build_args(endpoint, opts = {})
|
135
137
|
{
|
136
138
|
url: "#{Rails.application.config.apidae_api_url}/#{endpoint}",
|
137
|
-
apiKey:
|
138
|
-
projetId:
|
139
|
+
apiKey: apidae_project ? apidae_project.api_key : '',
|
140
|
+
projetId: apidae_project.apidae_id,
|
139
141
|
first: opts[:first] || 0,
|
140
142
|
count: opts[:count] || MAX_COUNT,
|
141
143
|
selectionIds: opts[:selection_ids],
|
@@ -1,5 +1,6 @@
|
|
1
1
|
<%= render layout: "/layouts/#{Rails.application.config.apidae_layout}" do |styles| %>
|
2
2
|
<div id="apidae_header" class="<%= styles[:header] %>">
|
3
|
+
<%= link_to pluralize(@projects, 'projet', 'projets'), apidae.projects_path, class: styles[:projects] %>
|
3
4
|
<%= link_to pluralize(@selections, 'sélection', 'sélections'), apidae.selections_path, class: styles[:selections] %>
|
4
5
|
<%= link_to pluralize(@objects, 'objet touristique', 'objets touristiques'), apidae.objects_path, class: styles[:objects] %>
|
5
6
|
<%= link_to (pluralize(@references, 'élément', 'éléments') + ' de référence'), apidae.references_path, class: styles[:references] %>
|
@@ -0,0 +1,33 @@
|
|
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 - Modifier le projet</h1>
|
5
|
+
</div>
|
6
|
+
<div id="apidae_edit_project" class="<%= styles[:wrapper] %>">
|
7
|
+
<div id="apidae_form" class="<%= styles[:body] %>">
|
8
|
+
<%= form_for(@project, class: styles[:form]) do |f| %>
|
9
|
+
<% if @project.errors.any? %>
|
10
|
+
<div id="apidae_form_errors">
|
11
|
+
<ul>
|
12
|
+
<% @project.errors.full_messages.each do |message| %>
|
13
|
+
<li><%= message %></li>
|
14
|
+
<% end %>
|
15
|
+
</ul>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<div class="<%= styles[:form_field] %>">
|
20
|
+
<div><%= f.label :name %></div>
|
21
|
+
<div><%= f.text_field :name %></div>
|
22
|
+
</div>
|
23
|
+
<div class="<%= styles[:form_field] %>">
|
24
|
+
<div><%= f.label :api_key %></div>
|
25
|
+
<div><%= f.text_field :api_key %></div>
|
26
|
+
</div>
|
27
|
+
<div class="<%= styles[:form_actions] %>">
|
28
|
+
<%= f.submit 'Valider' %>
|
29
|
+
</div>
|
30
|
+
<% end %>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<%= render layout: "/layouts/#{Rails.application.config.apidae_layout}" do |styles| %>
|
2
|
+
<div id="apidae_header" class="<%= styles[:header] %>">
|
3
|
+
<%= link_to 'Retour', root_path, class: styles[:back] %>
|
4
|
+
<h1 class="<%= styles[:h1] %>">Apidae - Projets</h1>
|
5
|
+
</div>
|
6
|
+
<div class="<%= styles[:wrapper] %>">
|
7
|
+
<div class="<%= styles[:body] %>">
|
8
|
+
<table id="apidae_projects" class="<%= styles[:table] %>">
|
9
|
+
<thead class="<%= styles[:table_head] %>">
|
10
|
+
<tr>
|
11
|
+
<th>Nom</th>
|
12
|
+
<th>Identifiant</th>
|
13
|
+
<th>Mise à jour</th>
|
14
|
+
<th></th>
|
15
|
+
</tr>
|
16
|
+
</thead>
|
17
|
+
<tbody class="<%= styles[:table_body] %>">
|
18
|
+
<% @projects.each do |proj| %>
|
19
|
+
<tr>
|
20
|
+
<td><%= proj.name %></td>
|
21
|
+
<td><%= proj.apidae_id %></td>
|
22
|
+
<td><%= proj.updated_at.strftime('Le %d/%m/%Y à %H:%M') if proj.updated_at %></td>
|
23
|
+
<td><%= link_to 'Modifier', edit_project_path(proj) %></td>
|
24
|
+
</tr>
|
25
|
+
<% end %>
|
26
|
+
<% if @projects.empty? %>
|
27
|
+
<tr>
|
28
|
+
<td colspan="4">Aucun projet pour le moment.</td>
|
29
|
+
</tr>
|
30
|
+
<% end %>
|
31
|
+
</tbody>
|
32
|
+
</table>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<%= link_to 'Retour', root_path, class: styles[:back] %>
|
4
4
|
<h1 class="<%= styles[:h1] %>">Apidae - Eléments de référence</h1>
|
5
5
|
</div>
|
6
|
-
<div
|
7
|
-
<div
|
6
|
+
<div class="<%= styles[:wrapper] %>">
|
7
|
+
<div class="<%= styles[:body] %>">
|
8
8
|
<table id="apidae_references" class="<%= styles[:table] %>">
|
9
9
|
<thead class="<%= styles[:table_head] %>">
|
10
10
|
<tr>
|
data/config/routes.rb
CHANGED
@@ -5,6 +5,7 @@ Apidae::Engine.routes.draw do
|
|
5
5
|
resources :objects, only: [:index], path: 'objets'
|
6
6
|
end
|
7
7
|
resources :references, only: [:index]
|
8
|
+
resources :projects, only: [:index, :edit, :update], path: 'projets'
|
8
9
|
|
9
10
|
match 'import/callback', via: :post, to: 'import#callback'
|
10
11
|
match 'import/run', via: :post, to: 'import#run'
|
data/lib/apidae/engine.rb
CHANGED
@@ -4,6 +4,9 @@ module Apidae
|
|
4
4
|
# Include all helpers from main app
|
5
5
|
config.to_prepare do
|
6
6
|
ApplicationController.helper(ActionView::Helpers::ApplicationHelper)
|
7
|
+
Dir.glob(Rails.root + "app/decorators/**/*_decorator*.rb").each do |c|
|
8
|
+
require_dependency(c)
|
9
|
+
end
|
7
10
|
end
|
8
11
|
end
|
9
12
|
end
|
data/lib/apidae/version.rb
CHANGED
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.
|
4
|
+
version: 0.7.0
|
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: 2018-
|
11
|
+
date: 2018-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- app/controllers/apidae/dashboard_controller.rb
|
85
85
|
- app/controllers/apidae/import_controller.rb
|
86
86
|
- app/controllers/apidae/objects_controller.rb
|
87
|
+
- app/controllers/apidae/projects_controller.rb
|
87
88
|
- app/controllers/apidae/references_controller.rb
|
88
89
|
- app/controllers/apidae/selections_controller.rb
|
89
90
|
- app/helpers/apidae/api_helper.rb
|
@@ -97,6 +98,7 @@ files:
|
|
97
98
|
- app/models/apidae/export.rb
|
98
99
|
- app/models/apidae/file_import.rb
|
99
100
|
- app/models/apidae/obj.rb
|
101
|
+
- app/models/apidae/project.rb
|
100
102
|
- app/models/apidae/reference.rb
|
101
103
|
- app/models/apidae/selection.rb
|
102
104
|
- app/models/apidae/selection_object.rb
|
@@ -110,6 +112,8 @@ files:
|
|
110
112
|
- app/views/apidae/objects/new.html.erb
|
111
113
|
- app/views/apidae/objects/show.html.erb
|
112
114
|
- app/views/apidae/objects/show.json.jbuilder
|
115
|
+
- app/views/apidae/projects/edit.html.erb
|
116
|
+
- app/views/apidae/projects/index.html.erb
|
113
117
|
- app/views/apidae/references/index.html.erb
|
114
118
|
- app/views/apidae/selections/_form.html.erb
|
115
119
|
- app/views/apidae/selections/edit.html.erb
|
@@ -150,6 +154,8 @@ files:
|
|
150
154
|
- db/migrate/20180519170210_remove_insee_code_unicity.rb
|
151
155
|
- db/migrate/20180521211735_destroy_attached_files.rb
|
152
156
|
- db/migrate/20180625050400_rename_objects_to_obj.rb
|
157
|
+
- db/migrate/20181024072424_add_project_id_to_selections.rb
|
158
|
+
- db/migrate/20181024072843_create_apidae_projects.rb
|
153
159
|
- lib/apidae.rb
|
154
160
|
- lib/apidae/engine.rb
|
155
161
|
- lib/apidae/version.rb
|