Class: LibFinder::LibWorker

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/libFinder.rb

Class Method Summary collapse

Class Method Details

.get_dependencies(gems) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/libFinder.rb', line 59

def self.get_dependencies(gems)
	#sending the post request to the webservice
	response=HTTParty.post("https://whispering-journey-17183.herokuapp.com/find_dependencies",
		:body => {gems:gems,
				  os_id:self.get_os
				 }.to_json,
		:headers => { 'Content-Type' => 'application/json' } 
		)

	dependencies = JSON.parse(response.body)
	#parsing the response from string to jsn format
	if dependencies.count>0
		#calles the downloading and installing of the missing deps method
		#if the dependencies are greater than one
		self.install_libs(dependencies)
	end
	  
end

.get_osObject



78
79
80
81
82
83
84
85
86
# File 'lib/libFinder.rb', line 78

def self.get_os
	if (/linux/ =~ RbConfig::CONFIG["host_os"]) != nil
		return 1 #this is the id of the os that sits in the database 
	end

	if (/darwin/ =~ RbConfig::CONFIG["host_os"]) != nil
		return 2 #this is the id of the os that sits in the database 
	end
end

.install_libs(deps) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/libFinder.rb', line 88

def self.install_libs(deps)
	#this function recives the missing dependencies that are retrived
	#by the web service and start to download them based on the current os
	command ="" # this is the line that is responsible for building the system command string
	if self.get_os == 1
		command += "sudo apt-get install "  #in ubunto and debian distros
		deps.each do |dep|
			#a loop to go through all the dependencies to build the command string
			command += dep["name"]+" " #adding the lib name to the command
		end 

	elsif self.get_os == 2
		#if the current os is mac
		command += "brew install " #in mac os
		deps.each do |dep|
			#a loop to go through all the dependencies to build the command string
			command += dep["name"]+" " #adding the lib name to the command
		end 
	end 
	#running the command
	system(command)

end

.is_railsObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/libFinder.rb', line 19

def self.is_rails
	base_path = Dir.pwd
	controllers = File.exist?(base_path+"/app/controllers")
	#check if the file has a controllers folder or not
	models = File.exist?(base_path+"/app/models")
	#check if the file has a models folder or not
	if controllers && models
		#if both are true then it is a rails app 
		return true 
	else 
		puts "this is not a rails application file please change directory to a rails application file"
		return false
	end
end

.parse_gem_fileObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/libFinder.rb', line 34

def self.parse_gem_file
	gems = []
	#reading the file line by line 
	File.readlines(Dir.pwd+"/Gemfile").each do |line|
		#spliting the the read line by spaces 
		line_data = line.split
		#creating a regular expression that is used to match the versions
		regex=/\d+\.\d+\.*\d*/x

		if line_data[0] == "gem" 
			#if the line starts with the word gem then it is a gem and i will be parsed
			gem_info = {name: line_data[1].gsub(/[', ]/, '')  ,version:""}
			line_data.each do |data|
				if data.match regex
					gem_info[:version] = data.gsub(/[',]/,'');
					break
				end
			end
			gems.push(gem_info)
		end
	end
	self.get_dependencies(gems)
end

.sniffObject



8
9
10
11
12
13
14
15
16
17
# File 'lib/libFinder.rb', line 8

def self.sniff
	# a function to start the gem working used sniff cause i saw my dog doing so when searching for something :D
	if(self.is_rails)
		#checking if we are in a rails file or not
		self.parse_gem_file
	else
		puts "please run this command in a rails app root folder"
	end

end