From 79b6077d8053891a94a1d2b73b13a955eed3bd67 Mon Sep 17 00:00:00 2001 From: David Chapman Date: Tue, 19 Jul 2011 07:47:12 -0700 Subject: [PATCH 1/6] Trying to make the same changes as @rubythings, but keep it as a gem. --- lib/map_fields.rb | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/map_fields.rb b/lib/map_fields.rb index 4f14547..4549701 100644 --- a/lib/map_fields.rb +++ b/lib/map_fields.rb @@ -1,5 +1,3 @@ -require 'fastercsv' - module MapFields VERSION = '1.0.0' @@ -52,11 +50,11 @@ 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) @@ -135,7 +133,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| @@ -195,7 +193,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 From 0de425c4d02b20e8392a8dd669761abf3e6d4d3f Mon Sep 17 00:00:00 2001 From: David Chapman Date: Wed, 20 Jul 2011 09:18:38 -0400 Subject: [PATCH 2/6] Revert "Trying to make the same changes as @rubythings, but keep it as a gem." This reverts commit 79b6077d8053891a94a1d2b73b13a955eed3bd67. --- lib/map_fields.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/map_fields.rb b/lib/map_fields.rb index 4549701..4f14547 100644 --- a/lib/map_fields.rb +++ b/lib/map_fields.rb @@ -1,3 +1,5 @@ +require 'fastercsv' + module MapFields VERSION = '1.0.0' @@ -50,11 +52,11 @@ def map_fields unless @map_fields_error @rows = [] begin - CSV.foreach(session[:map_fields][:file]) do |row| + FasterCSV.foreach(session[:map_fields][:file]) do |row| @rows << row break if @rows.size == 10 end - rescue CSV::MalformedCSVError => e + rescue FasterCSV::MalformedCSVError => e @map_fields_error = e end expected_fields = self.class.read_inheritable_attribute(:map_fields_fields) @@ -133,7 +135,7 @@ def is_mapped?(field) def each row_number = 1 - CSV.foreach(@file) do |csv_row| + FasterCSV.foreach(@file) do |csv_row| unless row_number == 1 && @ignore_first_row row = {} @mapping.each do |k,v| @@ -193,5 +195,7 @@ def self.check_values(value, &block) if defined?(Rails) and defined?(ActionController) ActionController::Base.send(:include, MapFields) - ActionController::Base.prepend_view_path File.expand_path(File.join(File.dirname(__FILE__), '..', 'views')) + 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" end From 47c683da132df0b00129d7ae24247d00d0894de9 Mon Sep 17 00:00:00 2001 From: David Chapman Date: Wed, 20 Jul 2011 09:23:16 -0400 Subject: [PATCH 3/6] Rails 3 compatibility Switched from fastercsv to csv. Modified view path. --- lib/map_fields.rb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/map_fields.rb b/lib/map_fields.rb index 4f14547..9af3b76 100644 --- a/lib/map_fields.rb +++ b/lib/map_fields.rb @@ -1,4 +1,4 @@ -require 'fastercsv' +require 'csv' module MapFields VERSION = '1.0.0' @@ -52,11 +52,11 @@ 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) @@ -135,7 +135,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| @@ -195,7 +195,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 From 0d60a3d10d95215118254d25fb28afcedfe8a104 Mon Sep 17 00:00:00 2001 From: David Chapman Date: Wed, 20 Jul 2011 09:27:18 -0400 Subject: [PATCH 4/6] Auto select dropdowns based on header row @fields is now built as a hash instead of a nested array. The select tags try to auto select an option if it matches the content of the corresponding cell in the first row --- lib/map_fields.rb | 2 +- views/map_fields/_map_fields.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/map_fields.rb b/lib/map_fields.rb index 9af3b76..cda82c8 100644 --- a/lib/map_fields.rb +++ b/lib/map_fields.rb @@ -63,7 +63,7 @@ def map_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) diff --git a/views/map_fields/_map_fields.erb b/views/map_fields/_map_fields.erb index c7b25b4..1b741ed 100644 --- a/views/map_fields/_map_fields.erb +++ b/views/map_fields/_map_fields.erb @@ -7,7 +7,7 @@ <% (1..@rows[0].size).each do |c| -%> - <%= select_tag "fields[#{c}]", options_for_select(@fields), :include_blank => true, :class => 'field_options' %> + <%= select_tag "fields[#{c}]", options_for_select(@fields, @fields[@rows[0][c-1].try(:capitalize)]), :include_blank => false, :class => 'field_options' %> <% end -%> From f44406279852a49a96839f7eb02e4149150e669c Mon Sep 17 00:00:00 2001 From: David Chapman Date: Wed, 20 Jul 2011 09:28:43 -0400 Subject: [PATCH 5/6] Version bump to 1.0.5 --- map_fields.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/map_fields.gemspec b/map_fields.gemspec index bae6c10..02ad038 100644 --- a/map_fields.gemspec +++ b/map_fields.gemspec @@ -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"] From 66329682e0fe1ac8ccd4065213006e8513e2a3a2 Mon Sep 17 00:00:00 2001 From: Jason Rust Date: Fri, 24 Feb 2012 16:02:13 -0800 Subject: [PATCH 6/6] Add rails 3.2 support Using class_attribute instead of write_inheritable_attribute Renamed _map_fields.erb to _map_fields.html.erb Form tag uses <%= so it is outputted --- lib/map_fields.rb | 16 +++++++++------- map_fields.gemspec | 2 +- .../{_map_fields.erb => _map_fields.html.erb} | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) rename views/map_fields/{_map_fields.erb => _map_fields.html.erb} (93%) diff --git a/lib/map_fields.rb b/lib/map_fields.rb index cda82c8..1c2cf01 100644 --- a/lib/map_fields.rb +++ b/lib/map_fields.rb @@ -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? @@ -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 @@ -59,7 +59,7 @@ def map_fields 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 @@ -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 diff --git a/map_fields.gemspec b/map_fields.gemspec index 02ad038..78864d7 100644 --- a/map_fields.gemspec +++ b/map_fields.gemspec @@ -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"] diff --git a/views/map_fields/_map_fields.erb b/views/map_fields/_map_fields.html.erb similarity index 93% rename from views/map_fields/_map_fields.erb rename to views/map_fields/_map_fields.html.erb index 1b741ed..0cb8b64 100644 --- a/views/map_fields/_map_fields.erb +++ b/views/map_fields/_map_fields.html.erb @@ -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 -%>