aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Florisson2013-07-12 16:28:48 +0200
committerMarc Florisson2013-07-12 16:28:48 +0200
commit2bccbc4d0c4e732a2af744d975f35c9d8f7bfd28 (patch)
tree9444bb0b785b83b77191a08846465329edb59208
parent33db1788b37784c54e3db0be9fccdeed384ede89 (diff)
downloadchouette-core-2bccbc4d0c4e732a2af744d975f35c9d8f7bfd28.tar.bz2
add kml export reporting, add journey_patterns in kml export
-rw-r--r--Gemfile4
-rw-r--r--Gemfile.lock17
-rw-r--r--app/exporters/chouette/kml/access_link_exporter.rb14
-rw-r--r--app/exporters/chouette/kml/access_point_exporter.rb14
-rw-r--r--app/exporters/chouette/kml/connection_link_exporter.rb14
-rw-r--r--app/exporters/chouette/kml/exporter.rb53
-rw-r--r--app/exporters/chouette/kml/journey_pattern_exporter.rb33
-rw-r--r--app/exporters/chouette/kml/line_exporter.rb16
-rw-r--r--app/exporters/chouette/kml/route_exporter.rb16
-rw-r--r--app/exporters/chouette/kml/stop_area_exporter.rb7
-rw-r--r--app/models/export.rb6
-rw-r--r--app/models/kml_export.rb2
-rw-r--r--app/views/api/kml/journey_patterns/show.kml.erb42
-rw-r--r--config/locales/exports.yml20
-rw-r--r--spec/exporters/chouette/kml/exporter_spec.rb3
-rw-r--r--spec/factories.rb4
16 files changed, 202 insertions, 63 deletions
diff --git a/Gemfile b/Gemfile
index 3a171abad..f145cfdf8 100644
--- a/Gemfile
+++ b/Gemfile
@@ -47,8 +47,8 @@ gem 'inherited_resources'
gem 'will_paginate', '~> 3.0'
gem 'ransack'
gem 'squeel'
-gem 'ninoxe', :git => 'git://github.com/dryade/ninoxe.git'
-#gem 'ninoxe', '0.1.2'
+#gem 'ninoxe', :git => 'git://github.com/dryade/ninoxe.git'
+gem 'ninoxe', '0.1.3'
gem 'acts_as_list', '0.1.6'
gem "acts_as_tree-1.8", '1.1.0', :require => "acts_as_tree"
diff --git a/Gemfile.lock b/Gemfile.lock
index 9e68bc916..889847519 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -13,16 +13,6 @@ GIT
nokogiri (= 1.5.10)
rgeo (= 0.3.20)
-GIT
- remote: git://github.com/dryade/ninoxe.git
- revision: ae8291fe90073bf5f00fe26526c3aa0abc0b602b
- specs:
- ninoxe (0.1.2)
- activerecord (~> 3.1)
- acts_as_list (~> 0.1.6)
- foreigner (= 1.4.0)
- georuby-ext (= 0.0.2)
-
GEM
remote: http://rubygems.org/
specs:
@@ -196,6 +186,11 @@ GEM
net-ssh (2.6.2)
net-ssh-gateway (1.1.0)
net-ssh (>= 1.99.1)
+ ninoxe (0.1.3)
+ activerecord (~> 3.1)
+ acts_as_list (~> 0.1.6)
+ foreigner (= 1.4.0)
+ georuby-ext (= 0.0.2)
nokogiri (1.5.10)
nokogiri (1.5.10-java)
open4 (1.3.0)
@@ -360,7 +355,7 @@ DEPENDENCIES
launchy
map_layers (= 0.0.4)
modernizr-rails (~> 2.0.6)
- ninoxe!
+ ninoxe (= 0.1.3)
pg (~> 0.11.0)
rabl
rails (= 3.2.6)
diff --git a/app/exporters/chouette/kml/access_link_exporter.rb b/app/exporters/chouette/kml/access_link_exporter.rb
index 0a02443df..1cd9b5bbd 100644
--- a/app/exporters/chouette/kml/access_link_exporter.rb
+++ b/app/exporters/chouette/kml/access_link_exporter.rb
@@ -1,9 +1,10 @@
class Chouette::Kml::AccessLinkExporter
include ERB::Util
- attr_accessor :access_links, :template
+ attr_accessor :access_links, :directory, :template
- def initialize(access_links)
+ def initialize(access_links,directory)
@access_links = access_links
+ @directory = directory
@template = File.open('app/views/api/kml/access_links/index.kml.erb' ){ |f| f.read }
end
@@ -19,7 +20,14 @@ class Chouette::Kml::AccessLinkExporter
".kml"
end
- def save(directory, name = nil)
+ def self.save( models, directory, kml_export)
+ self.new( models, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ACCES_LINK_COUNT", :arguments => {"0" => models.size})
+ end
+
+ def save( name = nil)
File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f|
f.write(render)
end if access_links.present?
diff --git a/app/exporters/chouette/kml/access_point_exporter.rb b/app/exporters/chouette/kml/access_point_exporter.rb
index 17791f95f..cc761f250 100644
--- a/app/exporters/chouette/kml/access_point_exporter.rb
+++ b/app/exporters/chouette/kml/access_point_exporter.rb
@@ -1,9 +1,10 @@
class Chouette::Kml::AccessPointExporter
include ERB::Util
- attr_accessor :access_points, :template
+ attr_accessor :access_points, :directory, :template
- def initialize(access_points)
+ def initialize(access_points,directory)
@access_points = access_points
+ @directory = directory
@template = File.open('app/views/api/kml/access_points/index.kml.erb' ){ |f| f.read }
end
@@ -19,7 +20,14 @@ class Chouette::Kml::AccessPointExporter
".kml"
end
- def save(directory, name = nil)
+ def self.save( models, directory, kml_export)
+ self.new( models, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ACCES_POINT_COUNT", :arguments => {"0" => models.size})
+ end
+
+ def save( name = nil)
File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f|
f.write(render)
end if access_points.present?
diff --git a/app/exporters/chouette/kml/connection_link_exporter.rb b/app/exporters/chouette/kml/connection_link_exporter.rb
index dba998a21..16a93e5e3 100644
--- a/app/exporters/chouette/kml/connection_link_exporter.rb
+++ b/app/exporters/chouette/kml/connection_link_exporter.rb
@@ -1,9 +1,10 @@
class Chouette::Kml::ConnectionLinkExporter
include ERB::Util
- attr_accessor :connection_links, :template
+ attr_accessor :connection_links, :directory, :template
- def initialize(connection_links)
+ def initialize(connection_links,directory)
@connection_links = connection_links
+ @directory = directory
@template = File.open('app/views/api/kml/connection_links/index.kml.erb' ){ |f| f.read }
end
@@ -19,7 +20,14 @@ class Chouette::Kml::ConnectionLinkExporter
".kml"
end
- def save(directory, name = nil)
+ def self.save( models, directory, kml_export)
+ self.new( models, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|CONNECTION_LINK_COUNT", :arguments => {"0" => models.size})
+ end
+
+ def save( name = nil)
File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f|
f.write(render)
end if connection_links.present?
diff --git a/app/exporters/chouette/kml/exporter.rb b/app/exporters/chouette/kml/exporter.rb
index 2f1ca2cf3..5c488883c 100644
--- a/app/exporters/chouette/kml/exporter.rb
+++ b/app/exporters/chouette/kml/exporter.rb
@@ -1,9 +1,11 @@
class Chouette::Kml::Exporter
attr_reader :referential
+ attr_reader :kml_export
- def initialize(referential)
+ def initialize(referential, kml_export)
@referential = referential
+ @kml_export = kml_export
end
def lines(object, ids)
@@ -24,57 +26,52 @@ class Chouette::Kml::Exporter
FileUtils.rm(zip_file_path) if File.exists? zip_file_path
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT", :arguments => {"0" => "KML"})
+
Dir.mktmpdir(nil, "/tmp"){ |temp_dir|
lines_collected = lines( options[:o], options[:id] )
- lines_collected.each do |line|
- Chouette::Kml::LineExporter.new( line ).tap do |line_exporter|
- line_exporter.save(temp_dir)
- end
- end
+ Chouette::Kml::LineExporter.save( lines_collected, temp_dir, kml_export)
routes = lines_collected.collect(&:routes).flatten.uniq
- routes.each do |route|
- Chouette::Kml::RouteExporter.new( route ).tap do |route_exporter|
- route_exporter.save(temp_dir)
- end
- end
+ Chouette::Kml::RouteExporter.save( routes, temp_dir, kml_export)
+
+ journey_patterns = routes.map { |r| r.journey_patterns}.flatten
+ Chouette::Kml::JourneyPatternExporter.save( journey_patterns, temp_dir, kml_export)
stop_areas = lines_collected.collect(&:stop_areas).flatten.uniq
- Chouette::Kml::StopAreaExporter.new( stop_areas ).tap do |stop_area_exporter|
- stop_area_exporter.save(temp_dir, "stop_areas")
+ Chouette::Kml::StopAreaExporter.new( stop_areas, temp_dir ).tap do |stop_area_exporter|
+ stop_area_exporter.save( "stop_areas")
end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|QUAY_AND_BOARDING_POSITION_COUNT", :arguments => {"0" => stop_areas.size})
commercial_stop_areas = lines_collected.collect(&:commercial_stop_areas).flatten.uniq
- Chouette::Kml::StopAreaExporter.new( commercial_stop_areas ).tap do |stop_area_exporter|
- stop_area_exporter.save(temp_dir, "commercial_stop_areas")
+ Chouette::Kml::StopAreaExporter.new( commercial_stop_areas, temp_dir ).tap do |stop_area_exporter|
+ stop_area_exporter.save( "commercial_stop_areas")
end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|COMMERCIAL_COUNT", :arguments => {"0" => commercial_stop_areas.size})
if(options[:o].present?) # Add all objects
stop_places = referential.stop_areas.stop_place
- Chouette::Kml::StopAreaExporter.new( stop_places ).tap do |stop_area_exporter|
- stop_area_exporter.save(temp_dir, "stop_places")
+ Chouette::Kml::StopAreaExporter.new( stop_places, temp_dir ).tap do |stop_area_exporter|
+ stop_area_exporter.save( "stop_places")
end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|STOP_PLACE_COUNT", :arguments => {"0" => stop_places.size})
itls = referential.stop_areas.itl
- Chouette::Kml::StopAreaExporter.new( itls ).tap do |stop_area_exporter|
- stop_area_exporter.save(temp_dir, "itls")
+ Chouette::Kml::StopAreaExporter.new( itls, temp_dir ).tap do |stop_area_exporter|
+ stop_area_exporter.save( "itls")
end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ITL_COUNT", :arguments => {"0" => itls.size})
connection_links = referential.connection_links
- Chouette::Kml::ConnectionLinkExporter.new( connection_links ).tap do |connection_link_exporter|
- connection_link_exporter.save(temp_dir)
- end
+ Chouette::Kml::ConnectionLinkExporter.save( connection_links, temp_dir, kml_export)
access_links = referential.access_links
- Chouette::Kml::AccessLinkExporter.new( access_links ).tap do |access_link_exporter|
- access_link_exporter.save(temp_dir)
- end
+ Chouette::Kml::AccessLinkExporter.save(access_links, temp_dir, kml_export)
access_points = referential.access_points
- Chouette::Kml::AccessPointExporter.new( access_points ).tap do |access_point_exporter|
- access_point_exporter.save(temp_dir)
- end
+ Chouette::Kml::AccessPointExporter.save(access_points, temp_dir, kml_export)
end
diff --git a/app/exporters/chouette/kml/journey_pattern_exporter.rb b/app/exporters/chouette/kml/journey_pattern_exporter.rb
new file mode 100644
index 000000000..f5addc4bc
--- /dev/null
+++ b/app/exporters/chouette/kml/journey_pattern_exporter.rb
@@ -0,0 +1,33 @@
+class Chouette::Kml::JourneyPatternExporter
+ include ERB::Util
+ attr_accessor :journey_pattern, :template
+
+ def initialize(journey_pattern)
+ @journey_pattern = journey_pattern
+ @template = File.open('app/views/api/kml/journey_patterns/show.kml.erb' ){ |f| f.read }
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def kml_name
+ "/line_#{journey_pattern.route.line_id}_route_#{journey_pattern.route.id}_journey_attern_#{journey_pattern.id}.kml"
+ end
+
+ def self.save( journey_patterns, directory, kml_export)
+ journey_patterns.each do |journey_pattern|
+ self.new( journey_pattern ).tap do |specific_exporter|
+ specific_exporter.save(directory)
+ end
+ end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|JOURNEY_PATTERN_COUNT", :arguments => {"0" => journey_patterns.size})
+ end
+
+ def save(directory)
+ File.open(directory + kml_name , "w+") do |f|
+ f.write(render)
+ end if journey_pattern.present?
+ end
+end
+
diff --git a/app/exporters/chouette/kml/line_exporter.rb b/app/exporters/chouette/kml/line_exporter.rb
index 2359bb072..2e4eb5e47 100644
--- a/app/exporters/chouette/kml/line_exporter.rb
+++ b/app/exporters/chouette/kml/line_exporter.rb
@@ -1,9 +1,10 @@
class Chouette::Kml::LineExporter
include ERB::Util
- attr_accessor :line, :template
+ attr_accessor :line, :directory, :template
- def initialize(line)
+ def initialize(line,directory)
@line = line
+ @directory = directory
@template = File.open('app/views/api/kml/lines/show.kml.erb' ){ |f| f.read }
end
@@ -15,7 +16,16 @@ class Chouette::Kml::LineExporter
"/line_#{line.id}.kml"
end
- def save(directory)
+ def self.save( lines, directory, kml_export)
+ lines.each do |line|
+ self.new( line, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|LINE_COUNT", :arguments => {"0" => lines.size})
+ end
+
+ def save
File.open(directory + kml_name , "w+") do |f|
f.write(render)
end if line.present?
diff --git a/app/exporters/chouette/kml/route_exporter.rb b/app/exporters/chouette/kml/route_exporter.rb
index 44327f8c8..b1a74da5a 100644
--- a/app/exporters/chouette/kml/route_exporter.rb
+++ b/app/exporters/chouette/kml/route_exporter.rb
@@ -1,9 +1,10 @@
class Chouette::Kml::RouteExporter
include ERB::Util
- attr_accessor :route, :template
+ attr_accessor :route, :directory, :template
- def initialize(route)
+ def initialize(route,directory)
@route = route
+ @directory = directory
@template = File.open('app/views/api/kml/routes/show.kml.erb' ){ |f| f.read }
end
@@ -15,7 +16,16 @@ class Chouette::Kml::RouteExporter
"/line_#{route.line_id}_route_#{route.id}.kml"
end
- def save(directory)
+ def self.save( routes, directory, kml_export)
+ routes.each do |route|
+ self.new( route, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ kml_export.log_messages.create( :severity => "ok", :key => "EXPORT|ROUTE_COUNT", :arguments => {"0" => routes.size})
+ end
+
+ def save
File.open(directory + kml_name , "w+") do |f|
f.write(render)
end if route.present?
diff --git a/app/exporters/chouette/kml/stop_area_exporter.rb b/app/exporters/chouette/kml/stop_area_exporter.rb
index 990e18c32..246fc114c 100644
--- a/app/exporters/chouette/kml/stop_area_exporter.rb
+++ b/app/exporters/chouette/kml/stop_area_exporter.rb
@@ -1,9 +1,10 @@
class Chouette::Kml::StopAreaExporter
include ERB::Util
- attr_accessor :stop_areas, :template
+ attr_accessor :stop_areas, :directory, :template
- def initialize(stop_areas)
+ def initialize(stop_areas,directory)
@stop_areas = stop_areas
+ @directory = directory
@template = File.open('app/views/api/kml/stop_areas/index.kml.erb' ){ |f| f.read }
end
@@ -19,7 +20,7 @@ class Chouette::Kml::StopAreaExporter
".kml"
end
- def save(directory, name = nil)
+ def save( name = nil)
File.open(directory + "/" + (name || kml_name) + file_extension, "w+") do |f|
f.write(render)
end if stop_areas.present?
diff --git a/app/models/export.rb b/app/models/export.rb
index 0c2f24cde..342e55738 100644
--- a/app/models/export.rb
+++ b/app/models/export.rb
@@ -69,12 +69,13 @@ class Export < ActiveRecord::Base
end
def export
+ result_severity = "ok"
FileUtils.mkdir_p root
begin
# delayed job may repeat call
ExportLogMessage.where(:export_id => self.id).delete_all
- log_messages.create :key => :started
+ log_messages.create :severity => "ok", :key => :started
exporter.export file, export_options
@@ -82,9 +83,10 @@ class Export < ActiveRecord::Base
rescue => e
Rails.logger.error "Export #{id} failed : #{e}, #{e.backtrace}"
update_attribute :status, "failed"
+ result_severity = "error"
end
- log_messages.create :key => status
+ log_messages.create :severity => result_severity, :key => status
end
@@references_types = [ Chouette::Line, Chouette::Network, Chouette::Company ]
diff --git a/app/models/kml_export.rb b/app/models/kml_export.rb
index 418c2ccc1..c450bd297 100644
--- a/app/models/kml_export.rb
+++ b/app/models/kml_export.rb
@@ -5,7 +5,7 @@ class KmlExport < Export
end
def exporter
- exporter ||= ::Chouette::Kml::Exporter.new(referential)
+ exporter ||= ::Chouette::Kml::Exporter.new(referential, self)
end
end
diff --git a/app/views/api/kml/journey_patterns/show.kml.erb b/app/views/api/kml/journey_patterns/show.kml.erb
new file mode 100644
index 000000000..cbce3627a
--- /dev/null
+++ b/app/views/api/kml/journey_patterns/show.kml.erb
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kml xmlns="http://www.opengis.net/kml/2.2">
+ <Document>
+ <name><%= h(@journey_pattern.name) %></name>
+ <ExtendedData>
+ <% [:objectid, :object_version, :creation_time, :creator_id, :name, :comment, :registration_number, :published_name].each do |prop| %>
+ <Data name="<%= prop.to_s %>">
+ <value><%= h(@journey_pattern.send( prop)) %></value>
+ </Data>
+ <% end %>
+ <Data name="route_objectid">
+ <value><%= h(@journey_pattern.route.object_id) %></value>
+ </Data>
+ </ExtendedData>
+ <% @journey_pattern.route.stop_points.each_with_index do |stop_point, index| %>
+ <% stop_area = stop_point.stop_area %>
+ <% if stop_area.geometry %>
+ <Placemark id="<%= stop_area.objectid %>" >
+ <name><%= h(stop_area.name) %></name>
+ <ExtendedData>
+ <% [ :objectid, :object_version, :creation_time, :creator_id, :name, :comment, :area_type, :registration_number, :nearest_topic_name, :fare_code, :longitude, :latitude, :long_lat_type, :country_code, :street_name, :mobility_restricted_suitability, :stairs_availability, :lift_availability, :int_user_needs].each do |prop| %>
+ <Data name="<%= prop.to_s %>">
+ <value><%= h(stop_area.send( prop)) %></value>
+ </Data>
+ <% end %>
+ <% if stop_area.parent %>
+ <Data name="parent_objectid">
+ <value><%= h(stop_area.parent.object_id) %></value>
+ </Data>
+ <% end %>
+ <Data name="stop">
+ <value><%= @journey_pattern.stop_points.include?( stop_point) ? "true" : "false" %></value>
+ </Data>
+ </ExtendedData>
+
+ <%= stop_area.geometry_presenter.geometry.kml_representation.html_safe %>
+ </Placemark>
+ <% end %>
+ <% end %>
+ </Document>
+</kml>
+
diff --git a/config/locales/exports.yml b/config/locales/exports.yml
index 688d5ddb6..18eb461da 100644
--- a/config/locales/exports.yml
+++ b/config/locales/exports.yml
@@ -23,6 +23,16 @@ en:
completed: "Completed export"
failed: "Failed export"
undefined: "%{key} undefined"
+ LINE_COUNT: "Exported line count : %{0}"
+ ROUTE_COUNT: "Route count : %{0}"
+ JOURNEY_PATTERN_COUNT: "Journey pattern count : %{0}"
+ QUAY_AND_BOARDING_POSITION_COUNT: "Quays and Boarding positions count : %{0}"
+ COMMERCIAL_COUNT: "Commercial stop points count : %{0}"
+ STOP_PLACE_COUNT: "Stop places count : %{0}"
+ ITL_COUNT: "ITL count : %{0}"
+ CONNECTION_LINK_COUNT: "Connection link count : %{0}"
+ ACCES_LINK_COUNT: "Access Link count : %{0}"
+ ACCES_POINT_COUNT: "Access Point count : %{0}"
EXPORT: "%{0} Export"
EXPORTED_LINE: "Line %{0} (%{1}) exported"
EMPTY_LINE: "Line without valid vehicle journey : not exported"
@@ -112,6 +122,16 @@ fr:
completed: "Export achevé avec succès"
failed: "Export interrompu"
undefined: "%{key} non défini"
+ LINE_COUNT: "Nombre de lignes exportées : %{0}"
+ ROUTE_COUNT: "Nombre de séquences d'arrêts exportées : %{0}"
+ QUAY_AND_BOARDING_POSITION_COUNT: "Nombre d'arrêts physiques exportés : %{0}"
+ COMMERCIAL_COUNT: "Nombre d'arrêts commerciaux exportés : %{0}"
+ STOP_PLACE_COUNT: "Nombres de pôles d'échange exportés : %{0}"
+ ITL_COUNT: "Nombre d'ITL exportées : %{0}"
+ JOURNEY_PATTERN_COUNT: "Nombre de missions exportées : %{0}"
+ CONNECTION_LINK_COUNT: "Nombre de correspondances exportées : %{0}"
+ ACCES_LINK_COUNT: "Nombre de liaison d'accès exportées : %{0}"
+ ACCES_POINT_COUNT: "Nombre de points d'accès exportés : %{0}"
EXPORT: "Export %{0}"
EXPORTED_LINE: "Ligne %{0} (%{1}) exportée"
EMPTY_LINE: "Ligne sans course valide : non exportée"
diff --git a/spec/exporters/chouette/kml/exporter_spec.rb b/spec/exporters/chouette/kml/exporter_spec.rb
index 53e485cd7..dd7c44327 100644
--- a/spec/exporters/chouette/kml/exporter_spec.rb
+++ b/spec/exporters/chouette/kml/exporter_spec.rb
@@ -10,7 +10,8 @@ describe Chouette::Kml::Exporter do
# referential.switch
# Factory(:line_with_stop_areas_having_parent) }
- subject { Chouette::Kml::Exporter.new(first_referential) }
+ let(:kml_export){ Factory(:kml_export)}
+ subject { Chouette::Kml::Exporter.new(first_referential, kml_export) }
let(:tmp_path) { File.join( Rails.root, "tmp")}
let(:exports_path) { File.join( tmp_path, "exports")}
diff --git a/spec/factories.rb b/spec/factories.rb
index 7ae087de0..681400443 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -31,6 +31,10 @@ FactoryGirl.define do
f.sequence(:key) { "key_#{n}" }
end
+ factory :kml_export do |f|
+ f.referential { Referential.find_by_slug("first") }
+ end
+
factory :export do |f|
f.referential { Referential.find_by_slug("first") }
end