simple_whatweb 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b26c444e4ee7222cbb6eaa591cf2d42a5d660b925b3b2d799748dd35df772415
4
- data.tar.gz: 2820aeabc58670b9366ec682418d526f9c55b4612a926e0462869da8e5057d3b
3
+ metadata.gz: 74949bba132a54310d0734e532ea57ea10df193d42748826bb1ec8f0a94ce704
4
+ data.tar.gz: dff1cb823b0c7f36e38524eeba7433267d06120f23bd7c64df696d917b93a6a6
5
5
  SHA512:
6
- metadata.gz: cceb40628b9e2523303ec38d96ca21306e19dfdddc94a8ae8f64650c4fca7a3e2826e2c7255ad3c1a4e02611dcbbc25f8064d404bc91ef4c1f0ca3c419668337
7
- data.tar.gz: 8801947ff6d7582629b1db2d049b8c1a75d350e5e7c3419bed534fb7a5caf565469c6f936d27dbd82a8991b85e1edaf858f3a945094ff6c0c8be5bb3553f5d10
6
+ metadata.gz: 78c15492948ebae1399a703f0e57072881e0fbf57451f4f8ac79ef350ca2f325108618207724f0eee36db8479a3c91b3effaeab7b4e66b051d7f8e54aad14cf3
7
+ data.tar.gz: a3e404817a1d41a34b54972bc534a4ffc86cdb6b4112c6ab23468b1f4410da5fa9e1db26713f05ddcdc64ac5540422530cfb8a4b9bd0a9d5441101fd4e7c4669
data/.rubocop.yml ADDED
@@ -0,0 +1,172 @@
1
+ # Relaxed.Ruby.Style
2
+ ## Version 2.2
3
+
4
+ AllCops:
5
+ TargetRubyVersion: 2.5
6
+
7
+ Style/Alias:
8
+ Enabled: false
9
+ StyleGuide: https://relaxed.ruby.style/#stylealias
10
+
11
+ Style/AsciiComments:
12
+ Enabled: false
13
+ StyleGuide: https://relaxed.ruby.style/#styleasciicomments
14
+
15
+ Style/BeginBlock:
16
+ Enabled: false
17
+ StyleGuide: https://relaxed.ruby.style/#stylebeginblock
18
+
19
+ Style/BlockDelimiters:
20
+ Enabled: false
21
+ StyleGuide: https://relaxed.ruby.style/#styleblockdelimiters
22
+
23
+ Style/CommentAnnotation:
24
+ Enabled: false
25
+ StyleGuide: https://relaxed.ruby.style/#stylecommentannotation
26
+
27
+ Style/Documentation:
28
+ Enabled: false
29
+ StyleGuide: https://relaxed.ruby.style/#styledocumentation
30
+
31
+ Layout/DotPosition:
32
+ Enabled: false
33
+ StyleGuide: https://relaxed.ruby.style/#layoutdotposition
34
+
35
+ Style/DoubleNegation:
36
+ Enabled: false
37
+ StyleGuide: https://relaxed.ruby.style/#styledoublenegation
38
+
39
+ Style/EndBlock:
40
+ Enabled: false
41
+ StyleGuide: https://relaxed.ruby.style/#styleendblock
42
+
43
+ Style/FormatString:
44
+ Enabled: false
45
+ StyleGuide: https://relaxed.ruby.style/#styleformatstring
46
+
47
+ Style/IfUnlessModifier:
48
+ Enabled: false
49
+ StyleGuide: https://relaxed.ruby.style/#styleifunlessmodifier
50
+
51
+ Style/Lambda:
52
+ Enabled: false
53
+ StyleGuide: https://relaxed.ruby.style/#stylelambda
54
+
55
+ Style/ModuleFunction:
56
+ Enabled: false
57
+ StyleGuide: https://relaxed.ruby.style/#stylemodulefunction
58
+
59
+ Style/MultilineBlockChain:
60
+ Enabled: false
61
+ StyleGuide: https://relaxed.ruby.style/#stylemultilineblockchain
62
+
63
+ Style/NegatedIf:
64
+ Enabled: false
65
+ StyleGuide: https://relaxed.ruby.style/#stylenegatedif
66
+
67
+ Style/NegatedWhile:
68
+ Enabled: false
69
+ StyleGuide: https://relaxed.ruby.style/#stylenegatedwhile
70
+
71
+ Style/ParallelAssignment:
72
+ Enabled: false
73
+ StyleGuide: https://relaxed.ruby.style/#styleparallelassignment
74
+
75
+ Style/PercentLiteralDelimiters:
76
+ Enabled: false
77
+ StyleGuide: https://relaxed.ruby.style/#stylepercentliteraldelimiters
78
+
79
+ Style/PerlBackrefs:
80
+ Enabled: false
81
+ StyleGuide: https://relaxed.ruby.style/#styleperlbackrefs
82
+
83
+ Style/Semicolon:
84
+ Enabled: false
85
+ StyleGuide: https://relaxed.ruby.style/#stylesemicolon
86
+
87
+ Style/SignalException:
88
+ Enabled: false
89
+ StyleGuide: https://relaxed.ruby.style/#stylesignalexception
90
+
91
+ Style/SingleLineBlockParams:
92
+ Enabled: false
93
+ StyleGuide: https://relaxed.ruby.style/#stylesinglelineblockparams
94
+
95
+ Style/SingleLineMethods:
96
+ Enabled: false
97
+ StyleGuide: https://relaxed.ruby.style/#stylesinglelinemethods
98
+
99
+ Layout/SpaceBeforeBlockBraces:
100
+ Enabled: false
101
+ StyleGuide: https://relaxed.ruby.style/#layoutspacebeforeblockbraces
102
+
103
+ Layout/SpaceInsideParens:
104
+ Enabled: false
105
+ StyleGuide: https://relaxed.ruby.style/#layoutspaceinsideparens
106
+
107
+ Style/SpecialGlobalVars:
108
+ Enabled: false
109
+ StyleGuide: https://relaxed.ruby.style/#stylespecialglobalvars
110
+
111
+ Style/StringLiterals:
112
+ Enabled: false
113
+ StyleGuide: https://relaxed.ruby.style/#stylestringliterals
114
+
115
+ Style/TrailingCommaInArguments:
116
+ Enabled: false
117
+ StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarguments
118
+
119
+ Style/TrailingCommaInArrayLiteral:
120
+ Enabled: false
121
+ StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarrayliteral
122
+
123
+ Style/TrailingCommaInHashLiteral:
124
+ Enabled: false
125
+ StyleGuide: https://relaxed.ruby.style/#styletrailingcommainhashliteral
126
+
127
+ Style/SymbolArray:
128
+ Enabled: false
129
+ StyleGuide: http://relaxed.ruby.style/#stylesymbolarray
130
+
131
+ Style/WhileUntilModifier:
132
+ Enabled: false
133
+ StyleGuide: https://relaxed.ruby.style/#stylewhileuntilmodifier
134
+
135
+ Style/WordArray:
136
+ Enabled: false
137
+ StyleGuide: https://relaxed.ruby.style/#stylewordarray
138
+
139
+ Lint/AmbiguousRegexpLiteral:
140
+ Enabled: false
141
+ StyleGuide: https://relaxed.ruby.style/#lintambiguousregexpliteral
142
+
143
+ Lint/AssignmentInCondition:
144
+ Enabled: false
145
+ StyleGuide: https://relaxed.ruby.style/#lintassignmentincondition
146
+
147
+ Metrics/AbcSize:
148
+ Enabled: false
149
+
150
+ Metrics/BlockNesting:
151
+ Enabled: false
152
+
153
+ Metrics/ClassLength:
154
+ Enabled: false
155
+
156
+ Metrics/ModuleLength:
157
+ Enabled: false
158
+
159
+ Metrics/CyclomaticComplexity:
160
+ Enabled: false
161
+
162
+ Metrics/LineLength:
163
+ Enabled: false
164
+
165
+ Metrics/MethodLength:
166
+ Enabled: false
167
+
168
+ Metrics/ParameterLists:
169
+ Enabled: false
170
+
171
+ Metrics/PerceivedComplexity:
172
+ Enabled: false
data/README.md CHANGED
@@ -34,21 +34,19 @@ Or install it yourself as:
34
34
 
