Prev: Ruby game server (concurrency and speed)
Next: [Chris Pine] Chapter 7 - Sorting Arrays without .sort
From: Kale Davis on 3 Feb 2010 14:10 I am creating a Ruby script that basically: 1) Has a prompt that gets a command string (ex. 'edit user1 15') 2) Parses the string 3) Runs specific command (like 'edit' or 'new') 4) Repeats From a functional level I know how to make this work, but how do I make it dynamic in the sense that another user could easily add their own commands by adding a new subclass? I was thinking something like this: class Update < Command ... end The problem is I don't know how to dynamically create a new 'Update' instance if that is the command string (ie 'update user')? I know how to call a method using 'send' and I guess that would be another approach maybe, but is there something for classes? cmd = gets.chomp #ie 'update user' c = cmd.split(' ')[0].new #simple parsing example c.run Thanks for any help! Kale -- Posted via http://www.ruby-forum.com/.
From: Marnen Laibow-Koser on 3 Feb 2010 14:13 Kale Davis wrote: > I am creating a Ruby script that basically: > 1) Has a prompt that gets a command string (ex. 'edit user1 15') > 2) Parses the string > 3) Runs specific command (like 'edit' or 'new') > 4) Repeats > > From a functional level I know how to make this work, but how do I make > it dynamic in the sense that another user could easily add their own > commands by adding a new subclass? > > I was thinking something like this: > > class Update < Command > ... > end > > The problem is I don't know how to dynamically create a new 'Update' > instance if that is the command string (ie 'update user')? I know how to > call a method using 'send' and I guess that would be another approach > maybe, but is there something for classes? Classes are objects too. They respond to Object#send. > > cmd = gets.chomp #ie 'update user' > c = cmd.split(' ')[0].new #simple parsing example > c.run > > Thanks for any help! > Kale Best, -- Marnen Laibow-Koser http://www.marnen.org marnen(a)marnen.org -- Posted via http://www.ruby-forum.com/.
From: Ben Bleything on 3 Feb 2010 14:23 On Wed, Feb 3, 2010 at 11:10 AM, Kale Davis <kale.davis(a)gmail.com> wrote: > I am creating a Ruby script that basically: > 1) Has a prompt that gets a command string (ex. 'edit user1 15') > 2) Parses the string > 3) Runs specific command (like 'edit' or 'new') > 4) Repeats > > From a functional level I know how to make this work, but how do I make > it dynamic in the sense that another user could easily add their own > commands by adding a new subclass? You may be interested in a somewhat ancient project of mine called Linen which does what you're describing: http://bitbucket.org/laika/linen/src/ I haven't touched that code for years, and it had some issues when I last worked with it, so I'm not really suggesting you use it, so much as look at it for ideas of how to do what you want :) Ben
From: Robert Klemme on 4 Feb 2010 03:14 On 03.02.2010 20:13, Marnen Laibow-Koser wrote: > Kale Davis wrote: >> I am creating a Ruby script that basically: >> 1) Has a prompt that gets a command string (ex. 'edit user1 15') >> 2) Parses the string >> 3) Runs specific command (like 'edit' or 'new') >> 4) Repeats >> >> From a functional level I know how to make this work, but how do I make >> it dynamic in the sense that another user could easily add their own >> commands by adding a new subclass? >> >> I was thinking something like this: >> >> class Update < Command >> ... >> end >> >> The problem is I dont know how to dynamically create a new 'Update' >> instance if that is the command string (ie 'update user')? I know how to >> call a method using 'send' and I guess that would be another approach >> maybe, but is there something for classes? > > Classes are objects too. They respond to Object#send. For that he first needs the class instance. Something like cl = Object.const_get("Update") will do. Then you can do whatever you want to do with it. In this case all classes should probably share a common interface method, e.g. class Command def execute(*args) raise "Not implemented" end end class Update < Command def execute(*a) ... end end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/
From: Josh Cheek on 4 Feb 2010 06:03 [Note: parts of this message were removed to make it a legal post.] Hi, not completely sure I understand what you are trying to do, but Robert's post got me interested, and I wanted to try it out. This is what I came up with: http://gist.github.com/294520 ( mirrored at http://pastie.org/private/1gtz2apwaxac2rcgl3xsw because github is having issues http://twitter.com/github/status/8627608544 ) Hopefully it's helpful, if not, maybe flesh out the example a bit more of what you want to do, and what you want other people to be able to do.
|
Next
|
Last
Pages: 1 2 Prev: Ruby game server (concurrency and speed) Next: [Chris Pine] Chapter 7 - Sorting Arrays without .sort |