module Crack module Util def snake_case(str) return str.downcase if str =~ /^[A-Z]+$/ str.gsub(/([A-Z]+)(?=[A-Z][a-z]?)|\B[A-Z]/, '_\&') =~ /_*(.*)/ return $+.downcase end def to_xml_attributes(hash) hash.map do |k,v| %{#{Crack::Util.snake_case(k.to_s).sub(/^(.{1,1})/) { |m| m.downcase }}="#{v.to_s.gsub('"', '"')}"} end.join(' ') end extend self end end