defender 0.2.0 → 1.0.0beta1

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.
@@ -0,0 +1,3 @@
1
+ module Defender
2
+ VERSION = '1.0.0beta1'
3
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defender
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ prerelease: true
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0beta1
9
+ version: 1.0.0beta1
5
10
  platform: ruby
6
11
  authors:
7
12
  - Henrik Hodne
@@ -9,104 +14,97 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-01-20 00:00:00 +01:00
17
+ date: 2010-04-06 00:00:00 +02:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: httparty
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
21
+ name: defensio
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ~>
22
26
  - !ruby/object:Gem::Version
23
- version: 0.4.3
24
- version:
27
+ segments:
28
+ - 0
29
+ - 9
30
+ - 1
31
+ version: 0.9.1
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: rspec
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ~>
32
40
  - !ruby/object:Gem::Version
33
- version: 1.2.9
34
- version:
41
+ segments:
42
+ - 1
43
+ - 3
44
+ - 0
45
+ version: 1.3.0
46
+ type: :development
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: yard
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ~>
42
54
  - !ruby/object:Gem::Version
43
- version: 0.4.0
44
- version:
45
- - !ruby/object:Gem::Dependency
46
- name: fakeweb
55
+ segments:
56
+ - 0
57
+ - 5
58
+ - 0
59
+ version: 0.5.0
47
60
  type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 1.2.7
54
- version:
61
+ version_requirements: *id003
55
62
  description: A wrapper of the Defensio spam filtering service.
56
- email: henrik.hodne@binaryhex.com
63
+ email:
64
+ - henrik.hodne@binaryhex.com
57
65
  executables: []
58
66
 
59
67
  extensions: []
60
68
 
61
- extra_rdoc_files:
62
- - LICENSE
63
- - README.rdoc
69
+ extra_rdoc_files: []
70
+
64
71
  files:
65
- - .document
66
- - .gitignore
67
- - LICENSE
68
- - README.rdoc
69
- - Rakefile
70
- - VERSION
71
- - defender.gemspec
72
- - lib/defender.rb
73
72
  - lib/defender/document.rb
74
- - lib/defender/statistics.rb
75
- - spec/defender_spec.rb
76
- - spec/document_spec.rb
77
- - spec/spec.opts
78
- - spec/spec_helper.rb
79
- - spec/statistics_spec.rb
73
+ - lib/defender/version.rb
74
+ - lib/defender.rb
75
+ - LICENSE
76
+ - README.md
80
77
  has_rdoc: true
81
78
  homepage: http://github.com/dvyjones/defender
82
79
  licenses: []
83
80
 
84
81
  post_install_message:
85
- rdoc_options:
86
- - --charset=UTF-8
82
+ rdoc_options: []
83
+
87
84
  require_paths:
88
85
  - lib
89
86
  required_ruby_version: !ruby/object:Gem::Requirement
90
87
  requirements:
91
88
  - - ">="
92
89
  - !ruby/object:Gem::Version
90
+ segments:
91
+ - 0
93
92
  version: "0"
94
- version:
95
93
  required_rubygems_version: !ruby/object:Gem::Requirement
96
94
  requirements:
97
95
  - - ">="
98
96
  - !ruby/object:Gem::Version
99
- version: "0"
100
- version:
97
+ segments:
98
+ - 1
99
+ - 3
100
+ - 6
101
+ version: 1.3.6
101
102
  requirements: []
102
103
 
103
104
  rubyforge_project:
104
- rubygems_version: 1.3.5
105
+ rubygems_version: 1.3.6
105
106
  signing_key:
106
107
  specification_version: 3
107
108
  summary: Ruby API wrapper for Defensio
