aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichel Etienne2012-07-09 23:02:43 +0200
committerMichel Etienne2012-07-09 23:02:43 +0200
commitb7787611dcf9ab4b4ef9d3c430554ef036b2b1f9 (patch)
treee6ac68a990810a1dd2fa8809a4f399b28a8098c9
parent3cf46d6cbe8f490ad1338ae40bf4d1ec8fcbd2d4 (diff)
parent70b9756a1b3aadbdbb3ccd9cbb0503e524df53e1 (diff)
downloadchouette-core-b7787611dcf9ab4b4ef9d3c430554ef036b2b1f9.tar.bz2
Merge branch 'master' of chouette.dryade.priv:/srv/git/chouette2
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock1
-rw-r--r--app/assets/javascripts/exports.js.coffee19
-rw-r--r--app/assets/javascripts/imports.js.coffee4
-rw-r--r--app/assets/stylesheets/exports.css.scss15
-rw-r--r--app/assets/stylesheets/journey_patterns.css.scss4
-rw-r--r--app/controllers/exports_controller.rb17
-rw-r--r--app/controllers/stop_areas_controller.rb5
-rw-r--r--app/helpers/exports_helper.rb7
-rw-r--r--app/helpers/journey_patterns_helper.rb5
-rw-r--r--app/models/csv_export.rb7
-rw-r--r--app/models/export.rb26
-rw-r--r--app/models/gtfs_export.rb7
-rw-r--r--app/views/exports/new.html.erb12
-rw-r--r--app/views/exports/new.js.coffee2
-rw-r--r--app/views/journey_patterns/_form.html.erb2
-rw-r--r--app/views/journey_patterns/_journey_pattern.html.erb3
-rw-r--r--app/views/journey_patterns/show.html.erb1
-rw-r--r--app/views/vehicle_journeys/show.html.erb2
-rw-r--r--config/locales/en.yml3
-rw-r--r--config/locales/journey_patterns.yml6
-rw-r--r--config/locales/vehicle_journeys.yml2
-rw-r--r--spec/models/csv_export_spec.rb7
-rw-r--r--spec/models/export_spec.rb4
-rw-r--r--spec/models/gtfs_export_spec.rb7
-rw-r--r--spec/models/neptune_export_spec.rb7
-rw-r--r--spec/requests/networks_spec.rb2
27 files changed, 144 insertions, 34 deletions
diff --git a/Gemfile b/Gemfile
index 986e81a1d..f2c5fd3fc 100644
--- a/Gemfile
+++ b/Gemfile
@@ -68,6 +68,7 @@ group :test, :development do
gem "remarkable", "~> 4.0.0.alpha4"
gem "remarkable_activerecord", "~> 4.0.0.alpha4"
gem "shoulda-matchers"
+ gem 'rb-inotify', :platform => :ruby
end
group :test do
diff --git a/Gemfile.lock b/Gemfile.lock
index 3b408e69c..fb77065c6 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -371,6 +371,7 @@ DEPENDENCIES
pg (~> 0.11.0)
rails (= 3.2.6)
ransack
+ rb-inotify
remarkable (~> 4.0.0.alpha4)
remarkable_activerecord (~> 4.0.0.alpha4)
rspec
diff --git a/app/assets/javascripts/exports.js.coffee b/app/assets/javascripts/exports.js.coffee
index 025f9fcce..6de0d4692 100644
--- a/app/assets/javascripts/exports.js.coffee
+++ b/app/assets/javascripts/exports.js.coffee
@@ -1,18 +1,23 @@
-# Place all the behaviors and hooks related to the matching controller here.
-# All this logic will automatically be available in application.js.
-# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
-
jQuery ->
export_references_type_change = (event) ->
- references_type = $("select option:selected").attr("value")
+ references_type = $(event.target).val()
toggle_input = (li) ->
+ console.log(li)
enabled = (li.data("type") == references_type)
# Hide li block
li.toggle(enabled)
# Disable textarea to ignore it in POST data
li.find("textarea").attr("disabled", ! enabled)
- toggle_input($(li)) for li in $(".export_reference_ids")
+ toggle_input($(li)) for li in $(event.target).parents('form').find("li.export_reference_ids")
+
+ $('select[name="export[references_type]"]').change(export_references_type_change)
+
+ $('#export_type_submit').hide()
+
+ export_type_change = (event) ->
+ export_type = $("select option:selected").attr("value")
+ $(form).toggle($(form).is("#" + export_type + "_new")) for form in $('form.export')
- $('#export_references_type').change(export_references_type_change)
+ $('#export_type').change(export_type_change)
diff --git a/app/assets/javascripts/imports.js.coffee b/app/assets/javascripts/imports.js.coffee
index 7fb49e44d..ba7372e13 100644
--- a/app/assets/javascripts/imports.js.coffee
+++ b/app/assets/javascripts/imports.js.coffee
@@ -1,7 +1,3 @@
-# Place all the behaviors and hooks related to the matching controller here.
-# All this logic will automatically be available in application.js.
-# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
-
jQuery ->
$('#import_type_submit').hide()
diff --git a/app/assets/stylesheets/exports.css.scss b/app/assets/stylesheets/exports.css.scss
index cb8f23dc4..0af4af23a 100644
--- a/app/assets/stylesheets/exports.css.scss
+++ b/app/assets/stylesheets/exports.css.scss
@@ -39,3 +39,18 @@
}
}
}
+
+#workspace.exports.new form.new_export {
+ padding: 0.5em 0;
+ margin-top: -0.5em;
+ margin-bottom: 1em;
+
+ label {
+ display: block;
+ width: 25%;
+ float: left;
+ }
+ select {
+ width: 25%;
+ }
+} \ No newline at end of file
diff --git a/app/assets/stylesheets/journey_patterns.css.scss b/app/assets/stylesheets/journey_patterns.css.scss
index 7e9a747a5..5981c76b0 100644
--- a/app/assets/stylesheets/journey_patterns.css.scss
+++ b/app/assets/stylesheets/journey_patterns.css.scss
@@ -23,6 +23,7 @@
/* to create multi-column index */
width: 350px;
padding-right: 10px;
+ height: 60px;
float: left;
.name {
@@ -38,6 +39,9 @@
#route_color{ width: 100px;
color: white;
font-weight: bold;}
+ #journey_pattern_stop_point_ids_input fieldset .choices-group {
+ margin-top: 25px;
+ }
}
#workspace.journey_patterns.show
diff --git a/app/controllers/exports_controller.rb b/app/controllers/exports_controller.rb
index ee7e186b9..3b8fee566 100644
--- a/app/controllers/exports_controller.rb
+++ b/app/controllers/exports_controller.rb
@@ -5,8 +5,15 @@ class ExportsController < ChouetteController
belongs_to :referential
+ def new
+ new! do
+ available_exports
+ end
+ end
+
def create
create! do |success, failure|
+ available_exports
success.html { redirect_to referential_exports_path(@referential) }
end
end
@@ -28,6 +35,16 @@ class ExportsController < ChouetteController
protected
+ def available_exports
+ @available_exports ||= Export.types.collect do |type|
+ unless @export.type == type
+ @referential.exports.build :type => type
+ else
+ @export
+ end
+ end
+ end
+
# FIXME why #resource_id is nil ??
def build_resource
super.tap do |export|
diff --git a/app/controllers/stop_areas_controller.rb b/app/controllers/stop_areas_controller.rb
index 8d68fd1d5..8d55a49d5 100644
--- a/app/controllers/stop_areas_controller.rb
+++ b/app/controllers/stop_areas_controller.rb
@@ -58,11 +58,6 @@ class StopAreasController < ChouetteController
edit!
end
-# def update
-# puts :resource
-# update!
-# end
-
protected
alias_method :stop_area, :resource
diff --git a/app/helpers/exports_helper.rb b/app/helpers/exports_helper.rb
index 1b441f995..55bbafb72 100644
--- a/app/helpers/exports_helper.rb
+++ b/app/helpers/exports_helper.rb
@@ -21,6 +21,10 @@ module ExportsHelper
"export_reference_#{relation_name}_ids"
end
+ def input_class
+ "export_#{relation_name}_reference_ids"
+ end
+
end
def export_references_input(form, export, type)
@@ -34,7 +38,7 @@ module ExportsHelper
@form, @export, @type_helper = form, export, type_helper
end
- delegate :input_id, :type, :to => :type_helper
+ delegate :input_id, :type, :input_class, :to => :type_helper
def current?
export.references_type == type
@@ -56,6 +60,7 @@ module ExportsHelper
def input_html_options
{
:id => input_id,
+ :class => input_class,
:"data-pre" => ( references_map.to_json if current? ),
:disabled => (true unless current?)
}
diff --git a/app/helpers/journey_patterns_helper.rb b/app/helpers/journey_patterns_helper.rb
index d7b66db06..bcfb71cd1 100644
--- a/app/helpers/journey_patterns_helper.rb
+++ b/app/helpers/journey_patterns_helper.rb
@@ -8,5 +8,10 @@ module JourneyPatternsHelper
truncate(journey_pattern.name, :length => 30)
end
end
+ def stop_point_ids_label(journey_pattern)
+ return journey_pattern.human_attribute_name(:stop_point_ids) if journey_pattern.vehicle_journeys.empty?
+
+ "#{journey_pattern.human_attribute_name(:stop_point_ids)}. #{t('journey_patterns.form.warning', :count => journey_pattern.vehicle_journeys.count)}"
+ end
end
diff --git a/app/models/csv_export.rb b/app/models/csv_export.rb
new file mode 100644
index 000000000..4afacf81a
--- /dev/null
+++ b/app/models/csv_export.rb
@@ -0,0 +1,7 @@
+class CsvExport < Export
+
+ def export_options
+ super.merge(:format => :csv)
+ end
+
+end
diff --git a/app/models/export.rb b/app/models/export.rb
index a83d89958..d3a73b1ff 100644
--- a/app/models/export.rb
+++ b/app/models/export.rb
@@ -84,14 +84,6 @@ class Export < ActiveRecord::Base
log_messages.create :key => status
end
- def self.new(attributes = {}, options = {}, &block)
- if self == Export
- Object.const_get(attributes.delete(:type) || "NeptuneExport").new(attributes, options)
- else
- super
- end
- end
-
@@references_types = [ Chouette::Line, Chouette::Network, Chouette::Company ]
cattr_reader :references_types
@@ -143,4 +135,22 @@ class Export < ActiveRecord::Base
read_attribute :reference_ids
end
+ def self.types
+ unless Rails.env.development?
+ subclasses.map(&:to_s)
+ else
+ # FIXME
+ %w{NeptuneExport CsvExport GtfsExport}
+ end
+ end
+
+ def self.new(attributes = {}, options = {}, &block)
+ if self == Export
+ Object.const_get(attributes.delete(:type) || "NeptuneExport").new(attributes, options)
+ else
+ super
+ end
+ end
+
end
+
diff --git a/app/models/gtfs_export.rb b/app/models/gtfs_export.rb
new file mode 100644
index 000000000..8edad4b1f
--- /dev/null
+++ b/app/models/gtfs_export.rb
@@ -0,0 +1,7 @@
+class GtfsExport < Export
+
+ def export_options
+ super.merge(:format => :gtfs)
+ end
+
+end
diff --git a/app/views/exports/new.html.erb b/app/views/exports/new.html.erb
index 82409955b..36a37abc4 100644
--- a/app/views/exports/new.html.erb
+++ b/app/views/exports/new.html.erb
@@ -1,7 +1,16 @@
<%= title_tag t(".title") %>
-<%= semantic_form_for [@referential, @export], :as => :export, :url => referential_exports_path(@referential) do |form| %>
+<%= form_for([@referential, @export], :as => :export, :url => new_referential_export_path(@referential), :method => :get) do |form| %>
+ <%= form.label :type %>
+ <%= form.collection_select :type, Export.types, :to_s, :to_s %>
+ <%= form.submit "Sélectionner", :id => "export_type_submit" %>
+<% end %>
+
+<% @available_exports.each do |export| %>
+<%= semantic_form_for [@referential, export], :as => :export, :url => referential_exports_path(@referential), :html => { :id => "#{export.type}_new", :style => ('display: none' unless @export == export)} do |form| %>
<%= form.inputs do %>
+ <%= form.input :type, :as => :hidden %>
+
<%= form.input :references_type, :as => :select, :collection => Export.references_types.map { |c| [ c.model_name.human.capitalize.pluralize, c.name ] }, :include_blank => t(".all") %>
<% Export.references_types.each do |type| %>
@@ -14,5 +23,6 @@
<%= form.action :cancel, :as => :link %>
<% end %>
<% end %>
+<% end %>
<%= javascript_include_tag new_referential_export_path(@referential, :format => :js) %>
diff --git a/app/views/exports/new.js.coffee b/app/views/exports/new.js.coffee
index 198af96c8..4a1d59f92 100644
--- a/app/views/exports/new.js.coffee
+++ b/app/views/exports/new.js.coffee
@@ -1,4 +1,4 @@
jQuery ->
<% Export.references_types.each do |type| %>
- $("#<%= export_references_type(type).input_id %>" ).tokenInput('<%= references_referential_exports_path(@referential, :type => export_references_type(type).relation_name, :format => :json) %>', { prePopulate: $('#').data('pre'), minChars: 3 });
+ $("textarea.<%= export_references_type(type).input_class %>").tokenInput('<%= references_referential_exports_path(@referential, :type => export_references_type(type).relation_name, :format => :json) %>', { prePopulate: $('#').data('pre'), minChars: 3 });
<% end %>
diff --git a/app/views/journey_patterns/_form.html.erb b/app/views/journey_patterns/_form.html.erb
index ed68bb4c8..9d7454b72 100644
--- a/app/views/journey_patterns/_form.html.erb
+++ b/app/views/journey_patterns/_form.html.erb
@@ -4,7 +4,7 @@
<%= form.input :published_name %>
<%= form.input :registration_number %>
<%= form.input :comment %>
- <%= form.input :stop_point_ids, :as => :check_boxes, :collection => @route.stop_points.map { |s| [s.stop_area.name, s.id.to_s]}, :input_html => (@journey_pattern.new_record? ? { :checked => 'checked' }:{}) %>
+ <%= form.input :stop_point_ids, :label => stop_point_ids_label(@journey_pattern), :as => :check_boxes, :collection => @route.stop_points.map { |s| [s.stop_area.name, s.id.to_s]}, :input_html => (@journey_pattern.new_record? ? { :checked => 'checked' }:{}) %>
<%= form.input :objectid, :input_html => { :disabled => !@journey_pattern.new_record? } %>
<% end %>
diff --git a/app/views/journey_patterns/_journey_pattern.html.erb b/app/views/journey_patterns/_journey_pattern.html.erb
index 41a898888..bf0f84fb1 100644
--- a/app/views/journey_patterns/_journey_pattern.html.erb
+++ b/app/views/journey_patterns/_journey_pattern.html.erb
@@ -8,6 +8,9 @@
<%= t('.vehicle_journeys_count', :count => journey_pattern.vehicle_journeys.count) %>
<div class="actions">
<%= link_to t("actions.destroy"), referential_line_route_journey_pattern_path(@referential, @line, @route, journey_pattern), :method => :delete, :confirm => t('journey_patterns.actions.destroy_confirm'), :class => "remove" %>
+ <% if journey_pattern.vehicle_journeys.count > 0 %>
+ | <%= link_to t('journey_patterns.journey_pattern.vehicle_journey_at_stops'), referential_line_route_vehicle_journeys_path(@referential, @line, @route, :q => {:journey_pattern_id_eq => journey_pattern.id}), :class => "link" %>
+ <% end %>
</div>
</div>
<% end %>
diff --git a/app/views/journey_patterns/show.html.erb b/app/views/journey_patterns/show.html.erb
index 0b9676350..9962e4d8b 100644
--- a/app/views/journey_patterns/show.html.erb
+++ b/app/views/journey_patterns/show.html.erb
@@ -57,6 +57,7 @@
<ul class="actions">
<li><%= link_to t('journey_patterns.actions.edit'), edit_referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern), :class => "edit" %></li>
<li><%= link_to t('journey_patterns.actions.destroy'), referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern), :method => :delete, :confirm => t('journey_patterns.actions.destroy_confirm'), :class => "remove" %></li>
+ <li><%= link_to t('journey_patterns.journey_pattern.vehicle_journey_at_stops'), referential_line_route_vehicle_journeys_path(@referential, @line, @route, :q => {:journey_pattern_id_eq => @journey_pattern.id}), :class => "link" %></li>
</ul>
<% end %>
diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb
index 26c5b4070..83993e4d7 100644
--- a/app/views/vehicle_journeys/show.html.erb
+++ b/app/views/vehicle_journeys/show.html.erb
@@ -83,7 +83,7 @@
<li><%= link_to t('vehicle_journeys.actions.edit'), edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :class => "edit" %></li>
<li><%= link_to t('vehicle_journeys.actions.destroy'), referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :method => :delete, :confirm => t('vehicle_journeys.actions.destroy_confirm'), :class => "remove" %></li>
</ul>
- <h3>Cloner la course</h3>
+ <h3><%= t('.translation_form') %></h3>
<div id="compact_form" >
<%= semantic_form_for [@referential, @line, @route, @vehicle_journey, VehicleTranslation.new] do |form| %>
<%= form.inputs do %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 179c14ca5..55696eef5 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -3,3 +3,6 @@
en:
hello: "Hello world"
+ time:
+ formats:
+ hour: "%H:%M"
diff --git a/config/locales/journey_patterns.yml b/config/locales/journey_patterns.yml
index 86257f784..301c4b7e7 100644
--- a/config/locales/journey_patterns.yml
+++ b/config/locales/journey_patterns.yml
@@ -4,6 +4,7 @@ en:
from_to: "From '%{departure}' to '%{arrival}'"
stop_count: "%{count}/%{route_count} stops"
vehicle_journeys_count: "Vehicle journeys: %{count}"
+ vehicle_journey_at_stops: "Vehicle journey at stops"
actions:
new: Add a new journey_pattern
edit: Edit this journey pattern
@@ -18,6 +19,8 @@ en:
stop_points: "Stop point on journey pattern list"
index:
title: Journey Patterns
+ form:
+ warning: "Be careful, selection is also applied to the %{count} vehicle journeys associated to this journey pattern"
activerecord:
models:
journey_pattern:
@@ -43,6 +46,7 @@ fr:
from_to: "De '%{departure}' à '%{arrival}'"
stop_count: "%{count}/%{route_count} arrêts"
vehicle_journeys_count: "Courses: %{count}"
+ vehicle_journey_at_stops: "Horaires des courses"
actions:
new: Ajouter une mission
edit: Modifier cette mission
@@ -57,6 +61,8 @@ fr:
stop_points: "Liste des arrêts de la mission"
index:
title: Missions
+ form:
+ warning: "Attention, la sélection s'applique aussi aux %{count} courses de la mission"
activerecord:
models:
journey_pattern:
diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml
index bc6a05427..c52dbb62a 100644
--- a/config/locales/vehicle_journeys.yml
+++ b/config/locales/vehicle_journeys.yml
@@ -31,6 +31,7 @@ en:
time_tables: Calendars list
bounding: From %{start} to %{end}
validation: Clone
+ translation_form: Vehicle journey translations
index:
title: Vehicle journeys on route %{route}
vehicle_journeys: "Departure's times"
@@ -104,6 +105,7 @@ fr:
time_tables: Liste des calendriers
bounding: De %{start} à %{end}
validation: Cloner
+ translation_form: Cloner la course
index:
title: "Courses de la séquence d'arrêts %{route}"
timeless: Courses sans horaire
diff --git a/spec/models/csv_export_spec.rb b/spec/models/csv_export_spec.rb
new file mode 100644
index 000000000..8c80ab8da
--- /dev/null
+++ b/spec/models/csv_export_spec.rb
@@ -0,0 +1,7 @@
+require 'spec_helper'
+
+describe CsvExport do
+
+ its(:export_options) { should include(:format => :csv) }
+
+end
diff --git a/spec/models/export_spec.rb b/spec/models/export_spec.rb
index 10fcf4b69..c59689f4a 100644
--- a/spec/models/export_spec.rb
+++ b/spec/models/export_spec.rb
@@ -38,7 +38,6 @@ describe Export do
describe "#options" do
it "should be empty by default" do
- puts subject.options.class
subject.options.should be_empty
end
@@ -47,8 +46,7 @@ describe Export do
describe ".types" do
it "should return available Export implementations" do
- pending
- Export.types.should =~ %w{NeptuneExport}
+ Export.types.should =~ %w{NeptuneExport CsvExport GtfsExport}
end
end
diff --git a/spec/models/gtfs_export_spec.rb b/spec/models/gtfs_export_spec.rb
new file mode 100644
index 000000000..4bc587f14
--- /dev/null
+++ b/spec/models/gtfs_export_spec.rb
@@ -0,0 +1,7 @@
+require 'spec_helper'
+
+describe GtfsExport do
+
+ its(:export_options) { should include(:format => :gtfs) }
+
+end
diff --git a/spec/models/neptune_export_spec.rb b/spec/models/neptune_export_spec.rb
new file mode 100644
index 000000000..1b4f4afa9
--- /dev/null
+++ b/spec/models/neptune_export_spec.rb
@@ -0,0 +1,7 @@
+require 'spec_helper'
+
+describe NeptuneExport do
+
+ its(:export_options) { should include(:format => :neptune) }
+
+end
diff --git a/spec/requests/networks_spec.rb b/spec/requests/networks_spec.rb
index f73724a48..ff020dca6 100644
--- a/spec/requests/networks_spec.rb
+++ b/spec/requests/networks_spec.rb
@@ -73,7 +73,6 @@ describe "Networks" do
# subject.stub(:stop_areas).and_return(Array.new(2) { Factory(:stop_area) })
# visit referential_networks_path(referential)
- # puts page.body
# click_link "#{networks.first.name}"
# click_link "Modifier ce réseau"
# fill_in "Nom", :with => "Network 1"
@@ -81,7 +80,6 @@ describe "Networks" do
# click_button("Modifier Réseau")
# page.should have_content("Network 1")
# visit referential_network_path(referential, subject)
- # puts page.body.inspect
# click_link "Supprimer ce réseau"
# page.evaluate_script('window.confirm = function() { return true; }')
# click_button "Valider"