Sha256: 38bb96d4622692dcb874e15ae788bd9c3591eef3e356ac823379b5049beb8b68

Contents?: true

Size: 1.3 KB

Versions: 218

Compression:

Stored size: 1.3 KB

Contents

module ActiveScaffold
  # Exposes a +configure+ method that accepts a block and runs all contents of the block in two contexts, as opposed to the normal one. First, everything gets evaluated as part of the object including Configurable. Then, as a failover, missing methods and variables are evaluated in the original binding of the block.
  #
  # Note that this only works with "barewords". Constants, instance variables, and class variables are not currently supported in both contexts.
  #
  # May add the given functionality at both the class and instance level. For the former, use +extend+, and for the latter, use +include+.
  module Configurable
    def configure(&configuration_block)
      return unless configuration_block
      @configuration_binding = configuration_block.binding
      ret = instance_exec self, &configuration_block
      @configuration_binding = nil
      return ret
    end

    # this method will surely need tweaking. for example, i'm not sure if it should call super before or after it tries to eval with the binding.
    def method_missing(name, *args)
      begin
        super
      rescue NoMethodError, NameError
        if @configuration_binding.nil?
          raise $!
        else
          eval("self", @configuration_binding).send(name, *args)
        end
      end
    end
  end
end

Version data entries

218 entries across 218 versions & 8 rubygems

Version Path
active_scaffold_vho-4.0.0 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.14 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.13 lib/active_scaffold/configurable.rb
active_scaffold-sequel-0.8.0 lib/active_scaffold/configurable.rb
active_scaffold-sequel-0.7.1 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.12 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.11 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.10 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.9 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.8 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.7 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.6 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.5 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.4 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.3 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.2 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.1 lib/active_scaffold/configurable.rb
active_scaffold-sequel-0.7.0 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.2.0 lib/active_scaffold/configurable.rb
active_scaffold_vho-3.0.31 lib/active_scaffold/configurable.rb