botscout 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --backtrace
3
+ --format documentation
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - 1.8.7
data/README.md CHANGED
@@ -1,6 +1,5 @@
1
- # Botscout
1
+ # Botscout [![Build Status](https://travis-ci.org/parallel588/botscout.png?branch=master)](https://travis-ci.org/parallel588/botscout)
2
2
 
3
- TODO: Write a gem description
4
3
 
5
4
  ## Installation
6
5
 
@@ -18,7 +17,14 @@ Or install it yourself as:
18
17
 
19
18
  ## Usage
20
19
 
21
- TODO: Write usage instructions here
20
+ botscout = Botscout::Client.new("key")
21
+ result = botscout.test mail: email
22
+ if result.success?
23
+ Logger.info "Email address is spam: #{email}" if result.bot?
24
+ else
25
+ Logger.info "Servis is not available: #{result.error}"
26
+ end
27
+
22
28
 
23
29
  ## Contributing
24
30
 
data/Rakefile CHANGED
@@ -1 +1,4 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+ task :default => :spec
4
+ RSpec::Core::RakeTask.new
@@ -19,5 +19,9 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_development_dependency "bundler", "~> 1.3"
21
21
  spec.add_development_dependency "rake"
22
+ spec.add_development_dependency 'rspec', '~> 2.13.0'
23
+ spec.add_development_dependency "vcr", "~> 2.4.0"
24
+ spec.add_development_dependency "webmock", "~> 1.11.0"
25
+
22
26
  spec.add_dependency "httparty", "~> 0.11.0"
23
27
  end
@@ -1,4 +1,5 @@
1
1
  require "botscout/version"
2
+ require 'httparty'
2
3
 
3
4
  module Botscout
4
5
  class Client
@@ -12,20 +13,38 @@ module Botscout
12
13
  end
13
14
 
14
15
  def test(options ={})
15
- _options = (@key.present? ? { :key => @key } : {}).merge(options)
16
- @response = self.class.get('/test', :query => _options)
16
+ _options = ((@key.nil? || @key.empty?) ? {} : { :key => @key } ).merge(options)
17
+ @response = self.class.get('/test/', :query => _options)
17
18
 
18
19
  Result.new(@response.body)
19
20
  end
20
21
 
21
22
  class Result
22
- attr_accessor :response, :result, :matched
23
+ attr_reader :response, :result, :matched
23
24
 
24
- def initialize(xml_response = "")
25
- @response = xml_response
25
+ def initialize(response = "")
26
+ @response = response.to_s
26
27
  parse!
27
28
  end
28
29
 
30
+ def bot?
31
+ @result.to_s == "Y"
32
+ end
33
+
34
+ def success?
35
+ !has_error?
36
+ end
37
+
38
+ def error
39
+ @response.match(/\A!(.*)/) && $1
40
+ end
41
+
42
+ def has_error?
43
+ !!@response.match(/\A!/)
44
+ end
45
+
46
+ private
47
+
29
48
  def parse!
30
49
  if has_error?
31
50
  @result = nil
@@ -45,23 +64,7 @@ module Botscout
45
64
  self
46
65
  end
47
66
 
48
- def bot?
49
- @result.to_s == "Y"
50
- end
51
67
 
52
- def success?
53
- !has_error?
54
- end
55
-
56
- def error
57
- @response.match(/\A!(.*)/) && $1
58
- end
59
-
60
- def has_error?
61
- !!@response.match(/\A!/)
62
- end
63
-
64
- private
65
68
  def parse_standart(response_array)
