cleanweb 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.travis.yml +4 -0
- data/README.md +21 -6
- data/Rakefile +5 -0
- data/cleanweb.gemspec +3 -2
- data/lib/cleanweb.rb +52 -3
- data/lib/cleanweb/spam.rb +40 -0
- data/lib/cleanweb/version.rb +5 -3
- data/spec/mocks/body.xml +8 -0
- data/spec/mocks/links.xml +8 -0
- data/spec/mocks/no_links.xml +6 -0
- data/spec/mocks/no_links_body.xml +6 -0
- data/spec/mocks/ok.xml +8 -0
- data/spec/models/cleanweb_spec.rb +24 -0
- data/spec/models/spam_spec.rb +40 -0
- data/spec/spec_helper.rb +6 -0
- metadata +38 -3
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# Cleanweb
|
2
2
|
|
3
|
-
|
3
|
+
[![Build Status](https://travis-ci.org/arrowcircle/cleanweb.png?branch=master)](https://travis-ci.org/arrowcircle/cleanweb)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/arrowcircle/cleanweb.png)](https://codeclimate.com/github/arrowcircle/cleanweb)
|
5
|
+
|
6
|
+
Cleanweb is Ruby gem Yandex Cleanweb service.
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
@@ -8,17 +11,29 @@ Add this line to your application's Gemfile:
|
|
8
11
|
|
9
12
|
gem 'cleanweb'
|
10
13
|
|
11
|
-
|
14
|
+
Get key here:
|
12
15
|
|
13
|
-
|
16
|
+
http://api.yandex.ru/key/form.xml?service=cw
|
14
17
|
|
15
|
-
|
18
|
+
Set key to Cleanweb class:
|
16
19
|
|
17
|
-
|
20
|
+
Cleanweb.api_key = "YOUR KEY HERE"
|
18
21
|
|
19
22
|
## Usage
|
20
23
|
|
21
|
-
|
24
|
+
To check if content spam or not, create a cleanweb instance and check it for spam:
|
25
|
+
|
26
|
+
cw = Cleanweb.new({:subject = > "My Test Subject", :body => "My Test Body"})
|
27
|
+
cw.spam?
|
28
|
+
=> false
|
29
|
+
|
30
|
+
You can add more info to initial params. Here is the list:
|
31
|
+
|
32
|
+
* `ip` - user IP address,
|
33
|
+
* `email` - user email,
|
34
|
+
* `name` - user footer signature,
|
35
|
+
* `login` - user login,
|
36
|
+
* `realname` - user real name
|
22
37
|
|
23
38
|
## Contributing
|
24
39
|
|
data/Rakefile
CHANGED
data/cleanweb.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'cleanweb
|
4
|
+
require 'cleanweb'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "cleanweb"
|
8
|
-
spec.version = Cleanweb::VERSION
|
8
|
+
spec.version = Cleanweb::Version::VERSION
|
9
9
|
spec.authors = ["Oleg Bovykin"]
|
10
10
|
spec.email = ["oleg.bovykin@gmail.com"]
|
11
11
|
spec.description = %q{Gem for Yandex Cleanweb intergation}
|
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "guard-rspec"
|
24
25
|
end
|
data/lib/cleanweb.rb
CHANGED
@@ -1,5 +1,54 @@
|
|
1
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'rexml/document'
|
5
|
+
require 'open-uri'
|
6
|
+
|
7
|
+
class Cleanweb
|
8
|
+
require 'cleanweb/version'
|
9
|
+
require 'cleanweb/spam'
|
10
|
+
|
11
|
+
include Version
|
12
|
+
include Spam
|
13
|
+
|
14
|
+
class KeyError < StandardError; end
|
15
|
+
class NoSubjectError < StandardError; end
|
16
|
+
class NoBodyError < StandardError; end
|
17
|
+
|
18
|
+
SPAM_URL = "http://cleanweb-api.yandex.ru/1.0/check-spam"
|
19
|
+
|
20
|
+
class << self
|
21
|
+
attr_accessor 'api_key'
|
22
|
+
end
|
23
|
+
@@api_key = nil
|
24
|
+
|
25
|
+
def self.api_key= key
|
26
|
+
@@api_key = key
|
27
|
+
end
|
28
|
+
|
29
|
+
def initialize params
|
30
|
+
check_key
|
31
|
+
@params = params
|
32
|
+
check_params
|
33
|
+
end
|
34
|
+
|
35
|
+
def check_key
|
36
|
+
raise KeyError if @@api_key.nil?
|
37
|
+
end
|
38
|
+
|
39
|
+
def check_params
|
40
|
+
check_subject
|
41
|
+
check_body
|
42
|
+
end
|
43
|
+
|
44
|
+
def check_subject
|
45
|
+
@subject = @params[:subject]
|
46
|
+
raise NoSubjectError if @subject.nil?
|
47
|
+
end
|
48
|
+
|
49
|
+
def check_body
|
50
|
+
@body = @params[:body]
|
51
|
+
raise NoBodyError if @body.nil?
|
52
|
+
end
|
2
53
|
|
3
|
-
module Cleanweb
|
4
|
-
# Your code goes here...
|
5
54
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Cleanweb::Spam
|
4
|
+
def parse_xml
|
5
|
+
xml = REXML::Document.new(ask_yandex)
|
6
|
+
res = []
|
7
|
+
begin
|
8
|
+
xml.root.elements.each("text") {|e| res << e.attributes["spam-flag"]}
|
9
|
+
xml.root.elements.each("links") do |links|
|
10
|
+
links.elements.each("link") {|e| res << e.attributes["spam-flag"]}
|
11
|
+
end
|
12
|
+
rescue
|
13
|
+
end
|
14
|
+
res.uniq
|
15
|
+
end
|
16
|
+
|
17
|
+
def spam?
|
18
|
+
results = parse_xml
|
19
|
+
if results == ["no"] && !results.empty?
|
20
|
+
false
|
21
|
+
else
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def spam_params
|
27
|
+
res = {key: @@api_key}
|
28
|
+
@params.slice([:ip, :email, :name, :login, :realname]).each do |k, v|
|
29
|
+
res.merge!(k: v) if @params[k].present?
|
30
|
+
end
|
31
|
+
res["subject-plain"] = @subject
|
32
|
+
res["body-plain"] = @body
|
33
|
+
res
|
34
|
+
end
|
35
|
+
|
36
|
+
def ask_yandex
|
37
|
+
uri = URI.parse(SPAM_URL)
|
38
|
+
Net::HTTP.post_form(uri, spam_params).body
|
39
|
+
end
|
40
|
+
end
|
data/lib/cleanweb/version.rb
CHANGED
data/spec/mocks/body.xml
ADDED
data/spec/mocks/ok.xml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Cleanweb do
|
6
|
+
context "initialize" do
|
7
|
+
let(:cleanweb_no_key) { Cleanweb.api_key = nil; Cleanweb.new "text"}
|
8
|
+
let(:cleanweb_no_subject) { Cleanweb.new no_subject}
|
9
|
+
let(:cleanweb_no_body) { Cleanweb.new no_body}
|
10
|
+
|
11
|
+
let(:no_subject) { {subject: nil, body: "body"} }
|
12
|
+
let(:no_body) { {subject: "subject", body: nil} }
|
13
|
+
|
14
|
+
it "проверяет наличие ключа" do
|
15
|
+
lambda { cleanweb_no_key }.should raise_error(Cleanweb::KeyError)
|
16
|
+
Cleanweb.api_key = "123"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "проверяет и задает входные параметры" do
|
20
|
+
lambda { cleanweb_no_subject }.should raise_error(Cleanweb::NoSubjectError)
|
21
|
+
lambda { cleanweb_no_body }.should raise_error(Cleanweb::NoBodyError)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Cleanweb::Spam do
|
6
|
+
context "spam?" do
|
7
|
+
let(:params) { {subject: "subject", body: "body"} }
|
8
|
+
let(:cleanweb) { Cleanweb.new params }
|
9
|
+
let(:ok_response) { File.read(File.join("spec", "mocks", "ok.xml")) }
|
10
|
+
let(:links_response) { File.read(File.join("spec", "mocks", "links.xml")) }
|
11
|
+
let(:no_links_response) { File.read(File.join("spec", "mocks", "no_links.xml")) }
|
12
|
+
let(:no_links_body_response) { File.read(File.join("spec", "mocks", "no_links_body.xml")) }
|
13
|
+
let(:body_response) { File.read(File.join("spec", "mocks", "body.xml")) }
|
14
|
+
|
15
|
+
it "возвращает false если контент не спам" do
|
16
|
+
cleanweb.should_receive(:ask_yandex).and_return(ok_response)
|
17
|
+
expect(cleanweb.spam?).to eq false
|
18
|
+
end
|
19
|
+
|
20
|
+
it "возвращает true если контент спам, а ссылки ок" do
|
21
|
+
cleanweb.should_receive(:ask_yandex).and_return(body_response)
|
22
|
+
expect(cleanweb.spam?).to eq true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "возвращает true если контент ок, а ссылки спам" do
|
26
|
+
cleanweb.should_receive(:ask_yandex).and_return(links_response)
|
27
|
+
expect(cleanweb.spam?).to eq true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "возвращает false если контент ок, а ссылкок нет" do
|
31
|
+
cleanweb.should_receive(:ask_yandex).and_return(no_links_response)
|
32
|
+
expect(cleanweb.spam?).to eq false
|
33
|
+
end
|
34
|
+
|
35
|
+
it "возвращает true если контент спам, а ссылкок нет" do
|
36
|
+
cleanweb.should_receive(:ask_yandex).and_return(no_links_body_response)
|
37
|
+
expect(cleanweb.spam?).to eq true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cleanweb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
62
78
|
description: Gem for Yandex Cleanweb intergation
|
63
79
|
email:
|
64
80
|
- oleg.bovykin@gmail.com
|
@@ -67,13 +83,24 @@ extensions: []
|
|
67
83
|
extra_rdoc_files: []
|
68
84
|
files:
|
69
85
|
- .gitignore
|
86
|
+
- .rspec
|
87
|
+
- .travis.yml
|
70
88
|
- Gemfile
|
71
89
|
- LICENSE.txt
|
72
90
|
- README.md
|
73
91
|
- Rakefile
|
74
92
|
- cleanweb.gemspec
|
75
93
|
- lib/cleanweb.rb
|
94
|
+
- lib/cleanweb/spam.rb
|
76
95
|
- lib/cleanweb/version.rb
|
96
|
+
- spec/mocks/body.xml
|
97
|
+
- spec/mocks/links.xml
|
98
|
+
- spec/mocks/no_links.xml
|
99
|
+
- spec/mocks/no_links_body.xml
|
100
|
+
- spec/mocks/ok.xml
|
101
|
+
- spec/models/cleanweb_spec.rb
|
102
|
+
- spec/models/spam_spec.rb
|
103
|
+
- spec/spec_helper.rb
|
77
104
|
homepage: https://github.com/arrowcircle/cleanweb
|
78
105
|
licenses:
|
79
106
|
- MIT
|
@@ -99,4 +126,12 @@ rubygems_version: 1.8.25
|
|
99
126
|
signing_key:
|
100
127
|
specification_version: 3
|
101
128
|
summary: Yandex Cleanweb
|
102
|
-
test_files:
|
129
|
+
test_files:
|
130
|
+
- spec/mocks/body.xml
|
131
|
+
- spec/mocks/links.xml
|
132
|
+
- spec/mocks/no_links.xml
|
133
|
+
- spec/mocks/no_links_body.xml
|
134
|
+
- spec/mocks/ok.xml
|
135
|
+
- spec/models/cleanweb_spec.rb
|
136
|
+
- spec/models/spam_spec.rb
|
137
|
+
- spec/spec_helper.rb
|