lib/kaboom/platform.rb in kaboom-0.3.2 vs lib/kaboom/platform.rb in kaboom-0.3.3
- old
+ new
@@ -1,103 +1,27 @@
-# coding: utf-8
+require 'kaboom/platform/base'
+require 'kaboom/platform/darwin'
+require 'kaboom/platform/windows'
+require 'kaboom/platform/linux'
-# Platform is a centralized point to shell out platform specific functionality
-# like clipboard access or commands to open URLs.
-#
-#
-# Clipboard is a centralized point to shell out to each individual platform's
-# clipboard, pasteboard, or whatever they decide to call it.
-#
module Boom
class Platform
class << self
- # Public: tests if currently running on darwin.
- #
- # Returns true if running on darwin (MacOS X), else false
- def darwin?
- !!(RUBY_PLATFORM =~ /darwin/)
+ def platform
+ @platform ||= detect_platform.new
end
- # Public: tests if currently running on windows.
- #
- # Apparently Windows RUBY_PLATFORM can be 'win32' or 'mingw32'
- #
- # Returns true if running on windows (win32/mingw32), else false
- def windows?
- !!(RUBY_PLATFORM =~ /mswin|mingw/)
- end
+ delegate :edit, :open, :copy, :to => :platform
- # Public: returns the command used to open a file or URL
- # for the current platform.
- #
- # Currently only supports MacOS X and Linux with `xdg-open`.
- #
- # Returns a String with the bin
- def open_command
- if darwin?
- 'open'
- elsif windows?
- 'start'
+ private
+ def detect_platform
+ if !!(RUBY_PLATFORM =~ /darwin/)
+ Darwin
+ elsif !!(RUBY_PLATFORM =~ /mswin|mingw/)
+ Windows
else
- 'xdg-open'
+ Other
end
- end
-
- # Public: opens a given Item's value in the browser. This
- # method is designed to handle multiple platforms.
- #
- # Returns a String of the Item value.
- def open(item)
- unless windows?
- system("#{open_command} '#{item.url.gsub("\'","'\\\\''")}'")
- else
- system("#{open_command} #{item.url.gsub("\'","'\\\\''")}")
- end
-
- item.value
- end
-
- # Public: returns the command used to copy a given Item's value to the
- # clipboard for the current platform.
- #
- # Returns a String with the bin
- def copy_command
- if darwin?
- 'pbcopy'
- elsif windows?
- 'clip'
- else
- 'xclip -selection clipboard'
- end
- end
-
- # Public: copies a given Item's value to the clipboard. This method is
- # designed to handle multiple platforms.
- #
- # Returns the String value of the Item.
- def copy(item)
- IO.popen(copy_command,"w") {|cc| cc.write(item.value)}
- item.value
- end
-
- # Public: opens the JSON file in an editor for you to edit. Uses the
- # $EDITOR environment variable, or %EDITOR% on Windows for editing.
- # This method is designed to handle multiple platforms.
- # If $EDITOR is nil, try to open using the open_command.
- #
- # Returns a String with a helpful message.
- def edit(json_file)
- unless $EDITOR.nil?
- unless windows?
- system("`echo $EDITOR` #{json_file} &")
- else
- system("start %EDITOR% #{json_file}")
- end
- else
- system("#{open_command} #{json_file}")
- end
-
- "Make your edits, and do be sure to save."
end
end
end
end