pants 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: