[#399938] how to read arrary with an array — "Richard D." <lists@...>

Hello. I believe this is basic question, but I'm just starting to learn

19 messages 2012/10/02

[#400050] img src while sending email ruby cgi — Ferdous ara <lists@...>

Hi

16 messages 2012/10/05

[#400351] Drop 1st and last particular character — ajay paswan <lists@...>

What is the most efficient way to drop '#' from the first place and last

15 messages 2012/10/16

[#400374] database part of a desktop application — "Sebastjan H." <lists@...>

Hi,

14 messages 2012/10/16
[#400375] Re: database part of a desktop application — Chad Perrin <code@...> 2012/10/16

On Wed, Oct 17, 2012 at 05:28:39AM +0900, Sebastjan H. wrote:

[#400377] Re: database part of a desktop application — sto.mar@... 2012/10/17

Am 16.10.2012 23:24, schrieb Chad Perrin:

[#400389] Re: database part of a desktop application — Chad Perrin <code@...> 2012/10/17

On Wed, Oct 17, 2012 at 01:39:21PM +0900, sto.mar@web.de wrote:

[#400386] Unable to send attachment, and dealing with multiple attachment — ajay paswan <lists@...>

Hi,

11 messages 2012/10/17

[#400454] Hash with Integer key issue — Wayne Simmerson <lists@...>

Hi Im new to Ruby and am getting some unexpected results from a

18 messages 2012/10/19

[#400535] Name/symbol/object type clash? What is happening here? — Todd Benson <caduceass@...>

It's nonsense code, but I'm curious as to what is going on behind the scenes...

41 messages 2012/10/23

[#400556] Calling a method foo() or an object foo.method_call_here - both — Marc Heiler <lists@...>

Hello.

13 messages 2012/10/24

[#400650] OpenSSL ECDSA public key from private — Nokan Emiro <uzleepito@...>

Hi,

11 messages 2012/10/27

[#400680] Passing folder as argument ARGV? — Joz Private <lists@...>

Is there an easy way to pass multiple files on the command line?

15 messages 2012/10/28
[#400681] Re: Passing folder as argument ARGV? — brad smith <bradleydsmith@...> 2012/10/28

How are you traversing the directory you pass in on the command line ?

[#400697] File.readable? and /proc — Jeff Moore <lists@...>

root@nail:/projects/proc_fs# uname -a

13 messages 2012/10/28

[#400714] Marshal.load weird issue — "Pierre J." <lists@...>

Hi guys

12 messages 2012/10/28

[#400781] bug?: local variable created in if modifier not available in modified expression — "Mean L." <lists@...>

irb(main):001:0> local1 if local1 = "created"

21 messages 2012/10/30
[#400807] Re: bug?: local variable created in if modifier not available in modified expression — Bartosz Dziewoński <matma.rex@...> 2012/10/31

Oh, and in case it wasn't apparent: you can just add

[#400808] Re: bug?: local variable created in if modifier not available in modified expression — Eliezer Croitoru <eliezer@...> 2012/10/31

On 10/31/2012 4:52 PM, Bartosz Dziewoナгki wrote:

[#400809] Re: bug?: local variable created in if modifier not available in modified expression — Robert Klemme <shortcutter@...> 2012/10/31

On Wed, Oct 31, 2012 at 4:28 PM, Eliezer Croitoru <eliezer@ngtech.co.il>wrote:

[#400784] REXML & HTMLentities incorrectly map to UTF-8 — "Mark S." <lists@...>

I have some XML data (UTF 8) that I'm trying to convert into another XML

13 messages 2012/10/30

Re: ghost methods and dynamic methods

From: "Jan E." <lists@...>
Date: 2012-10-11 02:35:32 UTC
List: ruby-talk #400234
Hi,

That's not how you should use method_missing. Note that this method is
called *every time* a method can't be found in the standard lookup path.
So it makes no sense to define it like a normal method with specific
functionality. This will lead to unexplicable behaviour and strange
errors. In your case, every method that doesn't "exist" is assumed to be
a "select" method, even if it has absolutely nothing to do with it (like
a typo).

If you want to use method_missing at all, then only let it catch
specific method names and raise an error otherwise. However, in your
case it simply makes no sense. You're putting so much effort in parsing
the method name that you've almost created your own "language in a
language" with its own method calling syntax. That's definitely not the
purpose of method_missing. Use a normal method and pass the data through
the arguments (like you always do).

Your class structure is also rather strange. What is "myclass"? I don't 
understand the purpose of this method(?), and you seem to be using it in 
completely different contexts. If you tell us exactly what you have and 
what you want to do, we'll be able to help you better.

Using a similar example, I basically see two possibilities that make 
sense:

Either you simply define a method that takes a block and passes it to 
@cars.select:

#----------------------------------------
class Car

  def self.create_test_data
    @cars = ['red', 'black', 'white'].map {|color| Car.new color}
  end

  # save block in parameter (as a Proc object)
  def self.select_cars &block
    # when there's no block given, you probably want *all* cars
    if block_given?
      @cars.select &block  # convert Proc object to block again
    else
      @cars
    end
  end

  attr_reader :color

  def initialize color
    @color = color
  end

end

Car.create_test_data
p Car.select_cars {|car| car.color == 'red'}
#----------------------------------------

Or if you insist on the pattern "attribute-operator-value", pass a hash 
to the method:

#----------------------------------------
class Car

  def self.create_test_data
    @cars = ['red', 'black', 'white'].map {|color| Car.new color}
  end

  def self.select_cars filter = {}
    if filter.has_key? :by
      attribute, operator, value =
          filter.values_at(:by, :is, :value)
      @cars.select do |car|
        car.public_send(attribute).public_send operator, value
      end
    else
      @cars
    end
  end

  attr_reader :color

  def initialize color
    @color = color
  end

end

Car.create_test_data
p Car.select_cars by: 'color', is: '==', value: 'red'
#----------------------------------------

This should also answer your original question: You cannot assemble Ruby 
code within Ruby code in the sense of

car."color" "==" "red"

or something. That's not how Ruby (or most other languages) work. If you 
want to dynamically call a method, you need to call "send" or 
"public_send" (which will only call public methods).

I think this is generally going in a wrong direction. You're somehow on 
the road to this kind of "meta-metaprogramming" where you basically use 
your own syntax within Ruby and then parse it again to Ruby code. Don't 
do that, especially when you're a beginner. Ruby does have strong 
metaprogramming abilities, but don't get lost in them. They sometimes 
lead away from the simple solutions up to a point where you're working 
around Ruby instead of actually *using* it.

-- 
Posted via http://www.ruby-forum.com/.

In This Thread