restio 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1bac9514467bdc135a3497e797e1c3e98e5eeebd
4
+ data.tar.gz: 63e7a072a1b276f14c099d3152a2e7d707da793e
5
+ SHA512:
6
+ metadata.gz: f70e4502dbade720c4dc026ab7679539893f8f0a66026d843fa30654a1a5b9cec8f77bb4f9b71446954735b05b5eca53e1361d8c962e5b9d43358f9a5840fa9c
7
+ data.tar.gz: 344d48505519d371c1d6eaf0410fa786d33ebd503ae035976e1f4b87c5f626c1247abdb8b6c08177a323b572a7c41d744945e712ad4138df09e4fce0286444b5
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ lib/test/**/*
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ restio
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.2.1
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in restio.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # Restio
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/restio`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'restio'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install restio
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ 1. Fork it ( https://github.com/[my-github-username]/restio/fork )
36
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
37
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
38
+ 4. Push to the branch (`git push origin my-new-feature`)
39
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/console ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "restio"
5
+ require "pry"
6
+ Pry.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/lib/restio.rb ADDED
@@ -0,0 +1,11 @@
1
+ require "restio/version"
2
+ require "restio/config"
3
+ require "restio/core_ext/object"
4
+
5
+ module Restio
6
+ class << self
7
+ def config
8
+ @config ||= Restio::Config.new
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require "restio/action/collection"
2
+ require "restio/action/resource"
@@ -0,0 +1,11 @@
1
+ require "restio/connector"
2
+
3
+ module Restio
4
+ module Action
5
+ module Collection
6
+ def rest
7
+ @rest ||= Restio::Connector::Collection.new self
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module Restio
2
+ module Action
3
+ module Resource
4
+ def rest
5
+ @rest ||= Restio::Connector::Resource.new self
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ require "restio/util/url"
2
+ require "restio/util/header"
3
+
4
+ module Restio
5
+ class Config
6
+ include Util::Header
7
+ def url
8
+ Util::Url.url
9
+ end
10
+ def url=url
11
+ Util::Url.url=url
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+ require "restio/connector/collection"
2
+ require "restio/connector/resource"
@@ -0,0 +1,51 @@
1
+ require "restio/connector/generic"
2
+
3
+ module Restio
4
+ module Connector
5
+ class Collection < Generic
6
+ attr_accessor :identifier
7
+ attr_reader :attributes
8
+ def initialize klass, params={}
9
+ @klass = klass
10
+ @attributes = []
11
+ @type = :collection
12
+ end
13
+ def add_attribute name
14
+ @attributes << name
15
+ @klass.send(:attr_accessor,name)
16
+ end
17
+ def build_instance response
18
+ return unless processable response
19
+ self.new_from_rest response.body
20
+ end
21
+ def build_instance_list response
22
+ return unless processable response
23
+ unwrap(response.body).collect do |resource_attributes|
24
+ @klass.new_from_rest resource_attributes
25
+ end
26
+ end
27
+ def first
28
+ list.first
29
+ end
30
+ def last
31
+ list.last
32
+ end
33
+ def list
34
+ build_instance_list Unirest.get url,
35
+ headers: headers
36
+ end
37
+ def read id
38
+ result = @klass.new
39
+ result.send("#{identifier}=",id)
40
+ result.rest.read
41
+ result
42
+ end
43
+ def delete id
44
+ result = @klass.new
45
+ result.send(result.rest.id,id)
46
+ result.rest.delete
47
+ result
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,55 @@
1
+ require "active_support/core_ext/string/inflections"
2
+ require "restio/util/url"
3
+ require "restio/util/header"
4
+ require "unirest"
5
+ require "restio/util/callback"
6
+
7
+ module Restio
8
+ module Connector
9
+ class Generic
10
+ include Restio::Util::Url
11
+ include Restio::Util::Header
12
+ include Restio::Util::Callback
13
+ attr_accessor :wrapped, :use_backend_attributes
14
+ attr_reader :type
15
+ def processable response
16
+ (200..299).include? response.code
17
+ end
18
+ def empty response
19
+ response.code == 204
20
+ end
21
+ def resource_name
22
+ @klass.name.underscore.split('/').last.singularize.to_s
23
+ end
24
+ def collection_name
25
+ @klass.name.underscore.split('/').last.pluralize.to_s
26
+ end
27
+ def name
28
+ case type
29
+ when :collection then collection_name
30
+ when :resource then resource_name
31
+ end
32
+ end
33
+ def caster= caster
34
+ @caster_klass = "Restio::Util::Caster::#{caster.to_s.classify}"
35
+ @update_caster = true
36
+ end
37
+ def caster
38
+ return @caster if @caster and not @update_caster
39
+ @update_caster = false
40
+ @caster_klass ||= "Restio::Util::Caster::Default"
41
+ require @caster_klass.underscore
42
+ @caster = @caster_klass.constantize.new
43
+ end
44
+ def cast value
45
+ caster.cast value
46
+ end
47
+ def unwrap params={}
48
+ wrapped ? params[name] : params
49
+ end
50
+ def wrap params
51
+ wrapped ? { name => params } : params
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,88 @@
1
+ require "restio/connector/generic"
2
+ require "restio/util/identifier"
3
+
4
+ module Restio
5
+ module Connector
6
+ class Resource < Generic
7
+ include Restio::Util::Identifier
8
+ def initialize instance, params={}
9
+ @instance = instance
10
+ @type = :resource
11
+ @klass = instance.class
12
+ end
13
+ def identifier
14
+ @instance.send @klass.rest.identifier
15
+ end
16
+ def attributes
17
+ @klass.rest.attributes
18
+ end
19
+ def wrapped
20
+ @klass.rest.wrapped
21
+ end
22
+ def value_of name
23
+ @instance.instance_variable_get "@#{name}"
24
+ end
25
+ def register_attribute name
26
+ return false unless @klass.rest.use_backend_attributes
27
+ @klass.rest.add_attribute name.to_sym
28
+ true
29
+ end
30
+ def set_value name, value
31
+ value = cast(value)
32
+ register_attribute(name) ?
33
+ @instance.send("#{name}=", value) :
34
+ @instance.instance_variable_set("@#{name}", value)
35
+ end
36
+ def parameters
37
+ result = attributes.collect do |name|
38
+ [name,value_of(name)]
39
+ end.to_h
40
+ wrap result
41
+ end
42
+ def update_instance response
43
+ return unless processable response
44
+ unwrap(response.body).each do |name,value|
45
+ set_value name, value
46
+ end unless empty response
47
+ @instance
48
+ end
49
+ def delete_instance response
50
+ return true if processable response
51
+ false
52
+ end
53
+ def create
54
+ run_callbacks :before, __method__
55
+ update_instance Unirest.post @klass.rest.url,
56
+ headers: headers,
57
+ parameters: parameters
58
+ run_callbacks :after, __method__
59
+ end
60
+ def read
61
+ run_callbacks :before, __method__
62
+ update_instance Unirest.get url,
63
+ headers: headers
64
+ run_callbacks :after, __method__
65
+ end
66
+ def update
67
+ run_callbacks :before, __method__
68
+ update_instance Unirest.put url,
69
+ headers: headers,
70
+ parameters: parameters
71
+ run_callbacks :after, __method__
72
+ end
73
+ def delete
74
+ run_callbacks :before, __method__
75
+ delete_instance Unirest.delete url,
76
+ headers: headers
77
+ run_callbacks :after, __method__
78
+ end
79
+ def with_attributes &block
80
+ run_callbacks :before, __method__
81
+ @klass.rest.attributes.each do |name|
82
+ yield(name,@instance.send(name))
83
+ end
84
+ run_callbacks :after, __method__
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,18 @@
1
+ require "restio/action"
2
+ require "restio/extension"
3
+
4
+ class Object
5
+ def self.restful id: :id, wrapped:false, use_backend_attributes: false
6
+ extend Restio::Extension::Identifier
7
+ extend Restio::Extension::Attribute
8
+ extend Restio::Extension::Builder
9
+ extend Restio::Extension::Caster
10
+ extend Restio::Extension::Callback
11
+ extend Restio::Action::Collection
12
+ include Restio::Action::Resource
13
+ self.send(:attr_accessor,id)
14
+ rest.identifier = id
15
+ rest.wrapped = wrapped
16
+ rest.use_backend_attributes = use_backend_attributes
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ require "restio/extension/identifier"
2
+ require "restio/extension/attribute"
3
+ require "restio/extension/builder"
4
+ require "restio/extension/caster"
5
+ require "restio/extension/callback"
@@ -0,0 +1,12 @@
1
+ module Restio
2
+ module Extension
3
+ module Attribute
4
+ def rest_attributes *attributes
5
+ attributes.each do |name|
6
+ rest.add_attribute name
7
+ end
8
+ end
9
+ alias_method :rest_attribute, :rest_attributes
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Restio
2
+ module Extension
3
+ module Builder
4
+ def new_from_rest params={}
5
+ result = self.new
6
+ result.rest.unwrap(params).each do |name,value|
7
+ result.rest.set_value name, value
8
+ end
9
+ result
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Restio
2
+ module Extension
3
+ module Callback
4
+ def rest_callback stage, action, method
5
+ rest.register_callback stage, action, method
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Restio
2
+ module Extension
3
+ module Caster
4
+ def rest_caster caster=:default
5
+ rest.caster = caster
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Restio
2
+ module Extension
3
+ module Identifier
4
+ def rest_identifier id
5
+ rest.add_attribute id
6
+ rest.identifier = id
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,30 @@
1
+ module Restio
2
+ module Util
3
+ module Callback
4
+ attr_reader :callbacks
5
+ def register_callback stage, action, method_or_block
6
+ @callbacks ||= {}
7
+ @callbacks[action] ||= {}
8
+ @callbacks[action][stage] ||= []
9
+ @callbacks[action][stage] << method_or_block
10
+ end
11
+ def run_callbacks stage, action
12
+ get_callbacks(action,stage).each do |cb|
13
+ if cb.is_a? Symbol
14
+ case @type
15
+ when :collection then @klass.send(cb)
16
+ when :resource then @instance.send(cb)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ private
22
+ def get_callbacks action, stage
23
+ cbs = []
24
+ (cbs += @callbacks[action][stage]) rescue nil
25
+ (cbs += @klass.rest.callbacks[action][stage]) rescue nil
26
+ cbs
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ require "restio/util/caster/default"
2
+
3
+ module Restio
4
+ module Util
5
+ module Caster
6
+ def rest_caster caster=nil
7
+ rest.caster = ( caster || :default)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,24 @@
1
+ require "restio/util/caster/generic"
2
+ require "uuidtools"
3
+
4
+ module Restio
5
+ module Util
6
+ module Caster
7
+ class Default < Generic
8
+ RE_FLOAT = /^[0-9]+\.[0-9]+$/
9
+ RE_INT = /^[0-9]+$/
10
+ RE_UUID = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/
11
+ def map value
12
+ return value if value.nil?
13
+ return value unless value.is_a? String
14
+ return true if value == "true"
15
+ return false if value == "false"
16
+ return value.to_i if value.match(RE_INT)
17
+ return value.to_f if value.match(RE_FLOAT)
18
+ return UUIDTools::UUID.parse(value) if value.match(RE_UUID)
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ module Restio
2
+ module Util
3
+ module Caster
4
+ class Generic
5
+ def map value
6
+ raise "Define #{self.class}#map(value)"
7
+ end
8
+ def cast value
9
+ map(value) || value
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module Restio
2
+ module Util
3
+ module Header
4
+ def add_header name, value
5
+ @headers ||= {}
6
+ @headers[name] = value
7
+ end
8
+ def headers
9
+ @headers ||= {}
10
+ return @headers if self.class.name == 'Restio::Config'
11
+ @headers.merge(Restio.config.headers)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module Restio
2
+ module Util
3
+ module Identifier
4
+ attr_accessor :rest_identifier
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ require "pathname"
2
+ require "active_support/core_ext/string/inflections"
3
+
4
+ module Restio
5
+ module Util
6
+ module Url
7
+ class << self
8
+ attr_writer :url
9
+ def url
10
+ Pathname.new (@url || 'http://example.com')
11
+ end
12
+ end
13
+ attr_accessor :base_url
14
+ def url
15
+ case type
16
+ when :collection
17
+ base_url ||= Restio.config.url
18
+ base_url = Pathname.new(base_url) if base_url
19
+ base_url.join(@klass.rest.name).to_s
20
+ when :resource
21
+ Pathname.new(@klass.rest.url).join(identifier.to_s).to_s
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module Restio
2
+ VERSION = "0.1.0"
3
+ end
data/restio.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'restio/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "restio"
8
+ spec.version = Restio::VERSION
9
+ spec.authors = ["Mathias Kaufmann"]
10
+ spec.email = ["me@stei.gr"]
11
+
12
+ spec.summary = %q{Adding restful interface to Ruby-Objects.}
13
+ spec.description = %q{Adding restful interface to Ruby-Objects. Each Object is extended by a .rest-Member which handles communication to any RESTful Web API.}
14
+ spec.homepage = "https://restio.stei.gr/"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "unirest", "~> 1.1"
22
+ spec.add_dependency "activesupport", ">= 2.2.1"
23
+ spec.add_dependency "uuidtools", "~> 2.1"
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.8"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "pry"
28
+ end
metadata ADDED
@@ -0,0 +1,162 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: restio
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mathias Kaufmann
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-04-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: unirest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.2.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: uuidtools
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Adding restful interface to Ruby-Objects. Each Object is extended by
98
+ a .rest-Member which handles communication to any RESTful Web API.
99
+ email:
100
+ - me@stei.gr
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".ruby-gemset"
107
+ - ".ruby-version"
108
+ - ".travis.yml"
109
+ - Gemfile
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - lib/restio.rb
115
+ - lib/restio/action.rb
116
+ - lib/restio/action/collection.rb
117
+ - lib/restio/action/resource.rb
118
+ - lib/restio/config.rb
119
+ - lib/restio/connector.rb
120
+ - lib/restio/connector/collection.rb
121
+ - lib/restio/connector/generic.rb
122
+ - lib/restio/connector/resource.rb
123
+ - lib/restio/core_ext/object.rb
124
+ - lib/restio/extension.rb
125
+ - lib/restio/extension/attribute.rb
126
+ - lib/restio/extension/builder.rb
127
+ - lib/restio/extension/callback.rb
128
+ - lib/restio/extension/caster.rb
129
+ - lib/restio/extension/identifier.rb
130
+ - lib/restio/util/callback.rb
131
+ - lib/restio/util/caster.rb
132
+ - lib/restio/util/caster/default.rb
133
+ - lib/restio/util/caster/generic.rb
134
+ - lib/restio/util/header.rb
135
+ - lib/restio/util/identifier.rb
136
+ - lib/restio/util/url.rb
137
+ - lib/restio/version.rb
138
+ - restio.gemspec
139
+ homepage: https://restio.stei.gr/
140
+ licenses: []
141
+ metadata: {}
142
+ post_install_message:
143
+ rdoc_options: []
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ requirements: []
157
+ rubyforge_project:
158
+ rubygems_version: 2.4.6
159
+ signing_key:
160
+ specification_version: 4
161
+ summary: Adding restful interface to Ruby-Objects.
162
+ test_files: []