Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 15 additions & 15 deletions lib/map_fields.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require 'fastercsv'
require 'csv'

module MapFields
VERSION = '1.0.0'
Expand All @@ -13,11 +13,11 @@ def map_fields
:params => []
}
options = default_options.merge(
self.class.read_inheritable_attribute(:map_fields_options)
self.map_fields_options
)

RAILS_DEFAULT_LOGGER.debug("session[:map_fields]: #{session[:map_fields]}")
RAILS_DEFAULT_LOGGER.debug("params[options[:file_field]]: #{params[options[:file_field]]}")
::Rails.logger.debug("session[:map_fields]: #{session[:map_fields]}")
::Rails.logger.debug("params[options[:file_field]]: #{params[options[:file_field]]}")
if session[:map_fields].nil? || !params[options[:file_field]].blank?
session[:map_fields] = {}
if params[options[:file_field]].blank?
Expand All @@ -38,7 +38,7 @@ def map_fields
session[:map_fields] = nil
@map_fields_error = InconsistentStateError
else
expected_fields = self.class.read_inheritable_attribute(:map_fields_fields)
expected_fields = self.map_fields_fields
if expected_fields.respond_to?(:call)
expected_fields = expected_fields.call(params)
end
Expand All @@ -52,18 +52,18 @@ def map_fields
unless @map_fields_error
@rows = []
begin
FasterCSV.foreach(session[:map_fields][:file]) do |row|
CSV.foreach(session[:map_fields][:file]) do |row|
@rows << row
break if @rows.size == 10
end
rescue FasterCSV::MalformedCSVError => e
rescue CSV::MalformedCSVError => e
@map_fields_error = e
end
expected_fields = self.class.read_inheritable_attribute(:map_fields_fields)
expected_fields = self.map_fields_fields
if expected_fields.respond_to?(:call)
expected_fields = expected_fields.call(params)
end
@fields = ([nil] + expected_fields).inject([]){ |o, e| o << [e, o.size]}
@fields = ([nil] + expected_fields).inject({}){ |o, e| o.merge({e => o.size})}
@parameters = []
options[:params].each do |param|
@parameters += ParamsParser.parse(params, param)
Expand Down Expand Up @@ -97,8 +97,10 @@ def map_fields_cleanup

module ClassMethods
def map_fields(actions, fields, options = {})
write_inheritable_attribute(:map_fields_fields, fields)
write_inheritable_attribute(:map_fields_options, options)
class_attribute :map_fields_fields, :instance_writer => false
class_attribute :map_fields_options, :instance_writer => false
self.map_fields_fields = fields
self.map_fields_options = options
before_filter :map_fields, :only => actions
after_filter :map_fields_cleanup, :only => actions
end
Expand Down Expand Up @@ -135,7 +137,7 @@ def is_mapped?(field)

def each
row_number = 1
FasterCSV.foreach(@file) do |csv_row|
CSV.foreach(@file) do |csv_row|
unless row_number == 1 && @ignore_first_row
row = {}
@mapping.each do |k,v|
Expand Down Expand Up @@ -195,7 +197,5 @@ def self.check_values(value, &block)

if defined?(Rails) and defined?(ActionController)
ActionController::Base.send(:include, MapFields)
ActionController::Base.view_paths.push File.expand_path(File.join(File.dirname(__FILE__), '..', 'views'))
#This is a hack but the above code is not enough when using bundler and Rails 2.3.5
ActionController::Base.view_paths.push "app/views"
ActionController::Base.prepend_view_path File.expand_path(File.join(File.dirname(__FILE__), '..', 'views'))
end
4 changes: 2 additions & 2 deletions map_fields.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

Gem::Specification.new do |s|
s.name = %q{map_fields}
s.version = "1.0.4"
s.version = "1.0.5"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Andrew Timberlake"]
Expand All @@ -27,7 +27,7 @@ Gem::Specification.new do |s|
"spec/lib/params_parser_spec.rb",
"spec/spec_helper.rb",
"spec/test-file.csv",
"views/map_fields/_map_fields.erb"
"views/map_fields/_map_fields.html.erb"
]
s.homepage = %q{http://github.com/internuity/map-fields}
s.require_paths = ["lib"]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<% form_tag nil, :id => 'map_fields_form', :method => :post do -%>
<%= form_tag nil, :id => 'map_fields_form', :method => :post do %>
<% @parameters.each do |arr| -%>
<%= hidden_field_tag arr[0], arr[1] %>
<% end -%>
Expand All @@ -7,7 +7,7 @@
<thead>
<tr>
<% (1..@rows[0].size).each do |c| -%>
<th><%= select_tag "fields[#{c}]", options_for_select(@fields), :include_blank => true, :class => 'field_options' %></th>
<th><%= select_tag "fields[#{c}]", options_for_select(@fields, @fields[@rows[0][c-1].try(:capitalize)]), :include_blank => false, :class => 'field_options' %></th>
<% end -%>
</tr>
</thead>
Expand Down