Posts Tagged ‘ruby’

ruby访问web service(RPC)

20th April, 2007

简单例子(访问这个WSDL):

  1. #!/usr/bin/env ruby
  2.  
  3. require "soap/wsdlDriver"
  4.  
  5. wsdl_url="http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl"
  6. driver=SOAP::WSDLDriverFactory.new(wsdl_url).create_rpc_driver
  7.  
  8. #p (driver.methods-Object.new.methods).sort
  9. r=driver.getQuote("TR")
  10. puts "#{r.class}\t:\t#{r}"

输出:

  1. kdr2@kdr2-pc:~/work/ruby/stdhk$ ./std_soap.rb
  2. Float   :       29.81

Hash#merge也可以接收block

13th March, 2007

Hash#merge被广泛用来在ruby中模拟keyword arguments,大家已经很熟练了:

  1. def func(given_opt)
  2.    opt={:opt_1=>"v1",:opt_2=>"v2"}
  3.    opt=opt.merge(given_opt)
  4.    #blahblah...
  5. end

这样given_opt就能把opt里面的内容进行扩充或覆盖,rails framework里面那些help方法广泛采用了这个写法。
[...]

ActiveRecord Tips

8th February, 2007

通过through多对多的结构联合查询的时候尽量用中间表的find,然后include其他两个Entity:
[...]

About ruby’s “open class”

7th February, 2007

[本文发出的第二天,我不得不对此文进行修改 :(]
Ruby的open class算是是他众多优秀特性中最耀眼的一个,active_support就用这个特性玩出了众多花样,但是今天有人提出了这格特性给ruby带来的安全问题,我在同一个名字空间下写一个跟你的类同名的类覆盖或者添加一个方法,然后在你的类加载之后加载(能出现这个过程的情况估计也很少,有这个条件和功力可以直接改你的source了),岂不是很危险,想想有点道理,怎么才能把某些类的open class给禁了呢?
[...]

Unicode in Ruby

6th February, 2007

Ruby的Unicode支持确实是一个问题,尽管$KCODE=’u'可以解决一些字符串打印之类的问题,但是进行Unicode字符串的截取之类稍微复杂点操作就不行了,以前我的办法是,不论什么编码,先用iconv转换成UTF-16,之后截取,再转换回来,能在一定范围内解决一些小问题,现在activerecord (>=1.15.1)提供了 ActiveSupport::Multibyte::Chars类,很好的解决了Unicode的问题,下面是ActiveSupport::Multibyte::Chars用法的一点小例子:
[...]

Rails REST的一个小Tip

31st January, 2007

To make IE(6.0) happy, place “want.html” the first block please…

  1. respond_to do |want|
  2.   want.html{
  3.     render :text=>"html"
  4.     return
  5.   }
  6.   want.xml{
  7.     render :text=>"xml"
  8.     return
  9.   }
  10.   want.js{
  11.     render :text=>"js"
  12.     return
  13.   }
  14. end

今天把xml放到了第一位,同事用IE(6.0)的返回了xml,应该是因为IE(6.0)请求的时候没有设置accept,这样就会进入第一个block…我手头没IE(6.0),也懒得抓包分析了,记住把html放第一位好了,IE(主要是7.0啦,低版本肯定更没有)的其他版本情况未知。

Ruby中Digest::SHA1.hexdigest(string)的Java实现

26th January, 2007

也许在处理用户密码的时候会用到 :)

Ruby代码:

  1. require "digest/sha1"
  2.  
  3. def sha1_hexdigest(src)
  4.    Digest::SHA1.hexdigest(src)
  5. end

Java代码:
[...]