pants 0.1.0
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/.gemtest +1 -0
- data/.gitignore +23 -0
- data/.rspec +3 -0
- data/.travis.yml +4 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +42 -0
- data/History.rdoc +6 -0
- data/README.rdoc +339 -0
- data/Rakefile +23 -0
- data/bin/pants +59 -0
- data/lib/pants.rb +84 -0
- data/lib/pants/core.rb +216 -0
- data/lib/pants/error.rb +5 -0
- data/lib/pants/logger.rb +8 -0
- data/lib/pants/network_helpers.rb +25 -0
- data/lib/pants/readers/base_reader.rb +302 -0
- data/lib/pants/readers/file_reader.rb +81 -0
- data/lib/pants/readers/udp_reader.rb +80 -0
- data/lib/pants/seam.rb +120 -0
- data/lib/pants/version.rb +3 -0
- data/lib/pants/writers/base_writer.rb +73 -0
- data/lib/pants/writers/file_writer.rb +59 -0
- data/lib/pants/writers/udp_writer.rb +125 -0
- data/pants.gemspec +31 -0
- data/spec/acceptance/file_reads_spec.rb +24 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/matchers/file_same_size_as.rb +20 -0
- data/spec/support/pants.wav +0 -0
- data/spec/unit/pants/core_spec.rb +105 -0
- data/spec/unit/pants/readers/base_reader_spec.rb +340 -0
- data/spec/unit/pants/readers/file_reader_spec.rb +94 -0
- data/spec/unit/pants/version_spec.rb +7 -0
- data/spec/unit/pants/writers/base_writer_spec.rb +35 -0
- data/spec/unit/pants/writers/file_writer_spec.rb +71 -0
- data/spec/unit/pants/writers/udp_writer_spec.rb +146 -0
- data/spec/unit/pants_spec.rb +6 -0
- data/tasks/pantsmark.thor +66 -0
- data/test_readers.rb +43 -0
- data/test_seams.rb +107 -0
- metadata +215 -0
data/test_seams.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
=begin
|
2
|
+
require './lib/pants'
|
3
|
+
|
4
|
+
|
5
|
+
class Pants::SimpleSeam < Pants::Seam
|
6
|
+
def start
|
7
|
+
callback = EM.Callback do
|
8
|
+
log "Starting simple seam..."
|
9
|
+
read do |data|
|
10
|
+
write data
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
super(callback)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
orig_file = 'dest_test_file'
|
20
|
+
seamed_file = 'dest_seamed_file'
|
21
|
+
|
22
|
+
Pants.read(orig_file) do |reader|
|
23
|
+
ss = reader.add_seam(Pants::SimpleSeam)
|
24
|
+
ss.add_writer(seamed_file)
|
25
|
+
end
|
26
|
+
|
27
|
+
if defined? orig_file
|
28
|
+
seamed_file_size = File.stat(seamed_file).size
|
29
|
+
orig_file_size = File.stat(orig_file).size
|
30
|
+
puts "Seamed file size: #{seamed_file_size}"
|
31
|
+
puts "Original file size: #{orig_file_size}"
|
32
|
+
puts "Difference: #{orig_file_size - seamed_file_size}"
|
33
|
+
end
|
34
|
+
|
35
|
+
#-------------------------------------------------------------------------------
|
36
|
+
Pants.mix do |mixer|
|
37
|
+
mixer.add_reader('udp://127.0.0.1:1234')
|
38
|
+
mixer.add_reader('udp://127.0.0.1:1235')
|
39
|
+
mixer.add_writer(seamed_file)
|
40
|
+
end
|
41
|
+
|
42
|
+
#-------------------------------------------------------------------------------
|
43
|
+
core = Pants::Core.new
|
44
|
+
gatherer = Pants::Gatherer.new
|
45
|
+
|
46
|
+
gatherer.add_reader('udp://127.0.0.1:1234')
|
47
|
+
gatherer.add_reader('udp://127.0.0.1:1235')
|
48
|
+
|
49
|
+
core.run
|
50
|
+
#-------------------------------------------------------------------------------
|
51
|
+
=end
|
52
|
+
require './lib/pants'
|
53
|
+
|
54
|
+
class PantsInspector < Pants::Seam
|
55
|
+
def initialize(core_callback, reader_channel, host)
|
56
|
+
@host = host
|
57
|
+
|
58
|
+
super(core_callback, reader_channel)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Pants will call this for you when it starts the reader that the seam is
|
62
|
+
# reading from.
|
63
|
+
def start
|
64
|
+
|
65
|
+
# You need to define a callback here so pants can call you back after its
|
66
|
+
# made sure that the seam's writers have been started. This makes sure
|
67
|
+
# the seam doesn't start reading and pushing out data before the writers
|
68
|
+
# are ready to receive it.
|
69
|
+
callback = EM.Callback do
|
70
|
+
puts "Starting #{self.class}..."
|
71
|
+
|
72
|
+
read_items do |data|
|
73
|
+
if data.match(/pants/mi)
|
74
|
+
data << "Pants party at #{@host}!!!!!!\n"
|
75
|
+
end
|
76
|
+
|
77
|
+
write data
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
super(callback)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# Assuming you have data coming in on this IP and UDP port, this reads each
|
86
|
+
# packet and hands it over to its writers--in this case, the file dump file
|
87
|
+
# writer, the UDP writer that sends to 10.0.0.50:9001, and our PacketInspector
|
88
|
+
# seam.
|
89
|
+
Pants.read(__FILE__) do |reader|
|
90
|
+
|
91
|
+
# Dump UDP packets to a file
|
92
|
+
reader.write_to 'file_dump_of_udp_packets.udp'
|
93
|
+
|
94
|
+
# Redirect the UDP packets to another host
|
95
|
+
reader.write_to 'udp://127.0.0.1:9001'
|
96
|
+
|
97
|
+
# Inspect the UDP packets and notify about the party going on
|
98
|
+
pants_inspector = reader.add_seam(PantsInspector, 'localhost')
|
99
|
+
|
100
|
+
# The packet inspector seam behaves like a reader, which lets writers read
|
101
|
+
# from it. Dump those party packets to a file
|
102
|
+
pants_inspector.write_to 'file_dump_of_party_packets.party'
|
103
|
+
|
104
|
+
# Forward our partying packets on to another host.
|
105
|
+
pants_inspector.write_to 'udp://127.0.0.1:9002'
|
106
|
+
end
|
107
|
+
|
metadata
ADDED
@@ -0,0 +1,215 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pants
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Steve Loveless
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-26 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: eventmachine
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: log_switch
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.4.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.4.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: thor
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 2.6.0
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.6.0
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: simplecov
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: yard
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.7.2
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.7.2
|
126
|
+
description: ! 'Pants redirects IO using EventMachine from one input source
|
127
|
+
|
128
|
+
to many different destinations. In some senses, pants is like a *nix pipe that
|
129
|
+
|
130
|
+
(works on Windows and) allows for duplicating data across many pipes (like
|
131
|
+
|
132
|
+
splice and tee).'
|
133
|
+
email: steve.loveless@gmail.com
|
134
|
+
executables:
|
135
|
+
- pants
|
136
|
+
extensions: []
|
137
|
+
extra_rdoc_files: []
|
138
|
+
files:
|
139
|
+
- .gemtest
|
140
|
+
- .gitignore
|
141
|
+
- .rspec
|
142
|
+
- .travis.yml
|
143
|
+
- Gemfile
|
144
|
+
- Gemfile.lock
|
145
|
+
- History.rdoc
|
146
|
+
- README.rdoc
|
147
|
+
- Rakefile
|
148
|
+
- bin/pants
|
149
|
+
- lib/pants.rb
|
150
|
+
- lib/pants/core.rb
|
151
|
+
- lib/pants/error.rb
|
152
|
+
- lib/pants/logger.rb
|
153
|
+
- lib/pants/network_helpers.rb
|
154
|
+
- lib/pants/readers/base_reader.rb
|
155
|
+
- lib/pants/readers/file_reader.rb
|
156
|
+
- lib/pants/readers/udp_reader.rb
|
157
|
+
- lib/pants/seam.rb
|
158
|
+
- lib/pants/version.rb
|
159
|
+
- lib/pants/writers/base_writer.rb
|
160
|
+
- lib/pants/writers/file_writer.rb
|
161
|
+
- lib/pants/writers/udp_writer.rb
|
162
|
+
- pants.gemspec
|
163
|
+
- spec/acceptance/file_reads_spec.rb
|
164
|
+
- spec/spec_helper.rb
|
165
|
+
- spec/support/matchers/file_same_size_as.rb
|
166
|
+
- spec/support/pants.wav
|
167
|
+
- spec/unit/pants/core_spec.rb
|
168
|
+
- spec/unit/pants/readers/base_reader_spec.rb
|
169
|
+
- spec/unit/pants/readers/file_reader_spec.rb
|
170
|
+
- spec/unit/pants/version_spec.rb
|
171
|
+
- spec/unit/pants/writers/base_writer_spec.rb
|
172
|
+
- spec/unit/pants/writers/file_writer_spec.rb
|
173
|
+
- spec/unit/pants/writers/udp_writer_spec.rb
|
174
|
+
- spec/unit/pants_spec.rb
|
175
|
+
- tasks/pantsmark.thor
|
176
|
+
- test_readers.rb
|
177
|
+
- test_seams.rb
|
178
|
+
homepage: http://github.com/turboladen/pants
|
179
|
+
licenses: []
|
180
|
+
post_install_message:
|
181
|
+
rdoc_options: []
|
182
|
+
require_paths:
|
183
|
+
- lib
|
184
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
+
none: false
|
192
|
+
requirements:
|
193
|
+
- - ! '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: 1.8.0
|
196
|
+
requirements: []
|
197
|
+
rubyforge_project:
|
198
|
+
rubygems_version: 1.8.24
|
199
|
+
signing_key:
|
200
|
+
specification_version: 3
|
201
|
+
summary: Easy, fast, I/O multiplexer
|
202
|
+
test_files:
|
203
|
+
- spec/acceptance/file_reads_spec.rb
|
204
|
+
- spec/spec_helper.rb
|
205
|
+
- spec/support/matchers/file_same_size_as.rb
|
206
|
+
- spec/support/pants.wav
|
207
|
+
- spec/unit/pants/core_spec.rb
|
208
|
+
- spec/unit/pants/readers/base_reader_spec.rb
|
209
|
+
- spec/unit/pants/readers/file_reader_spec.rb
|
210
|
+
- spec/unit/pants/version_spec.rb
|
211
|
+
- spec/unit/pants/writers/base_writer_spec.rb
|
212
|
+
- spec/unit/pants/writers/file_writer_spec.rb
|
213
|
+
- spec/unit/pants/writers/udp_writer_spec.rb
|
214
|
+
- spec/unit/pants_spec.rb
|
215
|
+
has_rdoc:
|