faraday-uafaker 0.0.1

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,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'faraday_middleware/request/user_agent_faker'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "faraday-uafaker"
8
+ spec.version = FaradayMiddleware::UserAgentFaker::VERSION
9
+ spec.authors = ["Shem Ming"]
10
+ spec.email = ["shemusok@gmail.com"]
11
+ spec.summary = %q{Faraday middleware for faking UA string.}
12
+ spec.description = %q{Lorem ipsum.}
13
+ spec.homepage = "https://github.com/shemusok/faraday-uafaker"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec", "~> 3.0"
24
+ spec.add_development_dependency 'nokogiri', '~> 1.6', '>= 1.6.3'
25
+ spec.add_dependency "faraday", "~> 0.9"
26
+ end
@@ -0,0 +1,9 @@
1
+ require 'faraday'
2
+
3
+ module FaradayMiddleware
4
+ autoload :UserAgentFaker, 'faraday_middleware/request/user_agent_faker'
5
+ if Faraday::Request.respond_to? :register_middleware
6
+ Faraday::Request.register_middleware uafaker: lambda { UserAgentFaker }
7
+ end
8
+ end
9
+
@@ -0,0 +1,20 @@
1
+ require 'faraday'
2
+
3
+ module FaradayMiddleware
4
+ class UserAgentFaker < Faraday::Middleware
5
+ VERSION = '0.0.1'
6
+
7
+ UASS_FILE = File.expand_path(File.dirname(__FILE__) + '/../../../data/uass.txt')
8
+
9
+ UASS = IO.readlines UASS_FILE
10
+
11
+ def self.uas
12
+ UASS[rand UASS.length].chomp
13
+ end
14
+
15
+ def call(env)
16
+ env[:request_headers]['User-Agent'] = self.class::uas
17
+ @app.call(env)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,42 @@
1
+ require 'nokogiri'
2
+ require 'faraday-uafaker.rb'
3
+
4
+ describe FaradayMiddleware::UserAgentFaker do
5
+ it "file with UA strings must exists" do
6
+ expect(File::exists?(FaradayMiddleware::UserAgentFaker::UASS_FILE)).to eq true
7
+ end
8
+
9
+ it 'must choose one of known UA string' do
10
+ uas = FaradayMiddleware::UserAgentFaker::uas
11
+ expect(FaradayMiddleware::UserAgentFaker::UASS.include?("#{uas}\n")).to eq true
12
+ end
13
+
14
+ it 'must choose each time new UA string' do
15
+ uas1 = FaradayMiddleware::UserAgentFaker::uas
16
+ uas2 = FaradayMiddleware::UserAgentFaker::uas
17
+ expect(uas1).not_to eq uas2
18
+ end
19
+
20
+ describe 'must be valid faraday request middleware:' do
21
+ conn = nil
22
+ it 'must be properly registered' do
23
+ expect do
24
+ conn = Faraday.new 'http://www.useragentstring.com/' do |faraday|
25
+ faraday.request :uafaker
26
+ faraday.adapter :net_http
27
+ end
28
+ end.not_to raise_error
29
+ end
30
+
31
+ it 'must set \'User-Agent\' field of HTTP request to one of known UA string' do
32
+ uas = Nokogiri::HTML(conn.get().body).css('#uas_textfeld').text
33
+ expect(FaradayMiddleware::UserAgentFaker::UASS.include?("#{uas}\n")).to eq true
34
+ end
35
+
36
+ it 'must each time send random UA string' do
37
+ uas1 = Nokogiri::HTML(conn.get().body).css('#uas_textfeld').text
38
+ uas2 = Nokogiri::HTML(conn.get().body).css('#uas_textfeld').text
39
+ expect(uas1).not_to eq uas2
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: faraday-uafaker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Shem Ming
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.6'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 1.6.3
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1.6'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.6.3
75
+ - !ruby/object:Gem::Dependency
76
+ name: faraday
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.9'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.9'
89
+ description: Lorem ipsum.
90
+ email:
91
+ - shemusok@gmail.com
92
+ executables: []
93
+ extensions: []
94
+ extra_rdoc_files: []
95
+ files:
96
+ - ".gitignore"
97
+ - ".rspec"
98
+ - Gemfile
99
+ - LICENSE.txt
100
+ - README.md
101
+ - Rakefile
102
+ - data/uass.txt
103
+ - faraday-uafaker.gemspec
104
+ - lib/faraday-uafaker.rb
105
+ - lib/faraday_middleware/request/user_agent_faker.rb
106
+ - spec/user_agent_faker_spec.rb
107
+ homepage: https://github.com/shemusok/faraday-uafaker
108
+ licenses:
109
+ - MIT
110
+ metadata: {}
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.2.2
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Faraday middleware for faking UA string.
131
+ test_files:
132
+ - spec/user_agent_faker_spec.rb