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