Sha256: e4085cd568cb3b065704165c0a518ea51d3c05c9b016739c747d3cdbbc1a111d
Contents?: true
Size: 1.92 KB
Versions: 3
Compression:
Stored size: 1.92 KB
Contents
# For date column cells named created_on, updated_at etc. this transforms the # corresponding cell's value to a datetime in the current time zone (i.e. this # works for both normal tables and row_hash tables): timezonify = lambda do |table| dates = table.headers.select { |header| header =~ /(_at|_on)$/ } dates.each { |date| table.map_column!(date) { |date| DateTime.parse(date).in_time_zone if date.present? && date != '-' } } table.transpose end objectify = lambda do |table| types = Section.types.map(&:underscore) << 'section' << 'site' sections = table.headers.select { |header| types.include?(header) } sections.each { |key| table.map_column!(key) { |value| key.gsub('_id', '').classify.constantize.find_by_name(value) } } table.transpose end TRANSFORM_FOREIGN_KEY_TYPES = Section.types.map(&:underscore) << 'section' << 'site' TRANSFORM_FOREIGN_KEY_MAP = {} foreign_keyify = lambda do |table| keys = TRANSFORM_FOREIGN_KEY_TYPES.map { |type| "#{type}_id" } keys = table.headers.select { |header| keys.include?(header) } keys.each do |key| table.map_column!(key) do |value| klass = TRANSFORM_FOREIGN_KEY_MAP[key] || key.gsub('_id', '').classify.constantize Array(klass.find_by_name(value)).first.try(:id).to_s end end table.transpose end # must be here because one apparently can't register multiple transforms for the # same regex (like /^table:/) in cucumber. should really be in adva-categories though. categoryify = lambda do |table| if table.headers.include?('categories') table.map_column!('categories') do |categories| names = categories.split(',').map(&:strip) Category.where(:name => names).all end end table.transpose end Transform /^table:/ do |table| table = timezonify.call(timezonify.call(table)) table = objectify.call(objectify.call(table)) table = foreign_keyify.call(foreign_keyify.call(table)) table = categoryify.call(categoryify.call(table)) table end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
adva-core-0.0.9 | lib/testing/step_definitions/transforms.rb |
adva-core-0.0.8 | lib/testing/step_definitions/transforms.rb |
adva-core-0.0.7 | lib/testing/step_definitions/transforms.rb |