Sha256: bb32c6e1bea75b72383f7aed9a0466fd91cbc49babc289c34a1b44bb9cb433c5

Contents?: true

Size: 829 Bytes

Versions: 1

Compression:

Stored size: 829 Bytes

Contents

# frozen_string_literal: true

require 'hanami/interactor'
require 'json'
require 'fileutils'
require 'pathname'

module Umwelt::Abstract::File
  class Store
    extend Forwardable
    include Hanami::Interactor
    def_delegators FileUtils, :mkpath

    def initialize(path: '.umwelt')
      @path = path
    end

    private

    def serialize(struct)
      JSON.pretty_generate struct
    end

    def destruct(obj)
      obj.is_a?(Struct) ? destruct_members(obj.to_h) : obj
    end

    def destruct_members(hash)
      hash.transform_values do |value|
        if value.is_a?(Array)
          value.map { |member| destruct(member) }
        elsif value.is_a? Time
          value.to_s
        else
          destruct(value)
        end
      end
    end

    def umwelt_root_path
      Pathname.pwd / @path
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
umwelt-0.1.0 lib/umwelt/abstract/file/store.rb