# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
module GetData

	def self.chain(obj, *methods)
		methods.each do |m|
			if m.is_a?(Array)
				params = m[1..-1]
				m = m[0]
			end

			if obj != nil && obj.respond_to?(m)
				obj = obj.send(m, *params)
			elsif obj.respond_to?(:has_key?) && obj.has_key?(m)
				obj = obj[m]
			else
				return nil
			end
		end
		return obj
	end

  def self.hash(h, *keys)
		keys.each do |k|
			if h.has_key?(k)
				h = h[k]
			else
				return nil
			end
		end
		return h
  end

  def self.obj(obj, *methods)
		methods.each do |m|
			if m.is_a?(Array)
				params = m[1..-1]
				m = m[0]
			end

			if obj != nil && obj.respond_to?(m)
				obj = obj.send(m, *params)
			else
				return nil
			end
		end
		return obj
  end

end