fire_and_forget 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/Gemfile.lock +0 -8
  2. data/README.rdoc +75 -14
  3. data/bin/fire_forget +45 -22
  4. data/examples/long_task +27 -16
  5. data/fire_and_forget.gemspec +41 -4
  6. data/lib/fire_and_forget/client.rb +1 -1
  7. data/lib/fire_and_forget/command/fire.rb +23 -4
  8. data/lib/fire_and_forget/command/get_pid.rb +20 -0
  9. data/lib/fire_and_forget/command/set_pid.rb +0 -2
  10. data/lib/fire_and_forget/command/set_status.rb +1 -1
  11. data/lib/fire_and_forget/command.rb +11 -0
  12. data/lib/fire_and_forget/config.rb +3 -8
  13. data/lib/fire_and_forget/daemon.rb +14 -23
  14. data/lib/fire_and_forget/errors.rb +8 -0
  15. data/lib/fire_and_forget/launcher.rb +69 -6
  16. data/lib/fire_and_forget/server.rb +5 -1
  17. data/lib/fire_and_forget/task_description.rb +11 -0
  18. data/lib/fire_and_forget/utilities.rb +4 -4
  19. data/lib/fire_and_forget/version.rb +1 -1
  20. data/lib/fire_and_forget.rb +6 -2
  21. data/test/test_fire_and_forget.rb +59 -26
  22. data/vendor/daemons-1.1.0/LICENSE +29 -0
  23. data/vendor/daemons-1.1.0/README +224 -0
  24. data/vendor/daemons-1.1.0/Rakefile +88 -0
  25. data/vendor/daemons-1.1.0/Releases +152 -0
  26. data/vendor/daemons-1.1.0/TODO +2 -0
  27. data/vendor/daemons-1.1.0/lib/daemons/application.rb +468 -0
  28. data/vendor/daemons-1.1.0/lib/daemons/application_group.rb +194 -0
  29. data/vendor/daemons-1.1.0/lib/daemons/change_privilege.rb +19 -0
  30. data/vendor/daemons-1.1.0/lib/daemons/cmdline.rb +124 -0
  31. data/vendor/daemons-1.1.0/lib/daemons/controller.rb +140 -0
  32. data/vendor/daemons-1.1.0/lib/daemons/daemonize.rb +271 -0
  33. data/vendor/daemons-1.1.0/lib/daemons/etc_extension.rb +12 -0
  34. data/vendor/daemons-1.1.0/lib/daemons/exceptions.rb +28 -0
  35. data/vendor/daemons-1.1.0/lib/daemons/monitor.rb +138 -0
  36. data/vendor/daemons-1.1.0/lib/daemons/pid.rb +109 -0
  37. data/vendor/daemons-1.1.0/lib/daemons/pidfile.rb +116 -0
  38. data/vendor/daemons-1.1.0/lib/daemons/pidmem.rb +19 -0
  39. data/vendor/daemons-1.1.0/lib/daemons.rb +288 -0
  40. data/vendor/daemons-1.1.0/setup.rb +1360 -0
  41. data/vendor/json-1.5.0/COPYING +58 -0
  42. data/vendor/json-1.5.0/GPL +340 -0
  43. data/vendor/json-1.5.0/README +356 -0
  44. data/vendor/json-1.5.0/README-json-jruby.markdown +33 -0
  45. data/vendor/json-1.5.0/Rakefile +397 -0
  46. data/vendor/json-1.5.0/TODO +1 -0
  47. data/vendor/json-1.5.0/VERSION +1 -0
  48. data/vendor/json-1.5.0/lib/json/add/core.rb +147 -0
  49. data/vendor/json-1.5.0/lib/json/add/rails.rb +8 -0
  50. data/vendor/json-1.5.0/lib/json/common.rb +419 -0
  51. data/vendor/json-1.5.0/lib/json/editor.rb +1369 -0
  52. data/vendor/json-1.5.0/lib/json/pure/generator.rb +441 -0
  53. data/vendor/json-1.5.0/lib/json/pure/parser.rb +320 -0
  54. data/vendor/json-1.5.0/lib/json/pure.rb +15 -0
  55. data/vendor/json-1.5.0/lib/json/version.rb +8 -0
  56. data/vendor/json-1.5.0/lib/json.rb +10 -0
  57. metadata +41 -4
  58. data/lib/fire_and_forget/task.rb +0 -11
