admin_it 1.0.11 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +8 -1
- data/README.md +4 -2
- data/admin_it.gemspec +1 -0
- data/lib/admin_it.rb +7 -5
- data/lib/admin_it/actions/action.rb +5 -2
- data/lib/admin_it/config.rb +1 -0
- data/lib/admin_it/context/collection_context.rb +10 -4
- data/lib/admin_it/context/context.rb +12 -13
- data/lib/admin_it/context/show_context.rb +6 -5
- data/lib/admin_it/context/single_context.rb +19 -8
- data/lib/admin_it/context/table_context.rb +9 -7
- data/lib/admin_it/context/tiles_context.rb +1 -0
- data/lib/admin_it/controller.rb +3 -1
- data/lib/admin_it/data.rb +4 -2
- data/lib/admin_it/data/active_record.rb +10 -301
- data/lib/admin_it/data/active_record/collection_context.rb +47 -0
- data/lib/admin_it/data/active_record/field.rb +64 -0
- data/lib/admin_it/data/active_record/filter.rb +36 -0
- data/lib/admin_it/data/active_record/resource.rb +66 -0
- data/lib/admin_it/data/active_record/single_context.rb +102 -0
- data/lib/admin_it/data/data_behavior.rb +2 -0
- data/lib/admin_it/data/hash.rb +3 -0
- data/lib/admin_it/data/mongoid.rb +14 -0
- data/lib/admin_it/data/mongoid/field.rb +58 -0
- data/lib/admin_it/data/mongoid/resource.rb +67 -0
- data/lib/admin_it/data/object.rb +3 -0
- data/lib/admin_it/engine.rb +4 -1
- data/lib/admin_it/env.rb +21 -2
- data/lib/admin_it/field/field.rb +15 -26
- data/lib/admin_it/filters/field_filter.rb +1 -0
- data/lib/admin_it/filters/filter.rb +8 -13
- data/lib/admin_it/filters/value_filter.rb +1 -0
- data/lib/admin_it/helpers.rb +2 -0
- data/lib/admin_it/helpers/field.rb +3 -3
- data/lib/admin_it/helpers/input.rb +1 -0
- data/lib/admin_it/helpers/page.rb +2 -0
- data/lib/admin_it/helpers/table.rb +12 -8
- data/lib/admin_it/helpers/tiles.rb +2 -0
- data/lib/admin_it/helpers/toolbar.rb +4 -0
- data/lib/admin_it/helpers/top_menu.rb +3 -0
- data/lib/admin_it/resource.rb +16 -21
- data/lib/admin_it/version.rb +1 -1
- data/lib/extend_it.rb +8 -4
- data/lib/extend_it/array_of.rb +12 -10
- data/lib/extend_it/base.rb +9 -8
- data/lib/extend_it/callbacks.rb +11 -12
- data/lib/extend_it/dsl.rb +33 -44
- data/spec/extend_it/dsl_spec.rb +21 -32
- data/spec/lib/data/mongoid/field_spec.rb +28 -0
- data/spec/lib/data/mongoid/resource_spec.rb +50 -0
- data/spec/spec_helper.rb +8 -3
- data/spec/support/module_helpers.rb +20 -0
- metadata +30 -13
- data/.ruby-version +0 -1
- data/lib/admin_it/definitions.rb +0 -89
- data/lib/admin_it/utils.rb +0 -21
- data/lib/extend_it/asserts.rb +0 -40
- data/lib/extend_it/caller.rb +0 -35
- data/lib/extend_it/config.rb +0 -30
- data/lib/extend_it/ensures.rb +0 -193
- data/spec/extend_it/config_spec.rb +0 -52
- data/spec/extend_it/ensures_spec.rb +0 -39
    
        data/lib/admin_it/version.rb
    CHANGED
    
    
    
        data/lib/extend_it.rb
    CHANGED
    
    | @@ -1,5 +1,9 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 1 | 
            +
            if !defined?(EnsureIt) && RUBY_VERSION >= '2.1.0'
         | 
| 2 | 
            +
              require 'ensure_it_refined'
         | 
| 3 | 
            +
            else
         | 
| 4 | 
            +
              require 'ensure_it'
         | 
| 5 | 
            +
            end
         | 
| 5 6 |  | 
| 7 | 
            +
            EnsureIt.configure do |config|
         | 
| 8 | 
            +
              config.error_class = ArgumentError
         | 
| 9 | 
            +
            end
         | 
    
        data/lib/extend_it/array_of.rb
    CHANGED
    
    | @@ -1,10 +1,7 @@ | |