35
35
  ### As a CLI
36
36
 
37
- ```
38
- Usage:
39
- whatweb scan URL
40
-
41
- Options:
42
- [--aggressive], [--no-aggressive]
43
- [--default], [--no-default]
37
+ #### Commands
44
38
 
45
- Scan against a given URL
39
+ ```
40
+ Commands:
41
+ whatweb help [COMMAND] # Describe available commands or one specific command
42
+ whatweb list_plugins # List all plugins
43
+ whatweb scan URL # Scan against a given URL
46
44
  ```
47
45
 
48
- **Example**
46
+ #### Example
49
47
 
50
48
  ```bash
51
- whatweb scan http://localhost:8000 | jq .
49
+ $ whatweb scan http://localhost:8000 | jq .
52
50
  ```
53
51
 
54
52
  ```json
data/lib/whatweb/cli.rb CHANGED
@@ -15,6 +15,13 @@ module WhatWeb
15
15
  end
16
16
  end
17
17
 
18
+ desc "list_plugins", "List all plugins"
19
+ def list_plugins
20
+ with_error_handling do
21
+ puts plugin_names.to_json
22
+ end
23
+ end
24
+
18
25
  no_commands do
19
26
  def execute_plugins(url, is_aggressive = false)
20
27
  plugins = PluginManager.instance.load_plugins
