defender 1.0.0beta1 → 1.0.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.
- data/README.md +10 -1
- data/lib/defender.rb +16 -0
- data/lib/defender/document.rb +42 -15
- data/lib/defender/version.rb +1 -1
- metadata +18 -4
data/README.md
CHANGED
|
@@ -22,6 +22,13 @@ spam and malicious content in the documents.
|
|
|
22
22
|
A document contains content to be analyzed by Defensio, or that has been
|
|
23
23
|
analyzed.
|
|
24
24
|
|
|
25
|
+
Before starting to use Defender, you need to retrieve an API key from
|
|
26
|
+
[Defensio][4]. After getting an API key, you need to let Defender know
|
|
27
|
+
what it is by doing something like this somewhere in your code (before
|
|
28
|
+
doing anything like saving documents):
|
|
29
|
+
|
|
30
|
+
Defender.api_key = 'my-api-key'
|
|
31
|
+
|
|
25
32
|
Submitting documents to Defensio is really easy. Here's a barebones
|
|
26
33
|
example:
|
|
27
34
|
|
|
@@ -122,11 +129,13 @@ This project uses [Semantic Versioning][sv].
|
|
|
122
129
|
Author
|
|
123
130
|
------
|
|
124
131
|
|
|
125
|
-
Henrik Hodne :: dvyjones@binaryhex.com :: @dvyjones
|
|
132
|
+
Henrik Hodne :: <dvyjones@binaryhex.com> :: @[dvyjones][5]
|
|
126
133
|
|
|
127
134
|
[0]: http://defensio.com
|
|
128
135
|
[1]: http://help.github.com/forking/
|
|
129
136
|
[2]: http://github.com/dvyjones/defender/issues
|
|
130
137
|
[3]: http://defensio.com/api
|
|
138
|
+
[4]: http://defensio.com/signup/
|
|
139
|
+
[5]: http://twitter.com/dvyjones
|
|
131
140
|
[sv]: http://semver.org
|
|
132
141
|
[cb]: http://wiki.github.com/dvyjones/defender/contributing
|
data/lib/defender.rb
CHANGED
|
@@ -21,4 +21,20 @@ module Defender
|
|
|
21
21
|
require 'defensio'
|
|
22
22
|
@defensio ||= Defensio.new(Defender.api_key, "Defender | #{VERSION} | Henrik Hodne | dvyjones@binaryhex.com")
|
|
23
23
|
end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Calls a defensio method and wraps in error handling.
|
|
27
|
+
#
|
|
28
|
+
# Returns false if the method failed, otherwise returns whatever the method returns
|
|
29
|
+
#
|
|
30
|
+
# @param [Symbol] method Which method to call.
|
|
31
|
+
# @return [false, Array(Fixnum, Hash)]
|
|
32
|
+
def self.call(method, *args)
|
|
33
|
+
code, data = defensio.send(method, *args)
|
|
34
|
+
if code == 200 && data['status'] == 'success'
|
|
35
|
+
[code, data]
|
|
36
|
+
else
|
|
37
|
+
false
|
|
38
|
+
end
|
|
39
|
+
end
|
|
24
40
|
end
|
data/lib/defender/document.rb
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
module Defender
|
|
2
|
+
##
|
|
3
|
+
# A document contains data to be analyzed by Defensio, or that has been
|
|
4
|
+
# analyzed.
|
|
2
5
|
class Document
|
|
3
6
|
##
|
|
4
7
|
# Whether the document should be published on your Web site or not.
|
|
@@ -38,15 +41,19 @@ module Defender
|
|
|
38
41
|
# content of the request (all of the data in the {#data} hash).
|
|
39
42
|
#
|
|
40
43
|
# @param [String] signature The signature of the document to retrieve
|
|
41
|
-
# @return [Document] The document to retrieve
|
|
44
|
+
# @return [Document,nil] The document to retrieve, or nil
|
|
42
45
|
def self.find(signature)
|
|
43
46
|
document = new
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
ret = Defender.call(:get_document, signature)
|
|
48
|
+
if ret
|
|
49
|
+
document.instance_variable_set(:@saved, true)
|
|
50
|
+
document.instance_variable_set(:@allow, ret.last['allow'])
|
|
51
|
+
document.instance_variable_set(:@signature, signature)
|
|
48
52
|
|
|
49
|
-
|
|
53
|
+
document
|
|
54
|
+
else
|
|
55
|
+
nil
|
|
56
|
+
end
|
|
50
57
|
end
|
|
51
58
|
|
|
52
59
|
##
|
|
@@ -71,19 +78,39 @@ module Defender
|
|
|
71
78
|
# this).
|
|
72
79
|
#
|
|
73
80
|
# @see #saved?
|
|
81
|
+
# @return [Boolean] Whether the save succeded or not.
|
|
74
82
|
def save
|
|
75
83
|
if saved?
|
|
76
|
-
|
|
84
|
+
ret = Defender.call(:put_document, @signature, {:allow => @allow})
|
|
77
85
|
else
|
|
78
|
-
|
|
79
|
-
@data.each { |k,v|
|
|
80
|
-
data[k.to_s.gsub('_','-')] = v.to_s
|
|
81
|
-
}
|
|
82
|
-
_code, data = Defender.defensio.post_document(@data)
|
|
83
|
-
@allow = data['allow']
|
|
84
|
-
@signature = data['signature']
|
|
85
|
-
@saved = true
|
|
86
|
+
ret = Defender.call(:post_document, self.class.normalize_data(@data))
|
|
86
87
|
end
|
|
88
|
+
return false if ret == false
|
|
89
|
+
return true if saved?
|
|
90
|
+
|
|
91
|
+
data = ret.last
|
|
92
|
+
@allow = data['allow']
|
|
93
|
+
@signature = data['signature']
|
|
94
|
+
|
|
95
|
+
@saved = true # This will also return true, since nothing failed as we got here
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
##
|
|
100
|
+
# Normalizes a data hash to submit to defensio.
|
|
101
|
+
#
|
|
102
|
+
# @param [Hash] hsh The hash to be normalized
|
|
103
|
+
# @return [Hash{String => String}] The normalized hash
|
|
104
|
+
def self.normalize_data(data)
|
|
105
|
+
normalized = {}
|
|
106
|
+
data.each { |key, value|
|
|
107
|
+
if value.respond_to?(:strftime)
|
|
108
|
+
value = value.strftime('%Y-%m-%d')
|
|
109
|
+
end
|
|
110
|
+
normalized[key.to_s.gsub('_','-')] = value.to_s
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
normalized
|
|
87
114
|
end
|
|
88
115
|
end
|
|
89
116
|
end
|
data/lib/defender/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: defender
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
prerelease:
|
|
4
|
+
prerelease: false
|
|
5
5
|
segments:
|
|
6
6
|
- 1
|
|
7
7
|
- 0
|
|
8
|
-
-
|
|
9
|
-
version: 1.0.
|
|
8
|
+
- 0
|
|
9
|
+
version: 1.0.0
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Henrik Hodne
|
|
@@ -14,7 +14,7 @@ autorequire:
|
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
16
|
|
|
17
|
-
date: 2010-04-
|
|
17
|
+
date: 2010-04-13 00:00:00 +02:00
|
|
18
18
|
default_executable:
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
@@ -59,6 +59,20 @@ dependencies:
|
|
|
59
59
|
version: 0.5.0
|
|
60
60
|
type: :development
|
|
61
61
|
version_requirements: *id003
|
|
62
|
+
- !ruby/object:Gem::Dependency
|
|
63
|
+
name: cucumber
|
|
64
|
+
prerelease: false
|
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - ~>
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
segments:
|
|
70
|
+
- 0
|
|
71
|
+
- 6
|
|
72
|
+
- 0
|
|
73
|
+
version: 0.6.0
|
|
74
|
+
type: :development
|
|
75
|
+
version_requirements: *id004
|
|
62
76
|
description: A wrapper of the Defensio spam filtering service.
|
|
63
77
|
email:
|
|
64
78
|
- henrik.hodne@binaryhex.com
|