| 1 1 | 
             
            require 'forwardable'
         | 
| 2 | 
            -
            require File.join %w(extend_it ensures)
         | 
| 3 | 
            -
            require File.join %w(extend_it asserts)
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            using ExtendIt::Ensures if ExtendIt.config.use_refines?
         | 
| 6 2 |  | 
| 7 3 | 
             
            module ExtendIt
         | 
| 4 | 
            +
              #
         | 
| 8 5 | 
             
              module ArrayOf
         | 
| 9 6 | 
             
                def array_of(entity_class, &block)
         | 
| 10 7 | 
             
                  array_name = "ArrayOf#{entity_class.name.split('::').last}"
         | 
| @@ -19,8 +16,9 @@ module ExtendIt | |
| 19 16 | 
             
                  const_set(array_name, array_class)
         | 
| 20 17 | 
             
                end
         | 
| 21 18 |  | 
| 19 | 
            +
                #
         | 
| 22 20 | 
             
                module ArrayClassMethods
         | 
| 23 | 
            -
                   | 
| 21 | 
            +
                  using EnsureIt if ENSURE_IT_REFINED
         | 
| 24 22 |  | 
| 25 23 | 
             
                  attr_reader :scopes, :finder
         | 
| 26 24 |  | 
| @@ -37,27 +35,31 @@ module ExtendIt | |
| 37 35 | 
             
                  end
         | 
| 38 36 |  | 
| 39 37 | 
             
                  def scope(*names, &block)
         | 
| 40 | 
            -
                    names.flatten | 
| 41 | 
            -
             | 
| 38 | 
            +
                    names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
         | 
| 39 | 
            +
                    names.each do |name|
         | 
| 42 40 | 
             
                      @scopes[name] = block.nil? ? proc { |e| e.send(name) } : block
         | 
| 43 41 | 
             
                      str = name.to_s
         | 
| 44 42 | 
             
                      if str[-1] == '?'
         | 
| 45 | 
            -
                        @scopes[str[0..-2].to_sym] = | 
| 43 | 
            +
                        @scopes[str[0..-2].to_sym] =
         | 
| 44 | 
            +
                          block.nil? ? proc { |e| e.send(name) } : block
         | 
| 46 45 | 
             
                      end
         | 
| 47 46 | 
             
                    end
         | 
| 48 47 | 
             
                  end
         | 
| 49 48 |  | 
| 50 49 | 
             
                  def find_by(name, &block)
         | 
| 51 | 
            -
                     | 
| 50 | 
            +
                    name = name.ensure_symbol!
         | 
| 52 51 | 
             
                    @finder = block.nil? ? proc { |e| e.send(name) } : block
         | 
| 53 52 | 
             
                  end
         | 
| 54 53 |  | 
| 55 | 
            -
                  def  | 
| 54 | 
            +
                  def finder?
         | 
| 56 55 | 
             
                    !@finder.nil?
         | 
| 57 56 | 
             
                  end
         | 
| 58 57 | 
             
                end
         | 
| 59 58 |  | 
| 59 | 
            +
                #
         | 
| 60 60 | 
             
                module ArrayMethods
         | 
| 61 | 
            +
                  using EnsureIt if ENSURE_IT_REFINED
         | 
| 62 | 
            +
             | 
| 61 63 | 
             
                  def initialize(*arr)
         | 
| 62 64 | 
             
                    @array = self.class.select(arr.flatten)
         | 
| 63 65 | 
             
                    super(@array)
         | 
    
        data/lib/extend_it/base.rb
    CHANGED
    
    | @@ -1,8 +1,7 @@ | |
| 1 | 
            -
            require File.join %w(extend_it ensures)
         | 
| 2 | 
            -
             | 
| 3 1 | 
             
            module ExtendIt
         | 
| 2 | 
            +
              #
         | 
| 4 3 | 
             
              module Base
         | 
| 5 | 
            -
                using  | 
| 4 | 
            +
                using EnsureIt if ENSURE_IT_REFINED
         | 
| 6 5 |  | 
| 7 6 | 
             
                def self.extended(base)
         | 
| 8 7 | 
             
                  base.instance_eval do
         | 
| @@ -22,7 +21,8 @@ module ExtendIt | |
| 22 21 | 
             
                end
         | 
| 23 22 |  | 
| 24 23 | 
             
                def attr_checker(*names)
         | 
| 25 | 
            -
                  names. | 
| 24 | 
            +
                  names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
         | 
| 25 | 
            +
                  names.each do |name|
         | 
