Hi, I''m a former PHP developer moving to Ruby and Rails. I''ve written a little rake task to provide an interactive console for setting and removing session values to help debugging the site. It all works, only thing is that it feels to me like I´ve written Ruby in PHP style but I don''t know where to start fixing it. I would appreciate any suggestions. I´ve put it into pastie at: http://pastie.caboo.se/98992 but I''ve also copied it below. In my generic debugging rake tasks file: desc ''View and edit session data'' task :sessions => :environment do # Message used when finding sessions msg_session = <<-EOF ** SESSION CHECKER Enter a session id to find the session in the format of nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn <blank line>/(q)uit EOF # When viewing a session msg_view = <<-EOF Commands: <blank line>/(v)iew to view all values in the session <field>=<value> to set a value (d) <field> to delete that field from the session (f)ind to search for a new session (q)uit to exit EOF # Begin session finding loop loop do breaker = nil # Output the message puts msg_session print ''> '' # What are we doing? str = STDIN.gets.chomp break if str.empty? || str =~ /^q$/i # Does this session exist? if CGI::Session::ActiveRecordStore::Session.exists? :session_id => str session_id = str watch = [] loop do session = CGI::Session::ActiveRecordStore:: Session.find_by_session_id session_id # Display the session data sorted, with the modified fields shown in green longest_key = 0 session.data.each { |k,v| longest_key = k.to_s.length if k.to_s.length > longest_key } puts "\nAll variables in session: %s" % session.session_id session.data.each do |k,v| str = " :%-#{longest_key}s => %s" % [k, CfSimple.describe_var (v)] puts watch.member?(k) ? green(str) : str end # What are we doing with this item? puts msg_view print ''> '' str = STDIN.gets.chomp next if str.empty? || str =~ /^v$/i breaker = :quit and break if str =~ /^q$/i breaker = :find and break if str =~ /^f$/i if str =~ /^d ([a-z0-9 _]+)/i puts red(''Deleted %s'' % $1) session.data.delete $1.intern session.save next end # We''re updating a value if str =~ /([^=]+)=(.*)/ # Is the assignment valid yaml? valid = true YAML::parse('':%s: %s'' % [$1, $2]) rescue valid = false # Not good YAML puts(red(''Invalid assignment. Must be valid YAML.'')) and next unless valid # Now enter this as our new data session.data[$1.intern] = YAML::parse($2).transform session.save # Add it to the watches watch << $1.intern next else puts red(''Invalid assignment. Must match: /([^=]+)=(.*)/'') end end else puts ''Error finding session %s'' % str end break if breaker == :quit end end # CfSimple is a library of basic debugging functions. I''ve just include the one in use above. class CfSimple def self.describe_var(var) return (var.nil? ? ''nil'' : var) if [NilClass, TrueClass, FalseClass].member? var.class vals = [var.class.to_s + (!var.nil? && var.respond_to?(:length) ? ''(%s)'' % var.length : '''') + '':''] if var.is_a? Array vals << ''[%s]'' % var.collect{ |a| describe_var a }.join('', '') elsif var.is_a? Hash vals << ''{%s}'' % var.collect{ |a| describe_var a }.join('', '') elsif var.is_a? Numeric vals << ''%s'' % var else vals << ''"%s"'' % var end vals.join '' '' end end --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---