Sha256: 27dc6a8e243c037e24e12231fc2afa3660841d0f95dbe8f2755b846627c5a529
Contents?: true
Size: 1.31 KB
Versions: 1
Compression:
Stored size: 1.31 KB
Contents
require 'active_support/core_ext' module Pleiades module Command module NestBlocks extend ActiveSupport::Concern def scope(*scopes, &block) scopes.each { |s| nest_block __callee__, s, &block } end alias :scope_append scope alias :scope_unshift scope def action(*actions, &block) actions.each { |a| nest_block __callee__, a, &block } end private def default_options { scope: [], action: '' } end def nest_block(method, context, &block) @_options = __send__ "merge_#{method}", context Pleiades::Command::Router.new(@_options).instance_eval(&block) end def merge_scope(context) operator = if /^merge_scope(_append)?$/ =~ __callee__ :append elsif /^merge_scope_unshift$/ =~ __callee__ :unshift end __merge__ ->(option) { option[:scope].__send__ operator, context } end alias :merge_scope_append merge_scope alias :merge_scope_unshift merge_scope def merge_action(context) __merge__ ->(option) { option[:action] = context } end def __merge__(proc) dup_options = @options.deep_dup proc.call(dup_options) dup_options end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
pleiades-0.1.1 | lib/pleiades/core/command/nest_blocks.rb |