| 26 26 | 
             
                    define_method "#{name}?" do
         | 
| 27 27 | 
             
                      instance_variable_get("@#{name}") == true
         | 
| 28 28 | 
             
                    end
         | 
| @@ -36,7 +36,8 @@ module ExtendIt | |
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 38 | 
             
                def inherited_class_reader(*names)
         | 
| 39 | 
            -
                  names. | 
| 39 | 
            +
                  names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
         | 
| 40 | 
            +
                  names.each do |name|
         | 
| 40 41 | 
             
                    var = "@#{name}"
         | 
| 41 42 | 
             
                    define_singleton_method(name) do
         | 
| 42 43 | 
             
                      p = parents.find { |parent| parent.instance_variable_defined?(var) }
         | 
| @@ -46,10 +47,10 @@ module ExtendIt | |
| 46 47 | 
             
                end
         | 
| 47 48 |  | 
| 48 49 | 
             
                def class_attr_reader(*attrs)
         | 
| 49 | 
            -
                  attrs. | 
| 50 | 
            -
                    attr_name. | 
| 50 | 
            +
                  attrs.ensure_array(:flatten).each do |attr_name|
         | 
| 51 | 
            +
                    attr_name.ensure_symbol(name_of: :local) || next
         | 
| 51 52 | 
             
                    next if instance_methods.include?(attr_name)
         | 
| 52 | 
            -
                    var_name = attr_name. | 
| 53 | 
            +
                    var_name = attr_name.ensure_symbol(name_of: :instance_variable)
         | 
| 53 54 | 
             
                    if methods.include?(attr_name)
         | 
| 54 55 | 
             
                      define_method(attr_name) { self.class.send(attr_name) }
         | 
| 55 56 | 
             
                    else
         | 
    
        data/lib/extend_it/callbacks.rb
    CHANGED
    
    | @@ -1,35 +1,33 @@ | |
| 1 | 
            -
            require File.join %w(extend_it ensures)
         | 
| 2 1 | 
             
            require File.join %w(extend_it base)
         | 
| 3 2 |  | 
| 4 3 | 
             
            module ExtendIt
         | 
| 4 | 
            +
              #
         | 
| 5 5 | 
             
              module Callbacks
         | 
| 6 | 
            -
                using  | 
| 6 | 
            +
                using EnsureIt if EnsureIt.refined?
         | 
| 7 7 |  | 
| 8 8 | 
             
                CALLBACKS = %i(before after around)
         | 
| 9 9 |  | 
| 10 10 | 
             
                def self.included(base)
         | 
| 11 | 
            -
                  unless base.is_a?(Class)
         | 
| 12 | 
            -
                    fail RuntimeError, 'Can be included in classes only'
         | 
| 13 | 
            -
                  end
         | 
| 11 | 
            +
                  fail 'Can be included in classes only' unless base.is_a?(Class)
         | 
| 14 12 | 
             
                  unless (class << base; self end).included_modules.include?(Base)
         | 
| 15 | 
            -
                    fail  | 
| 13 | 
            +
                    fail "#{base.name} should extend ExtendIt::Base"
         | 
| 16 14 | 
             
                  end
         | 
| 17 15 | 
             
                  base.extend(ClassMethods)
         | 
| 18 16 | 
             
                end
         | 
| 19 17 |  | 
| 20 18 | 
             
                def self.extended(base)
         | 
| 21 | 
            -
                  fail  | 
| 19 | 
            +
                  fail 'This module can\'t be extended'
         | 
| 22 20 | 
             
                end
         | 
| 23 21 |  | 
| 24 22 | 
             
                def run_callbacks(*names, arguments: [], original_context: false)
         | 
| 25 23 | 
             
                  # sanitize arguments
         | 
| 26 | 
            -
                  arguments =  | 
| 27 | 
            -
                  arguments = [arguments] unless arguments.is_a?(Array)
         | 
| 24 | 
            +
                  arguments = arguments.ensure_array(make: true)
         | 
| 28 25 |  | 
| 29 26 | 
             
                  parents = self.class.parents
         | 
| 30 27 | 
             
                  parents_rev = parents.reverse
         | 
| 31 28 |  | 
| 32 | 
            -
                  names. | 
| 29 | 
            +
                  names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
         | 
| 30 | 
            +
                  names.each do |name|
         | 
| 33 31 | 
             
                    around = []
         | 
| 34 32 | 
             
                    around_name = "@around_#{name}".to_sym
         | 
| 35 33 | 
             
                    var_name = "@before_#{name}".to_sym
         | 
| @@ -78,12 +76,13 @@ module ExtendIt | |
| 78 76 | 
             
                  end
         | 
| 79 77 | 
             
                end
         | 
| 80 78 |  | 
| 79 | 
            +
                #
         | 
| 81 80 | 
             
                module ClassMethods
         | 
| 82 81 | 
             
                  def define_callbacks(*names, callbacks: [:before, :after])
         | 
| 83 82 | 
             
                    callbacks = [:before, :after] unless callbacks.is_a?(Array)
         | 
| 84 | 
            -
                    callbacks | 
| 83 | 
            +
                    callbacks = callbacks.ensure_array(values: CALLBACKS)
         | 
| 84 | 
            +
                    names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
         | 
| 85 85 | 
             
                    names.each do |name|
         | 
| 86 | 
            -
                      name = name.ensure_symbol || next
         | 
| 87 86 | 
             
                      callbacks.each do |cb|
         | 
| 88 87 | 
             
                        cb_name = "#{cb}_#{name}".to_sym
         | 
| 89 88 | 
             
                        var_name = "@#{cb_name}".to_sym
         | 
    
        data/lib/extend_it/dsl.rb
    CHANGED
    
    | @@ -1,9 +1,9 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            #
         | 
| 3 2 | 
             
            module ExtendIt
         | 
| 4 | 
            -
               | 
| 5 | 
            -
                using ExtendIt::Ensures if ExtendIt.config.use_refines?
         | 
| 3 | 
            +
              using EnsureIt if EnsureIt.refined?
         | 
| 6 4 |  | 
| 5 | 
            +
              #
         | 
| 6 | 
            +
              module Dsl
         | 
| 7 7 | 
             
                def self.included(base)
         | 
| 8 8 | 
             
                  base.extend(ClassMethods)
         | 
| 9 9 | 
             
                  base.class_eval do
         | 
| @@ -24,6 +24,7 @@ module ExtendIt | |
| 24 24 | 
             
                  dsl_obj.instance_eval(&block) if block_given?
         | 
| 25 25 | 
             
                end
         | 
| 26 26 |  | 
| 27 | 
            +
                #
         | 
| 27 28 | 
             
                module ClassMethods
         | 
| 28 29 | 
             
                  def dsl(&block)
         | 
| 29 30 | 
             
                    if @dsl.nil?
         | 
| @@ -44,9 +45,7 @@ module ExtendIt | |
| 44 45 | 
             
                      attr_reader :dsl_receiver
         | 
| 45 46 |  | 
| 46 47 | 
             
                      def dsl_get(var_name, default = nil)
         | 
| 47 | 
            -
                        var_name = var_name. | 
| 48 | 
            -
                          ArgumentError, "Wrong `var_name` argument: #{var_name.inspect}"
         | 
| 49 | 
            -
                        )
         | 
| 48 | 
            +
                        var_name = var_name.ensure_symbol!(name_of: :instance_variable)
         | 
| 50 49 | 
             
                        if default.nil? && !block_given?
         | 
| 51 50 | 
             
                          fail(ArgumentError, '`default` or block should be specified')
         | 
| 52 51 | 
             
                        end
         | 
| @@ -59,10 +58,8 @@ module ExtendIt | |
| 59 58 | 
             
                      end
         | 
| 60 59 |  | 
| 61 60 | 
             
                      def dsl_set(var_name, value)
         | 
| 62 | 
            -
                        var_name = var_name. | 
| 63 | 
            -
             | 
| 64 | 
            -
                        )
         | 
| 65 | 
            -
                        setter_name = var_name.ensure_setter_name
         | 
| 61 | 
            +
                        var_name = var_name.ensure_symbol!(name_of: :instance_variable)
         | 
| 62 | 
            +
                        setter_name = var_name.ensure_symbol!(name_of: :setter)
         | 
| 66 63 | 
             
                        if dsl_receiver.respond_to?(setter_name)
         | 
| 67 64 | 
             
                          dsl_receiver.send(setter_name, value)
         | 
| 68 65 | 
             
                        else
         | 
| @@ -75,14 +72,15 @@ module ExtendIt | |
| 75 72 | 
             
                  end
         | 
| 76 73 | 
             
                end
         | 
| 77 74 |  | 
| 75 | 
            +
                #
         | 
| 78 76 | 
             
                module DslMethods
         | 
| 79 77 | 
             
                  def dsl_accessor(*names, default: nil, variable: nil, &setter)
         | 
| 80 | 
            -
                    names = names. | 
