jsonrpc 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
@@ -0,0 +1,3 @@
1
+ 0.9.0
2
+
3
+ Initial officially released version
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ JsonRPC, Copyright (c) 2008 Dirkjan Bussink
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,5 @@
1
+ Extremely simple Ruby JSON RPC Client
2
+
3
+ This plugin lets you easily call methods over a JSON RPC interface. It
4
+ currently implements the bare minimum, feel free to submit pull requests
5
+ if you implement additional functionality.
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__), "lib"))
2
+ $:.unshift(lib_dir)
3
+ $:.uniq!
4
+
5
+ require 'rubygems'
6
+ require 'rake'
7
+ require 'rake/testtask'
8
+ require 'rake/rdoctask'
9
+ require 'rake/packagetask'
10
+ require 'rake/gempackagetask'
11
+ require 'rake/contrib/rubyforgepublisher'
12
+ require 'spec/rake/spectask'
13
+
14
+ require File.join(File.dirname(__FILE__), 'lib/jsonrpc', 'version')
15
+
16
+ PKG_DISPLAY_NAME = 'JsonRPC'
17
+ PKG_NAME = PKG_DISPLAY_NAME.downcase
18
+ PKG_VERSION = JsonRPC::VERSION::STRING
19
+ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
20
+
21
+ RELEASE_NAME = "REL #{PKG_VERSION}"
22
+
23
+ RUBY_FORGE_PROJECT = PKG_NAME
24
+ RUBY_FORGE_USER = "dbussink"
25
+ RUBY_FORGE_PATH = "/var/www/gforge-projects/#{RUBY_FORGE_PROJECT}"
26
+ RUBY_FORGE_URL = "http://#{RUBY_FORGE_PROJECT}.rubyforge.org/"
27
+
28
+ PKG_SUMMARY = "JSON RPC implementation"
29
+ PKG_DESCRIPTION = <<-TEXT
30
+ Very simple JSON RPC client implementation
31
+ TEXT
32
+
33
+ PKG_FILES = FileList[
34
+ "lib/**/*", "spec/**/*", "vendor/**/*",
35
+ "tasks/**/*", "website/**/*",
36
+ "[A-Z]*", "Rakefile"
37
+ ].exclude(/database\.yml/).exclude(/[_\.]git$/)
38
+
39
+ RCOV_ENABLED = (RUBY_PLATFORM != "java" && RUBY_VERSION =~ /^1\.8/)
40
+ if RCOV_ENABLED
41
+ task :default => "spec:verify"
42
+ else
43
+ task :default => "spec"
44
+ end
45
+
46
+ WINDOWS = (RUBY_PLATFORM =~ /mswin|win32|mingw|bccwin|cygwin/) rescue false
47
+ SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
48
+
49
+ Dir['tasks/**/*.rake'].each { |rake| load rake }
data/lib/jsonrpc.rb ADDED
@@ -0,0 +1,33 @@
1
+ gem 'addressable', '~>2.0.0'
2
+ gem 'json'
3
+
4
+ require 'net/http'
5
+ require 'addressable/uri'
6
+ require 'json'
7
+
8
+ require File.expand_path(File.join(File.dirname(__FILE__), 'jsonrpc', 'version'))
9
+ require File.expand_path(File.join(File.dirname(__FILE__), 'jsonrpc', 'exceptions'))
10
+
11
+ module JsonRPC
12
+
13
+ class Client
14
+
15
+ def initialize(url)
16
+ @address = Addressable::URI.parse(url)
17
+ end
18
+
19
+ def request(method, params)
20
+ result = {}
21
+ params ||= {}
22
+ Net::HTTP.start(@address.host, @address.port) do |connection|
23
+ result = JSON.parse(connection.post(@address.path, {:method => method.to_s, :params => params}.to_json).body)
24
+ end
25
+ if error = result["error"]
26
+ raise JsonRPCError, error["message"]
27
+ end
28
+ result
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,6 @@
1
+ module JsonRPC
2
+
3
+ class JsonRPCError < StandardError
4
+ end
5
+
6
+ end
@@ -0,0 +1,11 @@
1
+ if !defined?(JsonRPC::VERSION)
2
+ module JsonRPC
3
+ module VERSION #:nodoc:
4
+ MAJOR = 0
5
+ MINOR = 9
6
+ TINY = 0
7
+
8
+ STRING = [MAJOR, MINOR, TINY].join('.')
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,94 @@
1
+ require 'net/http'
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'jsonrpc'))
3
+
4
+ # Mock around Net::HTTP so we don't need a real connection.
5
+ # We just verify whether the correct data is posted and return
6
+ # know test data
7
+
8
+ class Net::HTTP < Net::Protocol
9
+ def connect
10
+ end
11
+ end
12
+
13
+ class Net::HTTPResponse
14
+ def body=(content)
15
+ @body = content
16
+ @read = true
17
+ end
18
+ end
19
+
20
+ class Net::HTTP < Net::Protocol
21
+
22
+ def self.raw_response_data
23
+ @raw_response_data
24
+ end
25
+
26
+ def self.raw_response_data=(data)
27
+ @raw_response_data = data
28
+ end
29
+
30
+ def self.raw_post_body=(body)
31
+ @raw_post_body = body
32
+ end
33
+
34
+ def self.raw_post_body
35
+ @raw_post_body
36
+ end
37
+
38
+ def self.raw_post_path=(path)
39
+ @raw_post_path = path
40
+ end
41
+
42
+ def self.raw_post_path
43
+ @raw_post_path
44
+ end
45
+
46
+ def post(path, body, headers = [])
47
+ res = Net::HTTPSuccess.new('1.2', '200', 'OK')
48
+ self.class.raw_post_path = path
49
+ self.class.raw_post_body = body
50
+ res.body = self.class.raw_response_data
51
+ res
52
+ end
53
+ end
54
+
55
+ describe JsonRPC::Client do
56
+
57
+ before do
58
+ @jsonrpc = JsonRPC::Client.new("http://localhost:4444/api")
59
+ end
60
+
61
+ it { @jsonrpc.should respond_to(:request) }
62
+
63
+ describe 'when it is successful' do
64
+
65
+ before do
66
+ @jsonrpc = JsonRPC::Client.new("http://localhost:4444/api")
67
+ Net::HTTP.raw_response_data = '{"result":200,"message":"what a great success!"}'
68
+ @result = @jsonrpc.request("test_method", {:param1 => "value1", :param2 => "value2" })
69
+ end
70
+
71
+ it 'should receive the correct call at the http level' do
72
+ JSON.parse(Net::HTTP.raw_post_body).should == JSON.parse('{"params":{"param1":"value1","param2":"value2"},"method":"test_method"}')
73
+ end
74
+
75
+ it 'should correctly parse the response from the server' do
76
+ @result.should == {"result" => 200, "message" => "what a great success!"}
77
+ end
78
+
79
+ end
80
+
81
+ describe 'when it is not successful' do
82
+
83
+ before do
84
+ @jsonrpc = JsonRPC::Client.new("http://localhost:4444/api")
85
+ Net::HTTP.raw_response_data = '{"result":null,"error":{"message":"something is wrong!"}}'
86
+ end
87
+
88
+ it 'should raise an exception when a call went wrong' do
89
+ lambda { @jsonrpc.request("test_method", {:param1 => "value1", :param2 => "value2" }) }.should raise_error(JsonRPC::JsonRPCError)
90
+ end
91
+
92
+ end
93
+
94
+ end
@@ -0,0 +1,2 @@
1
+ desc "Remove all build products"
2
+ task "clobber"
data/tasks/gem.rake ADDED
@@ -0,0 +1,68 @@
1
+ require "rake/gempackagetask"
2
+
3
+ namespace :gem do
4
+ GEM_SPEC = Gem::Specification.new do |s|
5
+ s.name = PKG_NAME
6
+ s.version = PKG_VERSION
7
+ s.summary = PKG_SUMMARY
8
+ s.description = PKG_DESCRIPTION
9
+
10
+ s.files = PKG_FILES.to_a
11
+
12
+ s.has_rdoc = true
13
+ s.extra_rdoc_files = %w( README )
14
+ s.rdoc_options.concat ["--main", "README"]
15
+
16
+ if !s.respond_to?(:add_development_dependency)
17
+ puts "Cannot build Gem with this version of RubyGems."
18
+ exit(1)
19
+ end
20
+
21
+ s.add_development_dependency("rake", ">= 0.7.3")
22
+ s.add_development_dependency("rspec", ">= 1.0.8")
23
+ s.add_development_dependency("launchy", ">= 0.3.2")
24
+
25
+ s.require_path = "lib"
26
+
27
+ s.author = "Bob Aman"
28
+ s.email = "bob@sporkmonger.com"
29
+ s.homepage = RUBY_FORGE_URL
30
+ s.rubyforge_project = RUBY_FORGE_PROJECT
31
+ end
32
+
33
+ Rake::GemPackageTask.new(GEM_SPEC) do |p|
34
+ p.gem_spec = GEM_SPEC
35
+ p.need_tar = true
36
+ p.need_zip = true
37
+ end
38
+
39
+ desc "Show information about the gem"
40
+ task :debug do
41
+ puts GEM_SPEC.to_ruby
42
+ end
43
+
44
+ desc "Install the gem"
45
+ task :install => ["clobber", "gem:package"] do
46
+ sh "#{SUDO} gem install --local pkg/#{GEM_SPEC.full_name}"
47
+ end
48
+
49
+ desc "Uninstall the gem"
50
+ task :uninstall do
51
+ installed_list = Gem.source_index.find_name(PKG_NAME)
52
+ if installed_list &&
53
+ (installed_list.collect { |s| s.version.to_s}.include?(PKG_VERSION))
54
+ sh(
55
+ "#{SUDO} gem uninstall --version '#{PKG_VERSION}' " +
56
+ "--ignore-dependencies --executables #{PKG_NAME}"
57
+ )
58
+ end
59
+ end
60
+
61
+ desc "Reinstall the gem"
62
+ task :reinstall => [:uninstall, :install]
63
+ end
64
+
65
+ desc "Alias to gem:package"
66
+ task "gem" => "gem:package"
67
+
68
+ task "clobber" => ["gem:clobber_package"]
data/tasks/git.rake ADDED
@@ -0,0 +1,40 @@
1
+ namespace :git do
2
+ namespace :tag do
3
+ desc "List tags from the Git repository"
4
+ task :list do
5
+ tags = `git tag -l`
6
+ tags.gsub!("\r", "")
7
+ tags = tags.split("\n").sort {|a, b| b <=> a }
8
+ puts tags.join("\n")
9
+ end
10
+
11
+ desc "Create a new tag in the Git repository"
12
+ task :create do
13
+ changelog = File.open("CHANGELOG", "r") { |file| file.read }
14
+ puts "-" * 80
15
+ puts changelog
16
+ puts "-" * 80
17
+ puts
18
+
19
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
20
+ abort "Versions don't match #{v} vs #{PKG_VERSION}" if v != PKG_VERSION
21
+
22
+ tag = "#{PKG_NAME}-#{PKG_VERSION}"
23
+ msg = "Release #{PKG_NAME}-#{PKG_VERSION}"
24
+
25
+ existing_tags = `git tag -l instrument-*`.split("\n")
26
+ if existing_tags.include?(tag)
27
+ warn("Tag already exists, deleting...")
28
+ unless system "git tag -d #{tag}"
29
+ abort "Tag deletion failed."
30
+ end
31
+ end
32
+ puts "Creating git tag '#{tag}'..."
33
+ unless system "git tag -a -m \"#{msg}\" #{tag}"
34
+ abort "Tag creation failed."
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ task "gem:release" => "git:tag:create"
@@ -0,0 +1,22 @@
1
+ namespace :metrics do
2
+ task :lines do
3
+ lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
4
+ for file_name in FileList["lib/**/*.rb"]
5
+ f = File.open(file_name)
6
+ while line = f.gets
7
+ lines += 1
8
+ next if line =~ /^\s*$/
9
+ next if line =~ /^\s*#/
10
+ codelines += 1
11
+ end
12
+ puts "L: #{sprintf("%4d", lines)}, " +
13
+ "LOC #{sprintf("%4d", codelines)} | #{file_name}"
14
+ total_lines += lines
15
+ total_codelines += codelines
16
+
17
+ lines, codelines = 0, 0
18
+ end
19
+
20
+ puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
21
+ end
22
+ end
data/tasks/rdoc.rake ADDED
@@ -0,0 +1,29 @@
1
+ require "rake/rdoctask"
2
+
3
+ namespace :doc do
4
+ desc "Generate RDoc documentation"
5
+ Rake::RDocTask.new do |rdoc|
6
+ rdoc.rdoc_dir = "doc"
7
+ rdoc.title = "#{PKG_NAME}-#{PKG_VERSION} Documentation"
8
+ rdoc.options << "--line-numbers" << "--inline-source" <<
9
+ "--accessor" << "cattr_accessor=object" << "--charset" << "utf-8"
10
+ rdoc.template = "#{ENV["template"]}.rb" if ENV["template"]
11
+ rdoc.rdoc_files.include("README", "CHANGELOG", "LICENSE")
12
+ rdoc.rdoc_files.include("lib/**/*.rb")
13
+ end
14
+
15
+ desc "Generate ri locally for testing"
16
+ task :ri do
17
+ sh "rdoc --ri -o ri ."
18
+ end
19
+
20
+ desc "Remove ri products"
21
+ task :clobber_ri do
22
+ rm_r "ri" rescue nil
23
+ end
24
+ end
25
+
26
+ desc "Alias to doc:rdoc"
27
+ task "doc" => "doc:rdoc"
28
+
29
+ task "clobber" => ["doc:clobber_rdoc", "doc:clobber_ri"]
@@ -0,0 +1,89 @@
1
+ namespace :gem do
2
+ desc 'Package and upload to RubyForge'
3
+ task :release => ["gem:package"] do |t|
4
+ require 'rubyforge'
5
+
6
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
7
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PKG_VERSION
8
+ pkg = "pkg/#{GEM_SPEC.full_name}"
9
+
10
+ rf = RubyForge.new
11
+ rf.configure
12
+ puts 'Logging in...'
13
+ rf.login
14
+
15
+ c = rf.userconfig
16
+ changelog = File.open("CHANGELOG") { |file| file.read }
17
+ c['release_changes'] = changelog
18
+ c['preformatted'] = true
19
+
20
+ files = ["#{pkg}.tgz", "#{pkg}.zip", "#{pkg}.gem"]
21
+
22
+ puts "Releasing #{PKG_NAME} v. #{PKG_VERSION}"
23
+ rf.add_release RUBY_FORGE_PROJECT, PKG_NAME, PKG_VERSION, *files
24
+ end
25
+ end
26
+
27
+ namespace :doc do
28
+ desc "Publish RDoc to RubyForge"
29
+ task :release => ["doc:rdoc"] do
30
+ require "rake/contrib/sshpublisher"
31
+ require "yaml"
32
+
33
+ config = YAML.load(
34
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
35
+ )
36
+ host = "#{config['username']}@rubyforge.org"
37
+ remote_dir = RUBY_FORGE_PATH + "/api"
38
+ local_dir = "doc"
39
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
40
+ end
41
+ end
42
+
43
+ namespace :spec do
44
+ desc "Publish specdoc to RubyForge"
45
+ task :release => ["spec:specdoc"] do
46
+ require "rake/contrib/sshpublisher"
47
+ require "yaml"
48
+
49
+ config = YAML.load(
50
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
51
+ )
52
+ host = "#{config['username']}@rubyforge.org"
53
+ remote_dir = RUBY_FORGE_PATH + "/specdoc"
54
+ local_dir = "specdoc"
55
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
56
+ end
57
+
58
+ namespace :rcov do
59
+ desc "Publish coverage report to RubyForge"
60
+ task :release => ["spec:rcov"] do
61
+ require "rake/contrib/sshpublisher"
62
+ require "yaml"
63
+
64
+ config = YAML.load(
65
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
66
+ )
67
+ host = "#{config['username']}@rubyforge.org"
68
+ remote_dir = RUBY_FORGE_PATH + "/coverage"
69
+ local_dir = "coverage"
70
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
71
+ end
72
+ end
73
+ end
74
+
75
+ namespace :website do
76
+ desc "Publish website to RubyForge"
77
+ task :release => ["doc:release", "spec:release", "spec:rcov:release"] do
78
+ require "rake/contrib/sshpublisher"
79
+ require "yaml"
80
+
81
+ config = YAML.load(
82
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
83
+ )
84
+ host = "#{config['username']}@rubyforge.org"
85
+ remote_dir = RUBY_FORGE_PATH
86
+ local_dir = "website"
87
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
88
+ end
89
+ end
data/tasks/spec.rake ADDED
@@ -0,0 +1,63 @@
1
+ require 'spec/rake/verify_rcov'
2
+
3
+ namespace :spec do
4
+ Spec::Rake::SpecTask.new(:rcov) do |t|
5
+ t.spec_files = FileList['spec/**/*_spec.rb']
6
+ t.spec_opts = ['--color', '--format', 'specdoc']
7
+ if RCOV_ENABLED
8
+ t.rcov = true
9
+ else
10
+ t.rcov = false
11
+ end
12
+ t.rcov_opts = [
13
+ '--exclude', 'spec',
14
+ '--exclude', '1\\.8\\/gems',
15
+ '--exclude', '1\\.9\\/gems',
16
+ ]
17
+ end
18
+
19
+ Spec::Rake::SpecTask.new(:normal) do |t|
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ t.spec_opts = ['--color', '--format', 'specdoc']
22
+ t.rcov = false
23
+ end
24
+
25
+ if RCOV_ENABLED
26
+ RCov::VerifyTask.new(:verify) do |t|
27
+ t.threshold = 100.0
28
+ t.index_html = 'coverage/index.html'
29
+ end
30
+
31
+ task :verify => :rcov
32
+ end
33
+
34
+ desc "Generate HTML Specdocs for all specs"
35
+ Spec::Rake::SpecTask.new(:specdoc) do |t|
36
+ specdoc_path = File.expand_path(
37
+ File.join(File.dirname(__FILE__), '../specdoc/'))
38
+ Dir.mkdir(specdoc_path) if !File.exist?(specdoc_path)
39
+
40
+ output_file = File.join(specdoc_path, 'index.html')
41
+ t.spec_files = FileList['spec/**/*_spec.rb']
42
+ t.spec_opts = ["--format", "\"html:#{output_file}\"", "--diff"]
43
+ t.fail_on_error = false
44
+ end
45
+
46
+ namespace :rcov do
47
+ desc "Browse the code coverage report."
48
+ task :browse => "spec:rcov" do
49
+ require "launchy"
50
+ Launchy::Browser.run("coverage/index.html")
51
+ end
52
+ end
53
+ end
54
+
55
+ if RCOV_ENABLED
56
+ desc "Alias to spec:verify"
57
+ task "spec" => "spec:verify"
58
+ else
59
+ desc "Alias to spec:normal"
60
+ task "spec" => "spec:normal"
61
+ end
62
+
63
+ task "clobber" => ["spec:clobber_rcov"]
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jsonrpc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Bob Aman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-12 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.7.3
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.8
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: launchy
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.3.2
44
+ version:
45
+ description: |
46
+ Very simple JSON RPC client implementation
47
+
48
+ email: bob@sporkmonger.com
49
+ executables: []
50
+
51
+ extensions: []
52
+
53
+ extra_rdoc_files:
54
+ - README
55
+ files:
56
+ - lib/jsonrpc/exceptions.rb
57
+ - lib/jsonrpc/version.rb
58
+ - lib/jsonrpc.rb
59
+ - spec/jsonrpc_spec.rb
60
+ - tasks/clobber.rake
61
+ - tasks/gem.rake
62
+ - tasks/git.rake
63
+ - tasks/metrics.rake
64
+ - tasks/rdoc.rake
65
+ - tasks/rubyforge.rake
66
+ - tasks/spec.rake
67
+ - CHANGELOG
68
+ - LICENSE
69
+ - Rakefile
70
+ - README
71
+ has_rdoc: true
72
+ homepage: http://jsonrpc.rubyforge.org/
73
+ licenses: []
74
+
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --main
78
+ - README
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: "0"
86
+ version:
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: "0"
92
+ version:
93
+ requirements: []
94
+
95
+ rubyforge_project: jsonrpc
96
+ rubygems_version: 1.3.4
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: JSON RPC implementation
100
+ test_files: []
101
+