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