diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/models/referential.rb | 43 | ||||
| -rw-r--r-- | app/views/referentials/_form.erb | 5 | 
2 files changed, 44 insertions, 4 deletions
diff --git a/app/models/referential.rb b/app/models/referential.rb index a05e3f065..dd5908b8b 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -2,9 +2,6 @@ class Referential < ActiveRecord::Base    validates_presence_of :name     validates_presence_of :slug -  before_create :create_schema  -  before_destroy :destroy_schema -    def lines      Chouette::Line.scoped    end @@ -31,7 +28,45 @@ class Referential < ActiveRecord::Base      self    end -  private  +  before_create :prepare +  before_destroy :destroy_schema + +  attr_accessor :resources +  attr_accessor :loader + +  def loader +    @loader ||= ::Chouette::Loader.new(slug) +  end + +  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 + +  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 +  end    def create_schema      Apartment::Database.create slug diff --git a/app/views/referentials/_form.erb b/app/views/referentials/_form.erb index 031621b00..34d515c4a 100644 --- a/app/views/referentials/_form.erb +++ b/app/views/referentials/_form.erb @@ -2,8 +2,13 @@    <%= form.inputs do %>       <%= form.input :name %>       <%= form.input :slug%> + +    <% if @referential.new_record? %> +    <%= form.input :resources, :as => :file %> +    <% end %>    <% end %> +    <%= form.buttons do %>      <%= form.commit_button true %>      <li><%= t('or') %></li>  | 
