Как использовать JBuilder вне приложения Rails?

Мне нравится синтаксис JBuilder, и я хотел бы использовать его вне рельсов. У меня есть класс и метод to_json:

class Blog

  def to_json
    Jbuilder.encode do |json|
      json.(self, :id, :logo)

      json.articles articles do |json, article|
        json.id article.id
      end
    end
  end

end

К сожалению, я получаю:

/Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jbuilder-0.4.0/lib/jbuilder.rb:13:in `define_method': wrong argument type NilClass (expected Proc/Method) (TypeError)
  from /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jbuilder-0.4.0/lib/jbuilder.rb:13:in `<class:Jbuilder>'
  from /Users/justin/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/jbuilder-0.4.0/lib/jbuilder.rb:7:in `<top (required)>'

Что соответствует:

# jbuilder.rb
class Jbuilder < BlankSlate
  # Yields a builder and automatically turns the result into a JSON string
  def self.encode
    new._tap { |jbuilder| yield jbuilder }.target!
  end

  define_method(:__class__, find_hidden_method(:class))   # <--- exception
  define_method(:_tap, find_hidden_method(:tap))
  # .... 

Есть идеи, какие драгоценные камни мне нужны в драгоценном камне, чтобы удовлетворить JBuilder?


person Allyl Isocyanate    schedule 16.05.2012    source источник
comment
Вы можете использовать rubygems.org/gems/jbuilder . Включите требование «rubygems» и требование «jbuilder» поверх кода.   -  person Shamith c    schedule 17.05.2012
comment
Начиная со свежего драгоценного камня без других зависимостей, это сработало. Думаю, это, вероятно, связано с попыткой использовать с ним активные рекордные модели, проведу рефакторинг и посмотрю, как пойдет. Спасибо, Шамит.   -  person Allyl Isocyanate    schedule 17.05.2012


Ответы (1)


Ты можешь использовать

template = File.read(template_file)
output = Jbuilder.encode { |json| eval template }
person Stefan    schedule 09.04.2019