lib/blueprints/root_namespace.rb in blueprints-0.9.0 vs lib/blueprints/root_namespace.rb in blueprints-1.0.0

- old
+ new

@@ -4,65 +4,58 @@ # building blueprints/namespaces by name. Is also used for copying instance variables between blueprints/contexts/global # context. class RootNamespace < Namespace # Lists of executed blueprints (to prevent executing twice). Cleared before each test. attr_reader :executed_blueprints - # Context that blueprints/namespaces are built against. Reset before each test. - attr_writer :eval_context # Initialized new root context. def initialize @executed_blueprints = @global_executed_blueprints = [] @auto_iv_list = Set.new super '', Context.new end - # Loads all instance variables from global context to current one. Creates new eval context. - def setup - @eval_context = EvalContext.new + # Loads all instance variables from global context to current one. + def setup(environment) (@executed_blueprints - @global_executed_blueprints).each(&:undo!) @executed_blueprints = @global_executed_blueprints.clone if Blueprints.config.transactions - Marshal.load(@global_variables).each { |name, value| eval_context.instance_variable_set(name, value) } + Marshal.load(@global_variables).each { |name, value| environment.instance_variable_set(name, value) } else - build(Blueprints.config.prebuild) + build(Blueprints.config.prebuild, environment) end end - # Sets up global context and executes prebuilt blueprints against it. + # Sets up a context and executes prebuilt blueprints against it. # @param [Array<Symbol, String>] blueprints Names of blueprints that are prebuilt. def prebuild(blueprints) - build(blueprints) if blueprints + environment = Object.new + environment.extend Blueprints::Helper + build(blueprints, environment) if blueprints @global_executed_blueprints = @executed_blueprints - @global_variables = Marshal.dump(eval_context.instance_variables.each_with_object({}) { |iv, hash| hash[iv] = eval_context.instance_variable_get(iv) }) + @global_variables = Marshal.dump(environment.instance_variables.each_with_object({}) { |iv, hash| hash[iv] = environment.instance_variable_get(iv) }) end - # Builds blueprints that are passed against current context. Copies instance variables to context given if one is given. + # Builds blueprints that are passed against current context. # @param [Array<Symbol, String>] names List of blueprints/namespaces to build. - # @param current_context Object to copy instance variables from eval context after building to. - # @param build_once (see Buildable.build) + # @param environment Object to build blueprints against. + # @param options (see Buildable#build) + # @option options (see Buildable#build) # @return Result of last blueprint/namespace. - def build(names, current_context = nil, build_once = true) + def build(names, environment, options = {}) names = [names] unless names.is_a?(Array) result = names.inject(nil) do |result, member| if member.is_a?(Hash) - member.map { |name, options| self[name].build(eval_context, build_once, options) }.last + member.map { |name, opts| self[name].build(environment, options.merge(:options => opts)) }.last else - self[member].build(eval_context, build_once) + self[member].build(environment, options) end end - eval_context.copy_instance_variables(current_context) if current_context result - end - - # Return current eval context or creates a new one. - # @return [Blueprints::EvalContext] Eval context to be used to build blueprints. - def eval_context - @eval_context ||= EvalContext.new end @@root = RootNamespace.new end end