@@ -28,6 +35,19 @@ module WhatWeb
28
35
  results
29
36
  end
30
37
 
38
+ def plugin_names
39
+ plugins = PluginManager.instance.load_plugins
40
+ plugins.map do |name, plugin|
41
+ {
42
+ name: name,
43
+ author: plugin.author.encode("UTF-8"),
44
+ description: plugin.description.encode("UTF-8"),
45
+ website: plugin.website,
46
+ version: plugin.version
47
+ }
48
+ end
49
+ end
50
+
31
51
  def with_error_handling
32
52
  yield
33
53
  rescue StandardError => e
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "digest/md5"
3
4
  require "sanitize"
4
5
 
@@ -10,4 +10,3 @@ require_relative "matcher/tag_pattern"
10
10
  require_relative "matcher/text"
11
11
  require_relative "matcher/url"
12
12
  require_relative "matcher/version"
13
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WhatWeb
2
4
  module Matcher
3
5
  class Status < Base
@@ -12,4 +14,4 @@ module WhatWeb
12
14
  end
13
15
  end
14
16
  end
15
- end
17
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WhatWeb
2
4
  module Matcher
3
5
  class URL < Base
@@ -21,7 +23,7 @@ module WhatWeb
21
23
  elsif is_relative? && has_query?
22
24
  "#{target.uri.path}?#{target.uri.query}".match? /#{url}$/
23
25
  elsif !is_relative? && has_query?
24
- "#{target.uri.path}?#{target.uri.query}" == url
26
+ url == "#{target.uri.path}?#{target.uri.query}"
25
27
  else
26
28
  # !is_relative? && !has_query?
27
29
  target.uri.path == url
@@ -29,4 +31,4 @@ module WhatWeb
29
31
  end
30
32
  end
31
33
  end
32
- end
34
+ end
@@ -3,6 +3,7 @@
3
3
  module WhatWeb
4
4
  module Matcher
5
5
  class Version
6
+ attr_reader :name, :versions, :files, :url, :best_versions
6
7
  def initialize(name_product = nil, versions = nil, url = nil)
7
8
  raise ArgumentError, 'You must specify the name of the product' if name_product.nil?
8
9
  raise ArgumentError, 'You must specify the available versions of the product' if versions.nil?
@@ -10,51 +11,34 @@ module WhatWeb
10
11
 
11
12
  @name = name_product
12
13
  @versions = versions
13
- @files = Hash['filenames' => [], 'files' => [], 'md5' => []]
14
+ @files = { 'filenames' => [], 'files' => [], 'md5' => [] }
14
15
  @url = url
15
- @got_best_versions = false
16
16
  @best_versions = []
17
17
 
