nugramserver-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE.txt ADDED
@@ -0,0 +1,203 @@
1
+ Copyright (c) 2010 Nu Echo Inc
2
+
3
+ Apache License
4
+ Version 2.0, January 2004
5
+ http://www.apache.org/licenses/
6
+
7
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
8
+
9
+ 1. Definitions.
10
+
11
+ "License" shall mean the terms and conditions for use, reproduction,
12
+ and distribution as defined by Sections 1 through 9 of this document.
13
+
14
+ "Licensor" shall mean the copyright owner or entity authorized by
15
+ the copyright owner that is granting the License.
16
+
17
+ "Legal Entity" shall mean the union of the acting entity and all
18
+ other entities that control, are controlled by, or are under common
19
+ control with that entity. For the purposes of this definition,
20
+ "control" means (i) the power, direct or indirect, to cause the
21
+ direction or management of such entity, whether by contract or
22
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
23
+ outstanding shares, or (iii) beneficial ownership of such entity.
24
+
25
+ "You" (or "Your") shall mean an individual or Legal Entity
26
+ exercising permissions granted by this License.
27
+
28
+ "Source" form shall mean the preferred form for making modifications,
29
+ including but not limited to software source code, documentation
30
+ source, and configuration files.
31
+
32
+ "Object" form shall mean any form resulting from mechanical
33
+ transformation or translation of a Source form, including but
34
+ not limited to compiled object code, generated documentation,
35
+ and conversions to other media types.
36
+
37
+ "Work" shall mean the work of authorship, whether in Source or
38
+ Object form, made available under the License, as indicated by a
39
+ copyright notice that is included in or attached to the work
40
+ (an example is provided in the Appendix below).
41
+
42
+ "Derivative Works" shall mean any work, whether in Source or Object
43
+ form, that is based on (or derived from) the Work and for which the
44
+ editorial revisions, annotations, elaborations, or other modifications
45
+ represent, as a whole, an original work of authorship. For the purposes
46
+ of this License, Derivative Works shall not include works that remain
47
+ separable from, or merely link (or bind by name) to the interfaces of,
48
+ the Work and Derivative Works thereof.
49
+
50
+ "Contribution" shall mean any work of authorship, including
51
+ the original version of the Work and any modifications or additions
52
+ to that Work or Derivative Works thereof, that is intentionally
53
+ submitted to Licensor for inclusion in the Work by the copyright owner
54
+ or by an individual or Legal Entity authorized to submit on behalf of
55
+ the copyright owner. For the purposes of this definition, "submitted"
56
+ means any form of electronic, verbal, or written communication sent
57
+ to the Licensor or its representatives, including but not limited to
58
+ communication on electronic mailing lists, source code control systems,
59
+ and issue tracking systems that are managed by, or on behalf of, the
60
+ Licensor for the purpose of discussing and improving the Work, but
61
+ excluding communication that is conspicuously marked or otherwise
62
+ designated in writing by the copyright owner as "Not a Contribution."
63
+
64
+ "Contributor" shall mean Licensor and any individual or Legal Entity
65
+ on behalf of whom a Contribution has been received by Licensor and
66
+ subsequently incorporated within the Work.
67
+
68
+ 2. Grant of Copyright License. Subject to the terms and conditions of
69
+ this License, each Contributor hereby grants to You a perpetual,
70
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
71
+ copyright license to reproduce, prepare Derivative Works of,
72
+ publicly display, publicly perform, sublicense, and distribute the
73
+ Work and such Derivative Works in Source or Object form.
74
+
75
+ 3. Grant of Patent License. Subject to the terms and conditions of
76
+ this License, each Contributor hereby grants to You a perpetual,
77
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
78
+ (except as stated in this section) patent license to make, have made,
79
+ use, offer to sell, sell, import, and otherwise transfer the Work,
80
+ where such license applies only to those patent claims licensable
81
+ by such Contributor that are necessarily infringed by their
82
+ Contribution(s) alone or by combination of their Contribution(s)
83
+ with the Work to which such Contribution(s) was submitted. If You
84
+ institute patent litigation against any entity (including a
85
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
86
+ or a Contribution incorporated within the Work constitutes direct
87
+ or contributory patent infringement, then any patent licenses
88
+ granted to You under this License for that Work shall terminate
89
+ as of the date such litigation is filed.
90
+
91
+ 4. Redistribution. You may reproduce and distribute copies of the
92
+ Work or Derivative Works thereof in any medium, with or without
93
+ modifications, and in Source or Object form, provided that You
94
+ meet the following conditions:
95
+
96
+ (a) You must give any other recipients of the Work or
97
+ Derivative Works a copy of this License; and
98
+
99
+ (b) You must cause any modified files to carry prominent notices
100
+ stating that You changed the files; and
101
+
102
+ (c) You must retain, in the Source form of any Derivative Works
103
+ that You distribute, all copyright, patent, trademark, and
104
+ attribution notices from the Source form of the Work,
105
+ excluding those notices that do not pertain to any part of
106
+ the Derivative Works; and
107
+
108
+ (d) If the Work includes a "NOTICE" text file as part of its
109
+ distribution, then any Derivative Works that You distribute must
110
+ include a readable copy of the attribution notices contained
111
+ within such NOTICE file, excluding those notices that do not
112
+ pertain to any part of the Derivative Works, in at least one
113
+ of the following places: within a NOTICE text file distributed
114
+ as part of the Derivative Works; within the Source form or
115
+ documentation, if provided along with the Derivative Works; or,
116
+ within a display generated by the Derivative Works, if and
117
+ wherever such third-party notices normally appear. The contents
118
+ of the NOTICE file are for informational purposes only and
119
+ do not modify the License. You may add Your own attribution
120
+ notices within Derivative Works that You distribute, alongside
121
+ or as an addendum to the NOTICE text from the Work, provided
122
+ that such additional attribution notices cannot be construed
123
+ as modifying the License.
124
+
125
+ You may add Your own copyright statement to Your modifications and
126
+ may provide additional or different license terms and conditions
127
+ for use, reproduction, or distribution of Your modifications, or
128
+ for any such Derivative Works as a whole, provided Your use,
129
+ reproduction, and distribution of the Work otherwise complies with
130
+ the conditions stated in this License.
131
+
132
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
133
+ any Contribution intentionally submitted for inclusion in the Work
134
+ by You to the Licensor shall be under the terms and conditions of
135
+ this License, without any additional terms or conditions.
136
+ Notwithstanding the above, nothing herein shall supersede or modify
137
+ the terms of any separate license agreement you may have executed
138
+ with Licensor regarding such Contributions.
139
+
140
+ 6. Trademarks. This License does not grant permission to use the trade
141
+ names, trademarks, service marks, or product names of the Licensor,
142
+ except as required for reasonable and customary use in describing the
143
+ origin of the Work and reproducing the content of the NOTICE file.
144
+
145
+ 7. Disclaimer of Warranty. Unless required by applicable law or
146
+ agreed to in writing, Licensor provides the Work (and each
147
+ Contributor provides its Contributions) on an "AS IS" BASIS,
148
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
149
+ implied, including, without limitation, any warranties or conditions
150
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
151
+ PARTICULAR PURPOSE. You are solely responsible for determining the
152
+ appropriateness of using or redistributing the Work and assume any
153
+ risks associated with Your exercise of permissions under this License.
154
+
155
+ 8. Limitation of Liability. In no event and under no legal theory,
156
+ whether in tort (including negligence), contract, or otherwise,
157
+ unless required by applicable law (such as deliberate and grossly
158
+ negligent acts) or agreed to in writing, shall any Contributor be
159
+ liable to You for damages, including any direct, indirect, special,
160
+ incidental, or consequential damages of any character arising as a
161
+ result of this License or out of the use or inability to use the
162
+ Work (including but not limited to damages for loss of goodwill,
163
+ work stoppage, computer failure or malfunction, or any and all
164
+ other commercial damages or losses), even if such Contributor
165
+ has been advised of the possibility of such damages.
166
+
167
+ 9. Accepting Warranty or Additional Liability. While redistributing
168
+ the Work or Derivative Works thereof, You may choose to offer,
169
+ and charge a fee for, acceptance of support, warranty, indemnity,
170
+ or other liability obligations and/or rights consistent with this
171
+ License. However, in accepting such obligations, You may act only
172
+ on Your own behalf and on Your sole responsibility, not on behalf
173
+ of any other Contributor, and only if You agree to indemnify,
174
+ defend, and hold each Contributor harmless for any liability
175
+ incurred by, or claims asserted against, such Contributor by reason
176
+ of your accepting any such warranty or additional liability.
177
+
178
+ END OF TERMS AND CONDITIONS
179
+
180
+ APPENDIX: How to apply the Apache License to your work.
181
+
182
+ To apply the Apache License to your work, attach the following
183
+ boilerplate notice, with the fields enclosed by brackets "[]"
184
+ replaced with your own identifying information. (Don't include
185
+ the brackets!) The text should be enclosed in the appropriate
186
+ comment syntax for the file format. We also recommend that a
187
+ file or class name and description of purpose be included on the
188
+ same "printed page" as the copyright notice for easier
189
+ identification within third-party archives.
190
+
191
+ Copyright [yyyy] [name of copyright owner]
192
+
193
+ Licensed under the Apache License, Version 2.0 (the "License");
194
+ you may not use this file except in compliance with the License.
195
+ You may obtain a copy of the License at
196
+
197
+ http://www.apache.org/licenses/LICENSE-2.0
198
+
199
+ Unless required by applicable law or agreed to in writing, software
200
+ distributed under the License is distributed on an "AS IS" BASIS,
201
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
202
+ See the License for the specific language governing permissions and
203
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,68 @@
1
+ NuGram Hosted Server client APIs
2
+ ================================
3
+
4
+ This repository provides the Ruby client API to the NuGram Hosted Server in various languages. It is based on the Ruby library available at https://github.com/nuecho/nugramserver-clients.
5
+
6
+ NuGram Hosted Server (www.grammarserver.com) is a free hosted service for the management of static and dynamic grammars, courtesy of Nu Echo Inc. It can be used to generate dynamic grammars, and interpret textual sentences.
7
+
8
+ Installation
9
+ ------------
10
+
11
+ gem install nugramserver-ruby
12
+
13
+ Example
14
+ -------
15
+
16
+ Say you want to create a dynamically-generated grammar for a simple voice-dialing application. The grammar template, hosted on www.grammarserver.com, could look like the following:
17
+
18
+ ### voicedialing.abnf (ABNF template grammar)
19
+ #ABNF 1.0;
20
+
21
+ language en-US;
22
+ mode voice;
23
+ root $voicedialing;
24
+
25
+ public $voicedialog =
26
+ [$politeness]
27
+ @for (entry : entries)
28
+ ( [@word entry.firstname] @word entry.lastname
29
+ @tag "out.id = '" entry.id "'" @end )
30
+ @end
31
+ [please]
32
+ ;
33
+
34
+ $politeness =
35
+ (I would | I'd) like to (speak with| talk to)
36
+ | give me
37
+ ;
38
+
39
+ And the code to instantiate the grammar would look like:
40
+
41
+ ### app.rb (Ruby)
42
+
43
+ require 'nugramserver-ruby'
44
+ server = GrammarServer.new()
45
+ session = server.create_session("username", "password")
46
+ grammar = session.instantiate("voicedialing.abnf",
47
+ {'entries' =>
48
+ [{'firstname' => "John", 'lastname' => 'Doe', 'id' => '1234'},
49
+ {'firstname' => "Bill", 'lastname' => 'Smith', 'id' => '4321'}]})
50
+ puts "grammar url = ", grammar.get_url('grxml')
51
+ # ....
52
+ # When you are done with the grammar...
53
+ session.disconnect
54
+
55
+ Supported languages
56
+ -------------------
57
+
58
+ The supported languages are currently:
59
+
60
+ - Ruby/JRuby
61
+
62
+ Contact Info
63
+ ------------
64
+
65
+ For any question or request, contact the NuGram team at nugram-support@nuecho.com. The NuGram Platform website is http://nugram.nuecho.com
66
+
67
+ The Nu Echo team
68
+
@@ -0,0 +1 @@
1
+ require 'nugramserver-ruby/nugramserver-ruby'
@@ -0,0 +1,184 @@
1
+ # NuGram Hosted Server client API in Ruby
2
+ #
3
+ # This code relies on the 'json' Ruby gem.
4
+ #
5
+ # Copyright (C) 2009, 2010 Nu Echo Inc.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions.
13
+
14
+ require 'rubygems'
15
+ require 'json'
16
+ require 'net/http'
17
+ require 'uri'
18
+
19
+
20
+ DEFAULT_SERVER_HOST = "www.grammarserver.com"
21
+ DEFAULT_SERVER_PORT = 8082
22
+
23
+ ## An object of this class acts as a proxy to NuGram Hosted Server.
24
+ class GrammarServer
25
+
26
+ attr_reader :host, :port
27
+
28
+ def initialize(host=DEFAULT_SERVER_HOST, port=DEFAULT_SERVER_PORT)
29
+ @host = host
30
+ @port = port
31
+ end
32
+
33
+ def get_url
34
+ "http://#{@host}:#{@port}"
35
+ end
36
+
37
+ def create_session(username, password)
38
+ GrammarServerSession.new(self, username, password)
39
+ end
40
+
41
+ end
42
+
43
+ ## This class represents a session with NuGram Hosted Server.
44
+
45
+ class GrammarServerSession
46
+
47
+ attr_reader :server, :username, :password
48
+
49
+ def initialize(server, username, password)
50
+ @server = server
51
+ @username = username
52
+ @password = password
53
+ @sessionid = self.connect
54
+ end
55
+
56
+ ## Returns the session ID
57
+ def get_id
58
+ @sessionid
59
+ end
60
+
61
+ def connect
62
+ Net::HTTP.start(@server.host, @server.port) {|http|
63
+ req = Net::HTTP::Post.new('/session')
64
+ req.body= "responseFormat=json"
65
+ req.basic_auth @username, @password
66
+ response = http.request(req)
67
+ case response
68
+ when Net::HTTPSuccess then
69
+ result = JSON.parse(response.body)
70
+ result['session']['id']
71
+ else
72
+ response.error!
73
+ end
74
+ }
75
+ end
76
+
77
+ ## Terminates the session with NuGram Hosted Server
78
+ def disconnect
79
+ Net::HTTP.start(@server.host, @server.port) {|http|
80
+ req = Net::HTTP::Delete.new("/session/#{@sessionid}")
81
+ req.basic_auth @username, @password
82
+ response = http.request(req)
83
+ }
84
+ end
85
+
86
+ ## This method uploads a source grammar to NuGram Hosted Server.
87
+ def upload(grammarPath, content)
88
+ Net::HTTP.start(@server.host, @server.port) {|http|
89
+ req = Net::HTTP::Put.new("/grammar/#{grammarPath}")
90
+ req.body= content
91
+ req.basic_auth @username, @password
92
+ response = http.request(req)
93
+ case response
94
+ when Net::HTTPSuccess then
95
+ true
96
+ else
97
+ response.error!
98
+ end
99
+ }
100
+ end
101
+
102
+ ## This method requests NuGram Hosted Server to load a static grammar.
103
+ def load(grammarPath)
104
+ instantiate(grammarPath, {})
105
+ end
106
+
107
+ ## This method instantiates a dynamic grammar and loads it.
108
+ ## The 'context' argument is expected to be a hash (dictionary) that
109
+ ## maps strings to values. Each value must be convertible to standard JSON.
110
+ ## Each key in the context must correspond to the name of a variable in the
111
+ ## ABNF template.
112
+ def instantiate(grammarPath, context)
113
+ Net::HTTP.start(@server.host, @server.port) {|http|
114
+ req = Net::HTTP::Post.new("/grammar/#{@sessionid}/#{grammarPath}")
115
+ body = URI.escape(context.to_json)
116
+ req.body= "responseFormat=json&context=#{context.to_json}"
117
+ req.basic_auth @username, @password
118
+ response = http.request(req)
119
+ case response
120
+ when Net::HTTPSuccess then
121
+ result = JSON.parse(response.body)
122
+ InstantiatedGrammar.new(self, result['grammar'])
123
+ else
124
+ response.error!
125
+ end
126
+ }
127
+ end
128
+
129
+ end
130
+
131
+
132
+ ## Objects of this class act as proxy for instantiated grammars on NuGram Hosted Server.
133
+
134
+ class InstantiatedGrammar
135
+
136
+ def initialize(session, data)
137
+ @session = session
138
+ @data = data
139
+ end
140
+
141
+ ## Returns the URL of the grammar
142
+ def get_url (extension = 'abnf')
143
+ grammarUrl = @data['grammarUrl']
144
+ "#{grammarUrl}.#{extension}"
145
+ end
146
+
147
+ ## Retrieves the source representation of the grammar in the
148
+ ## requested format ('abnf', 'grxml', or 'gsl')
149
+ def get_content (extension = 'abnf')
150
+ url = URI.parse(self.get_url(extension))
151
+ Net::HTTP.start(url.host, url.port) {|http|
152
+ req = Net::HTTP::Get.new(url.path)
153
+ response = http.request(req)
154
+ case response
155
+ when Net::HTTPSuccess then
156
+ response.body
157
+ else
158
+ response.error!
159
+ end
160
+ }
161
+ end
162
+
163
+ ## Computes the semantic interpretation of the given sentence
164
+ ## (which must a string). Returns a Python object of 'False' if
165
+ ## the sentence cannot be parsed by the grammar.
166
+ def interpret(sentence)
167
+ url = URI.parse(@data['interpreterUrl'])
168
+ sentence = URI.escape(sentence)
169
+ Net::HTTP.start(url.host, url.port) {|http|
170
+ req = Net::HTTP::Post.new(url.path)
171
+ req.body= "responseFormat=json&sentence=#{sentence}"
172
+ req.basic_auth @session.username, @session.password
173
+ response = http.request(req)
174
+ case response
175
+ when Net::HTTPSuccess then
176
+ JSON.parse(response.body)['interpretation']
177
+ else
178
+ response.error!
179
+ end
180
+ }
181
+ end
182
+
183
+ end
184
+
@@ -0,0 +1,46 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ # These tests are all local unit tests
4
+ #FakeWeb.allow_net_connect = false
5
+
6
+ describe "NugramserverRuby" do
7
+ before(:all) do
8
+ # Define our Nu Echo Grammar Server credentials
9
+ @username = 'rubygem'
10
+ @password = 'nuechorox!'
11
+
12
+ # Authentication resource
13
+ FakeWeb.register_uri(:post,
14
+ "http://#{@username}:#{@password}@www.grammarserver.com:8082/session",
15
+ :content_type => 'application/json',
16
+ :status => ["200", "Ok"],
17
+ :body => "{\"session\": {\"id\":\"524DC3C5041FC48DD27E\"}}")
18
+
19
+ # Create a new grammar
20
+ # FakeWeb.register_uri(:post,
21
+ # "http://#{@username}:#{@password}@www.grammarserver.com:8082/grammar/524DC3C5041FC48DD27E/voicedialing.abnf",
22
+ # :content_type => 'application/json',
23
+ # :status => ["200", "Ok"],
24
+ # :body => "{\"session\": {\"id\":\"524DC3C5041FC48DD27E\"}}")
25
+
26
+ @grammar_server = GrammarServer.new
27
+ end
28
+
29
+ it "should create a GrammarServer object" do
30
+ @grammar_server.instance_of?(GrammarServer).should == true
31
+ end
32
+
33
+ it "should create a new Nugram Grammar Server session" do
34
+ session = @grammar_server.create_session(@username, @password)
35
+ end
36
+
37
+ it "should create a grammar" do
38
+ pending()
39
+ session = @grammar_server.create_session(@username, @password)
40
+ grammar = session.instantiate("voicedialing.abnf",
41
+ { 'entries' =>
42
+ [{ 'firstname' => "John", 'lastname' => 'Doe', 'id' => '1234' },
43
+ { 'firstname' => "Bill", 'lastname' => 'Smith', 'id' => '4321' }] })
44
+ p grammar
45
+ end
46
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'nugramserver-ruby'
5
+ require 'fakeweb'
6
+
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+
13
+ end
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nugramserver-ruby
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - NuEcho
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-04 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ type: :runtime
22
+ name: json
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ requirement: *id001
31
+ prerelease: false
32
+ - !ruby/object:Gem::Dependency
33
+ type: :development
34
+ name: rspec
35
+ version_requirements: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 2
41
+ - 1
42
+ - 0
43
+ version: 2.1.0
44
+ requirement: *id002
45
+ prerelease: false
46
+ - !ruby/object:Gem::Dependency
47
+ type: :development
48
+ name: yard
49
+ version_requirements: &id003 !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ - 6
56
+ - 0
57
+ version: 0.6.0
58
+ requirement: *id003
59
+ prerelease: false
60
+ - !ruby/object:Gem::Dependency
61
+ type: :development
62
+ name: bundler
63
+ version_requirements: &id004 !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 1
69
+ - 0
70
+ - 0
71
+ version: 1.0.0
72
+ requirement: *id004
73
+ prerelease: false
74
+ - !ruby/object:Gem::Dependency
75
+ type: :development
76
+ name: jeweler
77
+ version_requirements: &id005 !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ~>
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 1
83
+ - 5
84
+ - 1
85
+ version: 1.5.1
86
+ requirement: *id005
87
+ prerelease: false
88
+ - !ruby/object:Gem::Dependency
89
+ type: :development
90
+ name: rcov
91
+ version_requirements: &id006 !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ segments:
96
+ - 0
97
+ version: "0"
98
+ requirement: *id006
99
+ prerelease: false
100
+ - !ruby/object:Gem::Dependency
101
+ type: :runtime
102
+ name: json
103
+ version_requirements: &id007 !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ requirement: *id007
111
+ prerelease: false
112
+ - !ruby/object:Gem::Dependency
113
+ type: :development
114
+ name: rspec
115
+ version_requirements: &id008 !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ segments:
120
+ - 0
121
+ version: "0"
122
+ requirement: *id008
123
+ prerelease: false
124
+ description: ""
125
+ email: nugram-support@nuecho.com
126
+ executables: []
127
+
128
+ extensions: []
129
+
130
+ extra_rdoc_files:
131
+ - LICENSE.txt
132
+ - README.md
133
+ files:
134
+ - lib/nugramserver-ruby.rb
135
+ - lib/nugramserver-ruby/nugramserver-ruby.rb
136
+ - LICENSE.txt
137
+ - README.md
138
+ has_rdoc: true
139
+ homepage: http://github.com/jsgoecke/nugramserver-ruby
140
+ licenses:
141
+ - Apache 2.0
142
+ post_install_message:
143
+ rdoc_options: []
144
+
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ requirements: []
162
+
163
+ rubyforge_project:
164
+ rubygems_version: 1.3.6
165
+ signing_key:
166
+ specification_version: 3
167
+ summary: NuGram Hosted Server client APIs
168
+ test_files:
169
+ - spec/nugramserver-ruby_spec.rb
170
+ - spec/spec_helper.rb