Sha256: 5ae6c111434114290d205bafd3f7e056e6dfad8f7984fda572d028274c55c5fe

Contents?: true

Size: 1.54 KB

Versions: 162

Compression:

Stored size: 1.54 KB

Contents

module Eco
  module API
    module Common
      # Helpers for dynammic generation of classes based on a hierarchical model
      # @attr_reader model [Hash, nil] the `model` of the current `class`
      module ClassHierarchy
        include Eco::API::Common::ClassHelpers

        attr_reader :model

        # @param value [Hash, Enumerable, String, Symbol, nil] unparsed model to be assigned to the `class`
        def model=(value)
          @model = parse_model(value)
        end

        # @return [Array<String>] the `keys` of the current class' `model`
        def model_attrs
          (model && model.keys) || []
        end

        # Thanks to this step the format on the declaration of the model is flexible
        # @param model [Hash, Enumerable, String, Symbol, nil]
        # @return [Hash, nil] where keys are `Symbol` s
        def parse_model(model)
          case model
          when String
            return parse_model(model.to_sym)
          when Symbol
            return {model => nil}
          when Hash
            return model.each_with_object({}) do |(k,v), hash|
              hash[k.to_sym] = v
            end
          when Enumerable
            return model.each_with_object({}) do |sub, hash|
              hash.merge!(parse_model(sub))
            end
          when NilClass
            return nil
          else
            raise "Incorrect model declaration, allowed String, Symbol, Hash and Enumerable. Given: #{model.class}"
          end
        end

      end
    end
  end
end

Version data entries

162 entries across 162 versions & 1 rubygems

Version Path
eco-helpers-2.0.30 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.29 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.28 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.27 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.26 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.25 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.24 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.23 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.22 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.21 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.19 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.18 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.17 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.16 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.15 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.14 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.13 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.12 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.11 lib/eco/api/common/class_hierarchy.rb
eco-helpers-2.0.10 lib/eco/api/common/class_hierarchy.rb