@@ -0,0 +1,397 @@
1
+ begin
2
+ require 'rake/gempackagetask'
3
+ rescue LoadError
4
+ end
5
+
6
+ begin
7
+ require 'rake/extensiontask'
8
+ rescue LoadError
9
+ warn "WARNING: rake-compiler is not installed. You will not be able to build the json gem until you install it."
10
+ end
11
+
12
+ require 'rbconfig'
13
+ include Config
14
+
15
+ require 'rake/clean'
16
+ CLOBBER.include Dir['benchmarks/data/*.{dat,log}']
17
+ CLEAN.include FileList['diagrams/*.*'], 'doc', 'coverage', 'tmp',
18
+ FileList["ext/**/{Makefile,mkmf.log}"], 'build', 'dist', FileList['**/*.rbc'],
19
+ FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def,jar,class}"],
20
+ FileList['java/src/**/*.class']
21
+
22
+ MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
23
+ PKG_NAME = 'json'
24
+ PKG_TITLE = 'JSON Implementation for Ruby'
25
+ PKG_VERSION = File.read('VERSION').chomp
26
+ PKG_FILES = FileList["**/*"].exclude(/CVS|pkg|tmp|coverage|Makefile|\.nfs\.|\.iml\Z/).exclude(/\.(so|bundle|o|class|#{CONFIG['DLEXT']})$/)
27
+
28
+ EXT_ROOT_DIR = 'ext/json/ext'
29
+ EXT_PARSER_DIR = "#{EXT_ROOT_DIR}/parser"
30
+ EXT_PARSER_DL = "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}"
31
+ RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
32
+ EXT_PARSER_SRC = "#{EXT_PARSER_DIR}/parser.c"
33
+ PKG_FILES << EXT_PARSER_SRC
34
+ EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
35
+ EXT_GENERATOR_DL = "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}"
36
+ EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
37
+
38
+ JAVA_DIR = "java/src/json/ext"
39
+ JAVA_RAGEL_PATH = "#{JAVA_DIR}/Parser.rl"
40
+ JAVA_PARSER_SRC = "#{JAVA_DIR}/Parser.java"
41
+ JAVA_SOURCES = FileList["#{JAVA_DIR}/*.java"]
42
+ JAVA_CLASSES = []
43
+ JRUBY_PARSER_JAR = File.expand_path("lib/json/ext/parser.jar")
44
+ JRUBY_GENERATOR_JAR = File.expand_path("lib/json/ext/generator.jar")
45
+
46
+ RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
47
+ RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
48
+
49
+ def myruby(*args, &block)
50
+ @myruby ||= File.join(CONFIG['bindir'], CONFIG['ruby_install_name'])
51
+ options = (Hash === args.last) ? args.pop : {}
52
+ if args.length > 1 then
53
+ sh(*([@myruby] + args + [options]), &block)
54
+ else
55
+ sh("#{@myruby} #{args.first}", options, &block)
56
+ end
57
+ end
58
+
59
+ desc "Installing library (pure)"
60
+ task :install_pure => :version do
61
+ myruby 'install.rb'
62
+ end
63
+
64
+ task :install_ext_really do
65
+ sitearchdir = CONFIG["sitearchdir"]
66
+ cd 'ext' do
67
+ for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
68
+ d = File.join(sitearchdir, file)
69
+ mkdir_p File.dirname(d)
70
+ install(file, d)
71
+ end
72
+ end
73
+ end
74
+
75
+ desc "Installing library (extension)"
76
+ task :install_ext => [ :compile_ext, :install_pure, :install_ext_really ]
77
+
78
+ desc "Installing library (extension)"
79
+ if RUBY_PLATFORM =~ /java/
80
+ task :install => :install_pure
81
+ else
82
+ task :install => :install_ext
83
+ end
84
+
85
+ if defined?(Gem) and defined?(Rake::GemPackageTask)
86
+ spec_pure = Gem::Specification.new do |s|
87
+ s.name = 'json_pure'
88
+ s.version = PKG_VERSION
89
+ s.summary = PKG_TITLE
90
+ s.description = "This is a JSON implementation in pure Ruby."
91
+
92
+ s.files = PKG_FILES
93
+
94
+ s.require_path = 'lib'
95
+
96
+ s.bindir = "bin"
97
+ s.executables = [ "edit_json.rb", "prettify_json.rb" ]
98
+ s.default_executable = "edit_json.rb"
99
+
100
+ s.has_rdoc = true
101
+ s.extra_rdoc_files << 'README'
102
+ s.rdoc_options <<
103
+ '--title' << 'JSON implemention for ruby' << '--main' << 'README'
104
+ s.test_files.concat Dir['./tests/test_*.rb']
105
+
106
+ s.author = "Florian Frank"
107
+ s.email = "flori@ping.de"
108
+ s.homepage = "http://flori.github.com/#{PKG_NAME}"
109
+ s.rubyforge_project = "json"
110
+ end
111
+
112
+ Rake::GemPackageTask.new(spec_pure) do |pkg|
113
+ pkg.need_tar = true
114
+ pkg.package_files = PKG_FILES
115
+ end
116
+ end
117
+
118
+ if defined?(Gem) and defined?(Rake::GemPackageTask) and defined?(Rake::ExtensionTask)
119
+ spec_ext = Gem::Specification.new do |s|
120
+ s.name = 'json'
121
+ s.version = PKG_VERSION
122
+ s.summary = PKG_TITLE
123
+ s.description = "This is a JSON implementation as a Ruby extension in C."
124
+
125
+ s.files = PKG_FILES
126
+
127
+ s.extensions = FileList['ext/**/extconf.rb']
128
+
129
+ s.require_path = EXT_ROOT_DIR
130
+ s.require_paths << 'ext'
131
+ s.require_paths << 'lib'
132
+
133
+ s.bindir = "bin"
134
+ s.executables = [ "edit_json.rb", "prettify_json.rb" ]
135
+ s.default_executable = "edit_json.rb"
136
+
137
+ s.has_rdoc = true
138
+ s.extra_rdoc_files << 'README'
139
+ s.rdoc_options <<
140
+ '--title' << 'JSON implemention for Ruby' << '--main' << 'README'
141
+ s.test_files.concat Dir['./tests/test_*.rb']
142
+
143
+ s.author = "Florian Frank"
144
+ s.email = "flori@ping.de"
145
+ s.homepage = "http://flori.github.com/#{PKG_NAME}"
146
+ s.rubyforge_project = "json"
147
+ end
148
+
149
+ Rake::GemPackageTask.new(spec_ext) do |pkg|
150
+ pkg.need_tar = true
151
+ pkg.package_files = PKG_FILES
152
+ end
153
+
154
+ Rake::ExtensionTask.new do |ext|
155
+ ext.name = 'parser'
156
+ ext.gem_spec = spec_ext
157
+ ext.cross_compile = true
158
+ ext.cross_platform = %w[i386-mswin32 i386-mingw32]
159
+ ext.ext_dir = 'ext/json/ext/parser'
160
+ ext.lib_dir = 'lib/json/ext'
161
+ end
162
+
163
+ Rake::ExtensionTask.new do |ext|
164
+ ext.name = 'generator'
165
+ ext.gem_spec = spec_ext
166
+ ext.cross_compile = true
167
+ ext.cross_platform = %w[i386-mswin32 i386-mingw32]
168
+ ext.ext_dir = 'ext/json/ext/generator'
169
+ ext.lib_dir = 'lib/json/ext'
170
+ end
171
+ end
172
+
173
+ desc m = "Writing version information for #{PKG_VERSION}"
174
+ task :version do
175
+ puts m
176
+ File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
177
+ v.puts <<EOT
178
+ module JSON
179
+ # JSON version
180
+ VERSION = '#{PKG_VERSION}'
181
+ VERSION_ARRAY = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
182
+ VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
183
+ VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
184
+ VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
185
+ end
186
+ EOT
187
+ end
188
+ end
189
+
190
+ desc "Testing library (pure ruby)"
191
+ task :test_pure => :clean do
192
+ ENV['JSON'] = 'pure'
193
+ ENV['RUBYOPT'] = "-Ilib #{ENV['RUBYOPT']}"
194
+ myruby '-S', 'testrb', *Dir['./tests/test_*.rb']
195
+ end
196
+
197
+ desc "Testing library (pure ruby and extension)"
198
+ task :test => [ :test_pure, :test_ext ]
199
+
200
+
201
+ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
202
+ file JAVA_PARSER_SRC => JAVA_RAGEL_PATH do
203
+ cd JAVA_DIR do
204
+ if RAGEL_CODEGEN == 'ragel'
205
+ sh "ragel Parser.rl -J -o Parser.java"
206
+ else
207
+ sh "ragel -x Parser.rl | #{RAGEL_CODEGEN} -J"
208
+ end
209
+ end
210
+ end
211
+
212
+ desc "Generate parser for java with ragel"
213
+ task :ragel => JAVA_PARSER_SRC
214
+
215
+ desc "Delete the ragel generated Java source"
216
+ task :ragel_clean do
217
+ rm_rf JAVA_PARSER_SRC
218
+ end
219
+
220
+ JRUBY_JAR = File.join(Config::CONFIG["libdir"], "jruby.jar")
221
+ if File.exist?(JRUBY_JAR)
222
+ JAVA_SOURCES.each do |src|
223
+ classpath = (Dir['java/lib/*.jar'] << 'java/src' << JRUBY_JAR) * ':'
224
+ obj = src.sub(/\.java\Z/, '.class')
225
+ file obj => src do
226
+ sh 'javac', '-classpath', classpath, '-source', '1.5', src
227
+ end
228
+ JAVA_CLASSES << obj
229
+ end
230
+ else
231
+ warn "WARNING: Cannot find jruby in path => Cannot build jruby extension!"
232
+ end
233
+
234
+ desc "Compiling jruby extension"
235
+ task :compile_ext => JAVA_CLASSES
236
+
237
+ desc "Package the jruby gem"
238
+ task :jruby_gem => :create_jar do
239
+ sh 'gem build json-java.gemspec'
240
+ mkdir_p 'pkg'
241
+ mv "json-#{PKG_VERSION}-java.gem", 'pkg'
242
+ end
243
+
244
+ desc "Testing library (jruby)"
245
+ task :test_ext => :create_jar do
246
+ ENV['JSON'] = 'ext'
247
+ myruby '-S', 'testrb', '-Ilib', *Dir['./tests/test_*.rb']
248
+ end
249
+
250
+ file JRUBY_PARSER_JAR => :compile_ext do
251
+ cd 'java/src' do
252
+ parser_classes = FileList[
253
+ "json/ext/ByteListTranscoder*.class",
254
+ "json/ext/OptionsReader*.class",
255
+ "json/ext/Parser*.class",
256
+ "json/ext/RuntimeInfo*.class",
257
+ "json/ext/StringDecoder*.class",
258
+ "json/ext/Utils*.class"
259
+ ]
260
+ sh 'jar', 'cf', File.basename(JRUBY_PARSER_JAR), *parser_classes
261
+ mv File.basename(JRUBY_PARSER_JAR), File.dirname(JRUBY_PARSER_JAR)
262
+ end
263
+ end
264
+
265
+ desc "Create parser jar"
266
+ task :create_parser_jar => JRUBY_PARSER_JAR
267
+
268
+ file JRUBY_GENERATOR_JAR => :compile_ext do
269
+ cd 'java/src' do
270
+ generator_classes = FileList[
271
+ "json/ext/ByteListTranscoder*.class",
272
+ "json/ext/OptionsReader*.class",
273
+ "json/ext/Generator*.class",
274
+ "json/ext/RuntimeInfo*.class",
275
+ "json/ext/StringEncoder*.class",
276
+ "json/ext/Utils*.class"
277
+ ]
278
+ sh 'jar', 'cf', File.basename(JRUBY_GENERATOR_JAR), *generator_classes
279
+ mv File.basename(JRUBY_GENERATOR_JAR), File.dirname(JRUBY_GENERATOR_JAR)
280
+ end
281
+ end
282
+
283
+ desc "Create generator jar"
284
+ task :create_generator_jar => JRUBY_GENERATOR_JAR
285
+
286
+ desc "Create parser and generator jars"
287
+ task :create_jar => [ :create_parser_jar, :create_generator_jar ]
288
+
289
+ desc "Build all gems and archives for a new release of the jruby extension."
290
+ task :release => [ :clean, :version, :jruby_gem ]
291
+ else
292
+ desc "Compiling extension"
293
+ task :compile_ext => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
294
+
295
+ file EXT_PARSER_DL => EXT_PARSER_SRC do
296
+ cd EXT_PARSER_DIR do
297
+ myruby 'extconf.rb'
298
+ sh MAKE
299
+ end
300
+ cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
301
+ end
302
+
303
+ file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
304
+ cd EXT_GENERATOR_DIR do
305
+ myruby 'extconf.rb'
306
+ sh MAKE
307
+ end
308
+ cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
309
+ end
310
+
311
+ desc "Testing library (extension)"
312
+ task :test_ext => :compile_ext do
313
+ ENV['JSON'] = 'ext'
314
+ ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
315
+ myruby '-S', 'testrb', *Dir['./tests/test_*.rb']
316
+ end
317
+
318
+ desc "Benchmarking parser"
319
+ task :benchmark_parser do
320
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
321
+ myruby 'benchmarks/parser_benchmark.rb'
322
+ myruby 'benchmarks/parser2_benchmark.rb'
323
+ end
324
+
325
+ desc "Benchmarking generator"
326
+ task :benchmark_generator do
327
+ ENV['RUBYOPT'] = "-Ilib:ext #{ENV['RUBYOPT']}"
328
+ myruby 'benchmarks/generator_benchmark.rb'
329
+ myruby 'benchmarks/generator2_benchmark.rb'
330
+ end
331
+
332
+ desc "Benchmarking library"
333
+ task :benchmark => [ :benchmark_parser, :benchmark_generator ]
334
+
335
+ desc "Create RDOC documentation"
336
+ task :doc => [ :version, EXT_PARSER_SRC ] do
337
+ sh "sdoc -o doc -t '#{PKG_TITLE}' -m README README lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
338
+ end
339
+
340
+ desc "Generate parser with ragel"
341
+ task :ragel => EXT_PARSER_SRC
342
+
343
+ desc "Delete the ragel generated C source"
344
+ task :ragel_clean do
345
+ rm_rf EXT_PARSER_SRC
346
+ end
347
+
348
+ file EXT_PARSER_SRC => RAGEL_PATH do
349
+ cd EXT_PARSER_DIR do
350
+ if RAGEL_CODEGEN == 'ragel'
351
+ sh "ragel parser.rl -G2 -o parser.c"
352
+ else
353
+ sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
354
+ end
355
+ end
356
+ end
357
+
358
+ desc "Generate diagrams of ragel parser (ps)"
359
+ task :ragel_dot_ps do
360
+ root = 'diagrams'
361
+ specs = []
362
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
363
+ for s in specs
364
+ if RAGEL_DOTGEN == 'ragel'
365
+ sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
366
+ else
367
+ sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
368
+ end
369
+ end
370
+ end
371
+
372
+ desc "Generate diagrams of ragel parser (png)"
373
+ task :ragel_dot_png do
374
+ root = 'diagrams'
375
+ specs = []
376
+ File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
377
+ for s in specs
378
+ if RAGEL_DOTGEN == 'ragel'
379
+ sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
380
+ else
381
+ sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
382
+ end
383
+ end
384
+ end
385
+
386
+ desc "Generate diagrams of ragel parser"
387
+ task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
388
+
389
+ desc "Build all gems and archives for a new release of json and json_pure."
390
+ task :release => [ :clean, :version, :cross, :native, :gem, ] do
391
+ sh "#$0 clean native gem"
392
+ sh "#$0 clean package"
393
+ end
394
+ end
395
+
396
+ desc "Compile in the the source directory"
397
+ task :default => [ :version ]
@@ -0,0 +1 @@
1
+
@@ -0,0 +1 @@
1
+ 1.5.0
@@ -0,0 +1,147 @@
1
+ # This file contains implementations of ruby core's custom objects for
2
+ # serialisation/deserialisation.
3
+
4
+ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
5
+ require 'json'
6
+ end
7
+ require 'date'
8
+
9
+ class Symbol
10
+ def to_json(*a)
11
+ {
12
+ JSON.create_id => self.class.name,
13
+ 's' => to_s,
14
+ }.to_json(*a)
15
+ end
16
+
17
+ def self.json_create(o)
18
+ o['s'].to_sym
19
+ end
20
+ end
21
+
22
+ class Time
23
+ def self.json_create(object)
24
+ if usec = object.delete('u') # used to be tv_usec -> tv_nsec
25
+ object['n'] = usec * 1000
26
+ end
27
+ if respond_to?(:tv_nsec)
28
+ at(*object.values_at('s', 'n'))
29
+ else
30
+ at(object['s'], object['n'] / 1000)
31
+ end
32
+ end
33
+
34
+ def to_json(*args)
35
+ {
36
+ JSON.create_id => self.class.name,
37
+ 's' => tv_sec,
38
+ 'n' => respond_to?(:tv_nsec) ? tv_nsec : tv_usec * 1000
39
+ }.to_json(*args)
40
+ end
41
+ end
42
+
43
+ class Date
44
+ def self.json_create(object)
45
+ civil(*object.values_at('y', 'm', 'd', 'sg'))
46
+ end
47
+
48
+ alias start sg unless method_defined?(:start)
49
+
50
+ def to_json(*args)
51
+ {
52
+ JSON.create_id => self.class.name,
53
+ 'y' => year,
54
+ 'm' => month,
55
+ 'd' => day,
56
+ 'sg' => start,
57
+ }.to_json(*args)
58
+ end
59
+ end
60
+
61
+ class DateTime
62
+ def self.json_create(object)
63
+ args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
64
+ of_a, of_b = object['of'].split('/')
65
+ if of_b and of_b != '0'
66
+ args << Rational(of_a.to_i, of_b.to_i)
67
+ else
68
+ args << of_a
69
+ end
70
+ args << object['sg']
71
+ civil(*args)
72
+ end
73
+
74
+ alias start sg unless method_defined?(:start)
75
+
76
+ def to_json(*args)
77
+ {
78
+ JSON.create_id => self.class.name,
79
+ 'y' => year,
80
+ 'm' => month,
81
+ 'd' => day,
82
+ 'H' => hour,
83
+ 'M' => min,
84
+ 'S' => sec,
85
+ 'of' => offset.to_s,
86
+ 'sg' => start,
87
+ }.to_json(*args)
88
+ end
89
+ end
90
+
91
+ class Range
92
+ def self.json_create(object)
93
+ new(*object['a'])
94
+ end
95
+
96
+ def to_json(*args)
97
+ {
98
+ JSON.create_id => self.class.name,
99
+ 'a' => [ first, last, exclude_end? ]
100
+ }.to_json(*args)
101
+ end
102
+ end
103
+
104
+ class Struct
105
+ def self.json_create(object)
106
+ new(*object['v'])
107
+ end
108
+
109
+ def to_json(*args)
110
+ klass = self.class.name
111
+ klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
112
+ {
113
+ JSON.create_id => klass,
114
+ 'v' => values,
115
+ }.to_json(*args)
116
+ end
117
+ end
118
+
119
+ class Exception
120
+ def self.json_create(object)
121
+ result = new(object['m'])
122
+ result.set_backtrace object['b']
123
+ result
124
+ end
125
+
126
+ def to_json(*args)
127
+ {
128
+ JSON.create_id => self.class.name,
129
+ 'm' => message,
130
+ 'b' => backtrace,
131
+ }.to_json(*args)
132
+ end
133
+ end
134
+
135
+ class Regexp
136
+ def self.json_create(object)
137
+ new(object['s'], object['o'])
138
+ end
139
+
140
+ def to_json(*)
141
+ {
142
+ JSON.create_id => self.class.name,
143
+ 'o' => options,
144
+ 's' => source,
145
+ }.to_json
146
+ end
147
+ end
@@ -0,0 +1,8 @@
1
+ # This file used to implementations of rails custom objects for
2
+ # serialisation/deserialisation and is obsoleted now.
3
+
4
+ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
5
+ require 'json'
6
+ end
7
+
8
+ $DEBUG and warn "required json/add/rails which is obsolete now!"