Sha256: 56d988427ad0be7892b82385c8327b0c5f2c3dd4d6b2c4397ad81725bd3118e4

Contents?: true

Size: 927 Bytes

Versions: 1

Compression:

Stored size: 927 Bytes

Contents

# frozen_string_literal: true

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

module Umwelt::Abstract::File
  class Store < Umwelt::Abstract::Interactor
    expose :written_paths

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

    private

    def write(path, struct)
      path.dirname.mkpath

      path.write serialize destruct struct
    end

    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.2 lib/umwelt/abstract/file/store.rb