trabajo-afectivo/lib/import/helper/attributes_examples.rb

71 lines
1.6 KiB
Ruby
Raw Normal View History

module Import
module Helper
class AttributesExamples
attr_reader :examples, :enough, :max_unkown
def initialize(&block)
@max_unkown = 50
@no_new_counter = 1
@examples = {}
@known = []
# Support both builder styles:
#
# Import::Helper::AttributesExamples.new do
# extract(attributes)
# end
#
# and
#
# Import::Helper::AttributesExamples.new do |extractor|
# extractor.extract(attributes)
# end
return if !block_given?
if block.arity.zero?
instance_eval(&block)
else
yield self
end
end
def extract(attributes)
unknown = attributes.keys - @known
return if !unknown?(unknown)
store(attributes, unknown)
@known.concat(unknown)
@no_new_counter = 0
end
private
def unknown?(unknown)
return true if unknown.present?
@no_new_counter += 1
# check max 50 entries with no or no new attributes in a row
@enough_examples = @no_new_counter != 50
false
end
def store(attributes, unknown)
unknown.each do |attribute|
value = attributes[attribute]
next if value.nil?
example = value.to_s.force_encoding('UTF-8').encode('utf-8', 'binary', invalid: :replace, undef: :replace, replace: '?')
example.gsub!(/^(.{20,}?).*$/m, '\1...')
@examples[attribute] = "#{attribute} (e. g. #{example})"
end
end
end
end
end