apidae-engine-rails 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +37 -0
- data/app/assets/javascripts/apidae/application.js +13 -0
- data/app/assets/stylesheets/apidae/application.css +15 -0
- data/app/controllers/apidae/application_controller.rb +5 -0
- data/app/controllers/apidae/objects_controller.rb +62 -0
- data/app/controllers/apidae/selections_controller.rb +62 -0
- data/app/helpers/apidae/application_helper.rb +4 -0
- data/app/helpers/apidae/objects_helper.rb +4 -0
- data/app/helpers/apidae/selections_helper.rb +4 -0
- data/app/models/apidae/attached_file.rb +31 -0
- data/app/models/apidae/object.rb +217 -0
- data/app/models/apidae/selection.rb +89 -0
- data/app/models/apidae/town.rb +18 -0
- data/app/views/apidae/objects/_form.html.erb +73 -0
- data/app/views/apidae/objects/edit.html.erb +6 -0
- data/app/views/apidae/objects/index.html.erb +53 -0
- data/app/views/apidae/objects/new.html.erb +5 -0
- data/app/views/apidae/objects/show.html.erb +74 -0
- data/app/views/apidae/selections/_form.html.erb +29 -0
- data/app/views/apidae/selections/edit.html.erb +6 -0
- data/app/views/apidae/selections/index.html.erb +31 -0
- data/app/views/apidae/selections/new.html.erb +5 -0
- data/app/views/apidae/selections/show.html.erb +19 -0
- data/app/views/layouts/apidae/application.html.erb +14 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20170512212941_create_apidae_selections.rb +11 -0
- data/db/migrate/20170512214641_create_apidae_objects.rb +22 -0
- data/db/migrate/20170512221525_create_apidae_objects_apidae_selections.rb +8 -0
- data/db/migrate/20170513114002_create_apidae_towns.rb +15 -0
- data/db/migrate/20170513114409_add_town_insee_code_to_objects.rb +5 -0
- data/db/migrate/20170513115401_add_pictures_data_to_objects.rb +5 -0
- data/db/migrate/20170513121215_create_apidae_attached_files.rb +13 -0
- data/db/migrate/20170513205932_rename_objects_selections_table.rb +5 -0
- data/lib/apidae.rb +4 -0
- data/lib/apidae/engine.rb +5 -0
- data/lib/apidae/version.rb +3 -0
- data/lib/tasks/apidae_tasks.rake +4 -0
- data/test/apidae_test.rb +7 -0
- data/test/controllers/apidae/objects_controller_test.rb +52 -0
- data/test/controllers/apidae/selections_controller_test.rb +52 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +20 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/db/schema.rb +64 -0
- data/test/dummy/log/development.log +121 -0
- data/test/dummy/log/test.log +7 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/fixtures/apidae/attached_files.yml +9 -0
- data/test/fixtures/apidae/objects.yml +33 -0
- data/test/fixtures/apidae/selections.yml +11 -0
- data/test/fixtures/apidae/towns.yml +15 -0
- data/test/integration/navigation_test.rb +8 -0
- data/test/models/apidae/attached_file_test.rb +9 -0
- data/test/models/apidae/object_test.rb +9 -0
- data/test/models/apidae/selection_test.rb +9 -0
- data/test/models/apidae/town_test.rb +9 -0
- data/test/test_helper.rb +21 -0
- metadata +227 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
module Apidae
|
2
|
+
class Selection < ActiveRecord::Base
|
3
|
+
has_and_belongs_to_many :objects, :class_name => 'Apidae::Object'
|
4
|
+
|
5
|
+
MAX_COUNT = 100
|
6
|
+
MAX_LOOPS = 10
|
7
|
+
|
8
|
+
def self.import(json_file)
|
9
|
+
selections_json = File.read(json_file)
|
10
|
+
selections_hashes = JSON.parse(selections_json, symbolize_names: true)
|
11
|
+
selections_hashes.each do |selection_data|
|
12
|
+
existing_sel = Apidae::Selection.find_by_apidae_id(selection_data[:id])
|
13
|
+
unless existing_sel
|
14
|
+
selection = Apidae::Selection.create!(
|
15
|
+
label: selection_data[:nom],
|
16
|
+
apidae_id: selection_data[:id]
|
17
|
+
)
|
18
|
+
if selection_data[:objetsTouristiques]
|
19
|
+
selection_data[:objetsTouristiques].each do |o|
|
20
|
+
apidae_object = Apidae::Object.find_by_apidae_id(o[:id])
|
21
|
+
selection.objects << apidae_object
|
22
|
+
selection.save!
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def agenda(from, to)
|
30
|
+
agenda_entries = Rails.cache.read("#{apidae_id}_#{from}_#{to}")
|
31
|
+
if agenda_entries.nil?
|
32
|
+
query_result = {}
|
33
|
+
config = {
|
34
|
+
url: "#{Rails.application.config.apidae_api_url}/agenda/detaille/list-identifiants",
|
35
|
+
apiKey: Rails.application.config.apidae_api_key,
|
36
|
+
projetId: Rails.application.config.apidae_project_id,
|
37
|
+
first: 0,
|
38
|
+
count: MAX_COUNT,
|
39
|
+
selectionIds: [apidae_id],
|
40
|
+
dateDebut: from,
|
41
|
+
dateFin: to
|
42
|
+
}
|
43
|
+
|
44
|
+
loops = 0
|
45
|
+
|
46
|
+
response = JSON.parse get_response(config), symbolize_names: false
|
47
|
+
total = response['numFound']
|
48
|
+
|
49
|
+
query_result[:results] = response['objetTouristiqueIds'] || {}
|
50
|
+
|
51
|
+
while total > query_result[:results].values.flatten.length && loops < MAX_LOOPS
|
52
|
+
loops += 1
|
53
|
+
config[:first] += MAX_COUNT
|
54
|
+
response = JSON.parse get_response(config), symbolize_names: false
|
55
|
+
merge_results(response, query_result)
|
56
|
+
end
|
57
|
+
query_result[:count] = total
|
58
|
+
agenda_entries = query_result
|
59
|
+
Rails.cache.write("#{apidae_id}_#{from}_#{to}", query_result)
|
60
|
+
end
|
61
|
+
agenda_entries
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def get_response(config)
|
67
|
+
response = ''
|
68
|
+
query = JSON.generate config.except(:url)
|
69
|
+
logger.info "Agenda query : #{config[:url]}?query=#{query}"
|
70
|
+
open("#{config[:url]}?query=#{CGI.escape query}") { |f|
|
71
|
+
f.each_line {|line| response += line if line}
|
72
|
+
}
|
73
|
+
response
|
74
|
+
end
|
75
|
+
|
76
|
+
def merge_results(response, query_results)
|
77
|
+
unless response['objetTouristiqueIds'].nil? || response['objetTouristiqueIds'].empty?
|
78
|
+
first_day = response['objetTouristiqueIds'].keys.first
|
79
|
+
if query_results[:results].has_key?(first_day)
|
80
|
+
query_results[:results][first_day] += response['objetTouristiqueIds'][first_day]
|
81
|
+
else
|
82
|
+
query_results[:results][first_day] = response['objetTouristiqueIds'][first_day]
|
83
|
+
end
|
84
|
+
query_results[:results].merge!(response['objetTouristiqueIds'].except(first_day))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Apidae
|
2
|
+
class Town < ActiveRecord::Base
|
3
|
+
def self.import(json_file)
|
4
|
+
result = true
|
5
|
+
towns_json = File.read(json_file)
|
6
|
+
towns_hashes = JSON.parse(towns_json, symbolize_names: true)
|
7
|
+
towns_hashes.each do |town_data|
|
8
|
+
Town.create!(name: town_data[:nom], postal_code: town_data[:codePostal], insee_code: town_data[:code],
|
9
|
+
country: 'fr', apidae_id: town_data[:id])
|
10
|
+
end
|
11
|
+
result
|
12
|
+
end
|
13
|
+
|
14
|
+
def label
|
15
|
+
"#{name} (#{postal_code})"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<%= form_for(@object) do |f| %>
|
2
|
+
<% if @object.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@object.errors.count, "error") %> prohibited this object from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @object.errors.full_messages.each do |message| %>
|
8
|
+
<li><%= message %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :address %><br>
|
16
|
+
<%= f.text_field :address %>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<%= f.label :apidae_id %><br>
|
20
|
+
<%= f.number_field :apidae_id %>
|
21
|
+
</div>
|
22
|
+
<div class="field">
|
23
|
+
<%= f.label :apidae_type %><br>
|
24
|
+
<%= f.text_field :apidae_type %>
|
25
|
+
</div>
|
26
|
+
<div class="field">
|
27
|
+
<%= f.label :apidae_subtype %><br>
|
28
|
+
<%= f.text_field :apidae_subtype %>
|
29
|
+
</div>
|
30
|
+
<div class="field">
|
31
|
+
<%= f.label :title %><br>
|
32
|
+
<%= f.text_field :title %>
|
33
|
+
</div>
|
34
|
+
<div class="field">
|
35
|
+
<%= f.label :short_desc %><br>
|
36
|
+
<%= f.text_area :short_desc %>
|
37
|
+
</div>
|
38
|
+
<div class="field">
|
39
|
+
<%= f.label :contact %><br>
|
40
|
+
<%= f.text_area :contact %>
|
41
|
+
</div>
|
42
|
+
<div class="field">
|
43
|
+
<%= f.label :long_desc %><br>
|
44
|
+
<%= f.text_area :long_desc %>
|
45
|
+
</div>
|
46
|
+
<div class="field">
|
47
|
+
<%= f.label :type_data %><br>
|
48
|
+
<%= f.text_area :type_data %>
|
49
|
+
</div>
|
50
|
+
<div class="field">
|
51
|
+
<%= f.label :latitude %><br>
|
52
|
+
<%= f.text_field :latitude %>
|
53
|
+
</div>
|
54
|
+
<div class="field">
|
55
|
+
<%= f.label :longitude %><br>
|
56
|
+
<%= f.text_field :longitude %>
|
57
|
+
</div>
|
58
|
+
<div class="field">
|
59
|
+
<%= f.label :openings %><br>
|
60
|
+
<%= f.text_area :openings %>
|
61
|
+
</div>
|
62
|
+
<div class="field">
|
63
|
+
<%= f.label :rates %><br>
|
64
|
+
<%= f.text_area :rates %>
|
65
|
+
</div>
|
66
|
+
<div class="field">
|
67
|
+
<%= f.label :reservation %><br>
|
68
|
+
<%= f.text_area :reservation %>
|
69
|
+
</div>
|
70
|
+
<div class="actions">
|
71
|
+
<%= f.submit %>
|
72
|
+
</div>
|
73
|
+
<% end %>
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<h1>Listing Objects</h1>
|
4
|
+
|
5
|
+
<table>
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th>Address</th>
|
9
|
+
<th>Apidae</th>
|
10
|
+
<th>Apidae type</th>
|
11
|
+
<th>Apidae subtype</th>
|
12
|
+
<th>Title</th>
|
13
|
+
<th>Short desc</th>
|
14
|
+
<th>Contact</th>
|
15
|
+
<th>Long desc</th>
|
16
|
+
<th>Type data</th>
|
17
|
+
<th>Latitude</th>
|
18
|
+
<th>Longitude</th>
|
19
|
+
<th>Openings</th>
|
20
|
+
<th>Rates</th>
|
21
|
+
<th>Reservation</th>
|
22
|
+
<th colspan="3"></th>
|
23
|
+
</tr>
|
24
|
+
</thead>
|
25
|
+
|
26
|
+
<tbody>
|
27
|
+
<% @objects.each do |object| %>
|
28
|
+
<tr>
|
29
|
+
<td><%= object.address %></td>
|
30
|
+
<td><%= object.apidae_id %></td>
|
31
|
+
<td><%= object.apidae_type %></td>
|
32
|
+
<td><%= object.apidae_subtype %></td>
|
33
|
+
<td><%= object.title %></td>
|
34
|
+
<td><%= object.short_desc %></td>
|
35
|
+
<td><%= object.contact %></td>
|
36
|
+
<td><%= object.long_desc %></td>
|
37
|
+
<td><%= object.type_data %></td>
|
38
|
+
<td><%= object.latitude %></td>
|
39
|
+
<td><%= object.longitude %></td>
|
40
|
+
<td><%= object.openings %></td>
|
41
|
+
<td><%= object.rates %></td>
|
42
|
+
<td><%= object.reservation %></td>
|
43
|
+
<td><%= link_to 'Show', object %></td>
|
44
|
+
<td><%= link_to 'Edit', edit_object_path(object) %></td>
|
45
|
+
<td><%= link_to 'Destroy', object, method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
46
|
+
</tr>
|
47
|
+
<% end %>
|
48
|
+
</tbody>
|
49
|
+
</table>
|
50
|
+
|
51
|
+
<br>
|
52
|
+
|
53
|
+
<%= link_to 'New Object', new_object_path %>
|
@@ -0,0 +1,74 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
<strong>Address:</strong>
|
5
|
+
<%= @object.address %>
|
6
|
+
</p>
|
7
|
+
|
8
|
+
<p>
|
9
|
+
<strong>Apidae:</strong>
|
10
|
+
<%= @object.apidae_id %>
|
11
|
+
</p>
|
12
|
+
|
13
|
+
<p>
|
14
|
+
<strong>Apidae type:</strong>
|
15
|
+
<%= @object.apidae_type %>
|
16
|
+
</p>
|
17
|
+
|
18
|
+
<p>
|
19
|
+
<strong>Apidae subtype:</strong>
|
20
|
+
<%= @object.apidae_subtype %>
|
21
|
+
</p>
|
22
|
+
|
23
|
+
<p>
|
24
|
+
<strong>Title:</strong>
|
25
|
+
<%= @object.title %>
|
26
|
+
</p>
|
27
|
+
|
28
|
+
<p>
|
29
|
+
<strong>Short desc:</strong>
|
30
|
+
<%= @object.short_desc %>
|
31
|
+
</p>
|
32
|
+
|
33
|
+
<p>
|
34
|
+
<strong>Contact:</strong>
|
35
|
+
<%= @object.contact %>
|
36
|
+
</p>
|
37
|
+
|
38
|
+
<p>
|
39
|
+
<strong>Long desc:</strong>
|
40
|
+
<%= @object.long_desc %>
|
41
|
+
</p>
|
42
|
+
|
43
|
+
<p>
|
44
|
+
<strong>Type data:</strong>
|
45
|
+
<%= @object.type_data %>
|
46
|
+
</p>
|
47
|
+
|
48
|
+
<p>
|
49
|
+
<strong>Latitude:</strong>
|
50
|
+
<%= @object.latitude %>
|
51
|
+
</p>
|
52
|
+
|
53
|
+
<p>
|
54
|
+
<strong>Longitude:</strong>
|
55
|
+
<%= @object.longitude %>
|
56
|
+
</p>
|
57
|
+
|
58
|
+
<p>
|
59
|
+
<strong>Openings:</strong>
|
60
|
+
<%= @object.openings %>
|
61
|
+
</p>
|
62
|
+
|
63
|
+
<p>
|
64
|
+
<strong>Rates:</strong>
|
65
|
+
<%= @object.rates %>
|
66
|
+
</p>
|
67
|
+
|
68
|
+
<p>
|
69
|
+
<strong>Reservation:</strong>
|
70
|
+
<%= @object.reservation %>
|
71
|
+
</p>
|
72
|
+
|
73
|
+
<%= link_to 'Edit', edit_object_path(@object) %> |
|
74
|
+
<%= link_to 'Back', objects_path %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<%= form_for(@selection) do |f| %>
|
2
|
+
<% if @selection.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@selection.errors.count, "error") %> prohibited this selection from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @selection.errors.full_messages.each do |message| %>
|
8
|
+
<li><%= message %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :label %><br>
|
16
|
+
<%= f.text_field :label %>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<%= f.label :reference %><br>
|
20
|
+
<%= f.text_field :reference %>
|
21
|
+
</div>
|
22
|
+
<div class="field">
|
23
|
+
<%= f.label :apidae_id %><br>
|
24
|
+
<%= f.number_field :apidae_id %>
|
25
|
+
</div>
|
26
|
+
<div class="actions">
|
27
|
+
<%= f.submit %>
|
28
|
+
</div>
|
29
|
+
<% end %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<h1>Listing Selections</h1>
|
4
|
+
|
5
|
+
<table>
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th>Label</th>
|
9
|
+
<th>Reference</th>
|
10
|
+
<th>Apidae</th>
|
11
|
+
<th colspan="3"></th>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
|
15
|
+
<tbody>
|
16
|
+
<% @selections.each do |selection| %>
|
17
|
+
<tr>
|
18
|
+
<td><%= selection.label %></td>
|
19
|
+
<td><%= selection.reference %></td>
|
20
|
+
<td><%= selection.apidae_id %></td>
|
21
|
+
<td><%= link_to 'Show', selection %></td>
|
22
|
+
<td><%= link_to 'Edit', edit_selection_path(selection) %></td>
|
23
|
+
<td><%= link_to 'Destroy', selection, method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
24
|
+
</tr>
|
25
|
+
<% end %>
|
26
|
+
</tbody>
|
27
|
+
</table>
|
28
|
+
|
29
|
+
<br>
|
30
|
+
|
31
|
+
<%= link_to 'New Selection', new_selection_path %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
<strong>Label:</strong>
|
5
|
+
<%= @selection.label %>
|
6
|
+
</p>
|
7
|
+
|
8
|
+
<p>
|
9
|
+
<strong>Reference:</strong>
|
10
|
+
<%= @selection.reference %>
|
11
|
+
</p>
|
12
|
+
|
13
|
+
<p>
|
14
|
+
<strong>Apidae:</strong>
|
15
|
+
<%= @selection.apidae_id %>
|
16
|
+
</p>
|
17
|
+
|
18
|
+
<%= link_to 'Edit', edit_selection_path(@selection) %> |
|
19
|
+
<%= link_to 'Back', selections_path %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Apidae</title>
|
5
|
+
<%= stylesheet_link_tag "apidae/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "apidae/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
data/config/routes.rb
ADDED