ostruct快速声明一个类--ruby

ostruct

ostruct是ruby自带的标准库,不需要额外安装,require之后即可使用

  • ostruct即[class OpenStruct],传入hash参数,用于快速声明一个 Class
  • 详细解释
实践

目标:根据某接口的返回值,快速生成类,并且类的实例对象可以调用接口返回的属性

require 'rest-client'
require 'ostruct'
require 'json'

class PullRequest
  attr_accessor :pr_ostruct

  # 初始化需要的实例变量@pr_ostruct
  def initialize
    @pr_ostruct = nil
    RestClient.get("https://gitee.com/api/v5/repos/maxiaoqian/all_types/pulls/1"){|res|
      if res.code == 200 and res.headers[:content_type] == 'application/json'
        @pr_ostruct = OpenStruct.new(JSON.parse(res.body))
      elsif res.code == 200 and res.headers[:content_type] != 'application/json'
        puts "接口返回的类型不是json格式而是:#{res.headers[:content_type]}"
      else
        puts "接口访问失败,状态码:#{res.code}"
      end
     }
  end

  # 当对象调用不存在的方法时就会触发这个方法
  def method_missing(m, *args, &block)
    @pr_ostruct.send(m, *args, &block)
  end

end

pr = PullRequest.new()
# 方式1: 指定method_missing,当pr对象调用不存在的方法,使用pr_ostruct对象调用pr_ostruct上的属性
puts pr.state

# 方式2: 指定pr_ostruct属性,pr对象直接调用其实例属性pr_ostruct上的数据
puts pr.pr_info.state

你可能感兴趣的:(ostruct快速声明一个类--ruby)