Итак, в моем проекте я использую cancancan для авторизации. Для написания способности spe c мы поддерживаем вility_spe c .rb. За последние несколько лет размер файлов значительно вырос. Теперь в нем около 3000 строк, что довольно много, и главная проблема, с которой мы сталкиваемся, заключается в том, что мы не можем запустить весь файл за один раз. Если мы попытаемся это сделать, наша система зависнет. Чтобы решить эту проблему, я пришел к подходу, чтобы разделить файл на несколько файлов. Так как rspe c следует соглашению об именах, я немного озадачен. Как это сделать.
class Ability
include CanCan::Ability
attr_accessor :feature_factory
def initialize(user, session = nil)
alias_action :read, :update, :to => :read_write
user ||= User.new # guest user (not logged in)
can :read, Abc
can :manage, :file
can :view, :login
if user.anonymous_user?
## a lot of abiities
end
if user.mum_user?
## a lot of abiities
end
if user.tsm_user?
## a lot of abiities
end
#Similarly we have a lot of roles and abilities
end
require 'spec_helper'
require "cancan/matchers"
describe Ability do
describe "#anonymous_user" do
## a lot of specs for testing
end
describe "#tsm_user" do
## a lot of specs for testing
end
describe "#mum_user" do
## a lot of specs for testing
end
# similarly for other user roles
end
Путь к файлу способности - app / models / able.rb
Способность spe c путь к файлу - spec / models /ility_spe c .rb
Итак, пока я пытался создать папкуility_folder внутри spec / models, и я разделил спецификации на основе ролей в их соответствующих файлах. Что-то вроде ниже
spec/models/ability/anonymous_user_spec.rb
require 'spec_helper'
require "cancan/matchers"
describe Ability do
describe "#anonymous_user" do
## a lot of specs for testing
end
end
spec/models/ability/tsm_user_spec.rb
require 'spec_helper'
require "cancan/matchers"
describe Ability do
describe "#tsm_user" do
## a lot of specs for testing
end
end
spec/models/ability/mum_user_spec.rb
require 'spec_helper'
require "cancan/matchers"
describe Ability do
describe "#mum_user" do
## a lot of specs for testing
end
end
Когда я пытался запустить это, он не дал мне никаких ошибок, и он работал в течение секунды. Кроме того, я попытался ввести ошибку намеренно, но это не помогло. Итак, мои вопросы
1) Как решить проблему такого рода, когда размер файла огромен
2) Если приведенный выше подход верен, то почему он не работает для меня
3) Будет ли улучшение производительности, если я разделю файл