This file is indexed.

/usr/lib/ruby/vendor_ruby/fog/core/collection.rb is in ruby-fog-core 1.42.0-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
require "fog/core/deprecated_connection_accessors"

module Fog
  # Fog::Collection
  class Collection < Array
    extend Fog::Attributes::ClassMethods
    include Fog::Attributes::InstanceMethods
    include Fog::Core::DeprecatedConnectionAccessors
    

    attr_reader :service

    Array.public_instance_methods(false).each do |method|
      next if [:reject, :select, :slice, :clear, :inspect].include?(method.to_sym)
      class_eval <<-EOS, __FILE__, __LINE__
        def #{method}(*args)
          unless @loaded
            lazy_load
          end
          super
        end
      EOS
    end

    %w(reject select slice).each do |method|
      class_eval <<-EOS, __FILE__, __LINE__
        def #{method}(*args)
          unless @loaded
            lazy_load
          end
          data = super
          self.clone.clear.concat(data)
        end
      EOS
    end

    def self.model(new_model = nil)
      if new_model.nil?
        @model
      else
        @model = new_model
      end
    end

    def clear
      @loaded = super
    end

    def create(attributes = {})
      object = new(attributes)
      object.save
      object
    end

    def destroy(identity)
      new(:identity => identity).destroy
    end

    # Creates a new Fog::Collection based around the passed service
    #
    # @param [Hash] attributes
    # @option attributes [Fog::Service] service Instance of a service
    #
    # @return [Fog::Collection]
    #
    def initialize(attributes = {})
      @service = attributes.delete(:service)
      @loaded = false
      merge_attributes(attributes)
    end

    def inspect
      Fog::Formatador.format(self)
    end

    def load(objects)
      clear && objects.each { |object| self << new(object) }
      self
    end

    def model
      self.class.instance_variable_get("@model")
    end

    def new(attributes = {})
      unless attributes.is_a?(::Hash)
        raise ArgumentError, "Initialization parameters must be an attributes hash, got #{attributes.class} #{attributes.inspect}"
      end
      model.new(
        {
          :collection => self,
          :service => service
        }.merge(attributes)
      )
    end

    def reload
      clear && lazy_load
      self
    end

    def table(attributes = nil)
      Fog::Formatador.display_table(map(&:attributes), attributes)
    end

    def to_json(_options = {})
      Fog::JSON.encode(map(&:attributes))
    end

    private

    def lazy_load
      all
    end
  end
  # Base class for collection classes whose 'all' method returns only a single
  # page of results and passes the 'Marker' option along as
  # self.filters[:marker]
  class PagedCollection < Collection
    def each(collection_filters = filters)
      if block_given?
        Kernel.loop do
          break unless filters[:marker]
          page = all(collection_filters)
          # We need to explicitly use the base 'each' method here on the page,
          #  otherwise we get infinite recursion
          base_each = Fog::Collection.instance_method(:each)
          base_each.bind(page).call { |item| yield item }
        end
      end
      self
    end
  end
end