18
- versions.each do |version|
19
- version[1].each do |file|
20
- next if @files['filenames'].include? file[0]
21
- @files['filenames'].push(file[0])
22
- @files['files'].push(URI.join(@url.to_s, file[0]).to_s)
23
- target = Target.new(@files['files'].last)
24
- @files['md5'].push(target.md5sum)
25
- end
26
- end
27
- end
18
+ versions.each do |_version, value|
19
+ # e.g. key => "5.0.0"
20
+ # e.g. value => [["login.php", "59a69886a8c006d607369865f1b4a28c"]]]
21
+ value.each do |filename, _md5|
22
+ next if @files['filenames'].include? filename
23
+ @files['filenames'] << filename
28
24
 
29
- def best_matches
30
- return @best_versions if @got_best_versions == true
25
+ url = URI.join(@url.to_s, filename.to_s)
26
+ @files['files'] << url
31
27
 
32
- @versions.each do |version|
33
- count = 0
34
- version[1].each do |file|
35
- i = @files['filenames'].index(file[0])
36
- count += 1 if @files['md5'][i] == file[1]
37
- end
38
- while !@best_versions.empty? && @best_versions[0][1] < count
39
- @best_versions.delete_at(0)
40
- end
41
- if count > 0 && (@best_versions.empty? || @best_versions[0][1] == count) && \
42
- !@best_versions.include?([version[0], count])
43
- @best_versions.insert(0, [version[0], count])
28
+ target = Target.new(url)
29
+ @files['md5'] << target.md5sum
44
30
  end
45
31
  end
32
+ end
46
33
 
47
- @got_best_versions = true
48
- @best_versions.flatten!
49
-
50
- @best_versions.each_index { |i| @best_versions.delete_at(i + 1) }.sort!
51
-
52
- @best_versions
34
+ def best_match
35
+ versions.max { |x, y| x[1].length <=> y[1].length }
53
36
  end
54
37
 
55
38
  def matches_format
56
- best_matches if @got_best_versions == false
57
- @best_versions
39
+ return [] if versions.empty?
40
+ version, _files = best_match
41
+ [version]
58
42
  end
59
43
  end
60
44
  end
@@ -35,9 +35,8 @@ WhatWeb::Plugin.define "AChecker" do
35
35
  if / <\/td><td><span> Version: ([\d\.]+)<\/span><\/td>/.match?(target.body)
36
36
  version = target.body.scan(/ <\/td><td><span> Version: ([\d\.]+)<\/span><\/td>/)[0][0]
37
37
  m << { version: version }
38
- end
38
+ end
39
39
  end
40
-
41
40
  m
42
41
  end
43
42
  end
@@ -35,8 +35,7 @@ WhatWeb::Plugin.define "AMX-Mod-X" do
35
35
  if target.body =~ /amx_sql_host[\s]+"([^\"]*)"/ && target.body =~ /amx_sql_user[\s]+"([^\"]+)"/ && target.body =~ /amx_sql_pass[\s]+"([^\"]*)"/
36
36
  version = target.body.scan(/amx_sql_user[\s]+"([^\"]+)"/)[0][0] + ":" + target.body.scan(/amx_sql_pass[\s]+"([^\"]*)"/)[0][0] + "@" + target.body.scan(/amx_sql_host[\s]+"([^\"]+)"/)[0][0]
37
37
  m << { version: version }
38
- end
39
-
38
+ end
40
39
  m
41
40
  end
42
41
  end
@@ -39,40 +39,30 @@ WhatWeb::Plugin.define "Apache-Tomcat" do
39
39
 
40
40
  ]
41
41
 
42
- def random_string(length = 32)
43
- # should probably be moved somewhere else to be used in other plugins
44
- (1..length).map{ |_i| ('a'..'z').to_a[rand(26)] }.join
45
- end
46
-
47
42
  ##
48
43
  # get a random page to check for default 404 tomcat page
49
44
  ##
50
45
  def version_from_404(target)
51
- new_url = "http://#{target.uri.host}:#{target.uri.port}/#{random_string}"
46
+ new_url = "#{target.uri.scheme}://#{target.uri.host}:#{target.uri.port}/#{randstr}"
52
47
  info = []
