apidae 0.4.5 → 0.5.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/api_controller.rb +4 -4
- data/app/controllers/apidae/application_controller.rb +1 -0
- data/app/controllers/apidae/dashboard_controller.rb +4 -3
- data/app/controllers/apidae/references_controller.rb +9 -0
- data/app/controllers/apidae/selections_controller.rb +0 -9
- data/app/helpers/apidae/references_helper.rb +4 -0
- data/app/models/apidae/file_import.rb +9 -9
- data/app/models/apidae/{object.rb → obj.rb} +7 -5
- data/app/models/apidae/reference.rb +1 -1
- data/app/models/apidae/selection.rb +10 -6
- data/app/models/apidae/selection_object.rb +1 -1
- data/app/views/apidae/dashboard/index.html.erb +4 -6
- data/app/views/apidae/references/index.html.erb +35 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20180625050400_rename_objects_to_obj.rb +5 -0
- data/lib/apidae/version.rb +1 -1
- data/test/controllers/apidae/references_controller_test.rb +13 -0
- data/test/dummy/config/application.rb +1 -0
- data/test/dummy/config/initializers/apidae.rb +18 -0
- data/test/dummy/db/schema.rb +13 -27
- data/test/dummy/log/development.log +69 -0
- data/test/models/apidae/file_import_test.rb +23 -23
- metadata +17 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f547cf4610e683c3aaea19fcd199a9eb22938ef
|
4
|
+
data.tar.gz: 4aa87029f4a8c5781c8545682bf574c722842cc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6c3da77b3d4f508cfce7635cd18e9370f2e1af3c45e44a2f0184194e285b47cadb4cd6c0cb9282975abd1534eb8faf7d0760c7125df2dfe050a93560210a4f5
|
7
|
+
data.tar.gz: e84e25d392c3b1cca5edc9b5395abc3f964b34f6f13b840f48dee6d86640127bf78219baeace49ea3bad00ccb2f72c5066ec65cdbaea5424ff22aee72e5f7c16
|
@@ -6,8 +6,8 @@ module Apidae
|
|
6
6
|
def selection
|
7
7
|
@objects = []
|
8
8
|
unless params[:selection_id].blank?
|
9
|
-
objects_ids =
|
10
|
-
@objects =
|
9
|
+
objects_ids = Selection.find(params[:selection_id]).api_results[:results]
|
10
|
+
@objects = Obj.where(id: objects_ids)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -17,8 +17,8 @@ module Apidae
|
|
17
17
|
def agenda
|
18
18
|
@objects = []
|
19
19
|
unless params[:selection_id].blank?
|
20
|
-
objects_ids =
|
21
|
-
@objects =
|
20
|
+
objects_ids = Selection.find(params[:selection_id]).api_agenda(params[:from], params[:to])[:results]
|
21
|
+
@objects = Obj.where(id: objects_ids)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -3,9 +3,10 @@ require_dependency "apidae/application_controller"
|
|
3
3
|
module Apidae
|
4
4
|
class DashboardController < ApplicationController
|
5
5
|
def index
|
6
|
-
@objects =
|
7
|
-
@selections =
|
8
|
-
@
|
6
|
+
@objects = Obj.count
|
7
|
+
@selections = Selection.count
|
8
|
+
@references = Reference.count
|
9
|
+
@last_imports = FileImport.order(id: :desc).take(5)
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
@@ -4,25 +4,20 @@ module Apidae
|
|
4
4
|
class SelectionsController < ApplicationController
|
5
5
|
before_action :set_selection, only: [:show, :edit, :update, :destroy]
|
6
6
|
|
7
|
-
# GET /selections
|
8
7
|
def index
|
9
8
|
@selections = Selection.all
|
10
9
|
end
|
11
10
|
|
12
|
-
# GET /selections/1
|
13
11
|
def show
|
14
12
|
end
|
15
13
|
|
16
|
-
# GET /selections/new
|
17
14
|
def new
|
18
15
|
@selection = Selection.new
|
19
16
|
end
|
20
17
|
|
21
|
-
# GET /selections/1/edit
|
22
18
|
def edit
|
23
19
|
end
|
24
20
|
|
25
|
-
# POST /selections
|
26
21
|
def create
|
27
22
|
@selection = Selection.new(selection_params)
|
28
23
|
|
@@ -33,7 +28,6 @@ module Apidae
|
|
33
28
|
end
|
34
29
|
end
|
35
30
|
|
36
|
-
# PATCH/PUT /selections/1
|
37
31
|
def update
|
38
32
|
if @selection.update(selection_params)
|
39
33
|
redirect_to @selection, notice: 'Selection was successfully updated.'
|
@@ -42,19 +36,16 @@ module Apidae
|
|
42
36
|
end
|
43
37
|
end
|
44
38
|
|
45
|
-
# DELETE /selections/1
|
46
39
|
def destroy
|
47
40
|
@selection.destroy
|
48
41
|
redirect_to selections_url, notice: 'Selection was successfully destroyed.'
|
49
42
|
end
|
50
43
|
|
51
44
|
private
|
52
|
-
# Use callbacks to share common setup or constraints between actions.
|
53
45
|
def set_selection
|
54
46
|
@selection = Selection.find(params[:id])
|
55
47
|
end
|
56
48
|
|
57
|
-
# Only allow a trusted parameter "white list" through.
|
58
49
|
def selection_params
|
59
50
|
params.require(:selection).permit(:label, :reference, :apidae_id)
|
60
51
|
end
|
@@ -64,12 +64,12 @@ module Apidae
|
|
64
64
|
def self.add_or_update_objects(objects_json, result)
|
65
65
|
objects_hashes = JSON.parse(objects_json, symbolize_names: true)
|
66
66
|
objects_hashes.each do |object_data|
|
67
|
-
existing =
|
67
|
+
existing = Obj.find_by_apidae_id(object_data[:id])
|
68
68
|
if existing
|
69
|
-
|
69
|
+
Obj.update_object(existing, object_data)
|
70
70
|
result[:updated] += 1
|
71
71
|
else
|
72
|
-
|
72
|
+
Obj.add_object(object_data)
|
73
73
|
result[:created] += 1
|
74
74
|
end
|
75
75
|
end
|
@@ -85,7 +85,7 @@ module Apidae
|
|
85
85
|
def self.delete_objects(deleted_json, result)
|
86
86
|
deleted_ids = JSON.parse(deleted_json)
|
87
87
|
deleted_ids.each do |id|
|
88
|
-
obj =
|
88
|
+
obj = Obj.find_by_apidae_id(id)
|
89
89
|
if obj
|
90
90
|
obj.destroy!
|
91
91
|
result[:deleted] += 1
|
@@ -104,7 +104,7 @@ module Apidae
|
|
104
104
|
objects_json = File.read(json_file)
|
105
105
|
objects_hashes = JSON.parse(objects_json, symbolize_names: true)
|
106
106
|
objects_hashes.each do |object_data|
|
107
|
-
obj =
|
107
|
+
obj = Obj.find_by_apidae_id(object_data[:id])
|
108
108
|
if obj
|
109
109
|
yield(obj, object_data)
|
110
110
|
obj.save!
|
@@ -140,13 +140,13 @@ module Apidae
|
|
140
140
|
|
141
141
|
def self.add_or_update_selections(selections_json, result)
|
142
142
|
selections_hashes = JSON.parse(selections_json, symbolize_names: true)
|
143
|
-
deleted_ids =
|
144
|
-
|
143
|
+
deleted_ids = Selection.all.collect {|sel| sel.apidae_id}.uniq - selections_hashes.collect {|sel| sel[:id]}
|
144
|
+
Selection.where(apidae_id: deleted_ids).delete_all
|
145
145
|
selections_hashes.each do |selection_data|
|
146
146
|
logger.info "Updating selection #{selection_data[:id]}"
|
147
|
-
|
147
|
+
Selection.add_or_update(selection_data)
|
148
148
|
end
|
149
|
-
result[:selections] =
|
149
|
+
result[:selections] = Selection.all
|
150
150
|
.collect {|sel| {apidae_id: sel.apidae_id, reference: sel.reference, objects: sel.objects.count}}
|
151
151
|
end
|
152
152
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Apidae
|
2
|
-
class
|
2
|
+
class Obj < ActiveRecord::Base
|
3
3
|
|
4
4
|
belongs_to :town, class_name: 'Apidae::Town', foreign_key: :town_insee_code, primary_key: :insee_code
|
5
5
|
# has_many :attached_files, class_name: 'Apidae::AttachedFile'
|
@@ -16,7 +16,7 @@ module Apidae
|
|
16
16
|
store_accessor :location_data, :address, :place, :latitude, :longitude, :access
|
17
17
|
store_accessor :openings_data, :openings_desc, :openings, :time_periods
|
18
18
|
store_accessor :rates_data, :rates_desc, :rates, :payment_methods
|
19
|
-
store_accessor :service_data, :services, :equipments, :comfort, :activities
|
19
|
+
store_accessor :service_data, :services, :equipments, :comfort, :activities, :challenged, :languages
|
20
20
|
store_accessor :tags_data, :promo, :internal
|
21
21
|
|
22
22
|
ACT = 'ACTIVITE'
|
@@ -60,7 +60,7 @@ module Apidae
|
|
60
60
|
WEBSITE = 205
|
61
61
|
|
62
62
|
def self.add_object(object_data)
|
63
|
-
apidae_obj =
|
63
|
+
apidae_obj = Obj.new(apidae_id: object_data[:id])
|
64
64
|
update_object(apidae_obj, object_data)
|
65
65
|
end
|
66
66
|
|
@@ -202,7 +202,7 @@ module Apidae
|
|
202
202
|
chains: lists_ids(data_hash[:chaines]) + nodes_ids(data_hash[:chaineEtLabel]),
|
203
203
|
area: apidae_obj.apidae_type == DOS ? data_hash.except(:classification) : nil,
|
204
204
|
track: apidae_obj.apidae_type == EQU ? data_hash[:itineraire] : nil,
|
205
|
-
products: lists_ids(data_hash[:typesProduit], data_hash[:aopAocIgps]),
|
205
|
+
products: lists_ids(data_hash[:typesProduit], data_hash[:aopAocIgps], data_hash[:specialites]),
|
206
206
|
audience: lists_ids(prestations_hash[:typesClientele]),
|
207
207
|
animals: prestations_hash[:animauxAcceptes] == 'ACCEPTES',
|
208
208
|
extra: node_value(prestations_hash, :complementAccueil),
|
@@ -218,7 +218,9 @@ module Apidae
|
|
218
218
|
equipments: lists_ids(data_hash[:equipements]),
|
219
219
|
comfort: lists_ids(data_hash[:conforts]),
|
220
220
|
activities: lists_ids(data_hash[:activites], type_data_hash[:activites],
|
221
|
-
type_data_hash[:activitesSportives], type_data_hash[:activitesCulturelles])
|
221
|
+
type_data_hash[:activitesSportives], type_data_hash[:activitesCulturelles]),
|
222
|
+
challenged: lists_ids(data_hash[:tourismesAdaptes]),
|
223
|
+
languages: lists_ids(data_hash[:languesParlees])
|
222
224
|
}
|
223
225
|
end
|
224
226
|
end
|
@@ -39,7 +39,7 @@ module Apidae
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def detailed_label(language)
|
42
|
-
category ? "#{
|
42
|
+
category ? "#{Reference.find_by_apidae_id(category).label(language)} - #{label(language)}" : label(language)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Apidae
|
2
2
|
class Selection < ActiveRecord::Base
|
3
3
|
has_many :apidae_selection_objects, class_name: 'Apidae::SelectionObject', foreign_key: :apidae_selection_id
|
4
|
-
has_many :objects, class_name: 'Apidae::
|
4
|
+
has_many :objects, class_name: 'Apidae::Obj', source: :apidae_object, through: :apidae_selection_objects
|
5
5
|
|
6
6
|
AGENDA_ENDPOINT = 'agenda/detaille/list-identifiants'
|
7
7
|
SELECTION_ENDPOINT = 'recherche/list-identifiants'
|
@@ -12,7 +12,7 @@ module Apidae
|
|
12
12
|
before_validation :generate_reference, on: :create
|
13
13
|
|
14
14
|
def self.add_or_update(selection_data)
|
15
|
-
apidae_sel =
|
15
|
+
apidae_sel = Selection.where(apidae_id: selection_data[:id]).first_or_initialize
|
16
16
|
apidae_sel.label = selection_data[:nom]
|
17
17
|
apidae_sel.save!
|
18
18
|
|
@@ -24,12 +24,12 @@ module Apidae
|
|
24
24
|
removed = current_objs - imported_objs
|
25
25
|
|
26
26
|
added.each do |o|
|
27
|
-
obj =
|
28
|
-
|
27
|
+
obj = Obj.find_by_apidae_id(o)
|
28
|
+
SelectionObject.create(apidae_selection_id: apidae_sel.id, apidae_object_id: obj.id)
|
29
29
|
end
|
30
30
|
|
31
|
-
removed_ids =
|
32
|
-
|
31
|
+
removed_ids = Obj.where(apidae_id: removed).map {|o| o.id}
|
32
|
+
SelectionObject.where(apidae_selection_id: apidae_sel.id, apidae_object_id: removed_ids).delete_all
|
33
33
|
end
|
34
34
|
|
35
35
|
def results(where_clause, offset, size)
|
@@ -62,6 +62,10 @@ module Apidae
|
|
62
62
|
res
|
63
63
|
end
|
64
64
|
|
65
|
+
def as_text
|
66
|
+
"#{label} (#{apidae_id})"
|
67
|
+
end
|
68
|
+
|
65
69
|
private
|
66
70
|
|
67
71
|
def query_api(query_args, all_results = false)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Apidae
|
2
2
|
class SelectionObject < ApplicationRecord
|
3
|
-
belongs_to :apidae_object, class_name: 'Apidae::
|
3
|
+
belongs_to :apidae_object, class_name: 'Apidae::Obj', foreign_key: :apidae_object_id
|
4
4
|
belongs_to :apidae_selection, class_name: 'Apidae::Selection', foreign_key: :apidae_selection_id
|
5
5
|
end
|
6
6
|
end
|
@@ -1,5 +1,8 @@
|
|
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(@selections, 'sélection', 'sélections'), apidae.selections_path, class: styles[:selections] %>
|
4
|
+
<%= link_to pluralize(@objects, 'objet touristique', 'objets touristiques'), apidae.objects_path, class: styles[:objects] %>
|
5
|
+
<%= link_to (pluralize(@references, 'élément', 'éléments') + ' de référence'), apidae.references_path, class: styles[:references] %>
|
3
6
|
<%= link_to 'Retour', :back, class: styles[:back] %>
|
4
7
|
<h1 class="<%= styles[:h1] %>">Apidae</h1>
|
5
8
|
</div>
|
@@ -28,16 +31,11 @@
|
|
28
31
|
<% end %>
|
29
32
|
<% if @last_imports.empty? %>
|
30
33
|
<tr>
|
31
|
-
<td colspan="
|
34
|
+
<td colspan="5">Aucun import pour le moment.</td>
|
32
35
|
</tr>
|
33
36
|
<% end %>
|
34
37
|
</tbody>
|
35
38
|
</table>
|
36
39
|
</div>
|
37
|
-
<div id="apidae_navigation_panel" class="<%= styles[:body] %>">
|
38
|
-
<h2 class="<%= styles[:h2] %>">Données issues d'Apidae</h2>
|
39
|
-
<%= link_to pluralize(@selections, 'sélection', 'sélections'), apidae.selections_path, class: styles[:selections] %>
|
40
|
-
<%= link_to pluralize(@objects, 'objet touristique', 'objets touristiques'), apidae.objects_path, class: styles[:objects] %>
|
41
|
-
</div>
|
42
40
|
</div>
|
43
41
|
<% 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', :back, class: styles[:back] %>
|
4
|
+
<h1 class="<%= styles[:h1] %>">Apidae - Eléments de référence</h1>
|
5
|
+
</div>
|
6
|
+
<div id="apidae_dashboard" class="<%= styles[:wrapper] %>">
|
7
|
+
<div id="apidae_imports_panel" class="<%= styles[:body] %>">
|
8
|
+
<table id="apidae_references" class="<%= styles[:table] %>">
|
9
|
+
<thead class="<%= styles[:table_head] %>">
|
10
|
+
<tr>
|
11
|
+
<th>Titre</th>
|
12
|
+
<th>Identifiant</th>
|
13
|
+
<th>Type</th>
|
14
|
+
<th>Mise à jour</th>
|
15
|
+
</tr>
|
16
|
+
</thead>
|
17
|
+
<tbody class="<%= styles[:table_body] %>">
|
18
|
+
<% @references.each do |ref| %>
|
19
|
+
<tr>
|
20
|
+
<td><%= ref.label(:fr) %></td>
|
21
|
+
<td><%= ref.apidae_id %></td>
|
22
|
+
<td><%= ref.apidae_type %></td>
|
23
|
+
<td><%= ref.updated_at.strftime('Le %d/%m/%Y à %H:%M') if ref.updated_at %></td>
|
24
|
+
</tr>
|
25
|
+
<% end %>
|
26
|
+
<% if @references.empty? %>
|
27
|
+
<tr>
|
28
|
+
<td colspan="4">Aucune référence importée pour le moment.</td>
|
29
|
+
</tr>
|
30
|
+
<% end %>
|
31
|
+
</tbody>
|
32
|
+
</table>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<% end %>
|
data/config/routes.rb
CHANGED
@@ -4,6 +4,7 @@ Apidae::Engine.routes.draw do
|
|
4
4
|
resources :selections, only: [:index] do
|
5
5
|
resources :objects, only: [:index]
|
6
6
|
end
|
7
|
+
resources :references, only: [:index]
|
7
8
|
|
8
9
|
match 'import/callback', via: :post, to: 'import#callback'
|
9
10
|
match 'import/run', via: :post, to: 'import#run'
|
data/lib/apidae/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Apidae
|
4
|
+
class ReferencesControllerTest < ActionDispatch::IntegrationTest
|
5
|
+
include Engine.routes.url_helpers
|
6
|
+
|
7
|
+
test "should get index" do
|
8
|
+
get apidae_references_index_url
|
9
|
+
assert_response :success
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -18,6 +18,7 @@ module Dummy
|
|
18
18
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
19
19
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
20
20
|
# config.i18n.default_locale = :de
|
21
|
+
config.apidae_auth = :dummy_auth
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
data/test/dummy/db/schema.rb
CHANGED
@@ -10,24 +10,11 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 20180625050400) do
|
14
14
|
|
15
15
|
# These are extensions that must be enabled in order to support this database
|
16
16
|
enable_extension "plpgsql"
|
17
17
|
|
18
|
-
create_table "apidae_attached_files", id: :serial, force: :cascade do |t|
|
19
|
-
t.string "name"
|
20
|
-
t.string "credits"
|
21
|
-
t.text "description"
|
22
|
-
t.integer "apidae_object_id"
|
23
|
-
t.string "picture_file_name"
|
24
|
-
t.string "picture_content_type"
|
25
|
-
t.integer "picture_file_size"
|
26
|
-
t.datetime "picture_updated_at"
|
27
|
-
t.datetime "created_at", null: false
|
28
|
-
t.datetime "updated_at", null: false
|
29
|
-
end
|
30
|
-
|
31
18
|
create_table "apidae_exports", id: :serial, force: :cascade do |t|
|
32
19
|
t.string "status"
|
33
20
|
t.string "remote_status"
|
@@ -50,18 +37,18 @@ ActiveRecord::Schema.define(version: 20180314093512) do
|
|
50
37
|
t.datetime "updated_at", null: false
|
51
38
|
end
|
52
39
|
|
53
|
-
create_table "
|
54
|
-
t.
|
40
|
+
create_table "apidae_objects_selections", id: :serial, force: :cascade do |t|
|
41
|
+
t.integer "object_id"
|
42
|
+
t.integer "selection_id"
|
43
|
+
end
|
44
|
+
|
45
|
+
create_table "apidae_objs", id: :serial, force: :cascade do |t|
|
55
46
|
t.integer "apidae_id"
|
56
47
|
t.string "apidae_type"
|
57
48
|
t.string "apidae_subtype"
|
58
49
|
t.string "title"
|
59
|
-
t.text "short_desc"
|
60
50
|
t.jsonb "contact"
|
61
|
-
t.text "long_desc"
|
62
51
|
t.jsonb "type_data"
|
63
|
-
t.float "latitude"
|
64
|
-
t.float "longitude"
|
65
52
|
t.jsonb "openings_data"
|
66
53
|
t.text "reservation"
|
67
54
|
t.datetime "created_at", null: false
|
@@ -73,11 +60,9 @@ ActiveRecord::Schema.define(version: 20180314093512) do
|
|
73
60
|
t.jsonb "rates_data"
|
74
61
|
t.jsonb "attachments_data"
|
75
62
|
t.jsonb "tags_data"
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
t.integer "object_id"
|
80
|
-
t.integer "selection_id"
|
63
|
+
t.jsonb "meta_data"
|
64
|
+
t.jsonb "location_data"
|
65
|
+
t.jsonb "description_data"
|
81
66
|
end
|
82
67
|
|
83
68
|
create_table "apidae_references", force: :cascade do |t|
|
@@ -86,7 +71,8 @@ ActiveRecord::Schema.define(version: 20180314093512) do
|
|
86
71
|
t.jsonb "label_data"
|
87
72
|
t.datetime "created_at", null: false
|
88
73
|
t.datetime "updated_at", null: false
|
89
|
-
t.
|
74
|
+
t.jsonb "meta_data"
|
75
|
+
t.index ["apidae_id"], name: "index_apidae_references_on_apidae_id"
|
90
76
|
end
|
91
77
|
|
92
78
|
create_table "apidae_selection_objects", force: :cascade do |t|
|
@@ -112,7 +98,7 @@ ActiveRecord::Schema.define(version: 20180314093512) do
|
|
112
98
|
t.string "postal_code"
|
113
99
|
t.datetime "created_at", null: false
|
114
100
|
t.datetime "updated_at", null: false
|
115
|
-
t.index ["insee_code"], name: "index_apidae_towns_on_insee_code"
|
101
|
+
t.index ["insee_code"], name: "index_apidae_towns_on_insee_code"
|
116
102
|
end
|
117
103
|
|
118
104
|
end
|
@@ -344,3 +344,72 @@ Migrating to AddTagsDataToApidaeObjects (20180314093512)
|
|
344
344
|
[1m[35m (0.1ms)[0m [1m[35mCOMMIT[0m
|
345
345
|
[1m[35m (0.2ms)[0m [1m[34mSELECT pg_advisory_unlock(6140174353533887940)[0m
|
346
346
|
[1m[35m (0.2ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
347
|
+
DEPRECATION WARNING: Passing string to be evaluated in :if and :unless conditional options is deprecated and will be removed in Rails 5.2 without replacement. Pass a symbol for an instance method, or a lambda, proc or block, instead. (called from <class:ApplicationController> at /Users/jbvilain/workspace/code/apidae-engine-rails/app/controllers/apidae/application_controller.rb:4)
|
348
|
+
[1m[35m (6.6ms)[0m [1m[34mSELECT pg_try_advisory_lock(6140174353533887940)[0m
|
349
|
+
[1m[35m (2.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
350
|
+
Migrating to AddMetaDataToApidaeObjects (20180314132631)
|
351
|
+
[1m[35m (0.1ms)[0m [1m[35mBEGIN[0m
|
352
|
+
[1m[35m (31.7ms)[0m [1m[35mALTER TABLE "apidae_objects" ADD "meta_data" jsonb[0m
|
353
|
+
[1m[35mSQL (0.5ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180314132631"]]
|
354
|
+
[1m[35m (1.2ms)[0m [1m[35mCOMMIT[0m
|
355
|
+
Migrating to RemoveApidaeIdUnicity (20180319143954)
|
356
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
357
|
+
[1m[35m (5.5ms)[0m [1m[35mDROP INDEX "index_apidae_references_on_apidae_id"[0m
|
358
|
+
[1m[35m (4.5ms)[0m [1m[35mCREATE INDEX "index_apidae_references_on_apidae_id" ON "apidae_references" ("apidae_id")[0m
|
359
|
+
[1m[35mSQL (0.2ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180319143954"]]
|
360
|
+
[1m[35m (2.0ms)[0m [1m[35mCOMMIT[0m
|
361
|
+
Migrating to AddLocationDataToApidaeObjects (20180417164604)
|
362
|
+
[1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
|
363
|
+
[1m[35m (0.3ms)[0m [1m[35mALTER TABLE "apidae_objects" ADD "location_data" jsonb[0m
|
364
|
+
[1m[35mSQL (0.2ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180417164604"]]
|
365
|
+
[1m[35m (6.0ms)[0m [1m[35mCOMMIT[0m
|
366
|
+
Migrating to RemoveAddressFromApidaeObjects (20180417165744)
|
367
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
368
|
+
[1m[35m (12.4ms)[0m [1m[35mALTER TABLE "apidae_objects" DROP "address"[0m
|
369
|
+
[1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180417165744"]]
|
370
|
+
[1m[35m (6.1ms)[0m [1m[35mCOMMIT[0m
|
371
|
+
Migrating to RemoveLatLngFromApidaeObjects (20180417171344)
|
372
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
373
|
+
[1m[35m (0.4ms)[0m [1m[35mALTER TABLE "apidae_objects" DROP "latitude"[0m
|
374
|
+
[1m[35m (0.3ms)[0m [1m[35mALTER TABLE "apidae_objects" DROP "longitude"[0m
|
375
|
+
[1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180417171344"]]
|
376
|
+
[1m[35m (6.3ms)[0m [1m[35mCOMMIT[0m
|
377
|
+
Migrating to AddDescriptionDataToApidaeObjects (20180418141248)
|
378
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
379
|
+
[1m[35m (0.3ms)[0m [1m[35mALTER TABLE "apidae_objects" ADD "description_data" jsonb[0m
|
380
|
+
[1m[35mSQL (0.2ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180418141248"]]
|
381
|
+
[1m[35m (6.2ms)[0m [1m[35mCOMMIT[0m
|
382
|
+
Migrating to RemoveDescColumnsFromApidaeObjects (20180418141305)
|
383
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
384
|
+
[1m[35m (0.4ms)[0m [1m[35mALTER TABLE "apidae_objects" DROP "short_desc"[0m
|
385
|
+
[1m[35m (0.2ms)[0m [1m[35mALTER TABLE "apidae_objects" DROP "long_desc"[0m
|
386
|
+
[1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180418141305"]]
|
387
|
+
[1m[35m (5.9ms)[0m [1m[35mCOMMIT[0m
|
388
|
+
Migrating to AddMetaDataToApidaeReferences (20180424141656)
|
389
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
390
|
+
[1m[35m (0.3ms)[0m [1m[35mALTER TABLE "apidae_references" ADD "meta_data" jsonb[0m
|
391
|
+
[1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180424141656"]]
|
392
|
+
[1m[35m (5.8ms)[0m [1m[35mCOMMIT[0m
|
393
|
+
Migrating to RemoveInseeCodeUnicity (20180519170210)
|
394
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
395
|
+
[1m[35m (13.0ms)[0m [1m[35mDROP INDEX "index_apidae_towns_on_insee_code"[0m
|
396
|
+
[1m[35m (7.7ms)[0m [1m[35mCREATE INDEX "index_apidae_towns_on_insee_code" ON "apidae_towns" ("insee_code")[0m
|
397
|
+
[1m[35mSQL (0.4ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180519170210"]]
|
398
|
+
[1m[35m (1.8ms)[0m [1m[35mCOMMIT[0m
|
399
|
+
Migrating to DestroyAttachedFiles (20180521211735)
|
400
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
401
|
+
[1m[35m (29.0ms)[0m [1m[35mDROP TABLE "apidae_attached_files"[0m
|
402
|
+
[1m[35mSQL (0.2ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180521211735"]]
|
403
|
+
[1m[35m (2.0ms)[0m [1m[35mCOMMIT[0m
|
404
|
+
Migrating to RenameObjectsToObj (20180625050400)
|
405
|
+
[1m[35m (0.1ms)[0m [1m[35mBEGIN[0m
|
406
|
+
[1m[35m (6.5ms)[0m [1m[35mALTER TABLE "apidae_objects" RENAME TO "apidae_objs"[0m
|
407
|
+
[1m[35m (0.3ms)[0m [1m[35mALTER TABLE "public"."apidae_objects_id_seq" RENAME TO "apidae_objs_id_seq"[0m
|
408
|
+
[1m[35m (0.9ms)[0m [1m[35mALTER INDEX "apidae_objects_pkey" RENAME TO "apidae_objs_pkey"[0m
|
409
|
+
[1m[35mSQL (0.2ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20180625050400"]]
|
410
|
+
[1m[35m (0.6ms)[0m [1m[35mCOMMIT[0m
|
411
|
+
[1m[36mActiveRecord::InternalMetadata Load (23.6ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
|
412
|
+
[1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
|
413
|
+
[1m[35m (0.1ms)[0m [1m[35mCOMMIT[0m
|
414
|
+
[1m[35m (0.2ms)[0m [1m[34mSELECT pg_advisory_unlock(6140174353533887940)[0m
|
415
|
+
[1m[35m (0.3ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
|
@@ -3,45 +3,45 @@ require 'test_helper'
|
|
3
3
|
module Apidae
|
4
4
|
class FileImportTest < ActiveSupport::TestCase
|
5
5
|
setup do
|
6
|
-
|
7
|
-
|
6
|
+
Obj.delete_all
|
7
|
+
Selection.delete_all
|
8
8
|
@result = {created: 0, updated: 0, deleted: 0, selections: []}
|
9
9
|
end
|
10
10
|
|
11
11
|
test "new object insertion" do
|
12
12
|
objects_json = File.read('test/data/structure.json')
|
13
13
|
FileImport.add_or_update_objects(objects_json, @result)
|
14
|
-
assert_equal 1,
|
15
|
-
new_obj =
|
14
|
+
assert_equal 1, Obj.count
|
15
|
+
new_obj = Obj.first
|
16
16
|
assert_equal 504, new_obj.apidae_id
|
17
17
|
assert_equal({created: 1, updated: 0, deleted: 0, selections: []}, @result)
|
18
18
|
end
|
19
19
|
|
20
20
|
test "existing object update" do
|
21
|
-
|
21
|
+
Obj.create(apidae_id: 504, title: 'Société des contrebassistes aixois')
|
22
22
|
objects_json = File.read('test/data/structure.json')
|
23
23
|
FileImport.add_or_update_objects(objects_json, @result)
|
24
|
-
assert_equal 1,
|
25
|
-
updated_obj =
|
24
|
+
assert_equal 1, Obj.count
|
25
|
+
updated_obj = Obj.first
|
26
26
|
assert_equal 504, updated_obj.apidae_id
|
27
27
|
assert_equal 'Société des accordéonistes aixois', updated_obj.title
|
28
28
|
assert_equal({created: 0, updated: 1, deleted: 0, selections: []}, @result)
|
29
29
|
end
|
30
30
|
|
31
31
|
test "existing object deletion" do
|
32
|
-
|
32
|
+
Obj.create(apidae_id: 504, title: 'Société des contrebassistes aixois')
|
33
33
|
objects_json = File.read('test/data/deletion.json')
|
34
34
|
FileImport.delete_objects(objects_json, @result)
|
35
|
-
assert_equal 0,
|
35
|
+
assert_equal 0, Obj.count
|
36
36
|
assert_equal({created: 0, updated: 0, deleted: 1, selections: []}, @result)
|
37
37
|
end
|
38
38
|
|
39
39
|
test "new selection insertion" do
|
40
|
-
|
40
|
+
Obj.create(apidae_id: 504, title: 'Société des contrebassistes aixois')
|
41
41
|
objects_json = File.read('test/data/selections.json')
|
42
42
|
FileImport.add_or_update_selections(objects_json, @result)
|
43
|
-
assert_equal 1,
|
44
|
-
new_sel =
|
43
|
+
assert_equal 1, Selection.count
|
44
|
+
new_sel = Selection.first
|
45
45
|
assert_equal 49063, new_sel.apidae_id
|
46
46
|
assert_equal 'Sélection 1', new_sel.label
|
47
47
|
assert_equal 'selection-1', new_sel.reference
|
@@ -50,14 +50,14 @@ module Apidae
|
|
50
50
|
end
|
51
51
|
|
52
52
|
test "existing selection update" do
|
53
|
-
obj =
|
54
|
-
|
55
|
-
sel =
|
53
|
+
obj = Obj.create(apidae_id: 503, title: 'Société des contrebassistes aixois')
|
54
|
+
Obj.create(apidae_id: 504, title: 'Société des contrebassistes aixois')
|
55
|
+
sel = Selection.create(apidae_id: 49063, label: 'Sélection 2', reference: 'selection-2')
|
56
56
|
sel.objects << obj
|
57
57
|
assert_equal 1, sel.objects.count
|
58
58
|
objects_json = File.read('test/data/update_selections.json')
|
59
59
|
FileImport.add_or_update_selections(objects_json, @result)
|
60
|
-
assert_equal 1,
|
60
|
+
assert_equal 1, Selection.count
|
61
61
|
assert_equal 49063, sel.apidae_id
|
62
62
|
assert_equal 'Sélection 2', sel.label
|
63
63
|
assert_equal 'selection-2', sel.reference
|
@@ -66,19 +66,19 @@ module Apidae
|
|
66
66
|
end
|
67
67
|
|
68
68
|
test "existing selection deletion" do
|
69
|
-
|
69
|
+
Selection.create(apidae_id: 49063, label: 'Sélection 3', reference: 'selection-3')
|
70
70
|
objects_json = File.read('test/data/delete_selections.json')
|
71
|
-
assert_equal 1,
|
71
|
+
assert_equal 1, Selection.count
|
72
72
|
FileImport.add_or_update_selections(objects_json, @result)
|
73
|
-
assert_equal 0,
|
73
|
+
assert_equal 0, Selection.count
|
74
74
|
end
|
75
75
|
|
76
76
|
test "full import process" do
|
77
|
-
|
78
|
-
|
77
|
+
Obj.create(apidae_id: 123, title: 'Objet à supprimer')
|
78
|
+
Obj.create(apidae_id: 4826186, title: 'Objet à mettre à jour')
|
79
79
|
result = FileImport.import('test/data/json_export.zip')
|
80
|
-
assert_equal 2,
|
81
|
-
assert_equal 5,
|
80
|
+
assert_equal 2, Selection.all.count
|
81
|
+
assert_equal 5, Obj.all.count
|
82
82
|
assert_equal({created: 4, updated: 1, deleted: 1, selections: [
|
83
83
|
{apidae_id: 49063, reference: 'selection-1', objects: 2},
|
84
84
|
{apidae_id: 49073, reference: 'selection-2', objects: 3}
|
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.5.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-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.1
|
19
|
+
version: '5.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.1
|
26
|
+
version: '5.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pg
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0
|
33
|
+
version: '1.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0
|
40
|
+
version: '1.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubyzip
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.0
|
47
|
+
version: '1.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.0
|
54
|
+
version: '1.0'
|
55
55
|
description: To be completed
|
56
56
|
email:
|
57
57
|
- jbvilain@gmail.com
|
@@ -70,17 +70,19 @@ files:
|
|
70
70
|
- app/controllers/apidae/dashboard_controller.rb
|
71
71
|
- app/controllers/apidae/import_controller.rb
|
72
72
|
- app/controllers/apidae/objects_controller.rb
|
73
|
+
- app/controllers/apidae/references_controller.rb
|
73
74
|
- app/controllers/apidae/selections_controller.rb
|
74
75
|
- app/helpers/apidae/api_helper.rb
|
75
76
|
- app/helpers/apidae/application_helper.rb
|
76
77
|
- app/helpers/apidae/dashboard_helper.rb
|
77
78
|
- app/helpers/apidae/import_helper.rb
|
78
79
|
- app/helpers/apidae/objects_helper.rb
|
80
|
+
- app/helpers/apidae/references_helper.rb
|
79
81
|
- app/helpers/apidae/selections_helper.rb
|
80
82
|
- app/models/apidae/application_record.rb
|
81
83
|
- app/models/apidae/export.rb
|
82
84
|
- app/models/apidae/file_import.rb
|
83
|
-
- app/models/apidae/
|
85
|
+
- app/models/apidae/obj.rb
|
84
86
|
- app/models/apidae/reference.rb
|
85
87
|
- app/models/apidae/selection.rb
|
86
88
|
- app/models/apidae/selection_object.rb
|
@@ -92,6 +94,7 @@ files:
|
|
92
94
|
- app/views/apidae/objects/index.html.erb
|
93
95
|
- app/views/apidae/objects/new.html.erb
|
94
96
|
- app/views/apidae/objects/show.html.erb
|
97
|
+
- app/views/apidae/references/index.html.erb
|
95
98
|
- app/views/apidae/selections/_form.html.erb
|
96
99
|
- app/views/apidae/selections/edit.html.erb
|
97
100
|
- app/views/apidae/selections/index.html.erb
|
@@ -130,6 +133,7 @@ files:
|
|
130
133
|
- db/migrate/20180424141656_add_meta_data_to_apidae_references.rb
|
131
134
|
- db/migrate/20180519170210_remove_insee_code_unicity.rb
|
132
135
|
- db/migrate/20180521211735_destroy_attached_files.rb
|
136
|
+
- db/migrate/20180625050400_rename_objects_to_obj.rb
|
133
137
|
- lib/apidae.rb
|
134
138
|
- lib/apidae/engine.rb
|
135
139
|
- lib/apidae/version.rb
|
@@ -139,6 +143,7 @@ files:
|
|
139
143
|
- test/controllers/apidae/dashboard_controller_test.rb
|
140
144
|
- test/controllers/apidae/import_controller_test.rb
|
141
145
|
- test/controllers/apidae/objects_controller_test.rb
|
146
|
+
- test/controllers/apidae/references_controller_test.rb
|
142
147
|
- test/controllers/apidae/selections_controller_test.rb
|
143
148
|
- test/data/delete_selections.json
|
144
149
|
- test/data/deletion.json
|
@@ -165,6 +170,7 @@ files:
|
|
165
170
|
- test/dummy/config/environments/development.rb
|
166
171
|
- test/dummy/config/environments/production.rb
|
167
172
|
- test/dummy/config/environments/test.rb
|
173
|
+
- test/dummy/config/initializers/apidae.rb
|
168
174
|
- test/dummy/config/initializers/assets.rb
|
169
175
|
- test/dummy/config/initializers/backtrace_silencers.rb
|
170
176
|
- test/dummy/config/initializers/cookies_serializer.rb
|
@@ -251,6 +257,7 @@ test_files:
|
|
251
257
|
- test/dummy/config/initializers/assets.rb
|
252
258
|
- test/dummy/config/initializers/cookies_serializer.rb
|
253
259
|
- test/dummy/config/initializers/to_time_preserves_timezone.rb
|
260
|
+
- test/dummy/config/initializers/apidae.rb
|
254
261
|
- test/dummy/config/initializers/inflections.rb
|
255
262
|
- test/dummy/config.ru
|
256
263
|
- test/dummy/Rakefile
|
@@ -282,6 +289,7 @@ test_files:
|
|
282
289
|
- test/controllers/apidae/api_controller_test.rb
|
283
290
|
- test/controllers/apidae/objects_controller_test.rb
|
284
291
|
- test/controllers/apidae/dashboard_controller_test.rb
|
292
|
+
- test/controllers/apidae/references_controller_test.rb
|
285
293
|
- test/controllers/apidae/import_controller_test.rb
|
286
294
|
- test/data/update_selections.json
|
287
295
|
- test/data/json_export.zip
|