visiquery 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/library/visiquery.rb +20 -0
- data/library/visiquery/ban-reason.rb +38 -0
- data/library/visiquery/client.rb +79 -0
- data/library/visiquery/user.rb +53 -0
- metadata +76 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 831931af26d5b4fd59084d25981c1a67dba82d5e
|
4
|
+
data.tar.gz: 3136537b1324602808c49fa5125d3acd58246091
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6ad13ed47dfa02c5cc5731cd5d6479e4aed6995b8901429a92069ff9830ebd073958099dc168739be2c2c65ebc6d16fe0f350dd3d4b11e7cba666770b743cc83
|
7
|
+
data.tar.gz: 82db6dfdfbb47130547b3086e411bec82dc00a299c10935010af235234e1e268b31690031cb1b9aaf49aa459c08999c1435efeb2a0f5f513de9a6f43af8ff9d4
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'oj'
|
4
|
+
require 'uri'
|
5
|
+
require 'date'
|
6
|
+
require 'bundler'
|
7
|
+
require 'net/http'
|
8
|
+
require 'multi_json'
|
9
|
+
|
10
|
+
require 'visiquery/user'
|
11
|
+
require 'visiquery/client'
|
12
|
+
require 'visiquery/ban-reason'
|
13
|
+
|
14
|
+
Bundler.setup :default
|
15
|
+
|
16
|
+
module VisiQuery
|
17
|
+
Version = "0.1.0"
|
18
|
+
|
19
|
+
class VisiBaseError < StandardError; end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module VisiQuery
|
4
|
+
class BanReason
|
5
|
+
attr_accessor :reason, :comment
|
6
|
+
attr_accessor :updated_at, :created_at, :expires_at
|
7
|
+
|
8
|
+
def self.from_json body
|
9
|
+
BanReason.new(body['user_name'], body['profile_id']).tap do |ban|
|
10
|
+
ban.reason = body['reason']
|
11
|
+
ban.comment = body['comment']
|
12
|
+
|
13
|
+
ban.created_at = DateTime.parse body['created_at']
|
14
|
+
ban.updated_at = DateTime.parse body['updated_at']
|
15
|
+
|
16
|
+
if body['expires_at']
|
17
|
+
ban.expires_at = DateTime.parse body['expires_at']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize name, id
|
23
|
+
@id = id
|
24
|
+
@name = name
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_hash
|
28
|
+
Hash.new.tap do |result|
|
29
|
+
result['profile_id'] = @id
|
30
|
+
result['user_name'] = @name if @name
|
31
|
+
|
32
|
+
result['reason'] = reason if reason
|
33
|
+
result['comment'] = comment if comment
|
34
|
+
result['expires_at'] = expires_at if expires_at
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module VisiQuery
|
4
|
+
class Client
|
5
|
+
VisiBaseHost = "visibase.uplink.io"
|
6
|
+
VisiBasePort = 80
|
7
|
+
|
8
|
+
def initialize host = VisiBaseHost, port = VisiBasePort
|
9
|
+
@http = Net::HTTP.new host, port
|
10
|
+
@http.start
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get a user by instance id, profile id, or username.
|
14
|
+
def user identifier
|
15
|
+
response = @http.get "/users/#{URI.escape identifier}.json"
|
16
|
+
|
17
|
+
if response.code.to_i == 200
|
18
|
+
body = ::MultiJson.load response.body
|
19
|
+
|
20
|
+
if message = body['error']
|
21
|
+
raise VisiBaseError, message
|
22
|
+
else
|
23
|
+
user = User.from_json body['accumulated']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get a ban reason by instance id, profile id, or username.
|
29
|
+
def ban_reason identifier
|
30
|
+
response = @http.get "/bans/#{URI.escape identifier}.json"
|
31
|
+
|
32
|
+
if response.code.to_i == 200
|
33
|
+
body = ::MultiJson.load response.body
|
34
|
+
|
35
|
+
if message = body['error']
|
36
|
+
raise VisiBaseError, message
|
37
|
+
else
|
38
|
+
user = BanReason.from_json body['accumulated']
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Publish changes to an object.
|
44
|
+
def publish object
|
45
|
+
case object
|
46
|
+
when User
|
47
|
+
publish_to '/users/create.json', :user, object
|
48
|
+
when BanReason
|
49
|
+
publish_to '/bans/create.json', :ban, object
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def close
|
54
|
+
@http.finish
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def publish_to path, param, object
|
60
|
+
response = @http.post path, url_encode(param, object)
|
61
|
+
|
62
|
+
if response.code.to_i == 200
|
63
|
+
body = ::MultiJson.dump response.body
|
64
|
+
|
65
|
+
unless body['error']
|
66
|
+
return object
|
67
|
+
else
|
68
|
+
raise VisiBaseError, body['error']
|
69
|
+
end
|
70
|
+
else
|
71
|
+
raise VisiBaseError, "Server returned #{response.code} #{response.message}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def url_encode param, object
|
76
|
+
URI.encode_www_form object.to_hash.map { |k, v| ["#{param}[#{k}]", v] }
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module VisiQuery
|
4
|
+
class User
|
5
|
+
Attributes = %w{real_name profile_text hours age facebook_name skype_name website residence}
|
6
|
+
|
7
|
+
attr_accessor :id, :name
|
8
|
+
attr_accessor :created_at, :updated_at, :first_login, :last_login
|
9
|
+
Attributes.each &method(:attr_accessor)
|
10
|
+
|
11
|
+
def self.from_json body
|
12
|
+
User.new(body['name'], body['profile_id']).tap do |user|
|
13
|
+
Attributes.each do |attribute|
|
14
|
+
user.instance_variable_set :"@#{attribute}", body[attribute]
|
15
|
+
end
|
16
|
+
|
17
|
+
user.created_at = DateTime.parse body['created_at']
|
18
|
+
user.updated_at = DateTime.parse body['updated_at']
|
19
|
+
|
20
|
+
if body['last_login']
|
21
|
+
user.last_login = DateTime.parse body['last_login']
|
22
|
+
end
|
23
|
+
|
24
|
+
if body['first_login']
|
25
|
+
user.first_login = DateTime.parse body['first_login']
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize name, id
|
31
|
+
@id = id.to_i
|
32
|
+
@name = name
|
33
|
+
end
|
34
|
+
|
35
|
+
RejectedVariables = %w{@created_at @updated_at}
|
36
|
+
|
37
|
+
def to_hash
|
38
|
+
variables = instance_variables.dup
|
39
|
+
variables.delete_if { |variable| RejectedVariables.include? variable.to_s }
|
40
|
+
|
41
|
+
Hash.new.tap do |result|
|
42
|
+
variables.each do |variable|
|
43
|
+
value = instance_variable_get variable
|
44
|
+
|
45
|
+
result[variable.to_s[1..-1]] = value if value
|
46
|
+
end
|
47
|
+
|
48
|
+
result['name'] = @name if @name
|
49
|
+
result['profile_id'] = @id
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: visiquery
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mikkel Kroman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: oj
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: multi_json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: |2
|
42
|
+
No description.
|
43
|
+
email: mk@uplink.io
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- library/visiquery.rb
|
49
|
+
- library/visiquery/user.rb
|
50
|
+
- library/visiquery/client.rb
|
51
|
+
- library/visiquery/ban-reason.rb
|
52
|
+
homepage:
|
53
|
+
licenses:
|
54
|
+
- ISC
|
55
|
+
metadata: {}
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- library
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
requirements: []
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 2.0.3
|
73
|
+
signing_key:
|
74
|
+
specification_version: 4
|
75
|
+
summary: No summary.
|
76
|
+
test_files: []
|