Web APIのレスポンスから動的にクラスを生成してみた
この記事を読んで,動的にクラスを生成する場合はどう書くのかなぁと思って,書いてみた(だからどうしたってかんじだけど).
# coding: utf-8 require 'json' require 'faraday' conn = Faraday.new do |builder| builder.request :url_encoded builder.request :retry builder.adapter :net_http end # ベーシック認証の設定 conn.basic_auth("username", "password") # Web API 呼び出し response = conn.get do |req| req.url "https://api.bitbucket.org/1.0/user" end # レスポンスボディを JSON に変換 json = JSON.parse(response.body) # 動的にクラスを定義 class_name = "User" user = json[class_name.downcase] Object.const_set(class_name.to_sym, Class.new do user.keys.each do |key| attr_accessor key.to_sym end end) # 動的に定義したクラスのpublicメソッドを表示(継承したものは除く) puts User.new.public_methods(false)
ちょっと黒魔術っぽい
追記
こんなことしなくてもOpenStructを継承したクラスをつくればいいじゃんと思った