nogoth-pastejour 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.
data/README.rdoc ADDED
@@ -0,0 +1,55 @@
1
+ = Pastejour
2
+
3
+ Broadcast standard out.
4
+
5
+ == Installation
6
+
7
+ sudo gem install dnssd
8
+ sudo gem install jbarnette-pastejour --source=http://gems.github.com
9
+
10
+ == Usage
11
+
12
+ alice$ git diff | pastejour
13
+ bob$ pastejour alice | cat
14
+
15
+ alice$ git diff | pastejour bob
16
+ bob$ pastejour | cat
17
+
18
+ alice$ git diff | pastejour monkeys
19
+ bob$ pastejour alice-monkeys | cat
20
+
21
+ == ORLY?
22
+
23
+ Yup. Pastejour gives you a simple, discoverable pipe for standard in and
24
+ out. By default, Pastejour will only stay up until the first person
25
+ grabs your paste. If you want to let a bunch of people grab the same
26
+ thing, shoot it out in multiple mode:
27
+
28
+ alice$ git diff | pastejour -m # keeps on serving 'til you CTRL-C
29
+
30
+ == Awesome!
31
+
32
+ You know it.
33
+
34
+ == License
35
+
36
+ Copyright (c) 2008 John Barnette, Evan Phoenix
37
+
38
+ Permission is hereby granted, free of charge, to any person obtaining
39
+ a copy of this software and associated documentation files (the
40
+ "Software"), to deal in the Software without restriction, including
41
+ without limitation the rights to use, copy, modify, merge, publish,
42
+ distribute, sublicense, and/or sell copies of the Software, and to
43
+ permit persons to whom the Software is furnished to do so, subject to
44
+ the following conditions:
45
+
46
+ The above copyright notice and this permission notice shall be
47
+ included in all copies or substantial portions of the Software.
48
+
49
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
50
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
51
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
52
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
53
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
54
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
55
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,56 @@
1
+ require "date"
2
+ require "fileutils"
3
+ require "rubygems"
4
+ require "rake/gempackagetask"
5
+ require "spec/rake/spectask"
6
+
7
+ require "./lib/pastejour/version.rb"
8
+
9
+ pastejour_gemspec = Gem::Specification.new do |s|
10
+ s.name = "pastejour"
11
+ s.version = Pastejour::VERSION
12
+ s.platform = Gem::Platform::RUBY
13
+ s.has_rdoc = true
14
+ s.extra_rdoc_files = ["README.rdoc"]
15
+ s.summary = "Broadcast standard out."
16
+ s.description = s.summary
17
+ s.authors = ["John Barnette", "Evan Phoenix"]
18
+ s.email = "jbarnette@rubyforge.org"
19
+ s.homepage = "http://github.com/jbarnette/pastejour"
20
+ s.require_path = "lib"
21
+ s.autorequire = "pastejour"
22
+ s.files = %w(README.rdoc Rakefile) + Dir.glob("{bin,lib,spec}/**/*")
23
+ s.executables = %w(pastejour)
24
+
25
+ s.add_dependency "dnssd", ">= 0.6.0"
26
+ end
27
+
28
+ Rake::GemPackageTask.new(pastejour_gemspec) do |pkg|
29
+ pkg.gem_spec = pastejour_gemspec
30
+ end
31
+
32
+ namespace :gem do
33
+ namespace :spec do
34
+ desc "Update pastejour.gemspec"
35
+ task :generate do
36
+ File.open("pastejour.gemspec", "w") do |f|
37
+ f.puts(pastejour_gemspec.to_ruby)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ task :install => :package do
44
+ sh %{sudo gem install pkg/pastejour-#{Pastejour::VERSION}}
45
+ end
46
+
47
+ desc "Run all specs"
48
+ Spec::Rake::SpecTask.new do |t|
49
+ t.spec_files = FileList["spec/**/*_spec.rb"]
50
+ t.spec_opts = ["--options", "spec/spec.opts"]
51
+ end
52
+
53
+ task :default => :spec
54
+
55
+ desc "Remove all generated artifacts"
56
+ task :clean => :clobber_package
data/bin/pastejour ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "pastejour"
5
+
6
+ multiple = ARGV.delete("-m")
7
+ name = ARGV.shift
8
+
9
+ if $stdin.tty?
10
+ name = /#{ENV["USER"]}$/ if name.nil? || name.empty?
11
+ $stdout.write(Pastejour.get(name))
12
+ $stdout.flush
13
+ else
14
+ name = [ENV["USER"], name].compact.join("-")
15
+ Pastejour.serve(name, multiple, $stdin.read)
16
+ end
data/lib/pastejour.rb ADDED
@@ -0,0 +1,85 @@
1
+ require 'net/dns/mdns-sd'
2
+ require "socket"
3
+ require "webrick"
4
+ require "set"
5
+ require "pastejour/version"
6
+
7
+ DNSSD = Net::DNS::MDNSSD
8
+
9
+
10
+ Thread.abort_on_exception = true
11
+
12
+ module Pastejour
13
+ include Socket::Constants
14
+
15
+ Paste = Struct.new(:name, :host, :port)
16
+ PORT = 42424
17
+ SERVICE = "_pastejour._tcp"
18
+
19
+ def self.find(name, first=true)
20
+ hosts = Set.new
21
+
22
+ waiting = Thread.current
23
+
24
+ service = DNSSD.browse(SERVICE) do |reply|
25
+ if name === reply.name
26
+ DNSSD.resolve(reply.name, reply.type, reply.domain) do |rr|
27
+ hosts << Paste.new(reply.name, rr.target, rr.port)
28
+ waiting.run if first
29
+ end
30
+ end
31
+ end
32
+
33
+ sleep 5
34
+ service.stop
35
+
36
+ hosts
37
+ end
38
+
39
+ def self.get(name)
40
+ hosts = find(name)
41
+
42
+ if hosts.empty?
43
+ STDERR.puts "ERROR: Unable to find #{name}"
44
+ elsif hosts.size > 1
45
+ STDERR.puts "ERROR: Multiple possibles found:"
46
+ hosts.each do |host|
47
+ STDERR.puts " #{host.name} (#{host.host}:#{host.port})"
48
+ end
49
+ else
50
+ # Set is weird. There is no #[] or #at
51
+ hosts.each do |host|
52
+ STDERR.puts "(#{host.name} from #{host.host}:#{host.port})"
53
+ sock = TCPSocket.open host.host, host.port
54
+ return sock.read
55
+ end
56
+ end
57
+
58
+ # FIXME: actually read the paste contents
59
+ # TCPSocket.open("localhost", PORT).read
60
+ end
61
+
62
+ def self.serve(name, multiple, contents)
63
+ tr = DNSSD::TextRecord.new
64
+ tr['description'] = File.read("#{path}/.git/description") rescue "a git project"
65
+
66
+ DNSSD.register(name, SERVICE, "local", PORT, tr.encode) do |reply|
67
+ puts "Pasting #{name}..."
68
+ end
69
+
70
+ log = WEBrick::Log.new(true) # true fools it
71
+ def log.log(*anything); end # send it to the abyss
72
+
73
+ server = WEBrick::GenericServer.new(:Port => PORT, :Logger => log)
74
+
75
+ trap "INT" do
76
+ server.shutdown
77
+ exit!
78
+ end
79
+
80
+ server.start do |socket|
81
+ socket.print(contents)
82
+ server.shutdown unless multiple
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,3 @@
1
+ module Pastejour
2
+ VERSION = "1.0.3".freeze
3
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH.unshift(File.expand_path("#{File.dirname(__FILE__)}/../lib"))
2
+
3
+ require "spec"
4
+ require "pastejour"
5
+
6
+ module Spec::Expectations::ObjectExpectations
7
+ alias_method :must, :should
8
+ alias_method :must_not, :should_not
9
+ undef_method :should
10
+ undef_method :should_not
11
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../helper")
2
+
3
+ describe "Pastejour" do
4
+ it "is awesome" do
5
+ "awesome".must == "awesome"
6
+ end
7
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,7 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
7
+ --backtrace
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nogoth-pastejour
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - John Barnette
8
+ - Evan Phoenix
9
+ - Ben Livingood
10
+ autorequire: pastejour
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2008-06-03 00:00:00 -07:00
15
+ default_executable: pastejour
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: net-mdns
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.4.0
25
+ version:
26
+ description: Broadcast standard out.
27
+ email: livingood@gmail.com
28
+ executables:
29
+ - pastejour
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - README.rdoc
34
+ files:
35
+ - README.rdoc
36
+ - Rakefile
37
+ - bin/pastejour
38
+ - lib/pastejour
39
+ - lib/pastejour/version.rb
40
+ - lib/pastejour.rb
41
+ - spec/helper.rb
42
+ - spec/pastejour
43
+ - spec/pastejour/pastejour_spec.rb
44
+ - spec/spec.opts
45
+ has_rdoc: true
46
+ homepage: http://github.com/nogoth/pastejour
47
+ post_install_message:
48
+ rdoc_options: []
49
+
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project:
67
+ rubygems_version: 1.0.1
68
+ signing_key:
69
+ specification_version: 2
70
+ summary: Broadcast standard out.
71
+ test_files: []
72
+