features/step_definitions/configuration_steps.rb in activeadmin-0.3.4 vs features/step_definitions/configuration_steps.rb in activeadmin-0.4.0
- old
+ new
@@ -1,31 +1,87 @@
+module ActiveAdminReloading
+
+ def load_active_admin_configuration(configuration_content)
+ eval(configuration_content)
+ ActiveAdmin::Event.dispatch ActiveAdmin::Application::LoadEvent, ActiveAdmin.application
+ Rails.application.reload_routes!
+ ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
+ end
+
+end
+
+module ActiveAdminContentsRollback
+
+ def self.recorded_files
+ @files ||= {}
+ end
+
+ # Records the contents of a file the first time we are
+ # about to change it
+ def self.record(filename)
+ contents = File.read(filename) rescue nil
+ recorded_files[filename] = contents unless recorded_files.has_key?(filename)
+ end
+
+ # Rolls the recorded files back to their original states
+ def self.rollback!
+ recorded_files.each do |filename, contents|
+ # contents will be nil if the file didin't exist
+ if contents
+ File.open(filename, "w+") {|f| f << contents }
+ else
+ File.delete(filename)
+ end
+ end
+
+ @files = {}
+ end
+
+end
+
+World(ActiveAdminReloading)
+
+After do
+ ActiveAdminContentsRollback.rollback!
+end
+
Given /^a configuration of:$/ do |configuration_content|
- eval configuration_content
- Rails.application.reload_routes!
+ load_active_admin_configuration(configuration_content)
ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
end
Given /^an index configuration of:$/ do |configuration_content|
- eval configuration_content
- Rails.application.reload_routes!
- ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
+ load_active_admin_configuration(configuration_content)
- And 'I am logged in'
- When "I am on the index page for posts"
+ step 'I am logged in'
+ step "I am on the index page for posts"
end
Given /^a show configuration of:$/ do |configuration_content|
- eval configuration_content
- Rails.application.reload_routes!
- ActiveAdmin.application.namespaces.values.each{|n| n.load_menu! }
+ load_active_admin_configuration(configuration_content)
- And 'I am logged in'
- When "I am on the index page for posts"
- And 'I follow "View"'
+ step 'I am logged in'
+ step "I am on the index page for posts"
+ step 'I follow "View"'
end
Given /^"([^"]*)" contains:$/ do |filename, contents|
require 'fileutils'
filepath = Rails.root + filename
FileUtils.mkdir_p File.dirname(filepath)
+ ActiveAdminContentsRollback.record(filepath)
+
File.open(filepath, 'w+'){|f| f << contents }
+end
+
+Given /^I add "([^"]*)" to the "([^"]*)" model$/ do |code, model_name|
+ filename = File.join(Rails.root, "app", "models", "#{model_name}.rb")
+ ActiveAdminContentsRollback.record(filename)
+
+ # Update the file
+ contents = File.read(filename)
+ File.open(filename, "w+") do |f|
+ f << contents.gsub(/^(class .+)$/, "\\1\n #{code}\n")
+ end
+
+ ActiveSupport::Dependencies.clear
end