discipline 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +9 -0
- data/Readme.md +45 -0
- data/bin/discipline +15 -0
- data/discipline.gemspec +15 -0
- data/lib/discipline.rb +59 -0
- data/lib/version.rb +3 -0
- metadata +55 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gem
|
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gem "thor", "~> 0.14.6"
|
data/Gemfile.lock
ADDED
data/Readme.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Discipline
|
2
|
+
|
3
|
+
Discipline is a tool to help you stop procrastinating by blocking distracting online content like Facebook, Twitter and other websites.
|
4
|
+
|
5
|
+
# Install
|
6
|
+
|
7
|
+
To install discipline, run this command:
|
8
|
+
|
9
|
+
gem install discipline
|
10
|
+
|
11
|
+
# Usage
|
12
|
+
|
13
|
+
To block unwanted online content, run this command in your terminal:
|
14
|
+
|
15
|
+
sudo discipline on
|
16
|
+
|
17
|
+
To unblock unwanted online content, run the inverse command in your terminal:
|
18
|
+
|
19
|
+
sudo discipline off
|
20
|
+
|
21
|
+
The "sudo" mode of operation is required because discipline works by modifying your <tt>/etc/hosts/</tt> file, which requires root access.
|
22
|
+
|
23
|
+
# Configuration
|
24
|
+
|
25
|
+
Create a <tt>~/.discipline_config.yml</tt> file with the following configuration
|
26
|
+
|
27
|
+
---
|
28
|
+
- youtube.com
|
29
|
+
- www.youtube.com
|
30
|
+
- techcrunch.com
|
31
|
+
- facebook.com
|
32
|
+
- www.facebook.com
|
33
|
+
- www.twitter.com
|
34
|
+
- twitter.com
|
35
|
+
- api.twitter.com
|
36
|
+
- linkedin.com
|
37
|
+
- www.linkedin.com
|
38
|
+
|
39
|
+
# Supported platforms
|
40
|
+
|
41
|
+
I've tested this only on the OSX operating system, so I have no idea how it behaves on other platforms. It should work on Linux, for Windows I wouldn't get my hopes up.
|
42
|
+
|
43
|
+
# Author
|
44
|
+
|
45
|
+
Copyright © 2012 Tomislav Car, [Infinum](http://www.infinum.hr)
|
data/bin/discipline
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
DISCIPLINE_ROOT = File.join(File.dirname(File.expand_path(__FILE__)), '..')
|
3
|
+
$:.unshift File.join(DISCIPLINE_ROOT, 'lib')
|
4
|
+
require "rubygems"
|
5
|
+
require "bundler/setup"
|
6
|
+
|
7
|
+
# gems and libraries
|
8
|
+
require 'yaml'
|
9
|
+
require 'thor'
|
10
|
+
|
11
|
+
# local classes
|
12
|
+
require 'discipline'
|
13
|
+
|
14
|
+
# run with thor
|
15
|
+
Discipline::App.start
|
data/discipline.gemspec
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
$LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
|
2
|
+
require 'version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'discipline'
|
6
|
+
s.version = Discipline::VERSION
|
7
|
+
s.summary = "Tool to help you stop procrastinating."
|
8
|
+
s.description = "Discipline is a tool to help you stop procrastinating by blocking distracting online content like Facebook, Twitter and other websites."
|
9
|
+
s.authors = ['Tomislav Car']
|
10
|
+
s.email = ['tomislav@infinum.hr']
|
11
|
+
s.homepage = 'http://github.com/carr/discipline'
|
12
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
end
|
data/lib/discipline.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
module Discipline
|
2
|
+
class Base
|
3
|
+
DISCIPLINE_CONFIG_FILE = File.expand_path("~/.discipline_config.yml")
|
4
|
+
HOSTS_FILE = '/etc/hosts'
|
5
|
+
DELIMITER_START = '# DISCIPLINE BLOCKED HOSTS START'
|
6
|
+
DELIMITER_END = '# DISCIPLINE BLOCKED HOSTS END'
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
begin
|
10
|
+
@files = YAML.load(File.read(DISCIPLINE_CONFIG_FILE))
|
11
|
+
rescue
|
12
|
+
raise "Please create a valid config file at #{DISCIPLINE_CONFIG_FILE}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def on
|
17
|
+
append = [clear_hosts_file]
|
18
|
+
append << DELIMITER_START
|
19
|
+
@files.each do |file|
|
20
|
+
append << "0.0.0.0 #{file}"
|
21
|
+
end
|
22
|
+
append << DELIMITER_END
|
23
|
+
|
24
|
+
write(append)
|
25
|
+
end
|
26
|
+
|
27
|
+
def off
|
28
|
+
write([clear_hosts_file])
|
29
|
+
end
|
30
|
+
|
31
|
+
def clear_hosts_file
|
32
|
+
hosts_file = File.read(HOSTS_FILE)
|
33
|
+
hosts_file.gsub!(/#{DELIMITER_START}(.*)#{DELIMITER_END}/m, '')
|
34
|
+
hosts_file.strip
|
35
|
+
end
|
36
|
+
|
37
|
+
def write(append)
|
38
|
+
File.open(HOSTS_FILE, 'w+') do |f|
|
39
|
+
f.puts append.join("\n")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class App < Thor
|
45
|
+
include Thor::Actions
|
46
|
+
|
47
|
+
desc "on", "Lock down this computer"
|
48
|
+
def on
|
49
|
+
base = Base.new
|
50
|
+
base.on
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "off", "Unlock this computer"
|
54
|
+
def off
|
55
|
+
base = Base.new
|
56
|
+
base.off
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: discipline
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tomislav Car
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-25 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Discipline is a tool to help you stop procrastinating by blocking distracting
|
15
|
+
online content like Facebook, Twitter and other websites.
|
16
|
+
email:
|
17
|
+
- tomislav@infinum.hr
|
18
|
+
executables:
|
19
|
+
- discipline
|
20
|
+
extensions: []
|
21
|
+
extra_rdoc_files: []
|
22
|
+
files:
|
23
|
+
- .gitignore
|
24
|
+
- Gemfile
|
25
|
+
- Gemfile.lock
|
26
|
+
- Readme.md
|
27
|
+
- bin/discipline
|
28
|
+
- discipline.gemspec
|
29
|
+
- lib/discipline.rb
|
30
|
+
- lib/version.rb
|
31
|
+
homepage: http://github.com/carr/discipline
|
32
|
+
licenses: []
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ! '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
requirements: []
|
50
|
+
rubyforge_project:
|
51
|
+
rubygems_version: 1.8.10
|
52
|
+
signing_key:
|
53
|
+
specification_version: 3
|
54
|
+
summary: Tool to help you stop procrastinating.
|
55
|
+
test_files: []
|