All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pallet.crate.rubygems.clj Maven / Gradle / Ivy

There is a newer version: 0.6.0
Show newest version
(ns pallet.crate.rubygems
 "Installation of rubygems from source"
  (:use
   [pallet.resource.package :only [package package-manager]]
   [pallet.resource.exec-script :as exec-script]
   [pallet.resource.remote-file :only [remote-file remote-file*]]
   [pallet.resource.resource-when :only [resource-when resource-when-not]]
   [pallet.resource :only [defresource]]
   [pallet.crate.ruby :only [ruby ruby-packages ruby-version]]
   [pallet.resource.user :only [user-home]]
   [pallet.stevedore :as stevedore]
   [pallet.script :only [defscript]]
   [pallet.utils :only [*admin-user*]]
   [clojure.contrib.json :as json])
  (:require
   [pallet.resource.file]
   [pallet.stevedore :as stevedore]))

(defscript gem [action package & options])
(defimpl gem :default [action package & options]
  ("gem" ~action ~(map-to-arg-string (first options)) ~package))

(def rubygems-downloads
     {"1.4.1" ["http://rubyforge.org/frs/download.php/73779/rubygems-1.4.1.tgz"
               "e915dbf79e22249d10c0fcf503a5adda"]
      "1.4.0" ["http://rubyforge.org/frs/download.php/73763/rubygems-1.4.0.tgz"]
      "1.3.7" ["http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz"]
      "1.3.6"  ["http://rubyforge.org/frs/download.php/69365/rubygems-1.3.6.tgz"
                "789ca8e9ad1d4d3fe5f0534fcc038a0d"]
      "1.3.5" ["http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz"
                "6e317335898e73beab15623cdd5f8cff"]})

(defn rubygems
  "Install rubygems from source"
  ([request] (rubygems request "1.3.6"))
  ([request version]
     (let [info (rubygems-downloads version)
           basename (str "rubygems-" version)
           tarfile (str basename ".tgz")
           tarpath (str (stevedore/script (tmp-dir)) "/" tarfile)]
       (->
        request
        (ruby-packages)
        (resource-when (< @(ruby-version) "1.8.6")
                       (ruby))
        (remote-file
         tarpath
         :url (first info)
         :md5 (second info))
        (exec-script/exec-script
         (if-not (pipe ("gem" "--version") (grep (quoted ~version)))
           (do
             ~(stevedore/checked-script
               "Building rubygems"
               (cd (tmp-dir))
               (tar xfz ~tarfile)
               (cd ~basename)
               (ruby setup.rb)
               (if-not (|| (file-exists? "/usr/bin/gem1.8")
                           (file-exists? "/usr/local/bin/gem"))
                 (do (println "Could not find rubygem executable")
                     (exit 1)))
               ;; Create a symlink if we only have one ruby version installed
               (if-not (&& (file-exists? "/usr/bin/gem1.8")
                           (file-exists? "/usr/bin/gem1.9"))
                 (if (file-exists? "/usr/bin/gem1.8")
                   (ln "-sfv" "/usr/bin/gem1.8" "/usr/bin/gem")))
               (if-not (&& (file-exists? "/usr/local/bin/gem1.8")
                           (file-exists? "/usr/local/bin/gem1.9"))
                 (if (file-exists? "/usr/local/bin/gem1.8")
                   (ln "-sfv" "/usr/locl/bin/gem1.8" "/usr/local/bin/gem")))))))))))

(defn rubygems-update
  [request]
  (exec-script/exec-script
   request
   ("gem" "update" "--system")))

(defresource gem "Gem management."
  (gem*
   [request name & {:keys [action version no-ri no-rdoc]
                    :or {action :install}
                    :as options}]
   (case action
     :install (stevedore/checked-script
               (format "Install gem %s" name)
               (gem
                "install" ~name
                ~(select-keys options [:version :no-ri :no-rdoc])))
     :delete (stevedore/checked-script
              (format "Uninstall gem %s" name)
              (gem
               "uninstall" ~name
               ~(select-keys options [:version :no-ri :no-rdoc]))))))


(defresource gem-source "Gem source management."
  (gem-source*
   [request source & {:keys [action] :or {action :create} :as options}]
   (case action
     :create (stevedore/script
              (if-not ("gem" "sources" "--list" "|" "grep" ~source)
                (gem "sources" ~source ~{:add true})))
     :delete (stevedore/script (gem "sources" ~source ~{:remove true})))))

(defresource gemrc "rubygems configuration"
  (gemrc*
   [request m & user?]
   (let [user (or (first user?) (*admin-user* :username))]
     (remote-file*
      request
      (str (stevedore/script (user-home ~user)) "/.gemrc")
      :content (.replaceAll (json/json-str m) "[{}]" "")
      :owner user))))

(defn require-rubygems
  "Ensure that a version of rubygems is installed"
   [request]
   (exec-script/exec-checked-script
    request
    "Checking for rubygems"
    ("gem" "--version")))




© 2015 - 2024 Weber Informatics LLC | Privacy Policy