Sha256: 0d72ec23485c57f9735fa19e73d182d22c62aaabdfa49c5169311c50eb53ac3f

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

module VDF
	# The Generator class is responsible for generating VDF documents from input hashes.
	# @see VDF.generate
	class Generator
		class << self

			# Generates a VDF document from a Ruby Hash and returns it
			#
			# @param object [Hash] the input object
			# @return [String] the generated VDF document
			def generate(object)
				raise ArgumentError, "Object has to respond to each" unless object.respond_to? :each

				generate_impl(object, 0)
			end

			private

			def generate_impl(object, level)
				result = ""
				indent = -"\t"*level

				object.each do |key, value|
					if value.respond_to? :each
						result << [indent, -'"', key, -"\"\n", indent, -"{\n", generate_impl(value, level + 1), indent, -"}\n"].join
					else
						result << [indent, -'"', key, -'"', indent, indent, -'"', value.to_s, -"\"\n"].join
					end
				end

				result
			end
		end
	end

	# Generates a VDF document from a ruby hash.
	#
	# @param object [Hash] the input object
	# @return [String] the generated VDF document
	def generate(object)
		Generator.generate(object)
	end
	module_function :generate
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vdf-1.0.4 lib/vdf/generate.rb
vdf-1.0.3 lib/vdf/generate.rb