initial commit
This commit is contained in:
parent
f15865c5a2
commit
de686f0c79
4
Rakefile
4
Rakefile
|
@ -5,8 +5,8 @@ begin
|
||||||
require 'jeweler'
|
require 'jeweler'
|
||||||
Jeweler::Tasks.new do |gem|
|
Jeweler::Tasks.new do |gem|
|
||||||
gem.name = "noprocast"
|
gem.name = "noprocast"
|
||||||
gem.summary = %Q{TODO: one-line summary of your gem}
|
gem.summary = %Q{Give procastination a swift kick in the balls.}
|
||||||
gem.description = %Q{TODO: longer description of your gem}
|
gem.description = %Q{Block access to addictive websites in one command-line swoop.}
|
||||||
gem.email = "rfwatson@gmail.com"
|
gem.email = "rfwatson@gmail.com"
|
||||||
gem.homepage = "http://github.com/rfwatson/noprocast"
|
gem.homepage = "http://github.com/rfwatson/noprocast"
|
||||||
gem.authors = ["Rob Watson"]
|
gem.authors = ["Rob Watson"]
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib', 'noprocast')
|
||||||
|
|
||||||
|
begin
|
||||||
|
case ARGV.first
|
||||||
|
when 'on'
|
||||||
|
Noprocast.activate!
|
||||||
|
when 'off'
|
||||||
|
Noprocast.deactivate!
|
||||||
|
when 'status'
|
||||||
|
puts Noprocast.status_message
|
||||||
|
when 'edit'
|
||||||
|
if Process.uid != File.stat(Noprocast.deny_file_path).uid
|
||||||
|
puts "Can't edit this file as it belongs to another user (hint: don't use sudo)"
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
Noprocast.edit!
|
||||||
|
when 'help', '-h', '--help', nil
|
||||||
|
puts "Usage: [sudo] noprocast [on|off|status|edit]"
|
||||||
|
end
|
||||||
|
rescue Errno::EACCES
|
||||||
|
puts "Permission denied: try sudo noprocast"
|
||||||
|
end
|
|
@ -0,0 +1,65 @@
|
||||||
|
require 'fileutils'
|
||||||
|
|
||||||
|
class Noprocast
|
||||||
|
class << self
|
||||||
|
def default_hosts
|
||||||
|
['news.ycombinator.com', 'twitter.com', 'facebook.com', 'reddit.com']
|
||||||
|
end
|
||||||
|
|
||||||
|
def deny_file_path
|
||||||
|
File.expand_path("~/.noprocast")
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_hosts
|
||||||
|
setup_deny_file_if_required!
|
||||||
|
File.read(deny_file_path).split(/\n/).map(&:strip)
|
||||||
|
end
|
||||||
|
|
||||||
|
def hosts_file_content
|
||||||
|
File.read("/etc/hosts")
|
||||||
|
end
|
||||||
|
|
||||||
|
def activate!
|
||||||
|
backup_hosts_file_if_required!
|
||||||
|
deactivate! # ensure that /etc/hosts is clean
|
||||||
|
File.open("/etc/hosts", 'a') do |file|
|
||||||
|
file << "\n\n# noprocast start\n#{current_hosts.map { |host| "127.0.0.1 #{host}" }.join("\n")}\n# noprocast end"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def deactivate!
|
||||||
|
clean_hosts = hosts_file_content.gsub(/(\n\n)?\# noprocast start.*\# noprocast end/m, '')
|
||||||
|
File.open("/etc/hosts", 'w') do |file|
|
||||||
|
file << clean_hosts
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def active?
|
||||||
|
hosts_file_content.match(/\# noprocast start/)
|
||||||
|
end
|
||||||
|
|
||||||
|
def status_message
|
||||||
|
active? ? "noprocast enabled for #{current_hosts.size} hosts" : "noprocast disabled"
|
||||||
|
end
|
||||||
|
|
||||||
|
def backup_hosts_file_if_required!
|
||||||
|
unless File.exists?("/etc/.hosts.noprocastbackup")
|
||||||
|
FileUtils.cp("/etc/hosts", "/etc/.hosts.noprocastbackup")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup_deny_file_if_required!
|
||||||
|
unless File.exists?(deny_file_path)
|
||||||
|
File.open(deny_file_path, 'w') do |file|
|
||||||
|
file << default_hosts.join("\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit!
|
||||||
|
editor = ENV['EDITOR'] || 'vi'
|
||||||
|
system "#{editor} #{deny_file_path}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
# Generated by jeweler
|
||||||
|
# DO NOT EDIT THIS FILE DIRECTLY
|
||||||
|
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
Gem::Specification.new do |s|
|
||||||
|
s.name = %q{noprocast}
|
||||||
|
s.version = "0.1.0"
|
||||||
|
|
||||||
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
||||||
|
s.authors = ["Rob Watson"]
|
||||||
|
s.date = %q{2010-11-10}
|
||||||
|
s.default_executable = %q{noprocast}
|
||||||
|
s.description = %q{Block access to addictive websites in one command-line swoop.}
|
||||||
|
s.email = %q{rfwatson@gmail.com}
|
||||||
|
s.executables = ["noprocast"]
|
||||||
|
s.extra_rdoc_files = [
|
||||||
|
"LICENSE",
|
||||||
|
"README.rdoc"
|
||||||
|
]
|
||||||
|
s.files = [
|
||||||
|
".document",
|
||||||
|
".gitignore",
|
||||||
|
"LICENSE",
|
||||||
|
"README.rdoc",
|
||||||
|
"Rakefile",
|
||||||
|
"VERSION",
|
||||||
|
"lib/noprocast.rb",
|
||||||
|
"spec/noprocast_spec.rb",
|
||||||
|
"spec/spec.opts",
|
||||||
|
"spec/spec_helper.rb"
|
||||||
|
]
|
||||||
|
s.homepage = %q{http://github.com/rfwatson/noprocast}
|
||||||
|
s.rdoc_options = ["--charset=UTF-8"]
|
||||||
|
s.require_paths = ["lib"]
|
||||||
|
s.rubygems_version = %q{1.3.7}
|
||||||
|
s.summary = %q{Give procastination a swift kick in the balls.}
|
||||||
|
s.test_files = [
|
||||||
|
"spec/noprocast_spec.rb",
|
||||||
|
"spec/spec_helper.rb"
|
||||||
|
]
|
||||||
|
|
||||||
|
if s.respond_to? :specification_version then
|
||||||
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
||||||
|
s.specification_version = 3
|
||||||
|
|
||||||
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
||||||
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
||||||
|
else
|
||||||
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
||||||
|
end
|
||||||
|
else
|
||||||
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue