从Sinatra扩展中调用Sinatra的DSL方法

问题描述

我有一个模块化的Sinatra应用程序,正在寻找从其他模块内部调用Sinatra API级别方法(例如get())的最直接方法。我以为可以使用Sinatra扩展名,但是有些地方不起作用。

这是导入所有其他模块的主文件

app / app.rb

require 'sinatra/base'
Dir[File.join(__dir__,'articles','*.rb')].each { |file| require file }

module Tir
  class App < Sinatra::Base
    register Sinatra::Blog

    get '/articles' do
      articles = parse_articles('articles/*.mdown')
    end

  end 
end 

这是我从内部调用get()方法-不能:

app / articles / blog.rb

module Sinatra
  module Blog

  ARTICLES = []

  def parse_articles(dir)
    Dir.glob(dir) do |file|
      article = initialize_article file
      if article.ready?
        generate_path(article)
        ARTICLES << article
      end
    end
  end

  def generate_path(article)
    get("/#{article.relative_path}") do
      erb :'articles/article',:locals => { :article => article },:layout => :'articles/layout_article'
    end
  end

  end
  register Blog
end

config.ru

require 'rubygems'
require 'bundler'

Bundler.require

require_relative 'app/app'

run Tir::App

运行此命令时,我得到undefined method 'parse_articles' for #<Tir::App:0x00007f9b6536c5d8>

这里不对吗?谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)