Forum: Ruby old syntax? what's going on here

Posted by tamouse mailing lists (Guest)
on 2013-02-05 14:34
(Received via mailing list)
I have this in a _spec.rb file: (a gem I inherited at work)

Open3.expects(:popen3).with do |command|
      case part_of_command
      when Regexp: command =~ part_of_command
      when String: command.include?(part_of_command)
      else raise "Can't match that"
      end
    end

which ruby is complaining about:

spec/ruby_gpg_spec.rb:7: syntax error, unexpected ':', expecting
keyword_then or ',' or ';' or '\n'
      when Regexp: command =~ part_of_command
                  ^
spec/ruby_gpg_spec.rb:8: syntax error, unexpected keyword_when,
expecting keyword_end
      when String: command.include?(part_of_command)
          ^
spec/ruby_gpg_spec.rb:9: syntax error, unexpected keyword_else,
expecting keyword_end
      else raise "Can't match that"
          ^
spec/ruby_gpg_spec.rb:241: syntax error, unexpected keyword_end, 
expecting $end

I'm completely unfamiliar with what is supposed to be happening above,
but I rather assume that Regexp: and String: have something to do with
the Open3.expects bit.

I'm a bit pressed for time right now, can anyone give me some fast
pointers? Already delving into Open3...
Posted by Carlo E. Prelz (Guest)
on 2013-02-05 14:47
(Received via mailing list)
Subject: old syntax? what's going on here
  Date: mar 05 feb 13 10:33:35 +0900

Quoting tamouse mailing lists (tamouse.lists@gmail.com):

> I have this in a _spec.rb file: (a gem I inherited at work)
>
> Open3.expects(:popen3).with do |command|
>       case part_of_command
>       when Regexp: command =~ part_of_command
>       when String: command.include?(part_of_command)
>       else raise "Can't match that"
>       end
>     end

Are you sure that code ever worked?

From my very worn copy of "Ruby in a nutshell":

"A *when* statement's *expression* is separated from *code* by the
reserved word *then*, a newline, or a semicolon."

That colon should be a semicolon (or *then* or a newline)...

Carlo
Posted by tamouse mailing lists (Guest)
on 2013-02-05 14:53
(Received via mailing list)
On Tue, Feb 5, 2013 at 7:47 AM, Carlo E. Prelz <fluido@fluido.as> wrote:
>>       when String: command.include?(part_of_command)
>
> That colon should be a semicolon (or *then* or a newline)...

Heh, no -- I've inherited this little bit of thing that no one in the
group has ever done much with.
Posted by tamouse mailing lists (Guest)
on 2013-02-05 14:55
(Received via mailing list)
On Tue, Feb 5, 2013 at 7:52 AM, tamouse mailing lists
<tamouse.lists@gmail.com> wrote:
>>>       when Regexp: command =~ part_of_command
>> reserved word *then*, a newline, or a semicolon."
>>
>> That colon should be a semicolon (or *then* or a newline)...
>
> Heh, no -- I've inherited this little bit of thing that no one in the
> group has ever done much with.

Sure enough, Carlos. Now it syntax checks. But on to other problems,
namely with the Open3.expects and a later Open3.stub. I'm guessing I
need some kind of mocker; the .gemspec refers to mocha, which I'm
trying to look into.
Posted by unknown (Guest)
on 2013-02-05 14:59
(Received via mailing list)
Am 05.02.2013 14:33, schrieb tamouse mailing lists:
> which ruby is complaining about:
> expecting keyword_end
>        else raise "Can't match that"
>            ^
> spec/ruby_gpg_spec.rb:241: syntax error, unexpected keyword_end, expecting $end
>
> I'm completely unfamiliar with what is supposed to be happening above,
> but I rather assume that Regexp: and String: have something to do with
> the Open3.expects bit.

No. This case statement (with corrected syntax of course)
uses the class of the object referenced by the `command`
variable to branch execution.

command = 'list'
case command
when String
   puts 'a String'
when Regexp
   puts 'a Regexp'
else
   puts 'neither String nor Regexp'
end

=> a String
Posted by Wayne Brisette (Guest)
on 2013-02-05 15:04
(Received via mailing list)
----- Original Message ----
From: "sto.mar@web.de" <sto.mar@web.de>

> No. This case statement (with corrected syntax of course)
> uses the class of the object referenced by the `command`
> variable to branch execution.

I'm just a tad loss (not on the explanation), but where this is coming 
from...

> Open3.expects(:popen3).with do |command|
>        case part_of_command


Here case is looking at a local variable called part_of_command, but we 
didn't
pass that value (did we???), or is that somehow part of command in this 
snippet
of code?


Wayne
Posted by Carlo E. Prelz (Guest)
on 2013-02-05 15:09
(Received via mailing list)
Subject: Re: old syntax? what's going on here
  Date: mar 05 feb 13 10:54:39 +0900

Quoting tamouse mailing lists (tamouse.lists@gmail.com):

> Sure enough, Carlos. Now it syntax checks. But on to other problems,
> namely with the Open3.expects and a later Open3.stub. I'm guessing I
> need some kind of mocker; the .gemspec refers to mocha, which I'm
> trying to look into.

