From c203a4b6d3d07928ad4ef41116d38873b9ac5820 Mon Sep 17 00:00:00 2001 From: Alban Peignier Date: Wed, 23 May 2012 18:28:43 +0200 Subject: Add jruby-rack-worker to run workers. Fixes #37 --- app/models/import.rb | 2 +- app/models/referential.rb | 37 ++++--------------------------------- 2 files changed, 5 insertions(+), 34 deletions(-) (limited to 'app') diff --git a/app/models/import.rb b/app/models/import.rb index fd3fb139d..ec6caa660 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -26,7 +26,7 @@ class Import < ActiveRecord::Base self.status ||= "pending" end - after_create :import + after_create :delayed_import def delayed_import save_resources delay.import diff --git a/app/models/referential.rb b/app/models/referential.rb index 84640e43c..d7c5bba7e 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -34,44 +34,15 @@ class Referential < ActiveRecord::Base self end - before_create :prepare + before_create :create_schema before_destroy :destroy_schema - attr_accessor :resources - attr_accessor :loader - - def loader - @loader ||= ::Chouette::Loader.new(slug) - end + after_create :import_resources - def prepare - if resources - import_resources - else - create_schema - end - end - - def with_original_filename - Dir.mktmpdir do |tmp_dir| - tmp_link = File.join(tmp_dir, resources.original_filename) - FileUtils.ln_s resources.path, tmp_link - yield tmp_link - end - end + attr_accessor :resources def import_resources - # Apartment::Database.create create tables - loader.create - begin - with_original_filename do |file| - # chouette-command checks the file extension (and requires .zip) :( - loader.import file - end - rescue => e - loader.drop - raise e - end + imports.create(:resources => resources) if resources end def create_schema -- cgit v1.2.3 From 244de985c6c00b6385e9af47f9dec08de1eec6c5 Mon Sep 17 00:00:00 2001 From: Alban Peignier Date: Tue, 29 May 2012 08:57:01 +0200 Subject: Include html_safe an ready? in ApplicationMap#to_html --- app/maps/application_map.rb | 4 +++- app/maps/line_map.rb | 4 ++++ app/maps/network_map.rb | 4 ++++ app/views/lines/show.html.erb | 2 +- app/views/networks/show.html.erb | 2 +- 5 files changed, 13 insertions(+), 3 deletions(-) (limited to 'app') diff --git a/app/maps/application_map.rb b/app/maps/application_map.rb index a4d8a84ab..dffb2501c 100644 --- a/app/maps/application_map.rb +++ b/app/maps/application_map.rb @@ -34,7 +34,9 @@ class ApplicationMap end def to_html(options = {}) - "
#{map.to_html(options)}" + if not respond_to?(:ready?) or ready? + " #{map.to_html(options)}".html_safe + end end def kml diff --git a/app/maps/line_map.rb b/app/maps/line_map.rb index 128b98dd2..a7a9f892d 100644 --- a/app/maps/line_map.rb +++ b/app/maps/line_map.rb @@ -29,4 +29,8 @@ class LineMap < ApplicationMap end + def ready? + Chouette::StopArea.bounds.present? + end + end diff --git a/app/maps/network_map.rb b/app/maps/network_map.rb index cedabdf6e..35283a48f 100644 --- a/app/maps/network_map.rb +++ b/app/maps/network_map.rb @@ -28,4 +28,8 @@ class NetworkMap < ApplicationMap end + def ready? + Chouette::StopArea.bounds.present? + end + end diff --git a/app/views/lines/show.html.erb b/app/views/lines/show.html.erb index 4e7217384..c487f8616 100644 --- a/app/views/lines/show.html.erb +++ b/app/views/lines/show.html.erb @@ -1,7 +1,7 @@ <%= title_tag t('lines.show.title', :line => @line.name ) %>diff --git a/app/views/networks/show.html.erb b/app/views/networks/show.html.erb index b03347ccf..112fb5769 100644 --- a/app/views/networks/show.html.erb +++ b/app/views/networks/show.html.erb @@ -1,7 +1,7 @@ <%= title_tag t('networks.show.title', :network => @network.name )%>
-- cgit v1.2.3 From 5266239f66247c9f5a391ab6569a8fb8021279d8 Mon Sep 17 00:00:00 2001 From: Alban Peignier Date: Tue, 29 May 2012 08:58:06 +0200 Subject: Manage multiple selection to destroy several lines. Refs #25 --- .../javascripts/multiple_selection.js.coffee | 22 +++++++++++++++++++--- app/assets/stylesheets/lines.css.scss | 1 + app/assets/stylesheets/multiple_selection.scss | 2 ++ app/controllers/lines_controller.rb | 7 +++++++ app/views/lines/_line.erb | 4 ++-- app/views/lines/index.html.erb | 2 +- 6 files changed, 32 insertions(+), 6 deletions(-) (limited to 'app') diff --git a/app/assets/javascripts/multiple_selection.js.coffee b/app/assets/javascripts/multiple_selection.js.coffee index 0353a2755..1ff473c4d 100644 --- a/app/assets/javascripts/multiple_selection.js.coffee +++ b/app/assets/javascripts/multiple_selection.js.coffee @@ -27,11 +27,27 @@ jQuery -> $('#multiple_selection_menu a.deselect_all').click(deselect_all) - disabled_action = (event) -> + handle_multiple_action = (event) -> event.preventDefault() - alert("Fonction activee au prochain milestone") + link = $(event.target) - $('#multiple_selection_menu .actions a').click(disabled_action) + href = link.attr("href") + method = link.data('multiple-method') + csrf_token = $('meta[name=csrf-token]').attr('content') + csrf_param = $('meta[name=csrf-param]').attr('content') + form = $('
') + target = link.attr('target') + metadata_input = '' + if csrf_param? and csrf_token? + metadata_input += '' + form.append($(input).clone()) for input in $('input[type=checkbox].multiple_selection:checked') + + form.attr('target', target) if target? + + form.hide().append(metadata_input).appendTo('body') + form.submit() + + $('#multiple_selection_menu .actions a.remove').click(handle_multiple_action) diff --git a/app/assets/stylesheets/lines.css.scss b/app/assets/stylesheets/lines.css.scss index c5370611c..07ed34e5b 100644 --- a/app/assets/stylesheets/lines.css.scss +++ b/app/assets/stylesheets/lines.css.scss @@ -24,6 +24,7 @@ width: 350px; float: left; padding-right: 10px; + position: relative; .color { width: 64px; diff --git a/app/assets/stylesheets/multiple_selection.scss b/app/assets/stylesheets/multiple_selection.scss index e7f64857f..f3792d902 100644 --- a/app/assets/stylesheets/multiple_selection.scss +++ b/app/assets/stylesheets/multiple_selection.scss @@ -1,5 +1,7 @@ input[type=checkbox].multiple_selection { margin-left: 25px; + position: absolute; + top: 50px; } #multiple_selection_menu { diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb index 42a126169..e14baf211 100644 --- a/app/controllers/lines_controller.rb +++ b/app/controllers/lines_controller.rb @@ -12,6 +12,13 @@ class LinesController < ChouetteController show! end + def destroy_all + objects = + get_collection_ivar || set_collection_ivar(end_of_association_chain.where(:id => params[:ids])) + objects.destroy_all + respond_with(objects, :location => smart_collection_url) + end + protected def collection diff --git a/app/views/lines/_line.erb b/app/views/lines/_line.erb index 5405bcbb5..3565966fb 100644 --- a/app/views/lines/_line.erb +++ b/app/views/lines/_line.erb @@ -2,11 +2,11 @@ <%= link_to([@referential, line], :class => "preview", :title => "Ligne #{line.number}") do %>diff --git a/app/views/routes/show.html.erb b/app/views/routes/show.html.erb index f248ba595..94da5ea48 100644 --- a/app/views/routes/show.html.erb +++ b/app/views/routes/show.html.erb @@ -1,7 +1,7 @@ <%= title_tag t('routes.show.title', :route => @route.name, :line => @route.line.name ) %>
diff --git a/app/views/stop_areas/edit.html.erb b/app/views/stop_areas/edit.html.erb index be09d94e0..1ec77056d 100644 --- a/app/views/stop_areas/edit.html.erb +++ b/app/views/stop_areas/edit.html.erb @@ -1,5 +1,5 @@ <%= title_tag t('stop_areas.edit.title', :stop_area => @stop_area.name ) %> -<%= @map.to_html.html_safe %> +<%= @map.to_html %> <%= render "form" %> diff --git a/app/views/stop_areas/show.html.erb b/app/views/stop_areas/show.html.erb index afaa5830a..9354ed96e 100644 --- a/app/views/stop_areas/show.html.erb +++ b/app/views/stop_areas/show.html.erb @@ -1,7 +1,7 @@ <%= title_tag t('stop_areas.show.title', :stop_area => @stop_area.name ) %>
-- cgit v1.2.3 From 7082d66ec221aee194d64a17ab5d21eb2955f419 Mon Sep 17 00:00:00 2001 From: Alban Peignier Date: Wed, 30 May 2012 17:23:18 +0200 Subject: Create and display ImportLogMessages. Refs #39 --- app/assets/images/severity-error.png | Bin 0 -> 1857 bytes app/assets/images/severity-info.png | Bin 0 -> 1443 bytes app/assets/images/severity-warning.png | Bin 0 -> 1445 bytes app/assets/stylesheets/imports.css.scss | 12 ++++++++++ app/models/import.rb | 8 +++++++ app/models/import_log_message.rb | 36 ++++++++++++++++++++++++++++++ app/views/imports/_import.erb | 4 ++-- app/views/imports/show.html.erb | 38 ++++++++++++++++++++++++++++++++ 8 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 app/assets/images/severity-error.png create mode 100644 app/assets/images/severity-info.png create mode 100644 app/assets/images/severity-warning.png create mode 100644 app/models/import_log_message.rb create mode 100644 app/views/imports/show.html.erb (limited to 'app') diff --git a/app/assets/images/severity-error.png b/app/assets/images/severity-error.png new file mode 100644 index 000000000..516a4d61a Binary files /dev/null and b/app/assets/images/severity-error.png differ diff --git a/app/assets/images/severity-info.png b/app/assets/images/severity-info.png new file mode 100644 index 000000000..740170cb7 Binary files /dev/null and b/app/assets/images/severity-info.png differ diff --git a/app/assets/images/severity-warning.png b/app/assets/images/severity-warning.png new file mode 100644 index 000000000..661327276 Binary files /dev/null and b/app/assets/images/severity-warning.png differ diff --git a/app/assets/stylesheets/imports.css.scss b/app/assets/stylesheets/imports.css.scss index dda468465..bdc3a65cd 100644 --- a/app/assets/stylesheets/imports.css.scss +++ b/app/assets/stylesheets/imports.css.scss @@ -23,3 +23,15 @@ padding-right: 10px; } } + +#workspace.imports.show { + table { + th { + text-align: center; + font-style: italic; + } + td.message, td.created_at, td.position { + padding: 0 20px; + } + } +} \ No newline at end of file diff --git a/app/models/import.rb b/app/models/import.rb index ec6caa660..64b5b5624 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -9,6 +9,8 @@ class Import < ActiveRecord::Base attr_accessor :resources attr_accessor :loader + has_many :log_messages, :class_name => "ImportLogMessage", :order => :position, :dependent => :destroy + def loader @loader ||= ::Chouette::Loader.new(referential.slug) end @@ -49,8 +51,13 @@ class Import < ActiveRecord::Base "#{root}/#{id}.zip" end + def name + "#{Import.model_name.humanize} #{id}" + end + def import begin + log_messages.create :key => :started if resources with_original_filename do |file| # chouette-command checks the file extension (and requires .zip) :( @@ -64,6 +71,7 @@ class Import < ActiveRecord::Base Rails.logger.error "Import #{id} failed : #{e}, #{e.backtrace}" update_attribute :status, "failed" end + log_messages.create :key => status end end diff --git a/app/models/import_log_message.rb b/app/models/import_log_message.rb new file mode 100644 index 000000000..699c9603d --- /dev/null +++ b/app/models/import_log_message.rb @@ -0,0 +1,36 @@ +class ImportLogMessage < ActiveRecord::Base + belongs_to :import + acts_as_list :scope => :import + + validates_presence_of :key + validates_inclusion_of :severity, :in => %w{info warning error} + + def arguments=(arguments) + write_attribute :arguments, (arguments.to_json if arguments.present?) + end + + def arguments + @decoded_arguments ||= + begin + if (stored_arguments = raw_attributes).present? + ActiveSupport::JSON.decode stored_arguments + else + {} + end + end + end + + def raw_attributes + read_attribute(:arguments) + end + + before_validation :define_default_attributes, :on => :create + def define_default_attributes + self.severity ||= "info" + end + + def full_message + I18n.translate key, arguments.symbolize_keys.merge(:scope => "import_log_messages.messages") + end + +end diff --git a/app/views/imports/_import.erb b/app/views/imports/_import.erb index 643b3f18b..6ccd5bb23 100644 --- a/app/views/imports/_import.erb +++ b/app/views/imports/_import.erb @@ -1,8 +1,8 @@ <%= div_for(import) do %> - <%= link_to("#", :class => "preview") do %> + <%= link_to(referential_import_path(@referential, import), :class => "preview") do %> <%= image_tag "import-#{import.status}.png" %> <% end %> - <%= Import.model_name.humanize %> <%= import.id %> + <%= link_to(import.name, referential_import_path(@referential, import)) %>
+ + <%= l @import.created_at %> +
++ + <%= t @import.status, :scope => "imports.statuses" %> +
+| + | <%= ImportLogMessage.human_attribute_name(:created_at) %> | +<%= ImportLogMessage.human_attribute_name(:position) %> | +<%= ImportLogMessage.human_attribute_name(:full_message) %> | +
|---|---|---|---|
| <%= image_tag "severity-#{message.severity}.png", :alt => t(message.severity, :scope => "import_log_messages.severities") %> | +<%= l message.created_at, :format => :short %> | +<%= message.position %> | + +