Sha256: e105ded696d80fd7ea9c69e01cb875c65cb1eb52c7bb2cfdc87c0c73d3ada2df

Contents?: true

Size: 1.35 KB

Versions: 6

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module Qonfig
  module Commands
    # @api private
    # @since 0.5.0
    class LoadFromJSON < Base
      # @return [String]
      #
      # @api private
      # @since 0.5.0
      attr_reader :file_path

      # @return [Boolean]
      #
      # @api private
      # @sicne 0.5.0
      attr_reader :strict

      # @param file_path [String]
      # @option strict [Boolean]
      #
      # @api private
      # @since 0.5.0
      def initialize(file_path, strict: true)
        @file_path = file_path
        @strict = strict
      end

      # @param settings [Qonfig::Settings]
      # @return [void]
      #
      # @api private
      # @since 0.5.0
      def call(settings)
        json_data = Qonfig::Loaders::JSON.load_file(file_path, fail_on_unexist: strict)

        raise(
          Qonfig::IncompatibleJSONStructureError,
          'JSON object should have a hash-like structure'
        ) unless json_data.is_a?(Hash)

        json_based_settings = build_data_set_class(json_data).new.settings

        settings.__append_settings__(json_based_settings)
      end

      private

      # @param json_data [Hash]
      # @return [Class<Qonfig::DataSet>]
      #
      # @api private
      # @since 0.5.0
      def build_data_set_class(json_data)
        Qonfig::DataSet::ClassBuilder.build_from_hash(json_data)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
qonfig-0.10.0 lib/qonfig/commands/load_from_json.rb
qonfig-0.9.0 lib/qonfig/commands/load_from_json.rb
qonfig-0.8.0 lib/qonfig/commands/load_from_json.rb
qonfig-0.7.0 lib/qonfig/commands/load_from_json.rb
qonfig-0.6.0 lib/qonfig/commands/load_from_json.rb
qonfig-0.5.0 lib/qonfig/commands/load_from_json.rb