aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock3
-rw-r--r--app/assets/javascripts/export_tasks/new.js.coffee33
-rw-r--r--app/models/export_task.rb17
-rw-r--r--app/models/gtfs_export.rb12
-rw-r--r--app/views/export_tasks/new.html.erb24
-rw-r--r--spec/models/export_task_spec.rb8
-rw-r--r--spec/models/gtfs_export_spec.rb39
8 files changed, 103 insertions, 34 deletions
diff --git a/Gemfile b/Gemfile
index 1674d9a34..b225f8084 100644
--- a/Gemfile
+++ b/Gemfile
@@ -159,6 +159,7 @@ group :test, :development do
gem 'rb-fsevent', :require => RUBY_PLATFORM.include?('darwin') && 'rb-fsevent'
gem 'transpec'
gem 'database_cleaner'
+ gem 'shoulda-matchers'
end
group :production do
diff --git a/Gemfile.lock b/Gemfile.lock
index 54d781fd3..711760304 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -398,6 +398,8 @@ GEM
json (~> 1.7, >= 1.7.7)
rdoc (~> 4.0)
shellany (0.0.1)
+ shoulda-matchers (2.8.0)
+ activesupport (>= 3.0.0)
simple_form (3.1.0)
actionpack (~> 4.0)
activemodel (~> 4.0)
@@ -546,6 +548,7 @@ DEPENDENCIES
sass-rails (~> 4.0.3)
sawyer (~> 0.6.0)
sdoc (~> 0.4.0)
+ shoulda-matchers
simple_form (~> 3.1.0)
spring
sqlite3
diff --git a/app/assets/javascripts/export_tasks/new.js.coffee b/app/assets/javascripts/export_tasks/new.js.coffee
index 466486df6..f46711b6b 100644
--- a/app/assets/javascripts/export_tasks/new.js.coffee
+++ b/app/assets/javascripts/export_tasks/new.js.coffee
@@ -1,14 +1,31 @@
$(".export_tasks.new").ready ->
+ toggle_input = (li, enabled) ->
+ # Hide li block
+ li.toggle(enabled)
+ # Disable input/select to ignore it in POST data
+ li.find("input,select").attr("disabled", !enabled)
+
export_references_type_change = (event) ->
+ form = $(event.target).parents('form')
+
+ # Display the reference_ids input for the selected type
references_type = $(event.target).val()
+ for li in form.find("li.reference_ids")
+ li = $(li)
+ enabled = li.data("type") == references_type
+ toggle_input li, enabled
+
+ disabled_inputs = form.find("li.input").not("li.reference_ids").find("input:disabled,select:disabled")
+ for disabled_input in disabled_inputs
+ li = $(disabled_input).parents('li')
+ toggle_input li, true
+
+ hidden_attributes = $(event.target).find(":selected").data("hidden-attributes")
+ return unless hidden_attributes
- toggle_input = (li) ->
- enabled = (li.data("type") == references_type)
- # Hide li block
- li.toggle(enabled)
- # Disable textarea to ignore it in POST data
- li.find(".token-input").attr("disabled", !enabled)
-
- toggle_input($(li)) for li in $(event.target).parents('form').find("li.reference_ids")
+ hidden_attributes = hidden_attributes.split(',')
+ for attribute in hidden_attributes
+ li = form.find("##{form.attr('id')}_export_task_#{attribute}_input")
+ toggle_input li, false
$('form select[name="export_task[references_type]"]').change( export_references_type_change )
diff --git a/app/models/export_task.rb b/app/models/export_task.rb
index 59a2103aa..f02cb914e 100644
--- a/app/models/export_task.rb
+++ b/app/models/export_task.rb
@@ -30,8 +30,9 @@ class ExportTask
end
def period_validation
- st_date = Date.parse(start_date) unless start_date.blank?
- ed_date = Date.parse(end_date) unless end_date.blank?
+ st_date = start_date.is_a?(String) ? Date.parse(start_date) : start_date
+ ed_date = end_date.is_a?(String) ? Date.parse(end_date) : end_date
+
unless Chouette::TimeTable.start_validity_period.nil? || st_date.nil?
tt_st_date = Chouette::TimeTable.start_validity_period
errors.add(:start_date, ExportTask.human_attribute_name("start_date_greater_than" , {:tt_st_date => tt_st_date})) unless tt_st_date <= st_date
@@ -103,4 +104,16 @@ class ExportTask
Faraday::UploadIO.new(file, "application/json", "parameters.json")
end
+ def self.optional_attributes(references_type)
+ []
+ end
+
+ def optional_attributes
+ self.class.optional_attributes(references_type.to_s)
+ end
+
+ def optional_attribute?(attribute)
+ optional_attributes.include? attribute.to_sym
+ end
+
end
diff --git a/app/models/gtfs_export.rb b/app/models/gtfs_export.rb
index bef468c32..d0b9fc4f9 100644
--- a/app/models/gtfs_export.rb
+++ b/app/models/gtfs_export.rb
@@ -1,12 +1,12 @@
class GtfsExport < ExportTask
- validates_presence_of :time_zone
+ validates_presence_of :time_zone, unless: Proc.new { |e| e.optional_attribute? :time_zone }
attr_accessor :object_id_prefix, :time_zone
enumerize :references_type, in: %w( network line company group_of_line stop_area )
-
+
after_initialize :init_params
-
+
def init_params
if time_zone.nil?
self.time_zone = "Paris"
@@ -34,6 +34,12 @@ class GtfsExport < ExportTask
}
end
+ def self.optional_attributes(references_type)
+ super.tap do |optional_attributes|
+ optional_attributes.push :time_zone, :start_date, :end_date if references_type == "stop_area"
+ end
+ end
+
def data_format
"gtfs"
end
diff --git a/app/views/export_tasks/new.html.erb b/app/views/export_tasks/new.html.erb
index 1cdb4fa79..751bbc1a0 100644
--- a/app/views/export_tasks/new.html.erb
+++ b/app/views/export_tasks/new.html.erb
@@ -1,6 +1,6 @@
<%= title_tag t(".title") %>
<ul class="nav nav-pills">
- <% ExportTask.data_formats.each do |format| %>
+ <% ExportTask.data_formats.each do |format| %>
<li role="presentation"><a href="#<%= format %>" class='<%= @export_task.data_format == format ? "#{format} active" : "#{format}" %>' title='<%= t(:"enumerize.data_format_detail.#{format}")%>' data-toggle="tab"><%= t(:"enumerize.data_format.#{format}") %></a></li>
<% end %>
</ul>
@@ -8,23 +8,22 @@
<div class="tab-content">
<% @available_exports.each do |export_task| %>
<%= semantic_form_for [@referential, export_task], :as => :export_task, :url => referential_export_tasks_path(@referential), :namespace => export_task.data_format ,:html => { :id => "#{export_task.data_format}", :class => "tab-pane highlight"} do |form| %>
- <%= form.inputs do %>
+ <%= form.inputs do %>
<%= form.input :user_name, :as => :hidden, :input_html => { :value => current_user.name } %>
<%= form.input :user_id, :as => :hidden, :input_html => { :value => current_user.id } %>
<%= form.input :data_format, :as => :hidden %>
- <%= form.input :referential_id, :as => :hidden, :input_html => { :value => @referential.id } %>
- <%= form.input :name %>
- <%= form.input :references_type, :as => :select, :include_blank => t(".all") %>
+ <%= form.input :referential_id, :as => :hidden, :input_html => { :value => @referential.id } %>
+ <%= form.input :name %>
+ <%= form.input :references_type, as: :select, include_blank: t(".all"), collection: export_task.class.references_type.options.map { |o| o << {data:{"hidden-attributes": export_task.class.optional_attributes(o.second).join(',') }} } %>
<% export_task.class.references_types.each do |type| %>
- <%= form.input :reference_ids, :as => :reference_ids, :json => references_referential_export_tasks_path(@referential, :format => :json) + "?filter=#{type}", :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :id => "#{export_task.data_format}_#{type}_reference_ids", :input_html => { :id => "#{export_task.data_format}_#{type}_reference_ids" }, :wrapper_html => { :style => "display:none;", :id => "#{export_task.data_format}_#{type}", :"data-type" => "#{type}" } %>
- <% end %>
- <% end %>
+ <%= form.input :reference_ids, :as => :reference_ids, :json => references_referential_export_tasks_path(@referential, :format => :json) + "?filter=#{type}", :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :id => "#{export_task.data_format}_#{type}_reference_ids", :input_html => { :id => "#{export_task.data_format}_#{type}_reference_ids" }, :wrapper_html => { style: "display:none;", "data-type": type.to_s } %>
+ <% end %>
+ <% end %>
- <%= form.input :start_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.start_date")} %>
- <%= form.input :end_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.end_date")} %>
+ <%= form.input :start_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.start_date")} %>
+ <%= form.input :end_date, :as => :date_picker, :input_html => { :title => t("formtastic.titles.export_task.end_date")} %>
-
- <%= render partial: "fields_#{export_task.data_format}_export", :locals => { :form => form } %>
+ <%= render partial: "fields_#{export_task.data_format}_export", :locals => { :form => form } %>
<%= form.actions do %>
<%= form.action :submit, :as => :button , :label => t( 'formtastic.export' ) %>
@@ -36,4 +35,3 @@
</div>
<%= javascript_include_tag new_referential_export_task_path(@referential, :format => :js) %>
-
diff --git a/spec/models/export_task_spec.rb b/spec/models/export_task_spec.rb
new file mode 100644
index 000000000..1a52a6175
--- /dev/null
+++ b/spec/models/export_task_spec.rb
@@ -0,0 +1,8 @@
+require 'spec_helper'
+
+describe ExportTask, :type => :model do
+
+ it { should_not validate_presence_of(:start_date) }
+ it { should_not validate_presence_of(:end_date) }
+
+end
diff --git a/spec/models/gtfs_export_spec.rb b/spec/models/gtfs_export_spec.rb
index a5e5d0335..6051497a7 100644
--- a/spec/models/gtfs_export_spec.rb
+++ b/spec/models/gtfs_export_spec.rb
@@ -1,10 +1,33 @@
-# require 'spec_helper'
+require 'spec_helper'
-# describe GtfsExport, :type => :model do
+describe GtfsExport, :type => :model do
-# describe '#export_options' do
-# subject { super().export_options }
-# it { is_expected.to include(:format => :gtfs) }
-# end
-
-# end
+ describe "#time_zone" do
+
+ context "when exported data are not StopAreas" do
+
+ before do
+ subject.references_type = "network"
+ end
+
+ it "should be mandatory" do
+ subject.should validate_presence_of(:time_zone)
+ end
+
+ end
+
+ context "when export data are StopArea" do
+
+ before do
+ subject.references_type = "stop_area"
+ end
+
+ it "should be mandatory" do
+ subject.should_not validate_presence_of(:time_zone)
+ end
+
+ end
+
+ end
+
+end