| 78 | 
            +
                    names = names.ensure_array(:flatten, :compact, :uniq)
         | 
| 81 79 | 
             
                    variable = nil if names.size != 1
         | 
| 82 | 
            -
                    variable = variable. | 
| 80 | 
            +
                    variable = variable.ensure_symbol(name_of: :local)
         | 
| 83 81 | 
             
                    names.each do |name|
         | 
| 84 | 
            -
                      name = name. | 
| 85 | 
            -
                      setter_name = name. | 
| 82 | 
            +
                      name = name.ensure_symbol(name_of: :getter) || next
         | 
| 83 | 
            +
                      setter_name = name.ensure_symbol(name_of: :setter) || next
         | 
| 86 84 |  | 
| 87 85 | 
             
                      define_method setter_name do |*args|
         | 
| 88 86 | 
             
                        obj =
         | 
| @@ -104,12 +102,12 @@ module ExtendIt | |
| 104 102 |  | 
| 105 103 | 
             
                  def dsl_boolean(*names, default: true, variable: nil)
         | 
| 106 104 | 
             
                    default = default == true
         | 
| 107 | 
            -
                    names = names. | 
| 105 | 
            +
                    names = names.ensure_array(:flatten, :compact, :uniq)
         | 
| 108 106 | 
             
                    variable = nil if names.size != 1
         | 
| 109 | 
            -
                    variable = variable. | 
| 107 | 
            +
                    variable = variable.ensure_symbol(name_of: :local)
         | 
| 110 108 | 
             
                    names.each do |name|
         | 
| 111 | 
            -
                      name = name. | 
| 112 | 
            -
                      setter_name = name. | 
| 109 | 
            +
                      name = name.ensure_symbol(name_of: :getter) || next
         | 
| 110 | 
            +
                      setter_name = name.ensure_symbol(name_of: :setter) || next
         | 
| 113 111 |  | 
| 114 112 | 
             
                      define_method name do |value = nil|
         | 
| 115 113 | 
             
                        send(setter_name, value.nil? ? default : value)
         | 
| @@ -122,11 +120,11 @@ module ExtendIt | |
| 122 120 | 
             
                  end
         | 
| 123 121 |  | 
| 124 122 | 
             
                  def dsl_block(*names, variable: nil)
         | 
| 125 | 
            -
                    names = names. | 
| 123 | 
            +
                    names = names.ensure_array(:flatten, :compact, :uniq)
         | 
| 126 124 | 
             
                    variable = nil if names.size != 1
         | 
| 127 | 
            -
                    variable = variable. | 
| 125 | 
            +
                    variable = variable.ensure_symbol(name_of: :local)
         | 
| 128 126 | 
             
                    names.each do |name|
         | 
| 129 | 
            -
                      name = name. | 
| 127 | 
            +
                      name = name.ensure_symbol(name_of: :getter) || next
         | 
| 130 128 | 
             
                      define_method name do |&block|
         | 
| 131 129 | 
             
                        return if block.nil?
         | 
| 132 130 | 
             
                        dsl_set(variable || name, block)
         | 
| @@ -135,19 +133,16 @@ module ExtendIt | |
| 135 133 | 
             
                  end
         | 
| 136 134 |  | 
| 137 135 | 
             
                  def dsl_use_hash(hash_name, variable: nil)
         | 
| 138 | 
            -
                    hash_name = hash_name. | 
| 139 | 
            -
             | 
| 140 | 
            -
                      '`hash_name` argument for `dsl_use_hash` should be a Symbol ' \
         | 
| 141 | 
            -
                      'or a String'
         | 
| 142 | 
            -
                    )
         | 
| 143 | 
            -
                    variable = variable.ensure_local_name unless variable.nil?
         | 
| 136 | 
            +
                    hash_name = hash_name.ensure_symbol!(name_of: :local)
         | 
| 137 | 
            +
                    variable = variable.ensure_symbol(name_of: :local)
         | 
| 144 138 |  | 
| 145 139 | 
             
                    define_method "use_#{hash_name}" do |*names, except: nil|
         | 
| 146 140 | 
             
                      hash = dsl_get(variable || hash_name, {})
         | 
| 147 141 | 
             
                      keys = hash.keys
         | 
| 148 | 
            -
                      names =  | 
| 142 | 
            +
                      names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
         | 
| 143 | 
            +
                      names = Dsl.expand_asterisk(names, keys)
         | 
| 149 144 | 
             
                      names = names.empty? ? keys : names & keys
         | 
