Hej! Okey i have a problem, i have earlier written a set of classes in ruby implementing a msrp chat client and now im trying to use it in my rails app. The msrp implementation consists of several files and most of the functions and classes in those files ar encapsulated in a module lets call it X. so for instance they look like this header.rb module X class Z ... end end The problem now is that rails some how gets confused about the names of the files and what modules and classes they contain or something... For instance i can instantiate classes in the module but some methods are not recognised and all is a mess. So i guess my question is how do i include these files in my project in a good way? without renaming/reorganizing them. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
If the naming doesn''t follow what Rails is looking for, just do a require '' header.rb'' in whatever controller / model you want to use said library in. Rails already adds lib/ to the load path, so you don''t have to worry about finding the correct path. Jason On 8/9/07, Patrik Pettersson <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > Hej! Okey i have a problem, i have earlier written a set of classes in > ruby implementing a msrp chat client and now im trying to use it in my > rails app. > > The msrp implementation consists of several files and most of the > functions and classes in those files ar encapsulated in a module lets > call it X. so for instance they look like this > > header.rb > > module X > class Z > ... > end > end > > The problem now is that rails some how gets confused about the names of > the files and what modules and classes they contain or something... For > instance i can instantiate classes in the module but some methods are > not recognised and all is a mess. So i guess my question is how do i > include these files in my project in a good way? without > renaming/reorganizing them. > -- > Posted via http://www.ruby-forum.com/. > > > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thank you for clearing that up to me. Still having troubles tho. It
seems like methods in one or more of the classes wont be defined on
requiring the file, works great in the ruby interpreter but in rails i
get undefined method on methods not declared as a attr_, also the to_s
of MsrpURI class is being ignored and the object standard method get
called.
module SmsChat
class MsrpURI
attr_accessor :username, :password, :host, :port, :resource,
:protocol
def initialize str
matches =
/(msrp|sms)\:\/\/((\w+)(\:(\w+))?@)?([\w\.]+)(\:(\d+))?\/?(\w+)?/.match
str
raise "Formatting error" unless matches
@protocol = matches[1]
@username = matches[3]
@password = matches[5]
@host = matches[6]
@port = matches[8].to_i
@resource = matches[9].to_i
#port = 13040 unless port > 0
end
end
def to_s
str = String.new
str << @protocol;
str << "://"
if @username
str << @username
str << ":#{@password}" if @password
str << "@"
end
str << @host
str << ":#{@port}" if @port > 0
str << "/#{@resource}" if @resource > 0
return str
end
end
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Rails follow a very simple pattern to load you modules. If you are
looking for a module SmsChat, rails will look for sms_chat.rb in your
*lib directory and in some /vendor directories too, i think. Try this:
1) make a sms_chat directory in /lib
/lib/sms_chat
2) make a file sms_chat.rb in your /lib directory. This will be
required whenever you call SmsChat::something.
sms_chat.rb --------------
module SmsChat
end
# Required file loader hackery...
lib_path = File.join(File.dirname(__FILE__), ''sms_chat'')
# will require /lib/sms_chat/header.rb >>
require File.join(lib_path, ''header.rb'')
# will require /lib/sms_chat/other.rb >>
require File.join(lib_path, ''other'')
-----------------------EOF
3) If you keep having problems, try reference the module from the
"global namespace", just adding two colons before the module:
instead of
SmsChat::MsrpURI
use
::SmsChat::MsrpURI
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
That all looks fine, what does the code that uses this look like? Jason On 8/9/07, Patrik Pettersson <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > Thank you for clearing that up to me. Still having troubles tho. It > seems like methods in one or more of the classes wont be defined on > requiring the file, works great in the ruby interpreter but in rails i > get undefined method on methods not declared as a attr_, also the to_s > of MsrpURI class is being ignored and the object standard method get > called. > > module SmsChat > class MsrpURI > attr_accessor :username, :password, :host, :port, :resource, > :protocol > > def initialize str > matches > /(msrp|sms)\:\/\/((\w+)(\:(\w+))?@)?([\w\.]+)(\:(\d+))?\/?(\w+)?/.match > str > raise "Formatting error" unless matches > > @protocol = matches[1] > @username = matches[3] > @password = matches[5] > @host = matches[6] > @port = matches[8].to_i > @resource = matches[9].to_i > > #port = 13040 unless port > 0 > > end > end > > def to_s > str = String.new > str << @protocol; > str << "://" > if @username > str << @username > str << ":#{@password}" if @password > str << "@" > end > > str << @host > str << ":#{@port}" if @port > 0 > str << "/#{@resource}" if @resource > 0 > return str > end > end > -- > Posted via http://www.ruby-forum.com/. > > > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Followed your suggestion and still no go, it findes the modules now and
i can create the uri object but still when i call to_s function the only
thing i get is the standard Object.to_s object reference.. :/
the code that is currently using this is a short test function
class SmschatController < ApplicationController
include SmsChat
def test
uri = MsrpURI.new ''msrp://test''
render :text => uri.to_s
end
end
Thanks for all the help.. Im really getting gray hairs over this
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
hum just realized that your example only works once.. If you try to visit it twise it cant find the module the second time and you have to restart the server! :( -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Hmm, everything looks good. I''d say try SmsChat::MsrpURI.new... and as a sanity check, are you restarting your server for each change to this library? Only classes that are auto-loaded by Rails (e.g. not yours) are reloaded with each request. Jason On 8/9/07, Patrik Pettersson <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > > Followed your suggestion and still no go, it findes the modules now and > i can create the uri object but still when i call to_s function the only > thing i get is the standard Object.to_s object reference.. :/ > > the code that is currently using this is a short test function > > class SmschatController < ApplicationController > include SmsChat > > def test > uri = MsrpURI.new ''msrp://test'' > render :text => uri.to_s > end > end > > Thanks for all the help.. Im really getting gray hairs over this > > -- > Posted via http://www.ruby-forum.com/. > > > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---