53
- begin
54
- new_target = WhatWeb::Target.new(new_url)
55
-
56
- if new_target.status == 404
57
- v = new_target.body.scan(/Apache Tomcat\/([456]\.\d+\.\d+)/)[0]
58
- unless v.nil?
59
- info << { name: "Tomcat version", certainty: 100, version: v }
60
- end
48
+ new_target = WhatWeb::Target.new(new_url)
49
+ if new_target.status == 404
50
+ v = new_target.body.scan(/Apache Tomcat\/([456]\.\d+\.\d+)/)[0]
51
+ unless v.nil?
52
+ info << { name: "Tomcat version", certainty: 100, version: v }
61
53
  end
62
- rescue StandardError => _
63
- # do nothing
64
54
  end
65
55
  info
66
56
  end
67
57
 
68
58
  def aggressive(target)
69
- info = version_from_404(target)
70
-
71
- if info.empty?
59
+ begin
60
+ info = version_from_404(target)
61
+ rescue StandardError => e
62
+ p e
72
63
  []
73
- else
74
- info
75
- end
64
+ end
65
+ info
76
66
  # TODO version can also be retrieve from 500 error page
77
67
  end
78
68
  end
@@ -66,7 +66,6 @@ WhatWeb::Plugin.define "Contao" do
66
66
  to_download = files.map { |x| x[:path] }.sort.uniq
67
67
  downloads = {}
68
68
  to_download.each do |d|
69
-
70
69
  url = URI.join(target.uri.to_s, d).to_s
71
70
  new_target = WhatWeb::Target.new(url)
72
71
  downloads[d] = { md5sum: new_target.md5sum }
@@ -43,7 +43,7 @@ WhatWeb::Plugin.define "Country" do
43
43
  File.open(whatweb_folder + "/country-ips.dat", "wb") do |wfile|
44
44
  IO.foreach(whatweb_folder + "/IpToCountry.csv") do |line|
45
45
  next if line !~ /^"/
46
- s, e, d1, d2, co = line.delete!("\"").split(",")
46
+ s, e, _d1, _d2, co = line.delete!("\"").split(",")
47
47
  s, e = s.to_i, e.to_i
48
48
  if !last_start
49
49
  # initialize with first entry
@@ -1,4 +1,3 @@
1
- # coding: ascii-8bit
2
1
  # frozen_string_literal: true
3
2
 
4
3
  ##
@@ -1,4 +1,3 @@
1
- # coding: ascii-8bit
2
1
  # frozen_string_literal: true
3
2
 
4
3
  ##
@@ -92,8 +92,8 @@ WhatWeb::Plugin.define "Google-Hack-Honeypot" do
92
92
  # Password format: WebAdmin:ae[11-random-characters]
93
93
  # Refresh URL and see if the password changed
94
94
  if target.uri.to_s =~ /\/passwd\.txt$/ && target.body =~ /^WebAdmin:ae[\w]{11}$/
95
- status, url, ip, body, headers = open_target(target.uri.to_s)
96
- if body != target.body
95
+ new_target = WhatWeb::Target.new(target.uri.to_s)
96
+ if new_target.body != target.body
97
97
  m << { module: "wwwboard passwd.txt" }
98
98
  end
99
99
 
@@ -73,16 +73,13 @@ WhatWeb::Plugin.define "htpasswd" do
73
73
  # Display hash if unknown
74
74
  else
75
75
  { account: line.to_s }
76
- end
77
-
76
+ end
78
77
  # Display hash if user is not "admin"
79
78
  else
80
79
  { account: line.to_s }
81
80
  end
82
81
  end
83
-
84
82
  end
85
-
86
83
  m
87
84
  end
88
85
  end
@@ -1,4 +1,3 @@
1
- # coding: ascii-8bit
2
1
  # frozen_string_literal: true
3
2
 
4
3
  ##
@@ -13,7 +13,7 @@ WhatWeb::Plugin.define "Magento" do
13
13
  @website = "http://www.magentocommerce.com"
14
14
 
15
15
  @dorks = [
16
- "Magento is a trademark of Magento Inc. Copyright" "admin",
16
+ 'Magento is a trademark of Magento Inc. Copyright" "admin"',
17
17
  'intitle:"Magento Downloader" "Report All Bugs"'
18
18
  ]
19
19
 
@@ -41,14 +41,13 @@ WhatWeb::Plugin.define "MySource-Matrix" do
41
41
  version = target.body.scan(/MySource Matrix ([\d\.]+)/)[0][0]
42
42
  m << { version: version }
43
43
  end
44
- end
44
+ end
45
45
 
46
46
  # HTML comment
47
47
  if / Running Squiz MySource v([\d\.]+) \(Matrix\) - http:\/\/matrix.squiz.net\//.match?(target.body)
48
48
  version = target.body.scan(/ Running Squiz MySource v([\d\.]+) \(Matrix\) - http:\/\/matrix.squiz.net\//)[0][0]
49
49
  m << { version: version }
50
50
  end
51
-
52
51
  m
53
52
  end
54
53
  end
@@ -27,12 +27,11 @@ WhatWeb::Plugin.define "phpwcms" do
27
27
  m = []
28
28
 
29
29
  if /phpwcms \| open source web content management system/.match?(target.body)
30
- if / Release: ([\d\.\-A-Z]+) [\d\-]+\/\/-->/.match?(target.body)
31
- version = target.body.scan(/ Release: ([\d\.\-A-Z]+) [\d\-]+\/\/-->/)[0][0]
30
+ if /Release: ([\d\.\-A-Z]+) [\d\-]+\/\/-->/.match?(target.body)
31
+ version = target.body.scan(/Release: ([\d\.\-A-Z]+) [\d\-]+\/\/-->/)[0][0]
32
32
  m << { version: version }
33
- end
33
+ end
34
34
  end
35
-
36
35
  m
37
36
  end
38
37
  end
@@ -26,12 +26,10 @@ WhatWeb::Plugin.define "Title" do
26
26
  title = html.css("title")
27
27
  if title
28
28
  # Give warining if title element contains newline(s)
29
- if title.text.include? "\n"
30
- m << { name: "WARNING", module: "Title element contains newline(s)!" }
31
- end
29
+ m << { name: "WARNING", module: "Title element contains newline(s)!" } if title.text.include? "\n"
32
30
  # Strip all newlines in title string (for better output)
33
31
  m << { name: "page title", string: title.text.strip }
34
- end
32
+ end
35
33
  m
36
34
  end
37
35
  end
@@ -18,12 +18,11 @@ WhatWeb::Plugin.define "Vulnerable-To-XSS" do
18
18
  m = []
19
19
  result = ""
20
20
  if /<script>([\s]*)(alert\([a-zA-Z0-9\/\'\"]+\))([\s]*[\;]?[\s]*)<\/script>/i.match?(target.body)
21
- version = target.body.scan(/<script>([\s]*)(alert\([a-zA-Z0-9\/\'\"]+\))[\s]*[\;]?[\s]*<\/script>/i) { |match|
21
+ target.body.scan(/<script>([\s]*)(alert\([a-zA-Z0-9\/\'\"]+\))[\s]*[\;]?[\s]*<\/script>/i) { |match|
22
22
  result << "#{match} "
23
23
  }
24
24
  m << { version: result, certainty: 25 }
25
25
  end
26
-
27
26
  m
28
27
  end
29
28
  end
@@ -8,7 +8,7 @@ module WhatWeb
8
8
  attr_reader :url, :body, :headers, :raw_headers, :raw_response, :status, :uri
9
9
 
10
10
  def initialize(url, response = nil)
11
- @url = url
11
+ @url = url.to_s
12
12
  @response = response || open_url
13
13
  build
14
14
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WhatWeb
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0".freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_whatweb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manabu Niseki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-18 00:00:00.000000000 Z
11
+ date: 2018-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -160,6 +160,7 @@ extra_rdoc_files: []
160
160
  files:
161
161
  - ".gitignore"
162
162
  - ".rspec"
163
+ - ".rubocop.yml"
163
164
  - ".travis.yml"
164
165
  - Gemfile
165
166
  - LICENSE.txt