| 150 | 
            -
                      names -= except. | 
| 145 | 
            +
                      names -= except.ensure_array(:flatten, :ensure_symbol, :compact, make: true)
         | 
| 151 146 | 
             
                      hash.replace(Hash[names.map { |n| [n, hash[n]] }])
         | 
| 152 147 | 
             
                    end
         | 
| 153 148 | 
             
                  end
         | 
| @@ -159,19 +154,11 @@ module ExtendIt | |
| 159 154 | 
             
                        '`dsl_hash_of_objects` requires creator block to be present'
         | 
| 160 155 | 
             
                      )
         | 
| 161 156 | 
             
                    end
         | 
| 162 | 
            -
                    hash_name = hash_name. | 
| 163 | 
            -
             | 
| 164 | 
            -
                      '`hash_name` argument for `dsl_hash_of_objects` should be' \
         | 
| 165 | 
            -
                      ' a Symbol or a String'
         | 
| 166 | 
            -
                    )
         | 
| 167 | 
            -
                    variable = variable.ensure_local_name unless variable.nil?
         | 
| 157 | 
            +
                    hash_name = hash_name.ensure_symbol!(name_of: :local)
         | 
| 158 | 
            +
                    variable = variable.ensure_symbol(name_of: :local)
         | 
| 168 159 |  | 
| 169 160 | 
             
                    unless single.nil?
         | 
| 170 | 
            -
                      single = single. | 
| 171 | 
            -
                        ArgumentError,
         | 
| 172 | 
            -
                        '`single` option for `dsl_hash_of_objects` should be' \
         | 
| 173 | 
            -
                        ' a Symbol or a String or nil'
         | 
| 174 | 
            -
                      )
         | 
| 161 | 
            +
                      single = single.ensure_symbol!(name_of: :local)
         | 
| 175 162 | 
             
                      define_method single do |name, **opts, &block|
         | 
| 176 163 | 
             
                        name = name.ensure_symbol
         | 
| 177 164 | 
             
                        unless name.nil?
         | 
| @@ -185,7 +172,8 @@ module ExtendIt | |
| 185 172 |  | 
| 186 173 | 
             
                    define_method hash_name do |*names, **opts, &block|
         | 
| 187 174 | 
             
                      hash = dsl_get(variable || hash_name, {})
         | 
| 188 | 
            -
                       | 
| 175 | 
            +
                      names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq)
         | 
| 176 | 
            +
                      Dsl.expand_asterisk(names, hash.keys).each do |name|
         | 
| 189 177 | 
             
                        obj = hash[name] ||=
         | 
| 190 178 | 
             
                              dsl_receiver.instance_exec(name, **opts, &creator)
         | 
| 191 179 | 
             
                        obj.dsl_eval(&block) if !block.nil? && obj.is_a?(Dsl)
         | 
| @@ -204,14 +192,15 @@ module ExtendIt | |
| 204 192 | 
             
                end
         | 
| 205 193 | 
             
              end
         | 
| 206 194 |  | 
| 195 | 
            +
              #
         | 
| 207 196 | 
             
              module DslModule
         | 
| 208 197 | 
             
                def self.incuded(base)
         | 
| 209 | 
            -
                  fail  | 
| 198 | 
            +
                  fail 'DslModule can be only extended by other modules'
         | 
| 210 199 | 
             
                end
         | 
| 211 200 |  | 
| 212 201 | 
             
                def self.extended(base)
         | 
| 213 202 | 
             
                  unless base.is_a?(Module)
         | 
| 214 | 
            -
                    fail  | 
| 203 | 
            +
                    fail 'DslModule can be only extended by modules'
         | 
| 215 204 | 
             
                  end
         | 
| 216 205 |  | 
| 217 206 | 
             
                  base.define_singleton_method :included do |superbase|
         | 
    
        data/spec/extend_it/dsl_spec.rb
    CHANGED
    
    | @@ -14,10 +14,6 @@ describe ExtendIt::Dsl do | |
| 14 14 | 
             
                includer_class.new
         | 
| 15 15 | 
             
              end
         | 
| 16 16 |  | 
| 17 | 
            -
              let :dsl_instance do
         | 
| 18 | 
            -
                includer_obj.dsl
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
             | 
| 21 17 | 
             
              let :dsl_class do
         | 
| 22 18 | 
             
                mod = described_class
         | 
| 23 19 | 
             
                Class.new do
         | 
| @@ -25,10 +21,6 @@ describe ExtendIt::Dsl do | |
| 25 21 | 
             
                end
         | 
