Call methods from different class

hi again, can i ask something bout the method and class thing?

i have a class called map.rb, and another class called Asset.rb

in my Asset.rb, i have a method called

  def base_part_of(file_name)     name = File.basename(file_name)     name.gsub(/[^W._-]/, '')     sanitize_filename(name)   end

so, wat can i do in order to get the "name" from base_part_of in my map class?

isit i use require 'Asset', or

isit i create a string called 'try' then try = name or something?

thx for helping again...

cheers~~

hi again, can i ask something bout the method and class thing?

i have a class called map.rb, and another class called Asset.rb

in my Asset.rb, i have a method called

def base_part_of(file_name)    name = File.basename(file_name)    name.gsub(/[^W._-]/, '')    sanitize_filename(name) end

so, wat can i do in order to get the "name" from base_part_of in my
map class?

What you've got there is an instance method of the Asset class. You
can't (without black magic) pull an instance method out of a class and
use it on it's own. So either you've got an instance of asser and you
can call some_asset.base_part_of(...) or you make that method class
method (which seems reasonable enough in this case) by defining it as
self.base_part_of and then calling it as Asset.base_part_of(...). You
would also have to make sanitize_filename a class method as well.

Fred

okok, thx for the tips, i'll try out and i'll ask again~~ hehe

hey fred, would u mind if u help me check the error, in my .... program,

cause im now at my last part , which is i need to load a random file which ends with .lmx, isit ok if u help me check? cause after the tips u gave me i think my whole thing is like... screwed .... >.<

If you post some more of your code I'm sure someone would be able to help.

Fred

ow... but its a whole chunks of things......

or how am i read a file name? jus the file name with the extension .lmx

a = File.open("C:/rubydev/prac1/mail6/log/new_file_name.lmx" )

puts a

doc = Document.new File.new("C:/rubydev/prac1/mail6/log/River_Va.lmx")

this is what i have, ive tried to use file.open, but it shows me weird numbers...

#<File:0x3799854>

but actually i wanna read those file with extension .lmx, is there a way?

cause after reading it, i wanna put inside my doc

...

ow... but its a whole chunks of things......

or how am i read a file name? jus the file name with the
extension .lmx

a = File.open("C:/rubydev/prac1/mail6/log/new_file_name.lmx" )

File.basename does that

puts a

doc = Document.new File.new("C:/rubydev/prac1/mail6/log/River_Va.lmx")

this is what i have, ive tried to use file.open, but it shows me weird numbers...

#<File:0x3799854>

That's a file object. Use read/readline/readlines to read from it.

Fred

alright, im still stuck, erm, this is my code...

First, this is my action mailer, which read and create file from the email, it will auto generates the file after reading the email and save it somewhere

require 'ActionMailer'

class AssetSubmitHandler < ActionMailer::Base   # content type should be validated to image/gif, image/jpg, or image/jpeg   def receive(email)

      if email.has_attachments?         email.attachments.each do |attachment|

        # save original file       File.open("C:/rubydev/prac1/mail6/log/" + base_part_of(attachment.original_filename),File::CREAT|File::TRUNC|File::WRONLY,0666){

f>

        f.write(attachment.read)

          f.close()         }

      end     end   end

  def base_part_of(file_name)     name = File.basename(file_name)     name.gsub(/[^W._-]/, '')     sanitize_filename(name)   end

  # Fixes a 'feature' of IE where it passes the entire path instead of just the filename   def sanitize_filename(value)     #get only the filename (not the whole path)     just_filename = value.gsub(/^.*(\\|\/)/, '')     just_filename.gsub(/[^\w\.\-]/,'_')   end

end

then, at my map class, i need to read the file and process the lmx file and save to database.

require 'ActiveRecord'

class Map

require 'rexml/document' require "mysql" require "dbi" include REXML require 'AssetSubmitHandler'

#~ scanfile = File.new("C:/rubydev/prac1/mail6/log/River_Va.lmx")

#~ dbname="email_development"     #~ doc = REXML::Document.new scanfile

a = File.open("C:/rubydev/prac1/mail6/log/new_file_name.lmx" )

puts a

doc = Document.new File.new("C:/rubydev/prac1/mail6/log/River_Va.lmx") #~ doc.elements.each("lm:landmarkCollection") { |element| puts element.attributes["lm:latitude"] #~ latitude = element.attributes["lm:latitude"] #~ }

#~ root = doc.root #~ puts root.elements["lm:lmx/lm:landmarkCollection/lm:landmark/lm:coordinates"].attributes["lm:latitude"]

names = invisibility = XPath.first( doc, "//lm:landmark" ) XPath.each( doc, "//lm:name") { |element| puts names << element.text} XPath.match( doc, "//lm:name" ) puts names

latitude = invisibility = XPath.first( doc, "/*/lm:landmark" ) XPath.each( doc, "//lm:latitude") { |element| puts latitude << element.text} XPath.match( doc, "//lm:latitude" ) puts latitude

longitude = invisibility = XPath.first( doc, "/*/lm:landmark" ) XPath.each( doc, "//lm:longitude") { |element| puts longitude << element.text} XPath.match( doc, "//lm:longitude" ) puts longitude

# db insert      m = Mysql.new("localhost", "root", "", "email_development")

  sth=m.query("insert into maps (name,latitude,longtitude) values ('#{names}','#{latitude}','#{longitude}')")

end

Now, the problem i faced is, how am i going to read the file was generated from action mailer, by using file.new, file.basename, or file open?

or is there a better way to get the file generated from action mailer? thx for helping me again~~

cheers~~

Now, the problem i faced is, how am i going to read the file was generated from action mailer, by using file.new, file.basename, or file open?

Well somehow you've got to figure out where the file is. So either you store that in the database at the point at which you process the message, or perhaps it's enough for you to just process all files in that folger, in which case Dir.glob should do the trick. On top of that your sql query won't work (single quotes aren't interpolated, and it wouldn't be valid syntax anyway. It's also quite hard to read your code because there are so many lines there which do nothing.

Fred