108
- test_files:
109
- - spec/spec_helper.rb
110
- - spec/document_spec.rb
111
- - spec/defender_spec.rb
112
- - spec/statistics_spec.rb
109
+ test_files: []
110
+
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,23 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
- doc
21
- .yardoc
22
-
23
- ## PROJECT::SPECIFIC
data/README.rdoc DELETED
@@ -1,22 +0,0 @@
1
- = defender
2
-
3
- This is a Ruby wrapper of the Defensio[http://defensio.com] spam filtering API. To use this library, you need an API key from Defensio. Go ahead and {get one}[http://defensio.com/signup/].
4
-
5
- Thanks to Defensio for the excellent documentation, the documentation in the code is more or less copied from them.
6
-
7
- Defender follows the {Semantic Versioning}[http://semver.org/] spec.
8
-
9
- == Note on Patches/Pull Requests
10
-
11
- * Fork the project.
12
- * Make your feature addition or bug fix.
13
- * Add tests for it. This is important so I don't break it in a
14
- future version unintentionally.
15
- * Commit, do not mess with rakefile, version, or history.
16
- (if you want to have your own version, that is fine but
17
- bump version in a commit by itself I can ignore when I pull)
18
- * Send me a pull request. Bonus points for topic branches.
19
-
20
- == Copyright
21
-
22
- Copyright (c) 2009-2010 Henrik Hodne. See LICENSE for details.
data/Rakefile DELETED
@@ -1,74 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "defender"
8
- gem.summary = %Q{Ruby API wrapper for Defensio}
9
- gem.description = %Q{A wrapper of the Defensio spam filtering service.}
10
- gem.email = "henrik.hodne@binaryhex.com"
11
- gem.homepage = "http://github.com/dvyjones/defender"
12
- gem.authors = ["Henrik Hodne"]
13
- gem.add_dependency "httparty", "~> 0.4.3"
14
- gem.add_development_dependency "rspec", "~> 1.2.9"
15
- gem.add_development_dependency "yard", "~> 0.4.0"
16
- gem.add_development_dependency "fakeweb", "~> 1.2.7"
17
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
- end
19
- Jeweler::GemcutterTasks.new
20
- rescue LoadError
21
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
22
- end
23
-
24
- require 'spec/rake/spectask'
25
- Spec::Rake::SpecTask.new(:spec) do |spec|
26
- spec.libs << 'lib' << 'spec'
27
- spec.spec_files = FileList['spec/**/*_spec.rb']
28
- end
29
-
30
- Spec::Rake::SpecTask.new(:rcov) do |spec|
31
- spec.libs << 'lib' << 'spec'
32
- spec.pattern = 'spec/**/*_spec.rb'
33
- spec.rcov = true
34
- end
35
-
36
- task :spec => :check_dependencies
37
-
38
- begin
39
- require 'reek/adapters/rake_task'
40
- Reek::RakeTask.new do |t|
41
- t.verbose = false
42
- t.source_files = 'lib/**/*.rb'
43
- end
44
- rescue LoadError
45
- task :reek do
46
- abort "Reek is not available. In order to run reek, you must: sudo gem install reek"
47
- end
48
- end
49
-
50
- begin
51
- require 'roodi'
52
- require 'roodi_task'
53
- RoodiTask.new do |t|
54
- t.verbose = false
55
- end
56
- rescue LoadError
57
- task :roodi do
58
- abort "Roodi is not available. In order to run roodi, you must: sudo gem install roodi"
59
- end
60
- end
61
-
62
- task :default => :spec
63
-
64
- begin
65
- require 'yard'
66
- YARD::Rake::YardocTask.new do |conf|
67
- #conf.options = ["-mmarkdown"]
68
- conf.files = ["lib/**/*.rb", "-", "LICENSE"]
69
- end
70
- rescue LoadError
71
- task :yard do
72
- abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
73
- end
74
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.2.0
data/defender.gemspec DELETED
@@ -1,70 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{defender}
8
- s.version = "0.2.0"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Henrik Hodne"]
12
- s.date = %q{2010-01-20}
13
- s.description = %q{A wrapper of the Defensio spam filtering service.}
14
- s.email = %q{henrik.hodne@binaryhex.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION",
26
- "defender.gemspec",
27
- "lib/defender.rb",
28
- "lib/defender/document.rb",
29
- "lib/defender/statistics.rb",
30
- "spec/defender_spec.rb",
31
- "spec/document_spec.rb",
32
- "spec/spec.opts",
33
- "spec/spec_helper.rb",
34
- "spec/statistics_spec.rb"
35
- ]
36
- s.homepage = %q{http://github.com/dvyjones/defender}
37
- s.rdoc_options = ["--charset=UTF-8"]
38
- s.require_paths = ["lib"]
39
- s.rubygems_version = %q{1.3.5}
40
- s.summary = %q{Ruby API wrapper for Defensio}
41
- s.test_files = [
42
- "spec/spec_helper.rb",
43
- "spec/document_spec.rb",
44
- "spec/defender_spec.rb",
45
- "spec/statistics_spec.rb"
46
- ]
47
-
48
- if s.respond_to? :specification_version then
49
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
50
- s.specification_version = 3
51
-
52
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
53
- s.add_runtime_dependency(%q<httparty>, ["~> 0.4.3"])
54
- s.add_development_dependency(%q<rspec>, ["~> 1.2.9"])
55
- s.add_development_dependency(%q<yard>, ["~> 0.4.0"])
56
- s.add_development_dependency(%q<fakeweb>, ["~> 1.2.7"])
57
- else
58
- s.add_dependency(%q<httparty>, ["~> 0.4.3"])
59
- s.add_dependency(%q<rspec>, ["~> 1.2.9"])
60
- s.add_dependency(%q<yard>, ["~> 0.4.0"])
61
- s.add_dependency(%q<fakeweb>, ["~> 1.2.7"])
62
- end
63
- else
64
- s.add_dependency(%q<httparty>, ["~> 0.4.3"])
65
- s.add_dependency(%q<rspec>, ["~> 1.2.9"])
66
- s.add_dependency(%q<yard>, ["~> 0.4.0"])
67
- s.add_dependency(%q<fakeweb>, ["~> 1.2.7"])
68
- end
69
- end
70
-
@@ -1,176 +0,0 @@
1
- module Defender
2
- class Statistics
3
- class Extended
4
- ##
5
- # The starting date.
6
- #
7
- # @return [String] Is in the format YYYY-MM-DD.
8
- attr_reader :from
9
-
10
- ##
11
- # The ending date.
12
- #
13
- # @return [String] Is in the form YYYY-MM-DD.
14
- attr_reader :to
15
-
16
- ##
17
- # Provides a set of URLs that chart the data provided in the data array.
18
- #
19
- # The Hash returned will have the keys `:accuracy`, `:unwanted` and
20
- # `:legitimate`, which all refer to the same fields in the {#data} hash.
21
- #
22
- # @return [Hash{Symbol => String}]
23
- attr_reader :chart_urls
24
-
25
- ##
26
- # The set of dates within the retrieved period.
27
- #
28
- # The keys are the date in YYYY-MM-DD format.
29
- #
30
- # Each date has the following keys:
31
- #
32
- # * `:false_negatives` - The number of false negatives for the specified
33
- # date.
34
- # * `:false_positives` - The number of false positives for the specified
35
- # date.
36
- # * `:legitimate` - The number of legitimate documents processed on the
37
- # specified date.
38
- # * `:accuracy` - How accurate Defensio has recently been for the current
39
- # user on the specified date. This is returned as a Float between 0
40
- # and 1. For example, 0.9525 means 95.25% accurate.
41
- # * `:unwanted` - The number of unwanted documents processed on the
42
- # specified date.
43
- #
44
- # @return [Hash{String => Hash{Symbol => Object}}]
45
- attr_reader :data
46
-
47
- ##
48
- # Retrieves extended statistics from a given date to another one.
49
- #
50
- # @param [#strftime, #to_s] from The starting date.
51
- # @param [#strftime, #to_s] to The ending date.
52
- def initialize(from, to)
53
- @from = from.respond_to?(:strftime) ? from.strftime('%Y-%m-%d') : from.to_s
54
- @to = to.respond_to?(:strftime) ? to.strftime('%Y-%m-%d') : to.to_s
55
-
56
- response = Defender.get("/#{Defender.api_key}/extended-stats.json", :from => @from, :to => @to)['defensio-result']
57
- if response['status'] == 'success'
58
- @chart_urls = {
59
- :accuracy => response['chart-urls']['recent-accuracy'],
60
- :unwanted => response['chart-urls']['total-unwanted'],
61
- :legitimate => response['chart-urls']['total-legitimate']
62
- }
63
-
64
- @data = {}
65
- response['data'].each do |data|
66
- @data[data['date']] = {
67
- :false_negatives => data['false-negatives'],
68
- :false_positives => data['false-positives'],
69
- :legitimate => data['legitimate'],
70
- :accuracy => data['recent-accuracy'],
71
- :unwanted => data['unwanted']
72
- }
73
- end
74
- else
75
- raise StandardError, response['message']
76
- end
77
- end
78
- end
79
-
80
- ##
81
- # The version of the Defensio API being used. Should be the same as
82
- # {Defender::API_VERSION}.
83
- #
84
- # @return [String]
85
- attr_reader :api_version
86
-
87
- ##
88
- # The number of documents that have been allowed but that should have been
89
- # blocked.
90
- #
91
- # @return [Fixnum]
92
- attr_reader :false_negatives
93
-
94
- ##
95
- # The number of documents that have been blocked but that should have been
96
- # allowed.
97
- #
98
- # @return [Fixnum]
99
- attr_reader :false_positives
100
-
101
- ##
102
- # Whether Defensio is learning from the documents you post.
103
- #
104
- # @return [Boolean]
105
- attr_reader :learning
106
-
107
- ##
108
- # A message explaining why Defensio is in learning mode.
109
- #
110
- # @return [String]
111
- attr_reader :learning_status
112
-
113
- ##
114
- # The total number of legitimate documents analyzed.
115
- #
116
- # @return [Fixnum]
117
- attr_reader :legitimate_total
118
-
119
- ##
120
- # How accurate Defensio has recently been for this user.
121
- #
122
- # This returns a floating point value between 0 and 1. For example, 0.9525
123
- # means 95.25% accurate.
124
- #
125
- # @return [Float<0..1>]
126
- attr_reader :recent_accuracy
127
-
128
- ##
129
- # The number of documents containing malicious content.
130
- #
131
- # @return [Fixnum]
132
- attr_reader :unwanted_malicious
133
-
134
- ##
135
- # The number of spam documents analyzed.
136
- #
137
- # @return [Fixnum]
138
- attr_reader :unwanted_spam
139
-
140
- ##
141
- # The total number of unwanted documents.
142
- #
143
- # @return [Fixnum]
144
- attr_reader :unwanted_total
145
-
146
- ##
147
- # Initialize the object and retrieve basic statistics.
148
- #
149
- # @raise StandardError if any of the calls to the server during retrieving
150
- # of statistics fail.
151
- def initialize
152
- retrieve_basic_stats
153
- end
154
-
155
- private
156
-
157
- def retrieve_basic_stats
158
- response = Defender.get("/#{Defender.api_key}/basic-stats.json")['defensio-result']
159
-
160
- if response['status'] == 'success'
161
- @api_version = response["api-version"]
162
- @false_negatives = response["false-negatives"]
163
- @false_positives = response["false-positives"]
164
- @learning = response["learning"]
165
- @learning_status = response["learning-status"]
166
- @legitimate_total = response["legitimate"]["total"]
167
- @recent_accuracy = response["recent-accuracy"]
168
- @unwanted_malicious = response["unwanted"]["malicious"]
169
- @unwanted_spam = response["unwanted"]["spam"]
170
- @unwanted_total = response["unwanted"]["total"]
171
- else
172
- raise StandardError, response['message']
173
- end
174
- end
175
- end
176
- end