Sha256: 5d866e57015d17b84ec5c587aeb386a132f56386380f9192021f0e1d36d93c39

Contents?: true

Size: 1.34 KB

Versions: 2

Compression:

Stored size: 1.34 KB

Contents

require "data_accessible/version"
require "data_accessible/data_loader"
require "data_accessible/hash_methods"
require "data_accessible/data_accessors"

module DataAccessible
  def self.included(caller)
    caller.extend ClassMethods
  end

  def self.sources
    klass = Class.new { extend ClassMethods }
    yield klass if block_given?
    klass
  end

  def self.default_data_path
    @data_path = 'data'
  end

  def self.data_path=(path)
    @data_path = path
  end

  def self.data_path
    return @data_path if @data_path
    default_data_path
  end

  module ClassMethods
    def data_load(data_source, namespace = nil)
      to_h.clear
      data_merge(data_source, namespace)
    end

    def data_merge(data_source, namespace = nil)
      source_data = DataLoader.load_source(data_source)
      new_data = namespace ? source_data.fetch(namespace) : source_data

      @data = HashMethods.deep_merge(to_h, new_data)

      DataAccessors.accessor_for_obj(self)
      DataAccessors.accessor_for_data(to_h)

      to_h
    end

    def to_h
      @data ||= {}
    end

    def [](key)
      to_h[key]
    end

    def []=(key, value)
      DataAccessors.define_accessor(to_h, key)
      DataAccessors.define_accessor(self, key)
      to_h[key] = DataAccessors.accessor_for_data(value)
    end

    alias accessible_data to_h
    alias data_accessible to_h
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
data_accessible-1.0.2 lib/data_accessible.rb
data_accessible-1.0.1 lib/data_accessible.rb