diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5be0788 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/.bundle/ +/.yardoc +/Gemfile.lock +/_yardoc/ +/coverage/ +/doc/ +/pkg/ +/spec/reports/ +/tmp/ +.DS_Store diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..7dd5f72 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1 @@ +inherit_from: default.yml \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..15baebf --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +# Specify dependencies in iex-style.gemspec +gemspec diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..82c6870 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 InterExchange. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 39aeb4b..4b4d50e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,43 @@ # iex-style InterExchange shared style configs. + +## Installation + +Add this line to your application's Gemfile: + +```ruby +group :test, :development do + gem "iex-style", github: "interexchange/iex-style" +end +``` + +Or, for a Ruby library, add this to your gemspec: + +```ruby +spec.add_development_dependency "iex-style" +``` + +And then run: + +```bash +$ bundle install +``` + +## Usage + +Create a `.rubocop.yml` with the following directives: + +```yaml +inherit_gem: + iex-style: + - default.yml +``` + +Now, run: + +```bash +$ bundle exec rubocop +``` + +You do not need to include rubocop directly in your application's dependencies. iex-style will include a specific version of `rubocop` that is shared across all projects. diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..c702cfc --- /dev/null +++ b/Rakefile @@ -0,0 +1 @@ +require 'bundler/gem_tasks' diff --git a/default.yml b/default.yml new file mode 100644 index 0000000..41e400d --- /dev/null +++ b/default.yml @@ -0,0 +1,144 @@ +AllCops: + Exclude: + - 'db/schema.rb' + - 'db/migrate/**/*.rb' + +Layout/ArgumentAlignment: + EnforcedStyle: with_fixed_indentation +Layout/ParameterAlignment: + EnforcedStyle: with_fixed_indentation +Layout/DotPosition: + EnforcedStyle: trailing +Layout/EmptyLinesAroundAttributeAccessor: + Enabled: true +Layout/FirstArrayElementIndentation: + EnforcedStyle: consistent +Layout/LineLength: + Enabled: false +Layout/MultilineMethodCallBraceLayout: + EnforcedStyle: new_line +Layout/MultilineMethodCallIndentation: + EnforcedStyle: indented +Layout/MultilineOperationIndentation: + Enabled: false +Layout/SpaceAroundMethodCallOperator: + Enabled: true +Layout/SpaceBeforeFirstArg: + Enabled: true +Layout/SpaceInLambdaLiteral: + EnforcedStyle: require_space +Layout/SpaceInsideStringInterpolation: + EnforcedStyle: space + +Lint/AmbiguousBlockAssociation: + Exclude: + - 'spec/**/*.rb' + - 'features/**/*.rb' +Lint/RaiseException: + Enabled: true +Lint/StructNewOverride: + Enabled: true + +Metrics/AbcSize: + Exclude: + - 'config/**/*.rb' +Metrics/BlockLength: + Exclude: + - 'config/**/*.rb' + - 'db/seeds/*' + - 'features/**/*.rb' + - 'lib/factories/**/*.rb' + - 'lib/tasks/**/*.rake' + - 'spec/**/*.rb' +Metrics/BlockNesting: + Exclude: + - 'features/**/*.rb' + - 'spec/**/*.rb' +Metrics/MethodLength: + Enabled: false +Metrics/ModuleLength: + Enabled: false + +# While this might be reasonable for models, there are plenty of times where prefixing with get +# in controllers makes perfect sense. EG: #get_layout +Naming/AccessorMethodName: + Enabled: true + Exclude: + - 'app/controllers/**/*.rb' +Naming/MemoizedInstanceVariableName: + Enabled: false +Naming/VariableNumber: + Enabled: false + +Security/Eval: + Exclude: + - 'spec/**/*.rb' + - 'features/**/*.rb' +Style/AccessModifierDeclarations: + EnforcedStyle: inline +Style/AndOr: + Enabled: false +Style/ClassAndModuleChildren: + Enabled: false +Style/CollectionMethods: + Enabled: false +Style/Documentation: + Enabled: false +Style/DoubleNegation: + Enabled: false +Style/EmptyMethod: + Enabled: false +Style/ExponentialNotation: + Enabled: true +Style/FormatStringToken: + Exclude: + - 'config/**/*.rb' +Style/FrozenStringLiteralComment: + EnforcedStyle: never +Style/GuardClause: + Enabled: false +Style/HashEachMethods: + Enabled: true +Style/HashTransformKeys: + Enabled: true +Style/HashTransformValues: + Enabled: true +Style/IdenticalConditionalBranches: + Exclude: + - 'spec/**/*.rb' +Style/IfUnlessModifier: + Enabled: false +Style/Lambda: + EnforcedStyle: literal +Style/NegatedIf: + Enabled: false +Style/NumericLiterals: + Exclude: + - 'lib/tasks/data/fix.rake' +Style/NumericPredicate: + Enabled: false +Style/ParallelAssignment: + Enabled: false +Style/RegexpLiteral: + AllowInnerSlashes: false + EnforcedStyle: mixed +Style/SlicingWithRange: + Enabled: true +Style/StringLiterals: + EnforcedStyle: double_quotes +Style/SymbolArray: + EnforcedStyle: brackets +Style/TernaryParentheses: + EnforcedStyle: require_parentheses_when_complex +Style/TrailingCommaInArguments: + EnforcedStyleForMultiline: consistent_comma +Style/TrailingCommaInArrayLiteral: + EnforcedStyleForMultiline: consistent_comma +Style/TrailingCommaInHashLiteral: + EnforcedStyleForMultiline: consistent_comma +Style/TrailingUnderscoreVariable: + Enabled: false +Style/WordArray: + Enabled: false +Style/YodaCondition: + Enabled: false diff --git a/iex-style.gemspec b/iex-style.gemspec new file mode 100644 index 0000000..da8a20e --- /dev/null +++ b/iex-style.gemspec @@ -0,0 +1,18 @@ +# coding: utf-8 +Gem::Specification.new do |spec| + spec.name = "iex-style" + spec.version = "1.0.0" + spec.authors = ["InterExchange"] + spec.email = ["support@interexchange.org"] + + spec.summary = "InterExchange Rails shared style configurations." + spec.homepage = "https://github.com/interexchange/iex-style" + + spec.files = `git ls-files -z`.split("\x0").reject do |f| + f.match(%r{^(test|spec|features)/}) + end + + spec.add_dependency "rubocop", "~> 0.83.0" # Limited by Hound support + spec.add_development_dependency "bundler" + spec.add_development_dependency "rake" +end