Robert Klemme
11/15/2007 3:13:00 PM
2007/11/15, Keith Chapman <keithgchapman@gmail.com>:
> Hi Robert and others,
>
> We are trying to define a way of writing web services in ruby (Code
> First approach). And we expect to keep it as simple as possible. In
> order to do this we need to define some metadata that we can use to
> generate a pleasant WSDL. This metadata may include things like
> documentation and details about input and output Types. Note that ruby
> is a Dynamic language whereas xml schema is not. And although a
> parameter taken into a function could be of anyType in most cases it
> operates on it assuming its of a certain type. And getting this
> information into the WSDL matters in that case.
>
> Assume that I have a function as follows,
>
> def foo(bar, foobar)
>
> end
>
> I need to get the information on the types expected by this function
> across to the WSDL. I basically need a way to say that bar is a String
> and foobar is an integer. This is where the matadata that I'm talking
> about comes into play.
>
> It will be nice if the Ruby community can help us figure out a nice
> rubish way of doing this. The most important thing is that I want this
> all to fit in with ruby people so this should look rubish as much as
> possible.
Well, then it sounds as if you need structured data for a method.
Extending my last proposed solution a bit you could do this:
16:08:14 /cygdrive/c$ cat meta.rb
require 'ostruct'
class Foo
def self.meta()
@method_meta ||= Hash.new {|h,k| h[k]=OpenStruct.new}
end
def bar() 1 end
meta[:bar].length=567
meta[:bar].return_type=Integer
end
puts Foo.meta[:bar]
16:08:48 /cygdrive/c$ ruby meta.rb
#<OpenStruct return_type=Integer, length=567>
16:08:50 /cygdrive/c$
Of course you can use a Hash instead of the OpenStruct - but that's
probably rather a matter of taste. If you need automatic discovery of
meta data set I'd probably rather use a Hash - if you know which meta
data you expect I'd probably use an OpenStruct or a Struct.
Cheers
robert
--
use.inject do |as, often| as.you_can - without end