Sha256: 42dcd5a376a57fafc46a8f82f322941597d2a888f00f78ee6e93d403fd897839

Contents?: true

Size: 1.35 KB

Versions: 6

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

require 'pathname'
require_relative '../services/entry_group_reader_service'
require_relative '../models/entry'
require_relative '../models/entry_group'

module Dsu
  module Support
    module EntryGroupLoadable
      # returns an EntryGroup object loaded from
      # the entry group json file.
      def load(time:)
        entry_group_json = Services::EntryGroupReaderService.new(time: time).call
        hash = if entry_group_json.present?
          JSON.parse(entry_group_json, symbolize_names: true).tap do |hash|
            hash[:time] = Time.parse(hash[:time])
          end
        else
          { time: time, entries: [] }
        end

        Models::EntryGroup.new(**hydrate_entry_group_hash(hash: hash, time: time))
      end

      module_function

      # Accepts an entry group hash and returns a
      # hydrated entry group hash:
      #
      # {
      #   time: <Time object>,
      #   entries [
      #     <Entry object 0>,
      #     <Entry object 1>,
      #     ...
      #   ]
      # }
      def hydrate_entry_group_hash(hash:, time:)
        time = hash.fetch(:time, time)
        time = Time.parse(time) unless time.is_a? Time
        entries = hash.fetch(:entries, [])
        entries = entries.map { |entry_hash| Models::Entry.new(**entry_hash) }

        { time: time, entries: entries }
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dsu-1.2.1 lib/dsu/support/entry_group_loadable.rb
dsu-1.2.0 lib/dsu/support/entry_group_loadable.rb
dsu-1.1.2 lib/dsu/support/entry_group_loadable.rb
dsu-1.1.1 lib/dsu/support/entry_group_loadable.rb
dsu-1.1.0.alpha.2 lib/dsu/support/entry_group_loadable.rb
dsu-1.1.0.alpha.1 lib/dsu/support/entry_group_loadable.rb