sendle 0.1.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.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+
3
+ gemspec
4
+
data/README ADDED
@@ -0,0 +1,9 @@
1
+ A file system watcher to send new files to your kindle
2
+
3
+ ruby 1.9.2
4
+
5
+ ~/.sendle
6
+ gmail:
7
+ username: john_do@gmail.com
8
+ kindle:
9
+ email: john_do@kindle.com
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'bundler'
4
+
5
+ Bundler::GemHelper.install_tasks
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
3
+
4
+ require 'rb-fsevent'
5
+ require 'sendle'
6
+
7
+ password = nil
8
+ while(password.nil? || password.empty?)
9
+ puts 'Please, type your gmail password'
10
+ system 'stty -echo'
11
+ password = gets.strip
12
+ system 'stty echo'
13
+ end
14
+ puts 'starting...'
15
+ sendle = Sendle.new(password)
@@ -0,0 +1,72 @@
1
+ require 'digest/sha1'
2
+ require 'yaml'
3
+ require 'gmail'
4
+
5
+ class Sendle
6
+ attr_reader :last_event, :sha1_checksums_hash, :listener
7
+
8
+ def initialize(password)
9
+ @password = password
10
+ @sha1_checksums_hash = {}
11
+ @last_event = Time.now
12
+
13
+ configure_listener
14
+ end
15
+
16
+ def send_to_kindle(file)
17
+ @config ||= YAML::load(File.open("#{ENV['HOME']}/.sendle"))
18
+ gmail = Gmail.connect(@config["gmail"]["username"], @password)
19
+ message = gmail.message
20
+ message.to = @config["kindle"]["email"]
21
+ message.add_file file
22
+ message.deliver
23
+ puts "an email with #{file} is flying on the interwebz!"
24
+ end
25
+
26
+ def file_added(file)
27
+ puts "file changed: #{file}, sending now..."
28
+ send_to_kindle(file[0]) unless file.nil? || file.empty?
29
+ end
30
+
31
+ private # shameless copied from: https://github.com/guard/guard/blob/master/lib/guard/listener.rb#L35-63.
32
+
33
+ def configure_listener
34
+ @listener = FSEvent.new
35
+ @listener.watch Dir.pwd do |directories|
36
+ @last_event = Time.now
37
+ file_added(modified_files(directories))
38
+ end
39
+ @listener.run
40
+ end
41
+
42
+ def modified_files(dirs, options = {})
43
+ files = potentially_modified_files(dirs, options).select do |path|
44
+ File.file?(path) && file_modified?(path) && file_content_modified?(path)
45
+ end
46
+ files.map! { |file| file.gsub("#{Dir.pwd}/", '') }
47
+ end
48
+
49
+ def potentially_modified_files(dirs, options = {})
50
+ match = options[:all] ? "**/*" : "*"
51
+ Dir.glob(dirs.map { |dir| "#{dir}#{match}" })
52
+ end
53
+
54
+ def file_modified?(path)
55
+ # Depending on the filesystem, mtime is probably only precise to the second, so round
56
+ # both values down to the second for the comparison.
57
+ File.mtime(path).to_i >= last_event.to_i
58
+ rescue
59
+ false
60
+ end
61
+
62
+ def file_content_modified?(path)
63
+ sha1_checksum = Digest::SHA1.file(path).to_s
64
+ if sha1_checksums_hash[path] != sha1_checksum
65
+ @sha1_checksums_hash[path] = sha1_checksum
66
+ true
67
+ else
68
+ false
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,3 @@
1
+ class Sendle
2
+ VERSION = '0.1.1'
3
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $:.unshift lib unless $:.include?(lib)
4
+
5
+ require "sendle/version"
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "sendle"
9
+ s.version = Sendle::VERSION
10
+ s.platform = Gem::Platform::RUBY
11
+ s.authors = ["Ricardo Valeriano"]
12
+ s.email = ["ricardo@backslashes.net"]
13
+ s.homepage = "https://github.com/ricardovaleriano/sendle"
14
+ s.summary = %q{A file system watcher to send new files to your kindle}
15
+ s.description = %q{A file system watcher to send new files to your kindle}
16
+
17
+ s.rubyforge_project = "sendle"
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+
24
+ s.executables = ['sendle']
25
+
26
+ s.add_runtime_dependency 'gmail', '>= 0.3.4'
27
+ s.add_runtime_dependency 'rb-fsevent', '>= 0'
28
+ end
29
+
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sendle
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 1
9
+ version: 0.1.1
10
+ platform: ruby
11
+ authors:
12
+ - Ricardo Valeriano
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-05-26 00:00:00 -03:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: gmail
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 3
31
+ - 4
32
+ version: 0.3.4
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rb-fsevent
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ description: A file system watcher to send new files to your kindle
49
+ email:
50
+ - ricardo@backslashes.net
51
+ executables:
52
+ - sendle
53
+ extensions: []
54
+
55
+ extra_rdoc_files: []
56
+
57
+ files:
58
+ - .gitignore
59
+ - Gemfile
60
+ - Gemfile.lock
61
+ - README
62
+ - Rakefile
63
+ - VERSION
64
+ - bin/sendle
65
+ - lib/sendle.rb
66
+ - lib/sendle/version.rb
67
+ - sendle.gemspec
68
+ has_rdoc: true
69
+ homepage: https://github.com/ricardovaleriano/sendle
70
+ licenses: []
71
+
72
+ post_install_message:
73
+ rdoc_options: []
74
+
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ requirements: []
94
+
95
+ rubyforge_project: sendle
96
+ rubygems_version: 1.3.7
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: A file system watcher to send new files to your kindle
100
+ test_files: []
101
+