| 26 22 | 
             
              end
         | 
| 27 23 |  | 
| 28 | 
            -
              let :dsl_obj do
         | 
| 29 | 
            -
                dsl_class.new
         | 
| 30 | 
            -
              end
         | 
| 31 | 
            -
             | 
| 32 24 | 
             
              describe '#dsl_accessor' do
         | 
| 33 25 | 
             
                it 'creates getter and setter' do
         | 
| 34 26 | 
             
                  includer_class.dsl { dsl_accessor :test }
         | 
| @@ -44,49 +36,47 @@ describe ExtendIt::Dsl do | |
| 44 36 |  | 
| 45 37 | 
             
                it 'creates accessors from array' do
         | 
| 46 38 | 
             
                  includer_class.dsl { dsl_accessor :test, ['one', :two], 10 }
         | 
| 47 | 
            -
                  expect( | 
| 48 | 
            -
                  expect( | 
| 49 | 
            -
                  expect( | 
| 39 | 
            +
                  expect(includer_obj.dsl_obj).to respond_to :test
         | 
| 40 | 
            +
                  expect(includer_obj.dsl_obj).to respond_to :one
         | 
| 41 | 
            +
                  expect(includer_obj.dsl_obj).to respond_to :two
         | 
| 50 42 | 
             
                end
         | 
| 51 43 |  | 
| 52 44 | 
             
                it 'uses default value' do
         | 
| 53 45 | 
             
                  includer_class.dsl { dsl_accessor :test, default: 10 }
         | 
| 54 | 
            -
                  expect(includer_obj. | 
| 46 | 
            +
                  expect(includer_obj.dsl_obj.test).to eq 10
         | 
| 55 47 | 
             
                end
         | 
| 56 48 |  | 
| 57 49 | 
             
                it 'uses setter to set value if it given' do
         | 
| 58 50 | 
             
                  includer_class.dsl { dsl_accessor(:test) { 10 } }
         | 
| 59 | 
            -
                  expect(includer_obj. | 
| 51 | 
            +
                  expect(includer_obj.dsl_obj.test).to eq 10
         | 
| 60 52 | 
             
                end
         | 
| 61 53 |  | 
| 62 | 
            -
                 | 
| 54 | 
            +
                xit 'evals block in object context with getter if is Dsl' do
         | 
| 63 55 | 
             
                  includer_class.dsl { dsl_accessor :test }
         | 
| 64 56 | 
             
                  dsl_class.dsl { dsl_accessor :child }
         | 
| 65 | 
            -
                  obj = dsl_obj
         | 
| 57 | 
            +
                  obj = includer_obj.dsl_obj
         | 
| 66 58 | 
             
                  includer_obj.dsl_eval { test(obj) { child 'test' } }
         | 
| 67 | 
            -
                  expect( | 
| 59 | 
            +
                  expect(includer_obj.instance_variable_get(:@child)).to eq 'test'
         | 
| 68 60 | 
             
                end
         | 
| 69 61 | 
             
              end
         | 
| 70 62 |  | 
| 71 63 | 
             
              describe '#dsl_boolean' do
         | 
| 72 | 
            -
                it 'creates getter | 
| 64 | 
            +
                it 'creates getter and setter' do
         | 
| 73 65 | 
             
                  includer_class.dsl { dsl_boolean :test }
         | 
| 74 | 
            -
                   | 
| 75 | 
            -
                  expect(dsl_instance.test).to be_false
         | 
| 76 | 
            -
                  expect(dsl_instance.test?).to be_false
         | 
| 66 | 
            +
                  includer_obj.dsl_obj.test = false
         | 
| 77 67 | 
             
                  expect(includer_obj.test).to be_false
         | 
| 78 68 | 
             
                end
         | 
| 79 69 |  | 
| 80 70 | 
             
                it 'sets values to true by default' do
         | 
| 81 71 | 
             
                  includer_class.dsl { dsl_boolean :test }
         | 
| 82 | 
            -
                  expect(includer_obj. | 
| 72 | 
            +
                  expect(includer_obj.dsl_obj.test).to be_true
         | 
| 83 73 | 
             
                end
         | 
| 84 74 |  | 
| 85 75 | 
             
                it 'creates booleans from array' do
         | 
| 86 76 | 
             
                  includer_class.dsl { dsl_boolean :test, ['one', :two], 10 }
         | 
| 87 | 
            -
                  expect( | 
| 88 | 
            -
                  expect( | 
| 89 | 
            -
                  expect( | 
| 77 | 
            +
                  expect(includer_obj.dsl_obj).to respond_to :test
         | 
| 78 | 
            +
                  expect(includer_obj.dsl_obj).to respond_to :one
         | 
| 79 | 
            +
                  expect(includer_obj.dsl_obj).to respond_to :two
         | 
| 90 80 | 
             
                end
         | 
| 91 81 | 
             
              end
         | 
| 92 82 |  | 
| @@ -94,35 +84,34 @@ describe ExtendIt::Dsl do | |
| 94 84 | 
             
                it 'creates setter and getter' do
         | 
| 95 85 | 
             
                  block = proc { :test }
         | 
| 96 86 | 
             
                  includer_class.dsl { dsl_block :test }
         | 
| 97 | 
            -
                  includer_obj. | 
| 87 | 
            +
                  includer_obj.dsl_obj.test(&block)
         | 
| 98 88 | 
             
                  expect(includer_obj.test).to eq block
         | 
| 99 89 | 
             
                end
         | 
| 100 90 | 
             
              end
         | 
| 101 91 |  | 
| 102 92 | 
             
              describe '#dsl_use_hash' do
         | 
| 103 93 | 
             
                before do
         | 
| 104 | 
            -
            #      includer_class.dsl_accessor :fields
         | 
| 105 94 | 
             
                  includer_class.dsl { dsl_use_hash :tests }
         | 
| 106 95 | 
             
                  includer_obj.tests = { one: 1, two: 2, three: 3 }
         | 
| 107 96 | 
             
                end
         | 
| 108 97 |  | 
| 109 98 | 
             
                it 'reorders hash' do
         | 
| 110 | 
            -
                  includer_obj. | 
| 99 | 
            +
                  includer_obj.dsl_obj.use_tests :two, :three, :one
         | 
| 111 100 | 
             
                  expect(includer_obj.tests).to eq(two: 2, three: 3, one: 1)
         | 
| 112 101 | 
             
                end
         | 
| 113 102 |  | 
| 114 103 | 
             
                it 'recreates hash' do
         | 
| 115 | 
            -
                  includer_obj. | 
| 104 | 
            +
                  includer_obj.dsl_obj.use_tests :two, :three
         | 
| 116 105 | 
             
                  expect(includer_obj.tests).to eq(two: 2, three: 3)
         | 
| 117 106 | 
             
                end
         | 
| 118 107 |  | 
| 119 108 | 
             
                it 'excludes hash' do
         | 
| 120 | 
            -
                  includer_obj. | 
| 109 | 
            +
                  includer_obj.dsl_obj.use_tests :three, :one, :two, except: :one
         | 
| 121 110 | 
             
                  expect(includer_obj.tests).to eq(three: 3, two: 2)
         | 
| 122 111 | 
             
                end
         | 
| 123 112 |  | 
| 124 113 | 
             
                it 'excludes hash with except only option' do
         | 
| 125 | 
            -
                  includer_obj. | 
| 114 | 
            +
                  includer_obj.dsl_obj.use_tests except: :one
         | 
| 126 115 | 
             
                  expect(includer_obj.tests).to eq(two: 2, three: 3)
         | 
| 127 116 | 
             
                end
         | 
| 128 117 | 
             
              end
         | 
| @@ -133,7 +122,7 @@ describe ExtendIt::Dsl do | |
| 133 122 | 
             
                  includer_class.dsl do
         | 
| 134 123 | 
             
                    dsl_hash_of_objects(:tests) { |name| objects[name] }
         | 
| 135 124 | 
             
                  end
         | 
| 136 | 
            -
                  includer_obj. | 
| 125 | 
            +
                  includer_obj.dsl_obj.tests :one, :two
         | 
| 137 126 | 
             
                  expect(includer_obj.tests).to eq objects
         | 
| 138 127 | 
             
                end
         | 
| 139 128 |  | 
| @@ -142,7 +131,7 @@ describe ExtendIt::Dsl do | |
| 142 131 | 
             
                  demand = Object.new
         | 
| 143 132 | 
             
                  includer_class.dsl { dsl_hash_of_objects(:tests) { |_| demand } }
         | 
| 144 133 | 
             
                  includer_obj.tests = objects
         | 
| 145 | 
            -
                  includer_obj. | 
| 134 | 
            +
                  includer_obj.dsl_obj.tests :one, :two
         | 
| 146 135 | 
             
                  expect(includer_obj.tests).to eq(objects.merge(two: demand))
         | 
| 147 136 | 
             
                end
         | 
| 148 137 | 
             
              end
         |