rugroupy-server 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/LICENSE.txt +20 -0
  2. data/README.rdoc +42 -0
  3. data/lib/rugroupy/server.rb +121 -0
  4. metadata +271 -0
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Ryan Wynn
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.rdoc ADDED
@@ -0,0 +1,42 @@
1
+ = rugroupy-server
2
+
3
+ rugroupy-server is a sinatra based server allowing one to interact with the rugroupy library
4
+ over http.
5
+
6
+ == features
7
+ * requests and responses use JSON
8
+ * GET, PUT, DELETE /entity to retrieve, create, or delete entities
9
+ * PUT, DELETE /entity/tags to tag or untag entities
10
+ * GET /entity/similiar to find entities similiar to a given entity sorted by score
11
+ * GET, POST /group to retrieve most similiar entities or initiate a grouping request
12
+
13
+ == Examples
14
+
15
+ See http://github.com/rwynn/rugroupy-server/tree/master/test
16
+
17
+ == Requirements
18
+
19
+ * rubgroupy http://github.com/rwynn/rugroupy
20
+ * sinatra https://github.com/sinatra/sinatra/
21
+ * sinatra-mongo https://github.com/technicalpickles/sinatra-mongo
22
+ * JSON https://github.com/flori/json
23
+
24
+ == Install
25
+
26
+ * sudo gem install rugroupy-server
27
+
28
+ == Contributing to rugroupy-server
29
+
30
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
31
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
32
+ * Fork the project
33
+ * Start a feature/bugfix branch
34
+ * Commit and push until you are happy with your contribution
35
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
36
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
37
+
38
+ == Copyright
39
+
40
+ Copyright (c) 2011 Ryan Wynn. See LICENSE.txt for
41
+ further details.
42
+
@@ -0,0 +1,121 @@
1
+ require 'rubygems'
2
+ require 'sinatra/base'
3
+ require 'sinatra/mongo'
4
+ require 'rugroupy'
5
+ require 'json'
6
+
7
+ module ApplicationHelper
8
+
9
+ def get_entity(params, create=false)
10
+ e_json = self.get_entity_json(params)
11
+ e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create)
12
+ e.get
13
+ end
14
+
15
+ def get_entity_json(params)
16
+ JSON.parse(params[:entity])
17
+ end
18
+
19
+ def get_entity_similiar(params)
20
+ e_json = self.get_entity_json(params)
21
+ e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create=false)
22
+ e.similiar(e_json["tag"], e_json["skip"], e_json["limit"], e_json["reverse"])
23
+ end
24
+
25
+ def delete_entity(params)
26
+ e_json = self.get_entity_json(params)
27
+ e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create=create)
28
+ e.delete
29
+ end
30
+
31
+ def tag_entity(params, create=true)
32
+ e_json = self.get_entity_json(params)
33
+ e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create=create)
34
+ e_json["tags"].each_pair do |name, value|
35
+ create ? e.tag(name, value) : e.untag(name, value)
36
+ end
37
+ e.get
38
+ end
39
+
40
+ def group_entities(params)
41
+ e_json = self.get_entity_json(params)
42
+ g = Groupy::EntityGrouper.new(mongo, e_json["name"])
43
+ options = {:includeFunction => e_json["include_function"],
44
+ :scoreFunction => e_json["score_function"],
45
+ :dynamicTagFunction => e_json["dynamic_tag_function"]}
46
+ g.group(options)
47
+ end
48
+
49
+ def similiar_entities(params)
50
+ e_json = self.get_entity_json(params)
51
+ g = Groupy::EntityGrouper.new(mongo, e_json["name"])
52
+ g.similiar(e_json["tag"], e_json["skip"], e_json["limit"], e_json["reverse"])
53
+ end
54
+
55
+ end
56
+
57
+ class Application < Sinatra::Base
58
+ include ApplicationHelper
59
+ register Sinatra::MongoExtension
60
+ set :app_file, __FILE__
61
+ set :mongo, 'mongo://localhost:27017/test'
62
+
63
+ before do
64
+ headers "Content-Type" => "application/json; charset=UTF-8"
65
+ end
66
+
67
+ get '/entity' do
68
+ response = Hash[:success => true, :entity => self.get_entity(params)]
69
+ halt 404, JSON.generate({:success => false,
70
+ :message => "not found"}) if not response[:entity]
71
+ JSON.generate(response)
72
+ end
73
+
74
+ put '/entity' do
75
+ response = Hash[:success => true, :entity => self.get_entity(params, true)]
76
+ halt 500, JSON.generate({:success => false,
77
+ :message => "unable to create entity"}) if not response[:entity]
78
+ status 201
79
+ JSON.generate(response)
80
+ end
81
+
82
+ delete '/entity' do
83
+ response = Hash[:success => true]
84
+ self.delete_entity(params)
85
+ JSON.generate(response)
86
+ end
87
+
88
+ put '/entity/tags' do
89
+ response = Hash[:success => true, :entity => self.tag_entity(params, true)]
90
+ halt 500, JSON.generate({:success => false,
91
+ :message => "unable to create entity tag"}) if not response[:entity]
92
+ JSON.generate(response)
93
+ end
94
+
95
+ delete '/entity/tags' do
96
+ response = Hash[:success => true, :entity => self.tag_entity(params, false)]
97
+ halt 500, JSON.generate({:success => false,
98
+ :message => "unable to remove entity tag"}) if not response[:entity]
99
+ JSON.generate(response)
100
+ end
101
+
102
+ get '/entity/similiar' do
103
+ response = Hash[:success => true, :results => self.get_entity_similiar(params)]
104
+ JSON.generate(response)
105
+ end
106
+
107
+ get '/group' do
108
+ response = Hash[:success => true,
109
+ :results => self.similiar_entities(params)]
110
+ JSON.generate(response)
111
+ end
112
+
113
+ post '/group' do
114
+ self.group_entities(params)
115
+ response = Hash[:success => true,
116
+ :result => self.similiar_entities(params)]
117
+ JSON.generate(response)
118
+ end
119
+
120
+ run! if app_file == $0
121
+ end
metadata ADDED
@@ -0,0 +1,271 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rugroupy-server
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Ryan Wynn
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-08-17 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ requirement: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ version_requirements: *id001
31
+ name: shoulda
32
+ prerelease: false
33
+ type: :development
34
+ - !ruby/object:Gem::Dependency
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ hash: 23
41
+ segments:
42
+ - 1
43
+ - 0
44
+ - 0
45
+ version: 1.0.0
46
+ version_requirements: *id002
47
+ name: bundler
48
+ prerelease: false
49
+ type: :development
50
+ - !ruby/object:Gem::Dependency
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ hash: 7
57
+ segments:
58
+ - 1
59
+ - 6
60
+ - 4
61
+ version: 1.6.4
62
+ version_requirements: *id003
63
+ name: jeweler
64
+ prerelease: false
65
+ type: :development
66
+ - !ruby/object:Gem::Dependency
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ version_requirements: *id004
77
+ name: rcov
78
+ prerelease: false
79
+ type: :development
80
+ - !ruby/object:Gem::Dependency
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 19
87
+ segments:
88
+ - 1
89
+ - 2
90
+ - 6
91
+ version: 1.2.6
92
+ version_requirements: *id005
93
+ name: sinatra
94
+ prerelease: false
95
+ type: :development
96
+ - !ruby/object:Gem::Dependency
97
+ requirement: &id006 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 27
103
+ segments:
104
+ - 0
105
+ - 1
106
+ - 0
107
+ version: 0.1.0
108
+ version_requirements: *id006
109
+ name: sinatra-mongo
110
+ prerelease: false
111
+ type: :development
112
+ - !ruby/object:Gem::Dependency
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 5
119
+ segments:
120
+ - 1
121
+ - 5
122
+ - 3
123
+ version: 1.5.3
124
+ version_requirements: *id007
125
+ name: json
126
+ prerelease: false
127
+ type: :development
128
+ - !ruby/object:Gem::Dependency
129
+ requirement: &id008 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ hash: 19
135
+ segments:
136
+ - 0
137
+ - 7
138
+ - 8
139
+ version: 0.7.8
140
+ version_requirements: *id008
141
+ name: httparty
142
+ prerelease: false
143
+ type: :development
144
+ - !ruby/object:Gem::Dependency
145
+ requirement: &id009 !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 27
151
+ segments:
152
+ - 0
153
+ - 1
154
+ - 0
155
+ version: 0.1.0
156
+ version_requirements: *id009
157
+ name: rugroupy
158
+ prerelease: false
159
+ type: :development
160
+ - !ruby/object:Gem::Dependency
161
+ requirement: &id010 !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ hash: 25
167
+ segments:
168
+ - 1
169
+ - 3
170
+ - 1
171
+ version: 1.3.1
172
+ version_requirements: *id010
173
+ name: mongo
174
+ prerelease: false
175
+ type: :development
176
+ - !ruby/object:Gem::Dependency
177
+ requirement: &id011 !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ hash: 25
183
+ segments:
184
+ - 1
185
+ - 3
186
+ - 1
187
+ version: 1.3.1
188
+ version_requirements: *id011
189
+ name: bson
190
+ prerelease: false
191
+ type: :development
192
+ - !ruby/object:Gem::Dependency
193
+ requirement: &id012 !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ hash: 25
199
+ segments:
200
+ - 1
201
+ - 3
202
+ - 1
203
+ version: 1.3.1
204
+ version_requirements: *id012
205
+ name: bson_ext
206
+ prerelease: false
207
+ type: :development
208
+ - !ruby/object:Gem::Dependency
209
+ requirement: &id013 !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 25
215
+ segments:
216
+ - 1
217
+ - 2
218
+ - 3
219
+ version: 1.2.3
220
+ version_requirements: *id013
221
+ name: SystemTimer
222
+ prerelease: false
223
+ type: :development
224
+ description: a sinatra based server which enables a http interface to rugroupy
225
+ email: ryan.m.wynn@gmail.com
226
+ executables: []
227
+
228
+ extensions: []
229
+
230
+ extra_rdoc_files:
231
+ - LICENSE.txt
232
+ - README.rdoc
233
+ files:
234
+ - lib/rugroupy/server.rb
235
+ - LICENSE.txt
236
+ - README.rdoc
237
+ homepage: http://github.com/rwynn/rugroupy-server
238
+ licenses:
239
+ - MIT
240
+ post_install_message:
241
+ rdoc_options: []
242
+
243
+ require_paths:
244
+ - lib
245
+ required_ruby_version: !ruby/object:Gem::Requirement
246
+ none: false
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ hash: 3
251
+ segments:
252
+ - 0
253
+ version: "0"
254
+ required_rubygems_version: !ruby/object:Gem::Requirement
255
+ none: false
256
+ requirements:
257
+ - - ">="
258
+ - !ruby/object:Gem::Version
259
+ hash: 3
260
+ segments:
261
+ - 0
262
+ version: "0"
263
+ requirements: []
264
+
265
+ rubyforge_project:
266
+ rubygems_version: 1.8.6
267
+ signing_key:
268
+ specification_version: 3
269
+ summary: an http interface to rugroupy
270
+ test_files: []
271
+