Hi, Henry.

thanks for the info.

method missing might be a good option.

class Process
  def run; end
end

class FileUtils
  def mkdir; end
end

class Agent
  def method_missing
    if Process.new.respond_to(method) || FileUtiles.response_to(method)
      do_as_me
         Process.new.send(method)
      end
   end
end

sort of like this. what do you think?




On Wed, Jun 27, 2012 at 6:26 PM, Henry Maddocks <[email protected]> wrote:

>
> On 27/06/2012, at 8:12 PM, salamond <[email protected]> wrote:
>
> Hi, guys.
>
> I want An agent on machine, so that it can fake user actions.
>
> ...
>
> My problem is, I have a very long list of actions, like mv, touch, mkdir,
> rm, etc.
> I don't want to add save and restore euid for all methods.
>
>
> First thing I'd do is remove all the duplication, maybe something like
> this...
>
> class Agent
>   def initialize(user, dir)
>     @user = user
>     @dir = dir
>   end
>
>   def as_me_do
>     bak = Process.euid
>       yield
>
>   ensure # hat tip Robert
>     Process.euid = bak
>   end
>
>   def mkdir(dir)
>     as_me_do {`mkdir`}
>   end
>
>   def create_file(file, content)
>     as_me_do {`echo #{content} > #{file}`}
>   end
> end
>
> The next step might be more obvious.
>
> I kind of guess here I should use some meta programming skills. here's
> what i tried.
>
>
> Defining methods is going to be tricky, because you don't have consistent
> method signatures and system calls. Maybe a have a hash of methods =>
> system calls and method missing?
>
> Also, why back ticks, why not use ruby File methods?
>
> Henry
>
>

-- You received this message because you are subscribed to the Google Groups 
ruby-talk-google group. To post to this group, send email to 
[email protected]. To unsubscribe from this group, send email 
to [email protected]. For more options, visit this 
group at https://groups.google.com/d/forum/ruby-talk-google?hl=en

Reply via email to