没有任何代码的动态rails控制器和视图

时间:2015-02-22 15:03:37

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 rspec ruby-on-rails-plugins

我正在寻找减少模型,控制器和视图的默认代码的方法。

我刚刚创建了一个带有两个字段以及控制器和视图的模型SearchDescription。我需要默认的脚手架索引,显示等。还有rspecs,但同样完全默认。没什么特别的。只是默认值。

但事实证明,我目前正在提交大约20个具有完全默认行为的文件。没什么特别的。

有没有办法在项目中实际生成的代码更少的情况下更清洁,而是“动态生成”?

例如,只需在配置文件中编写以下内容: SearchDescription,field1,field2;与控制器;有意见;与rspecs

按惯例按惯例进行操作而不实际生成文件?

1 个答案:

答案 0 :(得分:0)

Rails是关于可读性,约定优于配置以及显示其他自我纪录的代码。虽然......之前我已经以这种方式进行了测试,虽然我们最终使用了相同的功能,并将它们转发到必须存在的文件上,以便让任何人都能清楚地阅读。

规范部分可能如下所示:

require 'spec_helper'

初始化我们可以轻松阅读和操作的' config' -Hash:

objectHash = {  'controller' => 'ClassController', 
          'object' => 'Class',
          'engine' => 'Engine'
        }

hash = { "#{objectHash['engine']}::#{objectHash['object'].capitalize}" => objectHash }


hash.each do |key, values|

describe Object.const_get("#{values['engine']}::#{values['controller']}"), :type => :controller do
  login_user

  before :each do
    @object_string = "#{values['engine']}::#{values['object']}"
    @object = FactoryGirl.create(Object.const_get(@object_string))
    @example_attribute = :objectAttribute
  end

这是通常的轨道方式,只是更抽象一点。

  context "GET 'index'" do
    it "should not be possible to access without permission" do
      get :index, { use_route: values['engine'].to_sym }
      expect(response).to have_http_status(302)
    end

    it "should be possible to access with permissions" do
      permission_string = "#{values['engine'].downcase}_#{values['object'].underscore.pluralize.downcase}_index"
      create_permissions(permission_string, false, true, subject.current_user)

      get :index, { use_route: values['engine'].to_sym }
      expect(response).to have_http_status(200)
    end
  end
end

依旧......

正如您可能想象的那样,这种代码真正突破了#34;易于理解"准则,我们都试图遵循。

最后你说你正在为基本功能编写测试?测试你已经意识到功能的东西真的有意义吗?我不确切地知道,但听起来你正在测试基地轨道。