class Richcss::Part
Attributes
name[RW]
Public Class Methods
fetch(part_name, version)
click to toggle source
Fetch url and download the part
# File lib/richcss/part.rb, line 40 def self.fetch(part_name, version) puts "Fetching part #{part_name}" begin resp = RestClient.get "http://www.cssparts.com/api/part/#{part_name}" if resp.code == 200 body = JSON.parse(resp.to_str) homepage = body["homepage"] homepage.slice! "https:\/\/github.com\/" homepage = homepage.split("\/") repo_owner = homepage[0] repo_name = homepage[1] jsonResponse = JSON.parse(Net::HTTP.get(URI("https://api.github.com/repos/#{repo_owner}/#{repo_name}/releases/tags/#{body["version"]}"))) downloadLink = jsonResponse["zipball_url"] install(part_name, body["version"], downloadLink) else puts "Error: Part #{name} cannot be found." end rescue RestClient::ExceptionWithResponse => e puts e.response end end
get_or_create_partfile()
click to toggle source
# File lib/richcss/part.rb, line 15 def self.get_or_create_partfile() if !Dir.exists?('parts') FileUtils.mkdir_p('parts') end parts = Hash.new Dir.chdir('parts') do part_file = "Partfile" begin File.open(part_file, "r") do |f| f.each_line do |line| part, version = line.split(" ") parts[part] = version end end rescue File.new(part_file, "w") end end return parts end
install(part_name, version, resource)
click to toggle source
Install this part
# File lib/richcss/part.rb, line 64 def self.install(part_name, version, resource) uri = URI.parse(resource) http_object = Net::HTTP.new(uri.host, uri.port) http_object.use_ssl = true if uri.scheme == 'https' begin http_object.start do |http| request = Net::HTTP::Get.new uri.request_uri http.read_timeout = 500 http.request request do |response| case response when Net::HTTPRedirection then location = response['location'] install(part_name, version, location) return else puts "Installing part..." if !Dir.exists?('parts') FileUtils.mkdir_p('parts') end Dir.chdir('parts') do if Dir.exists?(part_name) FileUtils.remove_dir(part_name) end Zip::Archive.open_buffer(response.body) do |ar| #save the directory name for rename later oldDirName = ar.get_name(0) ar.each do |zf| if zf.directory? FileUtils.mkdir_p(zf.name) else dirname = File.dirname(zf.name) FileUtils.mkdir_p(dirname) unless File.exist?(dirname) open(zf.name, 'wb') do |f| f << zf.read end end end FileUtils.mv oldDirName, part_name end end end end end RestClient.post "http://www.cssparts.com/api/part/downloaded", :name => part_name, :version => version rescue Exception => e puts e end end
resolve_dependencies(part_name, version, installed={})
click to toggle source
placeholder for latest version is blank
# File lib/richcss/part.rb, line 11 def self.resolve_dependencies(part_name, version, installed={}) dep_list = Richcss::Resolver.start(part_name, version, installed) end