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-3.0.21 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.20 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.19 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.18 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.17 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.16 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.15 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.14 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.13 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.12 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.11 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.10 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.9 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.8 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.7 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.6 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.5 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.4 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.3 lib/eco/api/common/class_hierarchy.rb
eco-helpers-3.0.2 lib/eco/api/common/class_hierarchy.rb