check_everything 0.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dc321e9d48815361175d0bca12bbc7de57c1d85a
4
+ data.tar.gz: a03b134b666c3aff6171d3e18ff5e4341961fa92
5
+ SHA512:
6
+ metadata.gz: ce60b8c1621402422d9249d10d7f492b3e81317d613dc11ca4ee677b73e8141669e3aa86ede861cf12767d8f9c560721568d494dba9b204f752f6febc965aefc
7
+ data.tar.gz: 98ab2d3f340dbeeeb960d14eb7750a3b6d9173efed4d88534b48caa6a0830303906a6c12b9b23b1d3d88616d3e7583e8130c1868d5ef7802aa5f36f6eda59b17
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../lib/check_everything.rb'
4
+
5
+ CheckEverything.run
@@ -0,0 +1,54 @@
1
+ YOUR INSTRUCTIONS
2
+
3
+ This file contains your favorite websites! I've included some samples,
4
+ but you should change this and make it your own.
5
+
6
+ Categories start with "&&" whereas websites are prefaced with "--". For
7
+ your convenience, category names are not case-sensitive and will ignore
8
+ whitespace, as I have illustrated. Each website must have its own line.
9
+
10
+ You can use multiple category names separated by semicolons (;) to assign
11
+ websites to multiple groups. Anything marked with "default" will open if
12
+ no tags are specified.
13
+
14
+ Put your websites down here:
15
+
16
+ =======================================================================
17
+
18
+ && NEWS; DEFAULT; MORNING
19
+ --www.news.google.com
20
+ --http://nytimes.com
21
+
22
+ && NEWS
23
+ (This is interesting, but I only want it to pop up when I ask
24
+ check_everything to display the news. I don't want to see it
25
+ in the morning, or by default.)
26
+ --www.reuters.com/news/oddlyEnough
27
+
28
+ && comics
29
+ --www.xkcd.com
30
+ --http://phdcomics.com
31
+
32
+ && Blogs
33
+ --amcaplan.blogspot.com
34
+ --www.amcaplan.github.io
35
+
36
+ && PreTtY_PictUrEs
37
+ --http://inspire.2ia.pl/random
38
+ --http://www.1designperday.com/
39
+
40
+ && twitter
41
+ --http://twitter.com/amcaplan
42
+ --twitter.com/nasa
43
+ --https://twitter.com/WhatsTrending
44
+ -- twitter.com
45
+
46
+ && SOCIAL; defauLt
47
+ --facebook.com
48
+ --twitter.com
49
+
50
+ &&EMAIL;DefauLT;morning
51
+ --gmail.com
52
+
53
+ && weather; morning
54
+ --https://www.google.com/search?q=weather
@@ -0,0 +1,141 @@
1
+ class CheckEverything
2
+ KNOWN_TAGS = {
3
+ :help => ['-h','--help'],
4
+ :links => ['-l','--links'],
5
+ :categories => ['-c', '--categories'],
6
+ :all => ['-a', '--all']
7
+ }
8
+ LINKFILE = "#{File.expand_path('~')}/.check_everything_links"
9
+
10
+ def self.run
11
+ # Create a new link file if none has been created yet
12
+ unless File.exists?(LINKFILE)
13
+ system("cp #{File.dirname(__FILE__)}/check_everything/links.txt #{LINKFILE}")
14
+ end
15
+ # Assume no problems with the link file.
16
+ @link_space, @link_dash = false, false
17
+
18
+ @argv = ARGV.map(&:downcase)
19
+ extract_links
20
+
21
+ # First check for unknown arguments and print out a helpful message.
22
+ known_tags = KNOWN_TAGS.values.flatten + @links.keys
23
+ unmatched_args = @argv.select{ |arg| !known_tags.include?(arg)}
24
+ if !unmatched_args.empty?
25
+ puts "\nUnknown option#{@argv.size > 1 ? "s" : nil}: " +
26
+ "#{unmatched_args.join(" ")}"
27
+ print "usage: check_everything"
28
+ KNOWN_TAGS.values.flatten.each {|tag| print " [#{tag}]"}
29
+ puts "\n\nHint: Enter 'check_everything --help' to see the options!"
30
+ puts "\n"
31
+
32
+ # Print out a help message.
33
+ elsif @argv.any? {|arg| KNOWN_TAGS[:help].include?(arg)}
34
+ help
35
+
36
+ # Edit the tags and links.
37
+ elsif @argv.any? {|arg| KNOWN_TAGS[:links].include?(arg)}
38
+ system("open #{LINKFILE}")
39
+
40
+ # Check for errors; don't allow the user to see bad categories or open up
41
+ # websites if the categories are not formatted properly.
42
+ elsif @link_space
43
+ puts "Your link file includes a category with a space in it; " +
44
+ "please fix by entering 'check_everything -l' into your command line."
45
+ elsif @link_dash
46
+ puts "Your link file includes a category with a dash, which is " +
47
+ "not allowed; please fix by entering 'check_everything -l' into your command line."
48
+
49
+ # View the categories the user has defined.
50
+ elsif @argv.any? {|arg| KNOWN_TAGS[:categories].include?(arg)}
51
+ view_categories
52
+
53
+ # Open up the websites!
54
+ else
55
+ open
56
+ end
57
+ end
58
+
59
+ private
60
+ def self.help
61
+ puts "\n'check_everything' will open all sites labeled with the 'default' tag."
62
+ puts
63
+ puts "Available tags:"
64
+ puts " -h, --help display the help message"
65
+ puts " -l, --links, view/edit links and categories"
66
+ puts " -c, --categories view the currently defined categories"
67
+ puts " -a, --all open all websites"
68
+ puts " <tags> open a specific site group"
69
+ puts
70
+ puts "Note: The first tag in this list will be the only tag evaluated."
71
+ puts
72
+ end
73
+
74
+ def self.view_categories
75
+ puts "You have currently defined the following categories:\n\n"
76
+ @links.keys.sort.each {|key| puts " #{key}"}
77
+ end
78
+
79
+ def self.open
80
+ @argv << "default" if @argv.empty?
81
+
82
+ # If -a or --all is specified, select all links. Otherwise, select specified
83
+ # links, or the default links if none are specified.
84
+ if @argv.any?{|arg| KNOWN_TAGS[:all].include?(arg)}
85
+ links = @links.values.flatten.uniq
86
+ else
87
+ links = @argv.map{|tag| @links[tag]}.flatten.compact.uniq
88
+ end
89
+
90
+ links.each do |url|
91
+ url = "http://" << url if !url.start_with?("http")
92
+ system("open #{url}")
93
+ end
94
+
95
+ puts "\nIt's been a pleasure serving up your favorite websites!"
96
+ puts "Did you know you can use categories to open specific site groups? " +
97
+ "Enter 'check_everything --links' for details.\n" if ARGV.empty?
98
+ end
99
+
100
+ def self.read_file(file_name)
101
+ file = File.open(file_name, "r")
102
+ data = file.read
103
+ file.close
104
+ data
105
+ end
106
+
107
+ def self.extract_links
108
+ link_file = read_file(LINKFILE).split("\n")
109
+ cur_tags = []
110
+
111
+ @links = {}
112
+ link_file.each do |line|
113
+ if line.start_with?("&&")
114
+ # add tags as keys in @links, and assign to cur_tags
115
+ cur_tags = add_tag(line[2..-1].strip).flatten
116
+ elsif line.start_with?("--")
117
+ # add links to each relevant tag in @links
118
+ cur_tags.each { |tag|
119
+ @links[tag] << line[2..-1].strip
120
+ }
121
+ end
122
+ end
123
+ end
124
+
125
+ # Recursive helper method for extract_links
126
+ def self.add_tag(line)
127
+ line.downcase!
128
+ # Add multiple tags, if separated by semicolons.
129
+ if line.include?(";")
130
+ line.split(";").map(&:strip).each do |tag|
131
+ add_tag(tag.strip)
132
+ end
133
+ else
134
+ # Note to raise an error if there is an invalid link.
135
+ @link_space = true if line.match(/ /)
136
+ @link_dash = true if line.match(/-/)
137
+ @links[line] ||= []
138
+ [line]
139
+ end
140
+ end
141
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: check_everything
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ariel Caplan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Open Frequently Used Websites from the Command Line!
14
+ email: ariel.caplan@flatironschool.com
15
+ executables:
16
+ - check_everything
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/check_everything
21
+ - lib/check_everything.rb
22
+ - lib/check_everything/links.txt
23
+ homepage: http://rubygems.org/gems/check_everything
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.2.1
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Check Everything
47
+ test_files: []