urlscan 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: afc8c9c3a3da9d6d835e29753009f8ed8eec2f61
4
+ data.tar.gz: 559e28b2f5abb908384d8ca3167dce2a55ed0c06
5
+ SHA512:
6
+ metadata.gz: 64119e3a093a5be4b5357170b2dab17398e892ecd3e2de068c2bf4768e6f9d9f3b72cf93559e2553ab7eb520f086e2f2cf383bbbfdbff2bfd336b04e3c300659
7
+ data.tar.gz: '09c0449187b23e492748f16ee0ae7b5181c355b0c3f97b99ff1b701895967a51575cca0b290ac418169c90584a6bfe28167aebe28a070aa969860e0d487724d9'
@@ -0,0 +1,12 @@
1
+ version: "2"
2
+ prepare:
3
+ fetch:
4
+ - url: "https://raw.githubusercontent.com/janlelis/relaxed.ruby.style/master/.rubocop.yml"
5
+ path: "alternate-rubocop-path.yml"
6
+ plugins:
7
+ rubocop:
8
+ enabled: true
9
+ config:
10
+ file: "alternate-rubocop-path.yml"
11
+ exclude_patterns:
12
+ - "spec/**/*"
@@ -0,0 +1,38 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+ /.vscode
13
+
14
+ # Used by dotenv library to load environment variables.
15
+ .env
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalization:
24
+ /.bundle/
25
+ /vendor/bundle
26
+ /lib/bundler/man/
27
+
28
+ # for a library or gem, you might want to ignore these files since the code is
29
+ # intended to run in multiple environments; otherwise, check them in:
30
+ Gemfile.lock
31
+ # .ruby-version
32
+ # .ruby-gemset
33
+
34
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
35
+ .rvmrc
36
+
37
+ # rspec failure tracking
38
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,168 @@
1
+ # Relaxed.Ruby.Style
2
+ ## Version 2.1
3
+
4
+ Style/Alias:
5
+ Enabled: false
6
+ StyleGuide: http://relaxed.ruby.style/#stylealias
7
+
8
+ Style/AsciiComments:
9
+ Enabled: false
10
+ StyleGuide: http://relaxed.ruby.style/#styleasciicomments
11
+
12
+ Style/BeginBlock:
13
+ Enabled: false
14
+ StyleGuide: http://relaxed.ruby.style/#stylebeginblock
15
+
16
+ Style/BlockDelimiters:
17
+ Enabled: false
18
+ StyleGuide: http://relaxed.ruby.style/#styleblockdelimiters
19
+
20
+ Style/CommentAnnotation:
21
+ Enabled: false
22
+ StyleGuide: http://relaxed.ruby.style/#stylecommentannotation
23
+
24
+ Style/Documentation:
25
+ Enabled: false
26
+ StyleGuide: http://relaxed.ruby.style/#styledocumentation
27
+
28
+ Layout/DotPosition:
29
+ Enabled: false
30
+ StyleGuide: http://relaxed.ruby.style/#layoutdotposition
31
+
32
+ Style/DoubleNegation:
33
+ Enabled: false
34
+ StyleGuide: http://relaxed.ruby.style/#styledoublenegation
35
+
36
+ Style/EndBlock:
37
+ Enabled: false
38
+ StyleGuide: http://relaxed.ruby.style/#styleendblock
39
+
40
+ Style/FormatString:
41
+ Enabled: false
42
+ StyleGuide: http://relaxed.ruby.style/#styleformatstring
43
+
44
+ Style/IfUnlessModifier:
45
+ Enabled: false
46
+ StyleGuide: http://relaxed.ruby.style/#styleifunlessmodifier
47
+
48
+ Style/Lambda:
49
+ Enabled: false
50
+ StyleGuide: http://relaxed.ruby.style/#stylelambda
51
+
52
+ Style/ModuleFunction:
53
+ Enabled: false
54
+ StyleGuide: http://relaxed.ruby.style/#stylemodulefunction
55
+
56
+ Style/MultilineBlockChain:
57
+ Enabled: false
58
+ StyleGuide: http://relaxed.ruby.style/#stylemultilineblockchain
59
+
60
+ Style/NegatedIf:
61
+ Enabled: false
62
+ StyleGuide: http://relaxed.ruby.style/#stylenegatedif
63
+
64
+ Style/NegatedWhile:
65
+ Enabled: false
66
+ StyleGuide: http://relaxed.ruby.style/#stylenegatedwhile
67
+
68
+ Style/ParallelAssignment:
69
+ Enabled: false
70
+ StyleGuide: http://relaxed.ruby.style/#styleparallelassignment
71
+
72
+ Style/PercentLiteralDelimiters:
73
+ Enabled: false
74
+ StyleGuide: http://relaxed.ruby.style/#stylepercentliteraldelimiters
75
+
76
+ Style/PerlBackrefs:
77
+ Enabled: false
78
+ StyleGuide: http://relaxed.ruby.style/#styleperlbackrefs
79
+
80
+ Style/Semicolon:
81
+ Enabled: false
82
+ StyleGuide: http://relaxed.ruby.style/#stylesemicolon
83
+
84
+ Style/SignalException:
85
+ Enabled: false
86
+ StyleGuide: http://relaxed.ruby.style/#stylesignalexception
87
+
88
+ Style/SingleLineBlockParams:
89
+ Enabled: false
90
+ StyleGuide: http://relaxed.ruby.style/#stylesinglelineblockparams
91
+
92
+ Style/SingleLineMethods:
93
+ Enabled: false
94
+ StyleGuide: http://relaxed.ruby.style/#stylesinglelinemethods
95
+
96
+ Layout/SpaceBeforeBlockBraces:
97
+ Enabled: false
98
+ StyleGuide: http://relaxed.ruby.style/#layoutspacebeforeblockbraces
99
+
100
+ Layout/SpaceInsideParens:
101
+ Enabled: false
102
+ StyleGuide: http://relaxed.ruby.style/#layoutspaceinsideparens
103
+
104
+ Style/SpecialGlobalVars:
105
+ Enabled: false
106
+ StyleGuide: http://relaxed.ruby.style/#stylespecialglobalvars
107
+
108
+ Style/StringLiterals:
109
+ Enabled: false
110
+ StyleGuide: http://relaxed.ruby.style/#stylestringliterals
111
+
112
+ Style/TrailingCommaInArguments:
113
+ Enabled: false
114
+ StyleGuide: http://relaxed.ruby.style/#styletrailingcommainarguments
115
+
116
+ Style/TrailingCommaInLiteral:
117
+ Enabled: false
118
+ StyleGuide: http://relaxed.ruby.style/#styletrailingcommainliteral
119
+
120
+ Style/WhileUntilModifier:
121
+ Enabled: false
122
+ StyleGuide: http://relaxed.ruby.style/#stylewhileuntilmodifier
123
+
124
+ Style/WordArray:
125
+ Enabled: false
126
+ StyleGuide: http://relaxed.ruby.style/#stylewordarray
127
+
128
+ Lint/AmbiguousRegexpLiteral:
129
+ Enabled: false
130
+ StyleGuide: http://relaxed.ruby.style/#lintambiguousregexpliteral
131
+
132
+ Lint/AssignmentInCondition:
133
+ Enabled: false
134
+ StyleGuide: http://relaxed.ruby.style/#lintassignmentincondition
135
+
136
+ Metrics/AbcSize:
137
+ Enabled: false
138
+
139
+ Metrics/BlockNesting:
140
+ Enabled: false
141
+
142
+ Metrics/BlockLength:
143
+ Exclude:
144
+ - 'spec/**/*'
145
+
146
+ Metrics/ClassLength:
147
+ Enabled: false
148
+
149
+ Metrics/ModuleLength:
150
+ Enabled: false
151
+
152
+ Metrics/CyclomaticComplexity:
153
+ Enabled: false
154
+
155
+ Metrics/LineLength:
156
+ Enabled: false
157
+
158
+ Metrics/MethodLength:
159
+ Enabled: false
160
+
161
+ Metrics/ParameterLists:
162
+ Enabled: false
163
+
164
+ Metrics/PerceivedComplexity:
165
+ Enabled: false
166
+
167
+ AllCops:
168
+ TargetRubyVersion: 2.4
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 2.4
5
+ script: bundle exec rake spec
6
+ gemfile:
7
+ - Gemfile
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Manabu Niseki
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,63 @@
1
+ # UrlScan
2
+
3
+ [![Build Status](https://travis-ci.org/ninoseki/urlscan.svg?branch=master)](https://travis-ci.org/ninoseki/urlscan)
4
+ [![Maintainability](https://api.codeclimate.com/v1/badges/c6625486f2d57039adef/maintainability)](https://codeclimate.com/github/ninoseki/urlscan/maintainability)
5
+
6
+ ## Description
7
+
8
+ Ruby API client for [urlscan.io](https://urlscan.io/)
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ $ gem install urlscan
14
+ ```
15
+
16
+ ## API usage
17
+
18
+ Initialize the API:
19
+
20
+ ```ruby
21
+ require 'urlscan'
22
+ # initialize the API by passing the API key.
23
+ api = UrlScan::API.new(api_key)
24
+ # or initialize the API by using `$URLSCAN_API_KEY` environment variable
25
+ api = UrlScan::API.new
26
+ ```
27
+
28
+ Submit:
29
+
30
+ ```ruby
31
+ res = api.submit("https://wikipedia.org")
32
+ puts res["result"] # => "https://urlscan.io/result/ac04bc14-4efe-439d-b356-8384843daf75/"
33
+ ```
34
+
35
+ Result:
36
+
37
+ ```ruby
38
+ res = api.result("ac04bc14-4efe-439d-b356-8384843daf75")
39
+ p res # => See the following URL as an example of the response.
40
+ # https://gist.github.com/ninoseki/a974d7e95629813615b380c30e737825#file-result-json
41
+ ```
42
+
43
+ Search:
44
+
45
+ ```ruby
46
+ res = api.search("wikipedia.org")
47
+ p res # => See the following URL as an example of the reponse.
48
+ # https://gist.github.com/ninoseki/a974d7e95629813615b380c30e737825#file-search-json
49
+ ```
50
+
51
+ ## CLI usage
52
+
53
+ ```bash
54
+ $ urlscan
55
+ Commands:
56
+ urlscan help [COMMAND] # Describe available commands or one specific command
57
+ urlscan result [UUID] # get the result of a scan using the [UUID]
58
+ urlscan search [QUERY] # search for scans by [QUERY]
59
+ urlscan submit [URL] # submit a scan to [URL]
60
+
61
+ Options:
62
+ [--API-KEY=API_KEY]
63
+ ```
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "urlscan"
4
+
5
+ UrlScan::CLI.start
@@ -0,0 +1,3 @@
1
+ require "urlscan/api"
2
+ require "urlscan/cli"
3
+ require "urlscan/version"
@@ -0,0 +1,86 @@
1
+ require 'net/https'
2
+ require 'json'
3
+
4
+ require 'urlscan/exceptions'
5
+
6
+ module UrlScan
7
+ class API
8
+ VERSION = 1
9
+ HOST = "urlscan.io".freeze
10
+ URL = "https://#{HOST}/api/v#{VERSION}".freeze
11
+
12
+ attr_reader :key
13
+
14
+ def initialize(key = ENV["URLSCAN_API_KEY"])
15
+ raise ArgumentError, "`key` argument required" if key.nil?
16
+ @key = key
17
+ end
18
+
19
+ def submit(url, is_public = true)
20
+ params = { url: url, public: is_public ? "on" : "off" }
21
+ post("/scan/", params) { |json| json }
22
+ end
23
+
24
+ def result(uuid)
25
+ get("/result/#{uuid}") { |json| json }
26
+ end
27
+
28
+ def search(q, size = 100, offset = 0, sort = "_score")
29
+ params = { q: q, size: size, offset: offset, sort: sort }
30
+ query = URI.encode_www_form(params)
31
+ get("/search/?#{query}") { |json| json }
32
+ end
33
+
34
+ def url_for(path)
35
+ URI(URL + path)
36
+ end
37
+
38
+ def https_options
39
+ if proxy = ENV["HTTPS_PROXY"]
40
+ uri = URI(proxy)
41
+ {
42
+ proxy_address: uri.hostname,
43
+ proxy_port: uri.port,
44
+ proxy_from_env: false,
45
+ use_ssl: true
46
+ }
47
+ else
48
+ { use_ssl: true }
49
+ end
50
+ end
51
+
52
+ def request(req)
53
+ Net::HTTP.start(HOST, 443, https_options) do |http|
54
+ response = http.request(req)
55
+
56
+ case response.code
57
+ when '200' then yield JSON.parse(response.body)
58
+ when '400' then raise ProcessingError, response.body
59
+ when '401' then raise AuthenticationError, response.body
60
+ when '404' then raise NotFound, response.body
61
+ when '429' then raise RateLimited, response.body
62
+ when '500' then raise InternalServerError, response.body
63
+ else
64
+ raise ResponseError, response.body
65
+ end
66
+ end
67
+ end
68
+
69
+ def auth_header
70
+ { "API-KEY": key }
71
+ end
72
+
73
+ def get(path, &block)
74
+ get = Net::HTTP::Get.new(url_for(path), auth_header)
75
+ request(get, &block)
76
+ end
77
+
78
+ def post(path, json, &block)
79
+ post = Net::HTTP::Post.new(url_for(path), auth_header)
80
+ post.content_type = 'application/json'
81
+ post.body = json.to_json
82
+
83
+ request(post, &block)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,50 @@
1
+ require 'json'
2
+ require 'thor'
3
+
4
+ module UrlScan
5
+ class CLI < Thor
6
+ class_option :API_KEY, type: :string
7
+
8
+ desc "submit [URL]", "submit a scan to [URL]"
9
+ method_option :public, type: :boolean, default: true
10
+ def submit(url)
11
+ with_error_handling do
12
+ res = api.submit(url, options[:public])
13
+ puts JSON.pretty_generate(res)
14
+ end
15
+ end
16
+
17
+ desc "result [UUID]", "get the result of a scan using the [UUID]"
18
+ def result(uuid)
19
+ with_error_handling do
20
+ res = api.result(uuid)
21
+ puts JSON.pretty_generate(res)
22
+ end
23
+ end
24
+
25
+ desc "search [QUERY]", "search for scans by [QUERY]"
26
+ method_option :size, type: :numeric, default: 100
27
+ method_option :offset, type: :numeric, default: 0
28
+ method_option :sort, type: :string, default: "_score"
29
+ def search(query)
30
+ with_error_handling do
31
+ res = api.search(query, options[:size], options[:offset], options[:sort])
32
+ puts JSON.pretty_generate(res)
33
+ end
34
+ end
35
+
36
+ no_commands do
37
+ def api
38
+ options[:API_KEY] ? API.new(options[:API_KEY]) : API.new
39
+ end
40
+
41
+ def with_error_handling
42
+ yield
43
+ rescue ArgumentError => _
44
+ puts "Warning: please specify your urlscan.io API key via ENV['URLSCAN_API_KEY] or --API-KEY"
45
+ rescue ResponseError => e
46
+ puts "Warning: #{e}"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,13 @@
1
+ module UrlScan
2
+ class ResponseError < StandardError; end
3
+
4
+ class AuthenticationError < ResponseError; end
5
+
6
+ class NotFound < ResponseError; end
7
+
8
+ class ProcessingError < ResponseError; end
9
+
10
+ class RateLimited < ResponseError; end
11
+
12
+ class InternalServerError < ResponseError; end
13
+ end
@@ -0,0 +1,3 @@
1
+ module UrlScan
2
+ VERSION = "0.1.0".freeze
3
+ end
@@ -0,0 +1,30 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "urlscan/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "urlscan"
7
+ spec.version = UrlScan::VERSION
8
+ spec.authors = ["Manabu Niseki"]
9
+ spec.email = ["manabu.niseki@gmail.com"]
10
+
11
+ spec.summary = "Ruby API client for urlscan.io"
12
+ spec.homepage = "https://github.com/ninoseki/urlscan"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ f.match(%r{^(test|spec|features)/})
17
+ end
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.16"
23
+ spec.add_development_dependency "dotenv", "~> 2.2"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "vcr", "~> 4.0"
27
+ spec.add_development_dependency "webmock", "~> 3.1"
28
+
29
+ spec.add_runtime_dependency "thor", "~> 0.20"
30
+ end
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: urlscan
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Manabu Niseki
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-01-19 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.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dotenv
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: vcr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: thor
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.20'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.20'
111
+ description:
112
+ email:
113
+ - manabu.niseki@gmail.com
114
+ executables:
115
+ - urlscan
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".codeclimate.yml"
120
+ - ".gitignore"
121
+ - ".rspec"
122
+ - ".rubocop.yml"
123
+ - ".travis.yml"
124
+ - Gemfile
125
+ - LICENSE
126
+ - README.md
127
+ - Rakefile
128
+ - exe/urlscan
129
+ - lib/urlscan.rb
130
+ - lib/urlscan/api.rb
131
+ - lib/urlscan/cli.rb
132
+ - lib/urlscan/exceptions.rb
133
+ - lib/urlscan/version.rb
134
+ - urlscan.gemspec
135
+ homepage: https://github.com/ninoseki/urlscan
136
+ licenses:
137
+ - MIT
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 2.6.11
156
+ signing_key:
157
+ specification_version: 4
158
+ summary: Ruby API client for urlscan.io
159
+ test_files: []