(it is Carlo, not Carlos - I am Italian... Nothing against the
Spaniards and the Portuguese, of course)

I never used Open3 (never needed). But if I type

ri expects

nothing appears. There must be yet another syntax error, in the sense
that you should have expect, not expects. Indeed, if I type

ri expect

I obtain (among others):

--8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<--
=== Implementation from Mock
------------------------------------------------------------------------------
  expect(name, retval, args=[], &blk)

------------------------------------------------------------------------------

Expect that method name is called, optionally with args or a blk, and
returns
retval.

  @mock.expect(:meaning_of_life, 42)
  @mock.meaning_of_life # => 42

  @mock.expect(:do_something_with, true, [some_obj, true])
  @mock.do_something_with(some_obj, true) # => true

  @mock.expect(:do_something_else, true) do |a1, a2|
    a1 == "buggs" && a2 == :bunny
  end

args is compared to the expected args using case equality (ie, the
'==='
operator), allowing for less specific expectations.

  @mock.expect(:uses_any_string, true, [String])
  @mock.uses_any_string("foo") # => true
  @mock.verify  # => true

  @mock.expect(:uses_one_string, true, ["foo"]
  @mock.uses_one_string("bar") # => true
  @mock.verify  # => raises MockExpectationError
--8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<----8<--

Then, if I ask ri for Mock, nothing comes out, I never used Mock
myself - I know nothing about that. Hmm... looks like this doc is a
leftover from an old installation (mock seems to have been part of
Ruby in the past but it is not there anymore). I expect you will find
stuff about Mock on the net.

Carlo
Posted by Heesob Park (phasis)
on 2013-02-05 15:28
(Received via mailing list)
2013/2/5 tamouse mailing lists <tamouse.lists@gmail.com>
>
> spec/ruby_gpg_spec.rb:9: syntax error, unexpected keyword_else,
> I'm a bit pressed for time right now, can anyone give me some fast
> pointers? Already delving into Open3...
>
The above case syntax is legitimate in ruby 1.8 but not in 1.9.
Refer to
http://blog.grayproductions.net/articles/getting_c...


Regards,

Park Heesob
Posted by unknown (Guest)
on 2013-02-05 15:31
(Received via mailing list)
Am 05.02.2013 15:08, schrieb Carlo E. Prelz:
> (it is Carlo, not Carlos - I am Italian... Nothing against the
> Spaniards and the Portuguese, of course)
>
> I never used Open3 (never needed). But if I type
>
> ri expects
>
> nothing appears. There must be yet another syntax error, in the sense
> that you should have expect, not expects. Indeed, if I type

No! As long as you do not have the same gems on your machine as
have been used for tamouse's project, that tells you nothing.

The Mocha::Mock class from the mentioned mocha gem class
*has* an expects method.

>
>    @mock.expect(:do_something_else, true) do |a1, a2|
>
>
> Carlo

No!

The Mock class you are talking about is part of MiniTest,
and rather new.
Posted by tamouse mailing lists (Guest)
on 2013-02-05 18:33
(Received via mailing list)
On Tue, Feb 5, 2013 at 8:27 AM,  <sto.mar@web.de> wrote:
>>> trying to look into.
>> that you should have expect, not expects. Indeed, if I type
>>
>>
>>    @mock.expect(:do_something_else, true) do |a1, a2|
>>
>>
> <https://github.com/stomar/>
>

This is the ruby_pgp module, which seems quite old(?) but has been
sucked into our code base somehow. I'm at a loss to understand how
this could actually be even passing tests, until I realized there are
no tests for it either! (The gem has tests, lots of them, but they
aren't run in our own spec tests.) It only cropped up now as we're
finally using the functionality that it offers at this stage of the
game. It's a wrapper for the gpg command.

I'm ripping it out of our code base and restoring it to proper Gem
status so we can use it better. I've looked at other gpg gems, but
they would involve more work to just get the basic thing we need done,
which is just encrypt and decrypt a single file in a standalone job
that runs once a week.

The mocha gem is mentioned in the gemspec (there's no Gemfile) but I
can't figure out where it gets included in this (yet!).
Posted by tamouse mailing lists (Guest)
on 2013-02-05 18:42
(Received via mailing list)
On Tue, Feb 5, 2013 at 8:08 AM, Carlo E. Prelz <fluido@fluido.as> wrote:
> (it is Carlo, not Carlos - I am Italian... Nothing against the
> Spaniards and the Portuguese, of course)

Deepest apologies. I didn't even notice that I added the -s until you
pointed it out. So annoying!

I have a name (Tamara) which should be easy to spell. But I seem to
have some weird kind of accent or something so people always are
spelling it wrong: Timera, Camera, TOmara, Tamera, Tamra, ...

This only seems to happen with Americans. Others never seem to have a
problem hearing it and knowing how it's spelled. What's weird is I'm
American, people say I have virtually no accent of any kind (which
means, I guess, neutral "newscaster" American accent?)

At any rate, I do apologize.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.