66
69
  {
67
70
  :count => response_array[2].to_i,
@@ -1,3 +1,3 @@
1
1
  module Botscout
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,78 @@
1
+ require "spec_helper"
2
+
3
+ describe Botscout::Client do
4
+ describe "#test" do
5
+ it "should return Botscout::Client::Result" do
6
+ VCR.use_cassette("test-spam-req") do
7
+ @client = Botscout::Client.new
8
+ @result = @client.test(:mail => "krasnhello@mail.ru")
9
+ expect(@result.is_a?(Botscout::Client::Result)).to be_true
10
+ end
11
+
12
+ end
13
+ end
14
+ describe "Result" do
15
+
16
+ describe "#bot?" do
17
+ context "when data is matched" do
18
+ it "should be true" do
19
+ VCR.use_cassette("test-spam-req") do
20
+ @client = Botscout::Client.new
21
+ @result = @client.test(:mail => "krasnhello@mail.ru")
22
+ expect(@result.bot?).to be_true
23
+ end
24
+ end
25
+ end
26
+ context "when data is not matched" do
27
+ it "should be false" do
28
+ VCR.use_cassette("test-not-pam-req") do
29
+ @client = Botscout::Client.new
30
+ @result = @client.test(:mail => "promotion@aliexpress.com")
31
+ expect(@result.bot?).to be_false
32
+ end
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ context "when response is has error" do
39
+ before{
40
+ VCR.use_cassette("test-error-req") do
41
+ @client = Botscout::Client.new
42
+ @result = @client.test(:mail => "promotion@aliexpress.com")
43
+
44
+ end
45
+ }
46
+
47
+ it "#error should return the error message" do
48
+ expect(@result.error).to eq(" Sorry, but that doesn't appear to be a valid API key.")
49
+ end
50
+ it "#has_error? should return true" do
51
+ expect(@result.has_error?).to be_true
52
+ end
53
+ it "#success? should return false" do
54
+ expect(@result.success?).to be_false
55
+ end
56
+ end
57
+
58
+ context "when response is has not error" do
59
+ before{
60
+ VCR.use_cassette("test-spam-req") do
61
+ @client = Botscout::Client.new
62
+ @result = @client.test(:mail => "krasnhello@mail.ru")
63
+ end
64
+ }
65
+
66
+ it "#error should return nil" do
67
+ expect(@result.error).to be_nil
68
+ end
69
+ it "#has_error? should return false" do
70
+ expect(@result.has_error?).to be_false
71
+ end
72
+ it "#success? should return true" do
73
+ expect(@result.success?).to be_true
74
+ end
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,32 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://botscout.com/test/?mail=promotion@aliexpress.com
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Date:
16
+ - Sat, 08 Jun 2013 18:51:22 GMT
17
+ Server:
18
+ - Apache/2.2.16 (Debian)
19
+ X-Powered-By:
20
+ - PHP/5.3.10-1~dotdeb.1
21
+ Vary:
22
+ - Accept-Encoding
23
+ Transfer-Encoding:
24
+ - chunked
25
+ Content-Type:
26
+ - text/html
27
+ body:
28
+ encoding: UTF-8
29
+ string: "! Sorry, but that doesn't appear to be a valid API key."
30
+ http_version:
31
+ recorded_at: Sat, 08 Jun 2013 18:51:21 GMT
32
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,32 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://botscout.com/test/?mail=promotion@aliexpress.com
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Date:
16
+ - Sat, 08 Jun 2013 18:50:02 GMT
17
+ Server:
18
+ - Apache/2.2.16 (Debian)
19
+ X-Powered-By:
20
+ - PHP/5.3.10-1~dotdeb.1
21
+ Vary:
22
+ - Accept-Encoding
23
+ Transfer-Encoding:
24
+ - chunked
25
+ Content-Type:
26
+ - text/html
27
+ body:
28
+ encoding: UTF-8
29
+ string: N|MAIL|0
30
+ http_version:
31
+ recorded_at: Sat, 08 Jun 2013 18:50:01 GMT
32
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,32 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://botscout.com/test/?mail=krasnhello@mail.ru
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Date:
16
+ - Sat, 08 Jun 2013 18:48:28 GMT
17
+ Server:
18
+ - Apache/2.2.16 (Debian)
19
+ X-Powered-By:
20
+ - PHP/5.3.10-1~dotdeb.1
21
+ Vary:
22
+ - Accept-Encoding
23
+ Transfer-Encoding:
24
+ - chunked
25
+ Content-Type:
26
+ - text/html
27
+ body:
28
+ encoding: UTF-8
29
+ string: Y|MAIL|0
30
+ http_version:
31
+ recorded_at: Sat, 08 Jun 2013 18:48:27 GMT
32
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ Bundler.require(:default)
4
+
5
+ require 'webmock/rspec'
6
+ require 'vcr'
7
+
8
+ VCR.configure do |c|
9
+ c.cassette_library_dir = 'spec/cassettes'
10
+ c.hook_into :webmock
11
+ c.default_cassette_options = { :record => :once }
12
+ end
13
+
14
+ RSpec.configure do |config|
15
+ config.treat_symbols_as_metadata_keys_with_true_values = true
16
+ config.run_all_when_everything_filtered = true
17
+ end
metadata CHANGED
@@ -1,65 +1,129 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: botscout
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
5
11
  platform: ruby
6
- authors:
12
+ authors:
7
13
  - Maxim Pechnikov
8
14
  autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
- date: 2013-06-06 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-06-14 00:00:00 +04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
14
22
  name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
17
27
  - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
28
+ - !ruby/object:Gem::Version
29
+ hash: 9
30
+ segments:
31
+ - 1
32
+ - 3
33
+ version: "1.3"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
20
48
  type: :development
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: rspec
21
52
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
24
56
  - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
57
+ - !ruby/object:Gem::Version
58
+ hash: 59
59
+ segments:
60
+ - 2
61
+ - 13
62
+ - 0
63
+ version: 2.13.0
34
64
  type: :development
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: vcr
35
68
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: httparty
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
45
72
  - - ~>
46
- - !ruby/object:Gem::Version
47
- version: 0.11.0
48
- type: :runtime
73
+ - !ruby/object:Gem::Version
74
+ hash: 31
75
+ segments:
76
+ - 2
77
+ - 4
78
+ - 0
79
+ version: 2.4.0
80
+ type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: webmock
49
84
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
52
88
  - - ~>
53
- - !ruby/object:Gem::Version
89
+ - !ruby/object:Gem::Version
90
+ hash: 59
91
+ segments:
92
+ - 1
93
+ - 11
94
+ - 0
95
+ version: 1.11.0
96
+ type: :development
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: httparty
100
+ prerelease: false
101
+ requirement: &id006 !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ~>
105
+ - !ruby/object:Gem::Version
106
+ hash: 51
107
+ segments:
108
+ - 0
109
+ - 11
110
+ - 0
54
111
  version: 0.11.0
112
+ type: :runtime
113
+ version_requirements: *id006
55
114
  description: BotScout
56
- email:
115
+ email:
57
116
  - parallel588@gmail.com
58
117
  executables: []
118
+
59
119
  extensions: []
120
+
60
121
  extra_rdoc_files: []
61
- files:
122
+
123
+ files:
62
124
  - .gitignore
125
+ - .rspec
126
+ - .travis.yml
63
127
  - Gemfile
64
128
  - LICENSE.txt
65
129
  - README.md
@@ -67,27 +131,48 @@ files:
67
131
  - botscout.gemspec
68
132
  - lib/botscout.rb
69
133
  - lib/botscout/version.rb
134
+ - spec/boutscout_spec.rb
135
+ - spec/cassettes/test-error-req.yml
136
+ - spec/cassettes/test-not-pam-req.yml
137
+ - spec/cassettes/test-spam-req.yml
138
+ - spec/spec_helper.rb
139
+ has_rdoc: true
70
140
  homepage: http://botscout.com/
71
141
  licenses: []
72
- metadata: {}
142
+
73
143
  post_install_message:
74
144
  rdoc_options: []
75
- require_paths:
145
+
146
+ require_paths:
76
147
  - lib
77
- required_ruby_version: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - '>='
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- required_rubygems_version: !ruby/object:Gem::Requirement
83
- requirements:
84
- - - '>='
85
- - !ruby/object:Gem::Version
86
- version: '0'
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ hash: 3
154
+ segments:
155
+ - 0
156
+ version: "0"
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ hash: 3
163
+ segments:
164
+ - 0
165
+ version: "0"
87
166
  requirements: []
167
+
88
168
  rubyforge_project:
89
- rubygems_version: 2.0.2
169
+ rubygems_version: 1.6.2
90
170
  signing_key:
91
- specification_version: 4
171
+ specification_version: 3
92
172
  summary: Ruby bindings for the botscout.com API
93
- test_files: []
173
+ test_files:
174
+ - spec/boutscout_spec.rb
175
+ - spec/cassettes/test-error-req.yml
176
+ - spec/cassettes/test-not-pam-req.yml
177
+ - spec/cassettes/test-spam-req.yml
178
+ - spec/spec_helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 5315f17aa32c90d89fb237b492e17a072d89d0a1
4
- data.tar.gz: b3672a5b70eee46b683c11d2010b95171e3310ab
5
- SHA512:
6
- metadata.gz: 0823893f9e1c48e15e14b182278443191f380d0861af1bd3fb28f13717713cdf2e173e68c4a2a0c6fe3f69a637a31f4d92bfcf7cc9d6a91e8b4ea575573e5665
7
- data.tar.gz: d7966e10defcf31b5a04e1a4f1555a6e2355e5e1d4a67bfc8b1159a9bf66f84d6964d6b9482641b5d8cc5059d10889c21d20a072fd2e5719d0904422e806647c