Ruby 中 Enumerable 的一些方法

判断列表

all? any? none? one?如果有代码块,则以代码块的返回值判断;如果没有代码块,则用自身元素判断。

all? The method returns true if the block never returns false or nil

any? The method returns true if the block ever returns a value other than false or nil

none? The method returns true if the block never returns true for all elements

one? The method returns true if the block returns true exactly once

[1, 2, 3, 4].all? { |x| x<3 }   # false
[1, 2, 3, 4].any? { |x| x<3 }   # true
[1, 2, 3, 4].none? { |x| x<1 }  # true
[1, 2, 3, 4].one? { |x| x<1 }  # false

include?member? 是否包含某个元素

Read more   2015/1/10 posted in  Ruby

使用 EventMachine 实现简单的服务端

一个简单的 HTTP Server 例子

require 'eventmachine'
require 'em-http-server'

class HTTPHandler < EM::HttpServer::Server
  # 请求从这里开始执行
  def process_http_request
    @http # 包含所有 http headers 的 hash
    @http_content # http body

    # 构造 http response
    response = EventMachine::DelegatedHttpResponse.new(self)
    response.status = 200
    response.content = 'hello, world!'
    response.send_response
  end

  # 请求发生异常时的回调方法
  def http_request_errback e
    puts "#{e.backtrace.shift}: #{e.message} (#{e.class})"
    puts e.backtrace.map{|line| "\tfrom #{line}"}
  end
end

EM.run do
  # hit Control + C to stop
  Signal.trap("INT")  { EventMachine.stop }
  Signal.trap("TERM") { EventMachine.stop }

  EM.start_server 'localhost', 10000, HTTPHandler
end
Read more   2014/12/12 posted in  Ruby

使用 Nokogiri 构建和解析 XML

构建 XML

  • 全新构建一个 XML

    builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
    xml.envelope {
    xml.header(:identifier => 'IDENTIFIER') {
    xml.type('TYPE')
    }
    xml.content
    }
    end
Read more   2014/7/19 posted in  Ruby

Ruby 中使用 Thrift 实现 RPC 调用

Thrift 框架简介

Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。
详情参考
官方文档

定义 .thrift 文件

namespace rb model

struct User {
  1: i32 id,
  2: string name,
}

service UserStorage {
  void set_user(1: User user),
  User get_user(1: i32 id),
}
Read more   2014/4/2 posted in  Ruby