rugroupy-server 0.1.0 → 0.1.1
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.
- data/README.rdoc +14 -2
- data/lib/rugroupy/server.rb +103 -95
- data/lib/rugroupy/server_default.rb +9 -0
- metadata +5 -4
data/README.rdoc
CHANGED
@@ -3,16 +3,28 @@
|
|
3
3
|
rugroupy-server is a sinatra based server allowing one to interact with the rugroupy library
|
4
4
|
over http.
|
5
5
|
|
6
|
-
==
|
6
|
+
== Features
|
7
7
|
* requests and responses use JSON
|
8
8
|
* GET, PUT, DELETE /entity to retrieve, create, or delete entities
|
9
9
|
* PUT, DELETE /entity/tags to tag or untag entities
|
10
10
|
* GET /entity/similiar to find entities similiar to a given entity sorted by score
|
11
11
|
* GET, POST /group to retrieve most similiar entities or initiate a grouping request
|
12
12
|
|
13
|
+
== Usage
|
14
|
+
|
15
|
+
Extend Groupy::GroupyServer to configure mongo and other settings and then run it
|
16
|
+
|
17
|
+
require 'rugroupy/server'
|
18
|
+
class MyApp < Groupy::GroupyServer
|
19
|
+
register Sinatra::MongoExtension
|
20
|
+
set :mongo, 'mongo://localhost:27017/mongo_database_name'
|
21
|
+
# optionally set more things (port, etc.) according to http://www.sinatrarb.com/configuration.html
|
22
|
+
end
|
23
|
+
MyApp.run!
|
24
|
+
|
13
25
|
== Examples
|
14
26
|
|
15
|
-
See http://github.com/rwynn/rugroupy-server/tree/master/test
|
27
|
+
See http://github.com/rwynn/rugroupy-server/tree/master/test for example input/output to and from the server
|
16
28
|
|
17
29
|
== Requirements
|
18
30
|
|
data/lib/rugroupy/server.rb
CHANGED
@@ -4,118 +4,126 @@ require 'sinatra/mongo'
|
|
4
4
|
require 'rugroupy'
|
5
5
|
require 'json'
|
6
6
|
|
7
|
-
|
7
|
+
# Run the server like this by extending GroupyServer and calling run!
|
8
|
+
# require 'rugroupy/server'
|
9
|
+
# class MyApp < Groupy::GroupyServer
|
10
|
+
# register Sinatra::MongoExtension
|
11
|
+
# set :mongo, 'mongo://localhost:27017/test'
|
12
|
+
# optionally set more things (port, etc.) according to http://www.sinatrarb.com/configuration.html
|
13
|
+
# end
|
14
|
+
# MyApp.run!
|
15
|
+
|
16
|
+
module Groupy
|
17
|
+
module GroupyServerSupport
|
8
18
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
19
|
+
def get_entity(params, create=false)
|
20
|
+
e_json = self.get_entity_json(params)
|
21
|
+
e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create)
|
22
|
+
e.get
|
23
|
+
end
|
14
24
|
|
15
|
-
|
16
|
-
|
17
|
-
|
25
|
+
def get_entity_json(params)
|
26
|
+
JSON.parse(params[:entity])
|
27
|
+
end
|
18
28
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
29
|
+
def get_entity_similiar(params)
|
30
|
+
e_json = self.get_entity_json(params)
|
31
|
+
e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create=false)
|
32
|
+
e.similiar(e_json["tag"], e_json["skip"], e_json["limit"], e_json["reverse"])
|
33
|
+
end
|
24
34
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
35
|
+
def delete_entity(params)
|
36
|
+
e_json = self.get_entity_json(params)
|
37
|
+
e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create=create)
|
38
|
+
e.delete
|
39
|
+
end
|
30
40
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
41
|
+
def tag_entity(params, create=true)
|
42
|
+
e_json = self.get_entity_json(params)
|
43
|
+
e = Groupy::Entity.new(mongo, e_json['name'], e_json["id"], create=create)
|
44
|
+
e_json["tags"].each_pair do |name, value|
|
45
|
+
create ? e.tag(name, value) : e.untag(name, value)
|
46
|
+
end
|
47
|
+
e.get
|
36
48
|
end
|
37
|
-
e.get
|
38
|
-
end
|
39
49
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
50
|
+
def group_entities(params)
|
51
|
+
e_json = self.get_entity_json(params)
|
52
|
+
g = Groupy::EntityGrouper.new(mongo, e_json["name"])
|
53
|
+
options = {:includeFunction => e_json["include_function"],
|
54
|
+
:scoreFunction => e_json["score_function"],
|
55
|
+
:dynamicTagFunction => e_json["dynamic_tag_function"]}
|
56
|
+
g.group(options)
|
57
|
+
end
|
48
58
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
59
|
+
def similiar_entities(params)
|
60
|
+
e_json = self.get_entity_json(params)
|
61
|
+
g = Groupy::EntityGrouper.new(mongo, e_json["name"])
|
62
|
+
g.similiar(e_json["tag"], e_json["skip"], e_json["limit"], e_json["reverse"])
|
63
|
+
end
|
54
64
|
|
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
65
|
end
|
66
|
+
|
67
|
+
class GroupyServer < Sinatra::Base
|
68
|
+
include GroupyServerSupport
|
69
|
+
#register Sinatra::MongoExtension
|
70
|
+
#set :mongo, 'mongo://localhost:27017/test'
|
66
71
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
:message => "not found"}) if not response[:entity]
|
71
|
-
JSON.generate(response)
|
72
|
-
end
|
72
|
+
before do
|
73
|
+
headers "Content-Type" => "application/json; charset=UTF-8"
|
74
|
+
end
|
73
75
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
76
|
+
get '/entity' do
|
77
|
+
response = Hash[:success => true, :entity => self.get_entity(params)]
|
78
|
+
halt 404, JSON.generate({:success => false,
|
79
|
+
:message => "not found"}) if not response[:entity]
|
80
|
+
JSON.generate(response)
|
81
|
+
end
|
81
82
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
put '/entity' do
|
84
|
+
response = Hash[:success => true, :entity => self.get_entity(params, true)]
|
85
|
+
halt 500, JSON.generate({:success => false,
|
86
|
+
:message => "unable to create entity"}) if not response[:entity]
|
87
|
+
status 201
|
88
|
+
JSON.generate(response)
|
89
|
+
end
|
87
90
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
91
|
+
delete '/entity' do
|
92
|
+
response = Hash[:success => true]
|
93
|
+
self.delete_entity(params)
|
94
|
+
JSON.generate(response)
|
95
|
+
end
|
94
96
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
97
|
+
put '/entity/tags' do
|
98
|
+
response = Hash[:success => true, :entity => self.tag_entity(params, true)]
|
99
|
+
halt 500, JSON.generate({:success => false,
|
100
|
+
:message => "unable to create entity tag"}) if not response[:entity]
|
101
|
+
JSON.generate(response)
|
102
|
+
end
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
104
|
+
delete '/entity/tags' do
|
105
|
+
response = Hash[:success => true, :entity => self.tag_entity(params, false)]
|
106
|
+
halt 500, JSON.generate({:success => false,
|
107
|
+
:message => "unable to remove entity tag"}) if not response[:entity]
|
108
|
+
JSON.generate(response)
|
109
|
+
end
|
106
110
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
end
|
111
|
+
get '/entity/similiar' do
|
112
|
+
response = Hash[:success => true, :results => self.get_entity_similiar(params)]
|
113
|
+
JSON.generate(response)
|
114
|
+
end
|
112
115
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
end
|
116
|
+
get '/group' do
|
117
|
+
response = Hash[:success => true,
|
118
|
+
:results => self.similiar_entities(params)]
|
119
|
+
JSON.generate(response)
|
120
|
+
end
|
119
121
|
|
120
|
-
|
122
|
+
post '/group' do
|
123
|
+
self.group_entities(params)
|
124
|
+
response = Hash[:success => true,
|
125
|
+
:result => self.similiar_entities(params)]
|
126
|
+
JSON.generate(response)
|
127
|
+
end
|
128
|
+
end
|
121
129
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rugroupy-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Wynn
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-18 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
requirement: &id001 !ruby/object:Gem::Requirement
|
@@ -232,6 +232,7 @@ extra_rdoc_files:
|
|
232
232
|
- README.rdoc
|
233
233
|
files:
|
234
234
|
- lib/rugroupy/server.rb
|
235
|
+
- lib/rugroupy/server_default.rb
|
235
236
|
- LICENSE.txt
|
236
237
|
- README.rdoc
|
237
238
|
homepage: http://github.com/rwynn/rugroupy-server
|