jared 0.0.5 → 0.0.7a1

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 CHANGED
@@ -1,4 +1,8 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
1
+ *.gem
2
+ .bundle
3
+ .yardoc
4
+ Gemfile.lock
5
+ pkg/*
6
+ *.*~
7
+ doc/*
8
+ .project
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in jared.gemspec
4
- gemspec
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in jared.gemspec
4
+ gemspec
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require 'bundler/gem_tasks'
1
+ require "bundler/gem_tasks"
data/bin/jared CHANGED
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require 'jared/jared.rb'
5
- rescue LoadError
6
- require 'rubygems'
7
- require 'jared/jared.rb'
8
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'jared'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'jared'
8
+ end
data/jared.gemspec CHANGED
@@ -1,18 +1,35 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- #require "jared/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "jared"
7
- s.version = "0.0.5"
8
- s.authors = ["Cyber"]
9
- s.email = ["matthewlikesrobots@gmail.com"]
10
- s.homepage = "https://github.com/cyberarm/jared"
11
- s.summary = "A Ruby powered Digital Assistant (RDA)"
12
- s.description = "A Ruby powered Digital Assistant (RDA)"
13
- s.add_dependency('commandable')
14
- s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.require_paths = ["lib"]
18
- end
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "jared/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "jared"
7
+ s.version = Jared::VERSION
8
+ s.authors = ["Cyber"]
9
+ s.email = ["matthewlikesrobots@gmail.com"]
10
+ s.homepage = "https://github.com/cyberarm/jared"
11
+ s.summary = "Ruby powered digital assistant"
12
+ s.description = "Ruby powered digital assistant"
13
+
14
+ s.rubyforge_project = "jared"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib", "bin"]
20
+
21
+ s.add_development_dependency "stock_quote"
22
+ s.add_runtime_dependency "green_shoes"
23
+ s.add_runtime_dependency "gstreamer"
24
+ s.add_runtime_dependency "thor"
25
+ s.add_runtime_dependency "chronic"
26
+ s.add_runtime_dependency "sys-uname"
27
+ s.add_runtime_dependency "activerecord"
28
+ s.add_runtime_dependency "sqlite3"
29
+ s.add_runtime_dependency "launchy"
30
+ s.add_runtime_dependency 'google-weather'
31
+ s.add_runtime_dependency 'gmail'
32
+ s.add_runtime_dependency 'gibberish'
33
+ s.add_runtime_dependency 'faster_require'
34
+ s.add_runtime_dependency 'json'
35
+ end
@@ -0,0 +1,8 @@
1
+ class Helpers
2
+ # Not yet implemented.
3
+ #
4
+ # Calculates.
5
+ def self.calc
6
+ puts "Calc(ulator) is not yet available."
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ class Helpers
2
+ # Not yet implemented.
3
+ #
4
+ # _jared_ _cal_ Manage your appointments in a Green Shoes app.
5
+ def self.cal
6
+ require "green_shoes"
7
+ Shoes.app do
8
+ title "Calendar Events"
9
+ events = ["Sidney", "Call Bob"]
10
+ events.each do |e|
11
+ para e
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ class Helpers
2
+ # _jared_ _clock_ Opens a digital clock in a Green Shoes app.
3
+ def self.clock
4
+ begin
5
+ require "green_shoes"
6
+ Shoes.app width: 400, height: 70, title: "Jared Clock" do
7
+ @clock = stack do
8
+ title "#{Time.now.strftime("%I:%M:%P")}"
9
+ end
10
+ every 0.5 do
11
+ @clock.clear do
12
+ title "#{Time.now.strftime("%I:%M:%S%P")}"
13
+ end
14
+ end
15
+ end
16
+ rescue LoadError
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,46 @@
1
+ class Helpers
2
+ Lib.db
3
+ # Opens a Green Shoes window to configure your name, zipcode, gmail username, gmail password.
4
+ def self.config
5
+ require 'gibberish'
6
+ Shoes.app title: "Jared - Configuration", height: 300, width: 500 do
7
+ background "#333".."#666"
8
+ tagline "Configure Jared to your person"
9
+ @user = User.first
10
+ if @user.blank?
11
+ button "Create profile" do
12
+ new_user = User.new(:name => "#{Etc.getlogin}", :zip => "10001")
13
+ new_user.save
14
+ if new_user == true
15
+ exit
16
+ Helpers.config
17
+ else
18
+ alert "Failed. Retry."
19
+ end
20
+ end
21
+ else
22
+ para 'Your name:'
23
+ @name = edit_line "#{@user.name}"
24
+ para 'Your zipcode (For weather)'
25
+ @zip = edit_line "#{@user.zip}"
26
+ para 'Prefered music genre (For jamendo)'
27
+ @music = list_box items: ['classical', 'rock', 'jazz', 'electro', 'hiphop'].sort
28
+ para 'Your Gmail email address (For email checking)'
29
+ @mail = edit_line "#{@user.mail_username}"
30
+ para 'Your Gmail password (Will be encrypted)'
31
+ @password = edit_line "#{@user.mail_password}", secret: true
32
+ button "Save" do
33
+ cipher = Gibberish::AES.new(@mail.text)
34
+ @secret = cipher.enc(@password.text)
35
+ update_user = @user.update_attributes(:name => @name.text, :zip => @zip.text, :music => @music.text, :mail_username => @mail.text, :mail_password => @secret)
36
+ if update_user
37
+ alert "Saved."
38
+ close
39
+ else
40
+ alert "failed to save."
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,27 @@
1
+ class Helpers
2
+ # Creates a File or Folder.
3
+ #
4
+ # Usage:
5
+ #
6
+ # <em>jared create file/folder/dir</em>
7
+ def self.create
8
+ begin
9
+ if ARGV[1].include?("folder")
10
+ FileUtils.mkdir "#{ARGV[2]}"
11
+ puts "New Folder is at: #{Dir.pwd}/#{ARGV[2]}"
12
+ elsif ARGV[1].include?("dir")
13
+ FileUtils.mkdir "#{ARGV[2]}"
14
+ puts "New Directory is at: #{Dir.pwd}/#{ARGV[2]}"
15
+ elsif ARGV[1].include?("file")
16
+ File.open("#{ARGV[2]}", 'w') do |file|
17
+ file.puts "Hello World"
18
+ end
19
+ puts "New file is at: #{Dir.pwd}/#{ARGV[2]}"
20
+ else
21
+ puts "Don't know how-to create that."
22
+ end
23
+ rescue NoMethodError
24
+ puts "Folder/File name can't be blank."
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,41 @@
1
+ class Helpers
2
+ # Date and Time
3
+ #
4
+ # _jared_ _time_ returns the current time.
5
+ #
6
+ #e.g.
7
+ #
8
+ #02:33:19pm
9
+ #
10
+ # _Jared_ _date_ returns the current date.
11
+ #
12
+ #e.g.
13
+ #
14
+ #Tuesday the 1st of May 2012
15
+ #
16
+ #(05/01/2012)
17
+ def self.date
18
+ st = "#{Time.now.strftime("%A the %dst of %B %Y")}"
19
+ nd = "#{Time.now.strftime("%A the %dnd of %B %Y")}"
20
+ rd = "#{Time.now.strftime("%A the %drd of %B %Y")}"
21
+
22
+ if Time.now.strftime("%d") == "02"
23
+ puts nd.gsub("0", "")
24
+ elsif Time.now.strftime("%d") == "22"
25
+ puts nd
26
+ elsif Time.now.strftime("%d") == "3"
27
+ puts rd
28
+ elsif Time.now.strftime("%d") == "33"
29
+ puts rd
30
+ elsif Time.now.strftime("%d") == "21"
31
+ puts st
32
+ elsif Time.now.strftime("%d") == "31"
33
+ puts st
34
+ elsif Time.now.strftime("%d") == "01"
35
+ puts st.gsub("0", "")
36
+ else
37
+ puts "#{Time.now.strftime("%A the %dth of %B %Y")}"
38
+ end
39
+ puts "(#{Time.now.strftime("%m/%d/%Y")})"
40
+ end
41
+ end
@@ -0,0 +1,100 @@
1
+ # == Deamon
2
+ #
3
+ # Functions for deamon command.
4
+ class Deamon
5
+ Lib.db
6
+ # TODO: Add tasks to deamon
7
+ def self.task
8
+ puts "Jared Tasks"
9
+ puts "0 Tasks due today."
10
+ end
11
+ # TODO: add appointments to deamon
12
+ #
13
+ # NOTE: Research Google Calendar
14
+ def self.appointment
15
+ puts "Jared Calendar"
16
+ puts "0 Appointments occurring today."
17
+ puts "Google Calendar"
18
+ puts "x Appointments occurring today"
19
+ end
20
+ # Actually checks mail.
21
+ def self.message
22
+ begin
23
+ @user = User.first
24
+ if @user.mail_username.blank?
25
+ puts "Jared is not configured to check email."
26
+ puts "Please run, 'jared config'"
27
+ Kernel.exit
28
+ elsif @user.mail_password.blank?
29
+ puts "Jared is not configured to check email."
30
+ puts "Please run, 'jared config'"
31
+ Kernel.exit
32
+ else
33
+ cipher = Gibberish::AES.new(@user.mail_username)
34
+ password = cipher.dec(@user.mail_password)
35
+ Gmail.connect(@user.mail_username, password) do |gmail|
36
+ if gmail.logged_in?
37
+ if gmail.inbox.count(:unread) == 0
38
+ else
39
+ puts "Google Mail"
40
+ puts gmail.inbox.count(:unread).to_s + " Unread messages."
41
+
42
+ gmail.inbox.emails(:unread).first(15).each do |email|
43
+ email.unread!
44
+ print "From:",email.sender[0].mailbox,"@", email.sender[0].host, ", Subject:",email.subject
45
+ puts
46
+ puts
47
+ end
48
+ end
49
+ else
50
+ puts "Failed to login."
51
+ Kernel.exit
52
+ end
53
+ end
54
+ end
55
+ end
56
+ rescue => e
57
+ if e.to_s.include?("mail_")
58
+ puts "Jared is not configured to check email."
59
+ puts "Please run, 'jared config' or click 'OK' on the popup."
60
+ Kernel.exit
61
+ end
62
+ end
63
+ end
64
+
65
+ class Helpers
66
+ # Checks every 60 seconds for, Tasks, Appointments, Emails.
67
+ #
68
+ # Usage: <em>jared deamon (task/cal/mail)</em>
69
+ def self.deamon
70
+ if ARGV[1] == nil
71
+ Helpers.mail
72
+ loop do
73
+ Deamon.message
74
+ Deamon.task
75
+ Deamon.appointment
76
+ puts
77
+ puts
78
+ sleep(60)
79
+ end
80
+ elsif ARGV[1] == "cal" || ARGV[1] == "calendar"
81
+ loop do
82
+ Deamon.appointment
83
+ puts
84
+ sleep(60)
85
+ end
86
+ elsif ARGV[1] == 'mail'
87
+ Helpers.mail
88
+ loop do
89
+ Deamon.message
90
+ sleep(60)
91
+ end
92
+ elsif ARGV[1] == "task"
93
+ loop do
94
+ Deamon.task
95
+ puts
96
+ sleep(60)
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,8 @@
1
+ class Helpers
2
+ #TODO: Get this functional.
3
+ #
4
+ # Googles the definition of the word.
5
+ def self.define(word)
6
+ puts "this function is unavailable. Word: #{word}"
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ class Helpers
2
+ Lib.db
3
+ # Dynamically greets the user by time when <em>jared hi/hello</em> is run.
4
+ def self.greeting
5
+ if Time.now.strftime("%H").to_i < "04".to_i
6
+ puts "Go tee bed."
7
+ elsif Time.now.strftime("%H").to_i < "07".to_i
8
+ puts "Yawn Zzzz"
9
+ elsif Time.now.strftime("%H").to_i < "12".to_i
10
+ puts "Morning, #{User.first.name.capitalize}"
11
+ elsif Time.now.strftime("%H").to_i < "16".to_i
12
+ puts "Afternoon, #{User.first.name.capitalize}"
13
+ elsif Time.now.strftime("%H").to_i < "20".to_i
14
+ puts "Evening, #{User.first.name.capitalize}"
15
+ elsif Time.now.strftime("%H").to_i < "22".to_i
16
+ puts "Ummm, good night, #{User.first.name.capitalize}"
17
+ puts "Its getting late, consider getting some rest."
18
+ elsif Time.now.strftime("%H").to_i < "24".to_i
19
+ puts "Zzzz"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,58 @@
1
+ class Helpers
2
+
3
+ def self.player(n=0)
4
+ puts "Now playing: #{@data['name']}, By: #{@data['artist_name']} (#{n})"
5
+ @playbin = Gst::ElementFactory.make('playbin2')
6
+ @playbin.uri = @data['stream']
7
+ loop = GLib::MainLoop.new(nil, false)
8
+ bus = @playbin.bus
9
+ bus.add_watch {|bus, message|
10
+ case message.type
11
+ when Gst::Message::EOS
12
+ loop.quit
13
+ end
14
+ true}
15
+ @playbin.play
16
+ begin
17
+ loop.run
18
+ rescue Interrupt
19
+ ensure
20
+ @playbin.stop
21
+ end
22
+ end
23
+
24
+ def self.jamendo(mode='once')
25
+ Lib.db
26
+ @jared = Info.first
27
+ @user = User.first
28
+ require 'gtk2'
29
+ require 'open-uri'
30
+ require 'json'
31
+ require 'gst'
32
+ @list = open("http://api.jamendo.com/get2/name+url+stream+album_name+album_url+album_image+artist_name+artist_url/track/json/track_album+album_artist/?n=100&order=ratingmonth_desc&tag_idstr=#{@user.music}").read
33
+ @d = JSON.parse(@list)
34
+ @data = @d[2]
35
+
36
+ if mode == 'loop'
37
+ puts 'Starting loop, use CTRL-Pause(Break) to stop.'
38
+ loop do
39
+ v = Random.rand(0..49)
40
+ @data = @d[v]
41
+ @jared.update_attributes(:author_url => "#{@data['artist_url']}", :album_image => "#{@data['album_image']}", :music_url => "#{@data['url']}", :album_url => "#{@data['album_url']}", :now_playing => "#{@data['name']}", :now_playing_author => "#{@data['artist_name']}", :now_playing_album => "#{@data['album_name']}")
42
+ Helpers.player(v)
43
+ end
44
+ elsif mode == 'once'
45
+ v = Random.rand(0..49)
46
+ @data = @d[v]
47
+ @jared.update_attributes(:author_url => "#{@data['artist_url']}", :album_image => "#{@data['album_image']}", :music_url => "#{@data['url']}", :album_url => "#{@data['album_url']}", :now_playing => "#{@data['name']}", :now_playing_author => "#{@data['artist_name']}", :now_playing_album => "#{@data['album_name']}")
48
+ Helpers.player(v)
49
+ elsif mode == 'help'
50
+ puts 'loop|once'
51
+ else
52
+ v = mode.to_s.to_i
53
+ @data = @d[v]
54
+ @jared.update_attributes(:author_url => "#{@data['artist_url']}", :album_image => "#{@data['album_image']}", :music_url => "#{@data['url']}", :album_url => "#{@data['album_url']}", :now_playing => "#{@data['name']}", :now_playing_author => "#{@data['artist_name']}", :now_playing_album => "#{@data['album_name']}")
55
+ Helpers.player(mode.to_s.to_i)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,38 @@
1
+ class Helpers
2
+ Lib.db
3
+ # Checks Email on demand.
4
+ def self.mail
5
+ require 'gibberish'
6
+ begin
7
+ @user = User.first
8
+ if @user.mail_username.blank?
9
+ puts "Jared is not configured to check email."
10
+ puts "Please run, 'jared config'"
11
+ elsif @user.mail_password.blank?
12
+ puts "Jared is not configured to check email."
13
+ puts "Please run, 'jared config'"
14
+ else
15
+ cipher = Gibberish::AES.new(@user.mail_username)
16
+ password = cipher.dec(@user.mail_password)
17
+ Gmail.connect(@user.mail_username, password) do |gmail|
18
+ if gmail.logged_in?
19
+ puts "Google Mail"
20
+ puts gmail.inbox.count(:unread).to_s + " Unread messages."
21
+ gmail.inbox.emails(:unread).each do |email|
22
+ email.unread!
23
+ print "From:",email.sender[0].mailbox,"@", email.sender[0].host, ", Subject:",email.subject
24
+ puts
25
+ end
26
+ else
27
+ puts "Not logged in."
28
+ end
29
+ end
30
+ end
31
+ rescue => e
32
+ if e.to_s.include?("mail_")
33
+ puts "Jared is not configured to check email."
34
+ puts "Please run, 'jared config' or click 'OK' on the popup."
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,10 @@
1
+ class Helpers
2
+ #TODO: Get this working on windows.
3
+ #
4
+ # TODO: make command work it this: <em>jared map Texas, USA</em> instead of using gets.
5
+ def self.map(place)
6
+ @m = place
7
+ puts @m
8
+ system("launchy http://maps.google.com/?q=#{@m}")
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ class Helpers
2
+ # Lists available commands.
3
+ def self.notfound
4
+ puts "Error: Command '#{ARGV[0]}' not found."
5
+ puts "Hi, Hello - Jared Hi -Morning, #{Etc.getlogin}"
6
+ puts "Create - Jared Create file index.html - Creates a File/Folder at curent location."
7
+ puts "Time - Jared Time - 04:12pm"
8
+ puts "Date - Jared Date - Tuesday the 22nd of December 2012"
9
+ #puts "calc(ulator) - Jared Calc 22 / 2 - 11"
10
+ puts "Task - Jared task - Opens a window listing tasks."
11
+ puts "View - Jared View lib/lib.rb - Opens a file(e.g. Picture, document) in the system viewer."
12
+ puts "Whereis - Jared Whereis - Opens the system default browser to Gmaps."
13
+ end
14
+ end
@@ -0,0 +1,29 @@
1
+ require 'sys/uname'
2
+ include Sys
3
+
4
+ class Helpers
5
+ def self.play(request='')
6
+ unless Uname.sysname.include?('Windows')
7
+ puts 'Your platform is not supported by green_shoes Video.'
8
+ Kernel.exit
9
+ end
10
+ require 'green_shoes'
11
+ Shoes.app title: 'JaredPlayer' do
12
+ background gray..black, angle: 90
13
+ $v = video request
14
+ timer 1 do
15
+ $v.play
16
+ end
17
+ button 'Play/Pause' do
18
+ if $v.playing?
19
+ $v.pause
20
+ else
21
+ $v.play
22
+ end
23
+ end
24
+ button 'Stop' do
25
+ $v.stop
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ require 'stock_quote'
2
+
3
+ class Helpers
4
+ def self.stock(symbol='', mode='last')
5
+ stock = StockQuote::Stock.quote("#{symbol}")
6
+ puts "Stock data for: #{if stock.company.length == 0; raise "Invalid Stock. No stock data found for '#{symbol}'.";exit;else;stock.company;end}"
7
+ if mode == 'last'
8
+ puts "#{stock.last}"
9
+ elsif mode == 'open'
10
+ puts "#{stock.open}"
11
+ elsif mode == 'close'
12
+ puts "#{stock.y_close}"
13
+ elsif mode == 'high'
14
+ puts "#{stock.high}"
15
+ elsif mode == 'low'
16
+ puts "#{stock.low}"
17
+ else
18
+ puts "Mode: '#{mode}' not understood. try again."
19
+ end
20
+ end
21
+ end