fnf 0.0.1 → 0.0.2

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/Gemfile CHANGED
@@ -3,6 +3,8 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in fnf.gemspec
4
4
  gemspec
5
5
 
6
+ gem 'rake-compiler'
7
+
6
8
  group :test do
7
9
  gem 'rspec'
8
10
  end
data/Makefile ADDED
@@ -0,0 +1,213 @@
1
+
2
+ SHELL = /bin/sh
3
+
4
+ #### Start of system configuration section. ####
5
+
6
+ srcdir = .
7
+ topdir = /home/capotej/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1
8
+ hdrdir = /home/capotej/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1
9
+ arch_hdrdir = /home/capotej/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1/$(arch)
10
+ VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
11
+ prefix = $(DESTDIR)/home/capotej/.rvm/rubies/ruby-1.9.2-p180
12
+ rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
13
+ exec_prefix = $(prefix)
14
+ vendorhdrdir = $(rubyhdrdir)/vendor_ruby
15
+ sitehdrdir = $(rubyhdrdir)/site_ruby
16
+ rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)
17
+ vendordir = $(rubylibprefix)/vendor_ruby
18
+ sitedir = $(rubylibprefix)/site_ruby
19
+ ridir = $(datarootdir)/$(RI_BASE_NAME)
20
+ mandir = $(datarootdir)/man
21
+ localedir = $(datarootdir)/locale
22
+ libdir = $(exec_prefix)/lib
23
+ psdir = $(docdir)
24
+ pdfdir = $(docdir)
25
+ dvidir = $(docdir)
26
+ htmldir = $(docdir)
27
+ infodir = $(datarootdir)/info
28
+ docdir = $(datarootdir)/doc/$(PACKAGE)
29
+ oldincludedir = $(DESTDIR)/usr/include
30
+ includedir = $(prefix)/include
31
+ localstatedir = $(prefix)/var
32
+ sharedstatedir = $(prefix)/com
33
+ sysconfdir = $(prefix)/etc
34
+ datadir = $(datarootdir)
35
+ datarootdir = $(prefix)/share
36
+ libexecdir = $(exec_prefix)/libexec
37
+ sbindir = $(exec_prefix)/sbin
38
+ bindir = $(exec_prefix)/bin
39
+ rubylibdir = $(rubylibprefix)/$(ruby_version)
40
+ archdir = $(rubylibdir)/$(arch)
41
+ sitelibdir = $(sitedir)/$(ruby_version)
42
+ sitearchdir = $(sitelibdir)/$(sitearch)
43
+ vendorlibdir = $(vendordir)/$(ruby_version)
44
+ vendorarchdir = $(vendorlibdir)/$(sitearch)
45
+
46
+ CC = gcc
47
+ CXX = g++
48
+ LIBRUBY = $(LIBRUBY_SO)
49
+ LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
50
+ LIBRUBYARG_SHARED = -Wl,-R -Wl,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)
51
+ LIBRUBYARG_STATIC = -Wl,-R -Wl,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static
52
+ OUTFLAG = -o
53
+ COUTFLAG = -o
54
+
55
+ RUBY_EXTCONF_H =
56
+ cflags = $(optflags) $(debugflags) $(warnflags)
57
+ optflags = -O3
58
+ debugflags = -ggdb
59
+ warnflags = -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long
60
+ CFLAGS = -fPIC $(cflags) -fPIC
61
+ INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
62
+ DEFS = -D_FILE_OFFSET_BITS=64
63
+ CPPFLAGS = $(DEFS) $(cppflags)
64
+ CXXFLAGS = $(CFLAGS) $(cxxflags)
65
+ ldflags = -L. -rdynamic -Wl,-export-dynamic
66
+ dldflags =
67
+ ARCH_FLAG =
68
+ DLDFLAGS = $(ldflags) $(dldflags)
69
+ LDSHARED = $(CC) -shared
70
+ LDSHAREDXX = $(CXX) -shared
71
+ AR = ar
72
+ EXEEXT =
73
+
74
+ RUBY_BASE_NAME = ruby
75
+ RUBY_INSTALL_NAME = ruby
76
+ RUBY_SO_NAME = ruby
77
+ arch = i686-linux
78
+ sitearch = $(arch)
79
+ ruby_version = 1.9.1
80
+ ruby = /home/capotej/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
81
+ RUBY = $(ruby)
82
+ RM = rm -f
83
+ RM_RF = $(RUBY) -run -e rm -- -rf
84
+ RMDIRS = $(RUBY) -run -e rmdir -- -p
85
+ MAKEDIRS = /bin/mkdir -p
86
+ INSTALL = /usr/bin/install -c
87
+ INSTALL_PROG = $(INSTALL) -m 0755
88
+ INSTALL_DATA = $(INSTALL) -m 644
89
+ COPY = cp
90
+
91
+ #### End of system configuration section. ####
92
+
93
+ preload =
94
+
95
+ libpath = . $(libdir)
96
+ LIBPATH = -L. -L$(libdir) -Wl,-R$(libdir)
97
+ DEFFILE =
98
+
99
+ CLEANFILES = mkmf.log
100
+ DISTCLEANFILES =
101
+ DISTCLEANDIRS =
102
+
103
+ extout =
104
+ extout_prefix =
105
+ target_prefix =
106
+ LOCAL_LIBS =
107
+ LIBS = $(LIBRUBYARG_SHARED) -lpthread -lrt -ldl -lcrypt -lm -lc
108
+ SRCS = FifoWriter.c
109
+ OBJS = FifoWriter.o
110
+ TARGET = fifowriter
111
+ DLLIB = $(TARGET).so
112
+ EXTSTATIC =
113
+ STATIC_LIB =
114
+
115
+ BINDIR = $(bindir)
116
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
117
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
118
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
119
+ HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
120
+ ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
121
+
122
+ TARGET_SO = $(DLLIB)
123
+ CLEANLIBS = $(TARGET).so
124
+ CLEANOBJS = *.o *.bak
125
+
126
+ all: $(DLLIB)
127
+ static: $(STATIC_LIB)
128
+ .PHONY: all install static install-so install-rb
129
+ .PHONY: clean clean-so clean-rb
130
+
131
+ clean-rb-default::
132
+ clean-rb::
133
+ clean-so::
134
+ clean: clean-so clean-rb-default clean-rb
135
+ @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
136
+
137
+ distclean-rb-default::
138
+ distclean-rb::
139
+ distclean-so::
140
+ distclean: clean distclean-so distclean-rb-default distclean-rb
141
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
142
+ @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
143
+ @-$(RMDIRS) $(DISTCLEANDIRS)
144
+
145
+ realclean: distclean
146
+ install: install-so install-rb
147
+
148
+ install-so: $(RUBYARCHDIR)
149
+ install-so: $(RUBYARCHDIR)/$(DLLIB)
150
+ $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
151
+ @-$(MAKEDIRS) $(@D)
152
+ $(INSTALL_PROG) $(DLLIB) $(@D)
153
+ install-rb: pre-install-rb install-rb-default
154
+ install-rb-default: pre-install-rb-default
155
+ pre-install-rb: Makefile
156
+ pre-install-rb-default: Makefile
157
+ pre-install-rb-default: $(RUBYLIBDIR)/fnf
158
+ install-rb-default: $(RUBYLIBDIR)/fnf/connection.rb
159
+ $(RUBYLIBDIR)/fnf/connection.rb: $(srcdir)/lib/fnf/connection.rb
160
+ @-$(MAKEDIRS) $(@D)
161
+ $(INSTALL_DATA) $(srcdir)/lib/fnf/connection.rb $(@D)
162
+ install-rb-default: $(RUBYLIBDIR)/fnf/worker.rb
163
+ $(RUBYLIBDIR)/fnf/worker.rb: $(srcdir)/lib/fnf/worker.rb
164
+ @-$(MAKEDIRS) $(@D)
165
+ $(INSTALL_DATA) $(srcdir)/lib/fnf/worker.rb $(@D)
166
+ install-rb-default: $(RUBYLIBDIR)/fnf/client.rb
167
+ $(RUBYLIBDIR)/fnf/client.rb: $(srcdir)/lib/fnf/client.rb
168
+ @-$(MAKEDIRS) $(@D)
169
+ $(INSTALL_DATA) $(srcdir)/lib/fnf/client.rb $(@D)
170
+ install-rb-default: $(RUBYLIBDIR)/fnf/version.rb
171
+ $(RUBYLIBDIR)/fnf/version.rb: $(srcdir)/lib/fnf/version.rb
172
+ @-$(MAKEDIRS) $(@D)
173
+ $(INSTALL_DATA) $(srcdir)/lib/fnf/version.rb $(@D)
174
+ pre-install-rb-default: $(RUBYLIBDIR)
175
+ install-rb-default: $(RUBYLIBDIR)/fnf.rb
176
+ $(RUBYLIBDIR)/fnf.rb: $(srcdir)/lib/fnf.rb
177
+ @-$(MAKEDIRS) $(@D)
178
+ $(INSTALL_DATA) $(srcdir)/lib/fnf.rb $(@D)
179
+ $(RUBYARCHDIR):
180
+ $(MAKEDIRS) $@
181
+ $(RUBYLIBDIR)/fnf:
182
+ $(MAKEDIRS) $@
183
+ $(RUBYLIBDIR):
184
+ $(MAKEDIRS) $@
185
+
186
+ site-install: site-install-so site-install-rb
187
+ site-install-so: install-so
188
+ site-install-rb: install-rb
189
+
190
+ .SUFFIXES: .c .m .cc .cxx .cpp .C .o
191
+
192
+ .cc.o:
193
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
194
+
195
+ .cxx.o:
196
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
197
+
198
+ .cpp.o:
199
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
200
+
201
+ .C.o:
202
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
203
+
204
+ .c.o:
205
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
206
+
207
+ $(DLLIB): $(OBJS) Makefile
208
+ @-$(RM) $(@)
209
+ $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
210
+
211
+
212
+
213
+ $(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h
data/README.markdown CHANGED
@@ -3,25 +3,66 @@
3
3
 
4
4
  ## Intro
5
5
 
6
- Fire and Forget replaces the need to write resque tasks or delayed jobs to fire off web requests (usually notification webhooks or a anti-spam service, like defensio or akismet). A single worker reads and executes web requests from a blocking named pipe, while clients queue up them up in a non blocking manner. It uses typhoeus internally to execute the web requests for maximum speed.
6
+ Fire and Forget replaces the need to write resque tasks or delayed jobs to fire off web requests (usually notification webhooks or a anti-spam service, like defensio or akismet). A single worker reads and executes web requests from a named pipe, while clients write to that pipe. It uses typhoeus internally to execute the web requests for maximum speed.
7
7
 
8
8
  ## Usage (worker)
9
9
 
10
10
  Start the server
11
11
 
12
- ```fnf```
12
+ ```
13
+ fnf
14
+ ```
13
15
 
14
- (add this to rc.local, or a startup script)
15
16
 
16
- ## Usage (client, rails)
17
+ ## Usage (client)
17
18
 
18
- Add to gemfile, or vendor the gem
19
+ Add to gemfile, vendor the gem, gem install, etc
19
20
 
20
- ```gem 'fnf'```
21
+ ```gem 'fnf'``` or ```gem install fnf```
21
22
 
22
- From a controller or model
23
+ From anywhere:
23
24
 
24
- ```Fnf::Client.queue({:post => "http://api.akismet.com/process", :params => { :thing => "2123" })```
25
+ ```
26
+ require 'fnf'
27
+ Fnf::Client.queue({:post => "http://api.akismet.com/process", :params => { :thing => "2123" })
28
+ ```
29
+
30
+
31
+ ## Kicking the tires
32
+
33
+ Start a rails project
34
+
35
+ ```
36
+ rails new foo
37
+ ```
38
+
39
+ Start the server
40
+
41
+ ```
42
+ cd foo
43
+ rails server
44
+ ```
45
+
46
+ Clone this project
47
+
48
+ ```
49
+ git clone git@github.com:capotej/fnf.git
50
+ cd fnf
51
+ ```
52
+
53
+ Start the fnf server
54
+
55
+ ```
56
+ bin/fnf
57
+ ```
58
+
59
+ Run the test
60
+
61
+ ```
62
+ ruby fnf_test.rb
63
+ ```
64
+
65
+ You should see a request for /asdd hit your rails logs
25
66
 
26
67
 
27
68
  ![Set and Forget It](http://naturallyalise.com/blog/wp-content/uploads/2011/03/set-it-and-forget-it-ronco-rotisserie.jpg)
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
+ require 'rubygems'
1
2
  require 'bundler'
2
3
  Bundler::GemHelper.install_tasks
4
+
5
+ require 'rake/extensiontask'
6
+
7
+ Rake::ExtensionTask.new('fifowriter') do |ext|
8
+ ext.lib_dir = File.join('lib', 'fifowriter')
9
+ end
@@ -0,0 +1,2 @@
1
+ require 'mkmf'
2
+ create_makefile('fifowriter/fifowriter')
@@ -0,0 +1,21 @@
1
+ #include "ruby.h"
2
+ #include <stdio.h>
3
+ #include <stdlib.h>
4
+ #include <fcntl.h>
5
+ VALUE FifoWriter = Qnil;
6
+
7
+ void Init_fifowriter();
8
+
9
+ static void method_write_to_fifo(VALUE self, VALUE string);
10
+
11
+ void Init_fifowriter() {
12
+ FifoWriter = rb_define_module("FifoWriter");
13
+ rb_define_singleton_method(FifoWriter, "write_to_fifo", method_write_to_fifo, 1);
14
+ }
15
+
16
+ static void method_write_to_fifo(VALUE self, VALUE string) {
17
+ int fd;
18
+ fd = open("/tmp/fnfq", O_WRONLY | O_NONBLOCK);
19
+ write(fd, RSTRING_PTR(string), strlen(RSTRING_PTR(string)));
20
+ close(fd);
21
+ }
data/fnf.gemspec CHANGED
@@ -1,4 +1,3 @@
1
- # -*- encoding: utf-8 -*-
2
1
  $:.push File.expand_path("../lib", __FILE__)
3
2
  require "fnf/version"
4
3
 
@@ -14,11 +13,14 @@ Gem::Specification.new do |s|
14
13
 
15
14
  s.rubyforge_project = "fnf"
16
15
 
17
- s.add_dependency 'daemons'
18
16
  s.add_dependency 'mkfifo'
19
17
  s.add_dependency 'ruby-fifo'
20
- s.add_dependency 'typhoeus'
21
-
18
+ s.add_dependency 'eventmachine'
19
+ s.add_dependency 'msgpack'
20
+ s.platform = Gem::Platform::RUBY
21
+
22
+ s.extensions = Dir["ext/**/extconf.rb"]
23
+
22
24
  s.files = `git ls-files`.split("\n")
23
25
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
24
26
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
data/fnf_test.rb CHANGED
@@ -1,4 +1,11 @@
1
1
  $: << "./lib"
2
2
  require 'fnf'
3
3
 
4
- Fnf::Client.queue(:get => "http://127.0.0.1:3000/asdd")
4
+ start_dt = Time.now
5
+ 100000.times do |i|
6
+ Fnf::Client.queue(:get => "http://127.0.0.1:1337/#{i}")
7
+ end
8
+ end_dt = Time.now
9
+ puts (end_dt.to_f - start_dt.to_f)
10
+
11
+
Binary file
data/lib/fnf.rb CHANGED
@@ -1,7 +1,12 @@
1
- require 'typhoeus'
1
+ require 'rubygems'
2
2
  require 'daemons'
3
3
  require 'fifo'
4
4
  require 'json'
5
+ require 'eventmachine'
6
+ require 'typhoeus'
7
+ require 'em-http-request'
8
+ require 'msgpack'
9
+ require 'fifowriter/fifowriter'
5
10
 
6
11
  module Fnf
7
12
  autoload :Connection, 'fnf/connection'
data/lib/fnf/client.rb CHANGED
@@ -1,15 +1,17 @@
1
1
  module Fnf
2
+
2
3
  class Client
4
+
3
5
  attr_accessor :url, :verb, :params
4
6
 
5
7
  def self.queue(hsh)
6
8
  verb = get_verb(hsh)
7
9
  url = hsh[verb]
8
10
  params = hsh[:params]
9
- pipe = Fifo.new('/tmp/fnfq')
10
- pipe.puts [verb,url,params].to_json
11
+ FifoWriter.write_to_fifo "#{[verb,url,params].to_msgpack}\n"
11
12
  end
12
13
 
14
+
13
15
  def self.get_verb(hsh)
14
16
  [:delete, :get, :post, :put, :head].each do |verb|
15
17
  return verb if hsh[verb]
data/lib/fnf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fnf
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/fnf/worker.rb CHANGED
@@ -1,13 +1,28 @@
1
1
  module Fnf
2
- class Worker
3
2
 
3
+ module RequestWorker
4
+ def initialize(pipe)
5
+ @pipe = pipe
6
+ end
7
+
8
+ def notify_readable
9
+ data = @pipe.readline.chomp
10
+ fetch = proc {
11
+ payload = MessagePack.unpack(data)
12
+ Connection.send(payload[0], payload[1], payload[2])
13
+ }
14
+ noop = proc { }
15
+ EM.defer fetch, noop
16
+
17
+ end
18
+ end
19
+
20
+ class Worker
4
21
  def self.run
5
22
  pipe = Fifo.new('/tmp/fnfq')
6
- while contents = pipe.readline
7
- begin
8
- payload = JSON.parse(contents)
9
- Connection.send(payload[0], payload[1], payload[2])
10
- rescue
23
+ EventMachine::run do
24
+ EventMachine::watch(pipe.to_io, RequestWorker, pipe) do |c|
25
+ c.notify_readable = true
11
26
  end
12
27
  end
13
28
  end
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fnf
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.1
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
6
11
  platform: ruby
7
12
  authors:
8
13
  - Julio Capote
@@ -10,50 +15,62 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-05-20 00:00:00 -07:00
18
+ date: 2011-05-27 00:00:00 -07:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
17
- name: daemons
22
+ name: mkfifo
18
23
  prerelease: false
19
24
  requirement: &id001 !ruby/object:Gem::Requirement
20
25
  none: false
21
26
  requirements:
22
27
  - - ">="
23
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
24
32
  version: "0"
25
33
  type: :runtime
26
34
  version_requirements: *id001
27
35
  - !ruby/object:Gem::Dependency
28
- name: mkfifo
36
+ name: ruby-fifo
29
37
  prerelease: false
30
38
  requirement: &id002 !ruby/object:Gem::Requirement
31
39
  none: false
32
40
  requirements:
33
41
  - - ">="
34
42
  - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
35
46
  version: "0"
36
47
  type: :runtime
37
48
  version_requirements: *id002
38
49
  - !ruby/object:Gem::Dependency
39
- name: ruby-fifo
50
+ name: eventmachine
40
51
  prerelease: false
41
52
  requirement: &id003 !ruby/object:Gem::Requirement
42
53
  none: false
43
54
  requirements:
44
55
  - - ">="
45
56
  - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
46
60
  version: "0"
47
61
  type: :runtime
48
62
  version_requirements: *id003
49
63
  - !ruby/object:Gem::Dependency
50
- name: typhoeus
64
+ name: msgpack
51
65
  prerelease: false
52
66
  requirement: &id004 !ruby/object:Gem::Requirement
53
67
  none: false
54
68
  requirements:
55
69
  - - ">="
56
70
  - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
57
74
  version: "0"
58
75
  type: :runtime
59
76
  version_requirements: *id004
@@ -62,18 +79,22 @@ email:
62
79
  - jcapote@gmail.com
63
80
  executables:
64
81
  - fnf
65
- extensions: []
66
-
82
+ extensions:
83
+ - ext/fifowriter/extconf.rb
67
84
  extra_rdoc_files: []
68
85
 
69
86
  files:
70
87
  - .gitignore
71
88
  - Gemfile
89
+ - Makefile
72
90
  - README.markdown
73
91
  - Rakefile
74
92
  - bin/fnf
93
+ - ext/fifowriter/extconf.rb
94
+ - ext/fifowriter/fifowriter.c
75
95
  - fnf.gemspec
76
96
  - fnf_test.rb
97
+ - lib/fifowriter/fifowriter.bundle
77
98
  - lib/fnf.rb
78
99
  - lib/fnf/client.rb
79
100
  - lib/fnf/connection.rb
@@ -96,19 +117,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
117
  requirements:
97
118
  - - ">="
98
119
  - !ruby/object:Gem::Version
120
+ hash: 3
121
+ segments:
122
+ - 0
99
123
  version: "0"
100
124
  required_rubygems_version: !ruby/object:Gem::Requirement
101
125
  none: false
102
126
  requirements:
103
127
  - - ">="
104
128
  - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
105
132
  version: "0"
106
133
  requirements: []
107
134
 
108
135
  rubyforge_project: fnf
109
- rubygems_version: 1.6.1
136
+ rubygems_version: 1.3.7
110
137
  signing_key:
111
138
  specification_version: 3
112
139
  summary: Fire And Forget, a queue designed for disposable web requests
113
- test_files: []
114
-
140
+ test_files:
141
+ - spec/client_spec.rb
142
+ - spec/spec.opts
143
+ - spec/spec_helper.rb