project.rb 1.56 KB
class Gitlab::Project
	include ActiveModel::Model

	attr_accessor :id, :description, :default_branch, :tag_list, :public,
		:archived, :visibility_level, :ssh_url_to_repo, :http_url_to_repo,
		:web_url, :name, :name_with_namespace, :path, :path_with_namespace,
		:issues_enabled, :merge_requests_enabled, :wiki_enabled, :builds_enabled,
		:snippets_enabled, :created_at, :last_activity_at,
		:shared_runners_enabled, :creator_id, :namespace, :owner, :avatar_url,
		:star_count, :forks_count, :open_issues_count, :public_builds,
		:permissions

	def self.all
		all = Array.new;

		api_base_uri = Rails.configuration.x.gitlab['api_base_uri']
		auth_token = Rails.configuration.x.gitlab['auth_token']

		links = {
			'next' => api_base_uri + 'projects?visibility=public',
			'first' => nil,
			'last' => nil
		}

		uri = URI.parse(links['next'])
		http = Net::HTTP.new(uri.host, uri.port)
		http.use_ssl = true # TODO make this aware of http/https
		http.verify_mode = OpenSSL::SSL::VERIFY_NONE

		while true
			request = Net::HTTP::Get.new(uri.request_uri)
			request['PRIVATE-TOKEN'] = auth_token

			response = http.request(request)

			JSON.parse(response.body).each do |project|
				all.push(Gitlab::Project.new(project))
			end

			links = response['link'].split(',').map! { |a|
				_tmp = a.strip.split(';').map! { |a|
					a.strip
				}
				{_tmp[1][5...-1] => _tmp[0][1...-1]}
			}.reduce({}, :merge)

			break unless links['next']
			uri = URI.parse(links['next'])
		end

		return all
	end

	def self.find
	end

	def deliver
		if valid?
			# deliver email
		end
	end
end
# vim: set ts=2 sw=2: