netsoft-rubocop 1.0.0

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,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8cf6516546fb841a50c1ae074379461322412af26b550d185a29732bd89ff601
4
+ data.tar.gz: b7f3bf4846b605d70a81c9f6dafa991eb14d33a036e67895d09caf921d38e89e
5
+ SHA512:
6
+ metadata.gz: d6279ee377b16ca8faed2b20d9ee54d881f2e40acc58a272ae779936cda7319a217c352e9edcc44a88219f0a0d82ccc4d5ea1372ab891b1dbac50b17317b63fd
7
+ data.tar.gz: 3c6376c673f1d22ac69c87b4051963af7d6a941541f4fb0b4f346ac8fad46151ab45f2ac480251015315101c2b5e3cab5857cc9bf1c9fb5e4e71189479c5bca7
@@ -0,0 +1,141 @@
1
+ version: 2
2
+
3
+ defaults: &defaults
4
+ docker: &ruby_image
5
+ - &ruby_image
6
+ image: circleci/ruby:2.4.4-stretch
7
+ environment:
8
+ CIRCLE_ARTIFACTS: /tmp/circelci-artifacts
9
+ RUBYOPT: '-KU -E utf-8:utf-8'
10
+ BUNDLE_PATH: vendor/bundle
11
+ BUNDLE_VERSION: 1.15.2
12
+ BUNDLE_JOBS: 4
13
+ BUNDLE_RETRY: 3
14
+
15
+ filters:
16
+ test: &filter_test
17
+ filters:
18
+ tags:
19
+ ignore: /^v.*/
20
+ beta: &filter_beta
21
+ filters:
22
+ branches:
23
+ ignore: /.*/
24
+ tags:
25
+ only: /^v[0-9]+(\.[0-9]+)+(\.[a-z].+).*/
26
+ release: &filter_release
27
+ filters:
28
+ branches:
29
+ ignore: /.*/
30
+ tags:
31
+ only: /^v[0-9]+(\.[0-9]+)+/
32
+
33
+ workflows:
34
+ version: 2
35
+ build_test:
36
+ jobs:
37
+ - "Checkout":
38
+ <<: *filter_test
39
+ context: org-global
40
+ - "Build":
41
+ <<: *filter_test
42
+ context: org-global
43
+ requires:
44
+ - "Checkout"
45
+ build_test_beta:
46
+ jobs:
47
+ - "Checkout":
48
+ <<: *filter_beta
49
+ context: org-global
50
+ - "Build":
51
+ <<: *filter_beta
52
+ context: org-global
53
+ requires:
54
+ - "Checkout"
55
+ - "Publish":
56
+ <<: *filter_beta
57
+ context: org-global
58
+ requires:
59
+ - "Build"
60
+ build_test_release:
61
+ jobs:
62
+ - "Checkout":
63
+ <<: *filter_release
64
+ context: org-global
65
+ - "Build":
66
+ <<: *filter_release
67
+ context: org-global
68
+ requires:
69
+ - "Checkout"
70
+ - "Publish":
71
+ <<: *filter_release
72
+ context: org-global
73
+ requires:
74
+ - "Build"
75
+
76
+ jobs:
77
+ "Checkout":
78
+ <<: *defaults
79
+ steps:
80
+ - attach_workspace:
81
+ at: .
82
+ - checkout
83
+
84
+ - restore_cache:
85
+ keys:
86
+ - netsoft-rubocop-bundle-v2-{{ checksum "Gemfile" }}-{{ checksum "netsoft-rubocop.gemspec" }}
87
+ - run:
88
+ name: Install bundler
89
+ command: gem install bundler --version=$BUNDLE_VERSION
90
+ - run:
91
+ name: Bundle Install
92
+ command: |-
93
+ bundle _${BUNDLE_VERSION}_ check || bundle _${BUNDLE_VERSION}_ install --retry=$BUNDLE_RETRY
94
+ - save_cache:
95
+ key: netsoft-rubocop--bundle-v2-{{ checksum "Gemfile" }}-{{ checksum "netsoft-rubocop.gemspec" }}
96
+ paths:
97
+ - vendor/bundle
98
+ - Gemfile.lock
99
+
100
+ - persist_to_workspace:
101
+ root: .
102
+ paths: .
103
+ "Build":
104
+ <<: *defaults
105
+ steps:
106
+ - attach_workspace:
107
+ at: .
108
+ - run:
109
+ name: Install bundler
110
+ command: gem install bundler --version=$BUNDLE_VERSION
111
+ - run:
112
+ name: Build gem
113
+ command: |-
114
+ gem build *.gemspec
115
+ - run:
116
+ name: "Install netsoft-danger"
117
+ command: |-
118
+ gem install netsoft-danger
119
+ - run:
120
+ name: Run rubocop
121
+ command: |-
122
+ netsoft-circle rubocop
123
+ - run:
124
+ name: Run Danger
125
+ command: |-
126
+ danger
127
+ - store_artifacts:
128
+ path: /tmp/circelci-artifacts
129
+ "Publish":
130
+ <<: *defaults
131
+ steps:
132
+ - attach_workspace:
133
+ at: .
134
+ - run:
135
+ name: Deploy to gem server
136
+ command: |-
137
+ ./bin/tag_check.sh
138
+ ./bin/setup-rubygems.sh
139
+ rm -rf pkg
140
+ rake build
141
+ gem push pkg/*.gem
@@ -0,0 +1,56 @@
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
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ # Ignore Byebug command history file.
17
+ .byebug_history
18
+
19
+ ## Specific to RubyMotion:
20
+ .dat*
21
+ .repl_history
22
+ build/
23
+ *.bridgesupport
24
+ build-iPhoneOS/
25
+ build-iPhoneSimulator/
26
+
27
+ ## Specific to RubyMotion (use of CocoaPods):
28
+ #
29
+ # We recommend against adding the Pods directory to your .gitignore. However
30
+ # you should judge for yourself, the pros and cons are mentioned at:
31
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
32
+ #
33
+ # vendor/Pods/
34
+
35
+ ## Documentation cache and generated files:
36
+ /.yardoc/
37
+ /_yardoc/
38
+ /doc/
39
+ /rdoc/
40
+
41
+ ## Environment normalization:
42
+ /.bundle/
43
+ /vendor/bundle
44
+ /lib/bundler/man/
45
+
46
+ # for a library or gem, you might want to ignore these files since the code is
47
+ # intended to run in multiple environments; otherwise, check them in:
48
+ # Gemfile.lock
49
+ # .ruby-version
50
+ # .ruby-gemset
51
+
52
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
53
+ .rvmrc
54
+
55
+ Gemfile.lock
56
+ .ruby-*
@@ -0,0 +1 @@
1
+ inherit_from: default.yml
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [1.0.0] - 2019-08-28
11
+ ### Added
12
+ - Default rubocop config
13
+ - Netsoft/AuthHttpPositionalArguments cop
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ danger.import_dangerfile(gem: 'netsoft-danger')
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ # Specify your gem's dependencies in netsoft-rubocop.gemspec
8
+ gemspec
@@ -0,0 +1,45 @@
1
+ # netsoft-rubocop
2
+
3
+ Hubstaff style guides and shared style configs.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your project Gemfile:
8
+
9
+ ```ruby
10
+ group :test, :development do
11
+ gem 'netsoft-rubocop', github: 'NetsoftHoldings/netsoft-rubocop', tag: 'v1.0.0'
12
+ end
13
+ ```
14
+
15
+ And then run:
16
+
17
+ ```bash
18
+ $ bundle install
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ Create a `.rubocop.yml` with the following directives:
24
+
25
+ ```yaml
26
+ inherit_gem:
27
+ netsoft-rubocop:
28
+ - default.yml
29
+ ```
30
+
31
+ Now, run:
32
+
33
+ ```bash
34
+ $ bundle exec rubocop
35
+ ```
36
+
37
+ You do not need to include rubocop directly in your application's dependencies.
38
+ netsoft-rubocop will include a specific version of `rubocop`, `rubocop-performance`,
39
+ `rubocop-rails` and `rubocop-rspec` that is shared across all projects.
40
+
41
+ ## Releasing
42
+
43
+ 1. Update version.rb file accordingly.
44
+ 2. Tag the release: `git tag vVERSION`
45
+ 3. Push changes: `git push --tags`
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ task default: :spec
@@ -0,0 +1,3 @@
1
+ mkdir ~/.gem
2
+ echo -e "---\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
3
+ chmod 0600 ~/.gem/credentials
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+
3
+ tag=`git describe --tags --exact-match HEAD 2> /dev/null`
4
+
5
+ if [ $? -eq 0 ]; then
6
+ version=`grep VERSION lib/netsoft/rubocop/version.rb | sed -e "s/.*'\([^']*\)'.*/\1/"`
7
+
8
+ if [ "v$version" = "$tag" ]; then
9
+ echo "Revision $tag Matches $version"
10
+ else
11
+ echo "Revision $tag does not match $version"
12
+ exit 2
13
+ fi
14
+ else
15
+ echo "No tag found"
16
+ exit 1
17
+ fi
@@ -0,0 +1,117 @@
1
+ require:
2
+ - ./lib/netsoft/rubocop/cops/auth_http_positional_arguments
3
+ - rubocop-rails
4
+ - rubocop-performance
5
+ - rubocop-rspec
6
+
7
+ AllCops:
8
+ TargetRubyVersion: 2.4
9
+ TargetRailsVersion: 5.2
10
+ DisplayStyleGuide: true
11
+ StyleGuideBaseURL: https://rubystyle.guide
12
+ Exclude:
13
+ - 'db/**/*'
14
+ - 'coverage/**/*'
15
+ - 'log/**/*'
16
+ - 'public/**/*'
17
+ - 'tmp/**/*'
18
+ - 'spec/dummy/**/*'
19
+ - 'vendor/**/*'
20
+ - 'gemfiles/**/*'
21
+ - 'node_modules/**/*'
22
+
23
+ Naming/RescuedExceptionsVariableName:
24
+ PreferredName: ex
25
+
26
+ Naming/UncommunicativeMethodParamName:
27
+ AllowedNames:
28
+ - me
29
+ - ex
30
+
31
+ Layout/AlignHash:
32
+ EnforcedHashRocketStyle: table
33
+ EnforcedColonStyle: table
34
+
35
+ Layout/ExtraSpacing:
36
+ AllowForAlignment: true
37
+
38
+ Layout/IndentAssignment:
39
+ IndentationWidth: 4
40
+
41
+ Layout/IndentFirstArrayElement:
42
+ EnforcedStyle: consistent
43
+ IndentationWidth: 4
44
+
45
+ Layout/IndentFirstHashElement:
46
+ EnforcedStyle: consistent
47
+ IndentationWidth: 4
48
+
49
+ Layout/SpaceInsideBlockBraces:
50
+ EnforcedStyle: space
51
+ SpaceBeforeBlockParameters: true
52
+
53
+ Layout/SpaceInsideHashLiteralBraces:
54
+ EnforcedStyle: no_space
55
+
56
+ Lint/AmbiguousBlockAssociation:
57
+ Exclude:
58
+ - spec/**/*
59
+
60
+ Rails:
61
+ Enabled: true
62
+
63
+ Rails/HttpPositionalArguments:
64
+ Enabled: false
65
+
66
+ Rails/SkipsModelValidations:
67
+ Whitelist:
68
+ - touch
69
+ - update_attribute
70
+ - update_counters
71
+ - increment_counter
72
+ - decrement_counter
73
+
74
+ Netsoft/AuthHttpPositionalArguments:
75
+ Enabled: true
76
+ Include:
77
+ - 'spec/controllers/**/*'
78
+
79
+ RSpec/ExpectChange:
80
+ EnforcedStyle: block
81
+
82
+ RSpec/ImplicitSubject:
83
+ Enabled: false
84
+
85
+ RSpec/MessageSpies:
86
+ Enabled: false
87
+
88
+ RSpec/NamedSubject:
89
+ Enabled: false
90
+
91
+ RSpec/NestedGroups:
92
+ Enabled: false
93
+
94
+ RSpec/NotToNot:
95
+ EnforcedStyle: to_not
96
+
97
+ Style/AndOr:
98
+ EnforcedStyle: conditionals
99
+
100
+ Style/BlockDelimiters:
101
+ EnforcedStyle: semantic
102
+ AllowBracesOnProceduralOneLiners: true
103
+
104
+ Style/MultilineBlockChain:
105
+ Enabled: false
106
+
107
+ Style/RescueModifier:
108
+ Enabled: false
109
+
110
+ Style/TrailingCommaInArrayLiteral:
111
+ EnforcedStyleForMultiline: comma
112
+
113
+ Style/TrailingCommaInHashLiteral:
114
+ EnforcedStyleForMultiline: comma
115
+
116
+ Metrics:
117
+ Enabled: false
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'netsoft/rubocop/version'
4
+
5
+ module Netsoft
6
+ # Hubstaff shared rubocop style configs
7
+ module Rubocop
8
+ end
9
+ end
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop/cop/mixin/target_rails_version'
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Netsoft
8
+ # This cop is used to identify usages of http methods like `get`, `post`,
9
+ # `put`, `patch` without the usage of keyword arguments in your tests and
10
+ # change them to use keyword args. This cop only applies to Rails >= 5.
11
+ # If you are running Rails < 5 you should disable the
12
+ # Netsoft/HttpPositionalArguments cop or set your TargetRailsVersion in your
13
+ # .rubocop.yml file to 4.0, etc.
14
+ #
15
+ # @example
16
+ # # bad
17
+ # get :new, { user_id: 1}
18
+ #
19
+ # # good
20
+ # get :new, params: { user_id: 1 }
21
+ class AuthHttpPositionalArguments < Cop
22
+ extend RuboCop::Cop::TargetRailsVersion
23
+
24
+ MSG = 'Use keyword arguments instead of positional arguments for http call: `%<verb>s`.'
25
+ KEYWORD_ARGS = %i[method params session body flash xhr as headers env].freeze
26
+ HTTP_METHODS = %i[get post put patch delete head].freeze
27
+ HTTP_AUTH_METHODS = %i[get_with post_with put_with patch_with delete_with].freeze
28
+
29
+ minimum_target_rails_version 5.0
30
+
31
+ def_node_matcher :http_request?, <<-PATTERN
32
+ (send nil? {#{HTTP_METHODS.map(&:inspect).join(' ')}} !nil? $_ ...)
33
+ PATTERN
34
+
35
+ def_node_matcher :http_auth_request?, <<-PATTERN
36
+ (send nil? {#{HTTP_AUTH_METHODS.map(&:inspect).join(' ')}} !nil? !nil? $_ ...)
37
+ PATTERN
38
+
39
+ def on_send(node)
40
+ message = format(MSG, verb: node.method_name)
41
+
42
+ http_request?(node) do |data|
43
+ return unless needs_conversion?(data)
44
+
45
+ add_offense(node, location: :selector, message: message)
46
+ end
47
+
48
+ http_auth_request?(node) do |data|
49
+ return unless auth_needs_conversion?(data)
50
+
51
+ add_offense(node, location: :selector, message: message)
52
+ end
53
+ end
54
+
55
+ # given a pre Rails 5 method: get :new, {user_id: @user.id}, {}
56
+ #
57
+ # @return lambda of auto correct procedure
58
+ # the result should look like:
59
+ # get :new, params: { user_id: @user.id }, session: {}
60
+ # the http_method is the method used to call the controller
61
+ # the controller node can be a symbol, method, object or string
62
+ # that represents the path/action on the Rails controller
63
+ # the data is the http parameters and environment sent in
64
+ # the Rails 5 http call
65
+ def autocorrect(node)
66
+ has_auth = HTTP_AUTH_METHODS.include?(node.method_name.to_sym)
67
+ if has_auth
68
+ user, http_path, *data = *node.arguments
69
+ else
70
+ http_path, *data = *node.arguments
71
+ end
72
+
73
+ controller_action = http_path.source
74
+ params = convert_hash_data(data.first, 'params')
75
+ session = convert_hash_data(data.last, 'session') if data.size > 1
76
+ # the range of the text to replace, which is the whole line
77
+ code_to_replace = node.loc.expression
78
+ # what to replace with
79
+ format = parentheses_format(node)
80
+ new_code = format(format, name: node.method_name,
81
+ action: has_auth ? [user.source, controller_action].join(',') : controller_action,
82
+ params: params, session: session)
83
+ ->(corrector) { corrector.replace(code_to_replace, new_code) }
84
+ end
85
+
86
+ private
87
+
88
+ def needs_conversion?(data)
89
+ return true unless data.hash_type?
90
+
91
+ data.each_pair.none? do |pair|
92
+ special_keyword_arg?(pair.key) ||
93
+ format_arg?(pair.key) && data.pairs.one?
94
+ end
95
+ end
96
+
97
+ def auth_needs_conversion?(data)
98
+ return true unless data.hash_type?
99
+
100
+ data.each_pair.none? do |pair|
101
+ special_keyword_arg?(pair.key) ||
102
+ format_arg?(pair.key) && data.pairs.one?
103
+ end
104
+ end
105
+
106
+ def special_keyword_arg?(node)
107
+ node.sym_type? && KEYWORD_ARGS.include?(node.value)
108
+ end
109
+
110
+ def format_arg?(node)
111
+ node.sym_type? && node.value == :format
112
+ end
113
+
114
+ def convert_hash_data(data, type)
115
+ return '' if data.hash_type? && data.empty?
116
+
117
+ hash_data = if data.hash_type?
118
+ format('{ %<data>s }',
119
+ data: data.pairs.map(&:source).join(', '))
120
+ else
121
+ # user supplies an object,
122
+ # no need to surround with braces
123
+ data.source
124
+ end
125
+
126
+ format(', %<type>s: %<hash_data>s', type: type, hash_data: hash_data)
127
+ end
128
+
129
+ def parentheses_format(node)
130
+ if parentheses?(node)
131
+ '%<name>s(%<action>s%<params>s%<session>s)'
132
+ else
133
+ '%<name>s %<action>s%<params>s%<session>s'
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Netsoft
4
+ module Rubocop
5
+ VERSION = '1.0.0'
6
+ end
7
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'netsoft/rubocop/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'netsoft-rubocop'
9
+ spec.version = Netsoft::Rubocop::VERSION
10
+ spec.authors = ['Alex Yarotsky']
11
+ spec.email = ['alex.yarotsky@hubstaff.com']
12
+
13
+ spec.summary = 'Hubstaff style guides and shared style configs.'
14
+ spec.homepage = 'https://github.com/netsoftHoldings/netsoft-rubocop'
15
+
16
+ # Specify which files should be added to the gem when it is released.
17
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ end
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = %w[lib]
24
+
25
+ spec.add_development_dependency 'bundler', '~> 1.15'
26
+ spec.add_development_dependency 'rake', '~> 12.0'
27
+
28
+ spec.add_runtime_dependency 'rubocop', '~> 0.74.0'
29
+ spec.add_runtime_dependency 'rubocop-performance', '~> 1.4'
30
+ spec.add_runtime_dependency 'rubocop-rails', '~> 2.2'
31
+ spec.add_runtime_dependency 'rubocop-rspec', '~> 1.35'
32
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: netsoft-rubocop
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Alex Yarotsky
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-09-02 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.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.74.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.74.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop-performance
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.35'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.35'
97
+ description:
98
+ email:
99
+ - alex.yarotsky@hubstaff.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".circleci/config.yml"
105
+ - ".gitignore"
106
+ - ".rubocop.yml"
107
+ - CHANGELOG.md
108
+ - Dangerfile
109
+ - Gemfile
110
+ - README.md
111
+ - Rakefile
112
+ - bin/setup-rubygems.sh
113
+ - bin/tag_check.sh
114
+ - default.yml
115
+ - lib/netsoft/rubocop.rb
116
+ - lib/netsoft/rubocop/cops/auth_http_positional_arguments.rb
117
+ - lib/netsoft/rubocop/version.rb
118
+ - netsoft-rubocop.gemspec
119
+ homepage: https://github.com/netsoftHoldings/netsoft-rubocop
120
+ licenses: []
121
+ metadata: {}
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 2.7.7
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Hubstaff style guides and shared style configs.
142
+ test_files: []