├── .codeclimate.yml ├── .gitignore ├── .rubocop.yml ├── .travis.yml ├── Gemfile ├── LICENSE.txt ├── README.md ├── Rakefile ├── bin ├── console └── setup ├── elixirize.gemspec ├── lib ├── elixirize.rb └── elixirize │ └── version.rb └── test ├── elixirize_test.rb └── test_helper.rb /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | --- 2 | engines: 3 | duplication: 4 | enabled: true 5 | config: 6 | languages: 7 | - ruby 8 | rubocop: 9 | enabled: true 10 | ratings: 11 | paths: 12 | - "lib/elixirize.rb" 13 | exclude_paths: 14 | - test/ 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.bundle/ 2 | /.yardoc 3 | /Gemfile.lock 4 | /_yardoc/ 5 | /coverage/ 6 | /doc/ 7 | /pkg/ 8 | /spec/reports/ 9 | /tmp/ 10 | **/*.swp 11 | 12 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | AllCops: 2 | DisabledByDefault: true 3 | 4 | #################### Lint ################################ 5 | 6 | Lint/AmbiguousOperator: 7 | Description: >- 8 | Checks for ambiguous operators in the first argument of a 9 | method invocation without parentheses. 10 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parens-as-args' 11 | Enabled: true 12 | 13 | Lint/AmbiguousRegexpLiteral: 14 | Description: >- 15 | Checks for ambiguous regexp literals in the first argument of 16 | a method invocation without parenthesis. 17 | Enabled: true 18 | 19 | Lint/AssignmentInCondition: 20 | Description: "Don't use assignment in conditions." 21 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#safe-assignment-in-condition' 22 | Enabled: true 23 | 24 | Lint/BlockAlignment: 25 | Description: 'Align block ends correctly.' 26 | Enabled: true 27 | 28 | Lint/CircularArgumentReference: 29 | Description: "Don't refer to the keyword argument in the default value." 30 | Enabled: true 31 | 32 | Lint/ConditionPosition: 33 | Description: >- 34 | Checks for condition placed in a confusing position relative to 35 | the keyword. 36 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#same-line-condition' 37 | Enabled: true 38 | 39 | Lint/Debugger: 40 | Description: 'Check for debugger calls.' 41 | Enabled: true 42 | 43 | Lint/DefEndAlignment: 44 | Description: 'Align ends corresponding to defs correctly.' 45 | Enabled: true 46 | 47 | Lint/DeprecatedClassMethods: 48 | Description: 'Check for deprecated class method calls.' 49 | Enabled: true 50 | 51 | Lint/DuplicateMethods: 52 | Description: 'Check for duplicate methods calls.' 53 | Enabled: true 54 | 55 | Lint/EachWithObjectArgument: 56 | Description: 'Check for immutable argument given to each_with_object.' 57 | Enabled: true 58 | 59 | Lint/ElseLayout: 60 | Description: 'Check for odd code arrangement in an else block.' 61 | Enabled: true 62 | 63 | Lint/EmptyEnsure: 64 | Description: 'Checks for empty ensure block.' 65 | Enabled: true 66 | 67 | Lint/EmptyInterpolation: 68 | Description: 'Checks for empty string interpolation.' 69 | Enabled: true 70 | 71 | Lint/EndAlignment: 72 | Description: 'Align ends correctly.' 73 | Enabled: true 74 | 75 | Lint/EndInMethod: 76 | Description: 'END blocks should not be placed inside method definitions.' 77 | Enabled: true 78 | 79 | Lint/EnsureReturn: 80 | Description: 'Do not use return in an ensure block.' 81 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-return-ensure' 82 | Enabled: true 83 | 84 | Security/Eval: 85 | Description: 'The use of eval represents a serious security risk.' 86 | Enabled: true 87 | 88 | Lint/FormatParameterMismatch: 89 | Description: 'The number of parameters to format/sprint must match the fields.' 90 | Enabled: true 91 | 92 | Lint/HandleExceptions: 93 | Description: "Don't suppress exception." 94 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions' 95 | Enabled: true 96 | 97 | Lint/InvalidCharacterLiteral: 98 | Description: >- 99 | Checks for invalid character literals with a non-escaped 100 | whitespace character. 101 | Enabled: true 102 | 103 | Lint/LiteralInCondition: 104 | Description: 'Checks of literals used in conditions.' 105 | Enabled: true 106 | 107 | Lint/LiteralInInterpolation: 108 | Description: 'Checks for literals used in interpolation.' 109 | Enabled: true 110 | 111 | Lint/Loop: 112 | Description: >- 113 | Use Kernel#loop with break rather than begin/end/until or 114 | begin/end/while for post-loop tests. 115 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#loop-with-break' 116 | Enabled: true 117 | 118 | Lint/NestedMethodDefinition: 119 | Description: 'Do not use nested method definitions.' 120 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-methods' 121 | Enabled: true 122 | 123 | Lint/NonLocalExitFromIterator: 124 | Description: 'Do not use return in iterator to cause non-local exit.' 125 | Enabled: true 126 | 127 | Lint/ParenthesesAsGroupedExpression: 128 | Description: >- 129 | Checks for method calls with a space before the opening 130 | parenthesis. 131 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parens-no-spaces' 132 | Enabled: true 133 | 134 | Lint/RequireParentheses: 135 | Description: >- 136 | Use parentheses in the method call to avoid confusion 137 | about precedence. 138 | Enabled: true 139 | 140 | Lint/RescueException: 141 | Description: 'Avoid rescuing the Exception class.' 142 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-blind-rescues' 143 | Enabled: true 144 | 145 | Lint/ShadowingOuterLocalVariable: 146 | Description: >- 147 | Do not use the same name as outer local variable 148 | for block arguments or block local variables. 149 | Enabled: true 150 | 151 | Lint/StringConversionInInterpolation: 152 | Description: 'Checks for Object#to_s usage in string interpolation.' 153 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-to-s' 154 | Enabled: true 155 | 156 | Lint/UnderscorePrefixedVariableName: 157 | Description: 'Do not use prefix `_` for a variable that is used.' 158 | Enabled: true 159 | 160 | Lint/UnneededDisable: 161 | Description: >- 162 | Checks for rubocop:disable comments that can be removed. 163 | Note: this cop is not disabled when disabling all cops. 164 | It must be explicitly disabled. 165 | Enabled: true 166 | 167 | Lint/UnusedBlockArgument: 168 | Description: 'Checks for unused block arguments.' 169 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars' 170 | Enabled: true 171 | 172 | Lint/UnusedMethodArgument: 173 | Description: 'Checks for unused method arguments.' 174 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars' 175 | Enabled: true 176 | 177 | Lint/UnreachableCode: 178 | Description: 'Unreachable code.' 179 | Enabled: true 180 | 181 | Lint/UselessAccessModifier: 182 | Description: 'Checks for useless access modifiers.' 183 | Enabled: true 184 | 185 | Lint/UselessAssignment: 186 | Description: 'Checks for useless assignment to a local variable.' 187 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars' 188 | Enabled: true 189 | 190 | Lint/UselessComparison: 191 | Description: 'Checks for comparison of something with itself.' 192 | Enabled: true 193 | 194 | Lint/UselessElseWithoutRescue: 195 | Description: 'Checks for useless `else` in `begin..end` without `rescue`.' 196 | Enabled: true 197 | 198 | Lint/UselessSetterCall: 199 | Description: 'Checks for useless setter call to a local variable.' 200 | Enabled: true 201 | 202 | Lint/Void: 203 | Description: 'Possible use of operator/literal/variable in void context.' 204 | Enabled: true 205 | 206 | ###################### Metrics #################################### 207 | 208 | Metrics/AbcSize: 209 | Description: >- 210 | A calculated magnitude based on number of assignments, 211 | branches, and conditions. 212 | Reference: 'http://c2.com/cgi/wiki?AbcMetric' 213 | Enabled: false 214 | Max: 20 215 | 216 | Metrics/BlockNesting: 217 | Description: 'Avoid excessive block nesting' 218 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#three-is-the-number-thou-shalt-count' 219 | Enabled: true 220 | Max: 4 221 | 222 | Metrics/ClassLength: 223 | Description: 'Avoid classes longer than 250 lines of code.' 224 | Enabled: true 225 | Max: 250 226 | 227 | Metrics/CyclomaticComplexity: 228 | Description: >- 229 | A complexity metric that is strongly correlated to the number 230 | of test cases needed to validate a method. 231 | Enabled: true 232 | 233 | Metrics/LineLength: 234 | Description: 'Limit lines to 80 characters.' 235 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits' 236 | Enabled: false 237 | 238 | Metrics/MethodLength: 239 | Description: 'Avoid methods longer than 30 lines of code.' 240 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#short-methods' 241 | Enabled: true 242 | Max: 30 243 | 244 | Metrics/ModuleLength: 245 | Description: 'Avoid modules longer than 250 lines of code.' 246 | Enabled: true 247 | Max: 250 248 | 249 | Metrics/ParameterLists: 250 | Description: 'Avoid parameter lists longer than three or four parameters.' 251 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#too-many-params' 252 | Enabled: true 253 | 254 | Metrics/PerceivedComplexity: 255 | Description: >- 256 | A complexity metric geared towards measuring complexity for a 257 | human reader. 258 | Enabled: true 259 | 260 | ##################### Performance ############################# 261 | 262 | Performance/Count: 263 | Description: >- 264 | Use `count` instead of `select...size`, `reject...size`, 265 | `select...count`, `reject...count`, `select...length`, 266 | and `reject...length`. 267 | Enabled: true 268 | 269 | Performance/Detect: 270 | Description: >- 271 | Use `detect` instead of `select.first`, `find_all.first`, 272 | `select.last`, and `find_all.last`. 273 | Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code' 274 | Enabled: true 275 | 276 | Performance/FlatMap: 277 | Description: >- 278 | Use `Enumerable#flat_map` 279 | instead of `Enumerable#map...Array#flatten(1)` 280 | or `Enumberable#collect..Array#flatten(1)` 281 | Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code' 282 | Enabled: true 283 | EnabledForFlattenWithoutParams: false 284 | # If enabled, this cop will warn about usages of 285 | # `flatten` being called without any parameters. 286 | # This can be dangerous since `flat_map` will only flatten 1 level, and 287 | # `flatten` without any parameters can flatten multiple levels. 288 | 289 | Performance/ReverseEach: 290 | Description: 'Use `reverse_each` instead of `reverse.each`.' 291 | Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code' 292 | Enabled: true 293 | 294 | Performance/Sample: 295 | Description: >- 296 | Use `sample` instead of `shuffle.first`, 297 | `shuffle.last`, and `shuffle[Fixnum]`. 298 | Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code' 299 | Enabled: true 300 | 301 | Performance/Size: 302 | Description: >- 303 | Use `size` instead of `count` for counting 304 | the number of elements in `Array` and `Hash`. 305 | Reference: 'https://github.com/JuanitoFatas/fast-ruby#arraycount-vs-arraysize-code' 306 | Enabled: true 307 | 308 | Performance/StringReplacement: 309 | Description: >- 310 | Use `tr` instead of `gsub` when you are replacing the same 311 | number of characters. Use `delete` instead of `gsub` when 312 | you are deleting characters. 313 | Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code' 314 | Enabled: true 315 | 316 | ##################### Rails ################################## 317 | 318 | Rails/ActionFilter: 319 | Description: 'Enforces consistent use of action filter methods.' 320 | Enabled: false 321 | 322 | Rails/Date: 323 | Description: >- 324 | Checks the correct usage of date aware methods, 325 | such as Date.today, Date.current etc. 326 | Enabled: false 327 | 328 | Rails/Delegate: 329 | Description: 'Prefer delegate method for delegations.' 330 | Enabled: false 331 | 332 | Rails/FindBy: 333 | Description: 'Prefer find_by over where.first.' 334 | Enabled: false 335 | 336 | Rails/FindEach: 337 | Description: 'Prefer all.find_each over all.find.' 338 | Enabled: false 339 | 340 | Rails/HasAndBelongsToMany: 341 | Description: 'Prefer has_many :through to has_and_belongs_to_many.' 342 | Enabled: false 343 | 344 | Rails/Output: 345 | Description: 'Checks for calls to puts, print, etc.' 346 | Enabled: false 347 | 348 | Rails/ReadWriteAttribute: 349 | Description: >- 350 | Checks for read_attribute(:attr) and 351 | write_attribute(:attr, val). 352 | Enabled: false 353 | 354 | Rails/ScopeArgs: 355 | Description: 'Checks the arguments of ActiveRecord scopes.' 356 | Enabled: false 357 | 358 | Rails/TimeZone: 359 | Description: 'Checks the correct usage of time zone aware methods.' 360 | StyleGuide: 'https://github.com/bbatsov/rails-style-guide#time' 361 | Reference: 'http://danilenko.org/2012/7/6/rails_timezones' 362 | Enabled: false 363 | 364 | Rails/Validation: 365 | Description: 'Use validates :attribute, hash of validations.' 366 | Enabled: false 367 | 368 | ################## Style ################################# 369 | 370 | Style/AccessModifierIndentation: 371 | Description: Check indentation of private/protected visibility modifiers. 372 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#indent-public-private-protected' 373 | Enabled: true 374 | 375 | Style/AccessorMethodName: 376 | Description: Check the naming of accessor methods for get_/set_. 377 | Enabled: false 378 | 379 | Style/Alias: 380 | Description: 'Use alias_method instead of alias.' 381 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#alias-method' 382 | Enabled: false 383 | 384 | Style/AlignArray: 385 | Description: >- 386 | Align the elements of an array literal if they span more than 387 | one line. 388 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#align-multiline-arrays' 389 | Enabled: true 390 | 391 | Style/AlignHash: 392 | Description: >- 393 | Align the elements of a hash literal if they span more than 394 | one line. 395 | Enabled: true 396 | 397 | Style/AlignParameters: 398 | Description: >- 399 | Align the parameters of a method call if they span more 400 | than one line. WRONG! Only indent 2 (don't use this). 401 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-double-indent' 402 | Enabled: false 403 | 404 | Style/AndOr: 405 | Description: 'Use &&/|| instead of and/or.' 406 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-and-or-or' 407 | Enabled: false 408 | 409 | Style/ArrayJoin: 410 | Description: 'Use Array#join instead of Array#*.' 411 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#array-join' 412 | Enabled: true 413 | 414 | Style/AsciiComments: 415 | Description: 'Use only ascii symbols in comments.' 416 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-comments' 417 | Enabled: false 418 | 419 | Style/AsciiIdentifiers: 420 | Description: 'Use only ascii symbols in identifiers.' 421 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-identifiers' 422 | Enabled: false 423 | 424 | Style/Attr: 425 | Description: 'Checks for uses of Module#attr.' 426 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#attr' 427 | Enabled: true 428 | 429 | Style/BeginBlock: 430 | Description: 'Avoid the use of BEGIN blocks.' 431 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-BEGIN-blocks' 432 | Enabled: true 433 | 434 | Style/BarePercentLiterals: 435 | Description: 'Checks if usage of %() or %Q() matches configuration.' 436 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-q-shorthand' 437 | Enabled: true 438 | 439 | Style/BlockComments: 440 | Description: 'Do not use block comments.' 441 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-block-comments' 442 | Enabled: true 443 | 444 | Style/BlockEndNewline: 445 | Description: 'Put end statement of multiline block on its own line.' 446 | Enabled: true 447 | 448 | Style/BlockDelimiters: 449 | Description: >- 450 | Avoid using {...} for multi-line blocks (multiline chaining is 451 | always ugly). 452 | Prefer {...} over do...end for single-line blocks. 453 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks' 454 | Enabled: true 455 | 456 | Style/BracesAroundHashParameters: 457 | Description: 'Enforce braces style around hash parameters.' 458 | Enabled: false 459 | 460 | Style/CaseEquality: 461 | Description: 'Avoid explicit use of the case equality operator(===).' 462 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-case-equality' 463 | Enabled: false 464 | 465 | Style/CaseIndentation: 466 | Description: 'Indentation of when in a case/when/[else/]end.' 467 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#indent-when-to-case' 468 | Enabled: true 469 | 470 | Style/CharacterLiteral: 471 | Description: 'Checks for uses of character literals.' 472 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-character-literals' 473 | Enabled: true 474 | 475 | Style/ClassAndModuleCamelCase: 476 | Description: 'Use CamelCase for classes and modules.' 477 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#camelcase-classes' 478 | Enabled: true 479 | 480 | Style/ClassAndModuleChildren: 481 | Description: 'Checks style of children classes and modules. This detests usage of ::' 482 | Enabled: false 483 | 484 | Style/ClassCheck: 485 | Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.' 486 | Enabled: true 487 | 488 | Style/ClassMethods: 489 | Description: 'Use self when defining module/class methods.' 490 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#def-self-class-methods' 491 | Enabled: true 492 | 493 | Style/ClassVars: 494 | Description: 'Avoid the use of class variables.' 495 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-class-vars' 496 | Enabled: true 497 | 498 | Style/ClosingParenthesisIndentation: 499 | Description: 'Checks the indentation of hanging closing parentheses. Faulty!' 500 | Enabled: false 501 | 502 | Style/ColonMethodCall: 503 | Description: 'Do not use :: for method call.' 504 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#double-colons' 505 | Enabled: true 506 | 507 | Style/CommandLiteral: 508 | Description: 'Use `` or %x around command literals.' 509 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-x' 510 | Enabled: true 511 | 512 | Style/CommentAnnotation: 513 | Description: 'Checks formatting of annotation comments.' 514 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#annotate-keywords' 515 | Enabled: false 516 | 517 | Style/CommentIndentation: 518 | Description: 'Indentation of comments.' 519 | Enabled: false 520 | 521 | Style/ConstantName: 522 | Description: 'Constants should use SCREAMING_SNAKE_CASE.' 523 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#screaming-snake-case' 524 | Enabled: false 525 | 526 | Style/DefWithParentheses: 527 | Description: 'Use def with parentheses when there are arguments.' 528 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#method-parens' 529 | Enabled: false 530 | 531 | Style/PreferredHashMethods: 532 | Description: 'Checks for use of deprecated Hash methods.' 533 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#hash-key' 534 | Enabled: true 535 | 536 | Style/Documentation: 537 | Description: 'Document classes and non-namespace modules.' 538 | Enabled: false 539 | 540 | Style/DotPosition: 541 | Description: 'Checks the position of the dot in multi-line method calls. WRONG CHOICE! NEED OPTION B!' 542 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains' 543 | Enabled: false 544 | 545 | Style/DoubleNegation: 546 | Description: 'Checks for uses of double negation (!!).' 547 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-bang-bang' 548 | Enabled: false 549 | 550 | Style/EachWithObject: 551 | Description: 'Prefer `each_with_object` over `inject` or `reduce`.' 552 | Enabled: false 553 | 554 | Style/ElseAlignment: 555 | Description: 'Align elses and elsifs correctly.' 556 | Enabled: true 557 | 558 | Style/EmptyElse: 559 | Description: 'Avoid empty else-clauses.' 560 | Enabled: true 561 | 562 | Style/EmptyLineBetweenDefs: 563 | Description: 'Use empty lines between defs.' 564 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#empty-lines-between-methods' 565 | Enabled: false 566 | 567 | Style/EmptyLines: 568 | Description: "Don't use several empty lines in a row." 569 | Enabled: true 570 | 571 | Style/EmptyLinesAroundAccessModifier: 572 | Description: "Keep blank lines around access modifiers. (eg: private)" 573 | Enabled: false 574 | 575 | Style/EmptyLinesAroundBlockBody: 576 | Description: "Keeps track of empty lines around block bodies." 577 | Enabled: false 578 | 579 | Style/EmptyLinesAroundClassBody: 580 | Description: "Keeps track of empty lines around class bodies." 581 | Enabled: false 582 | 583 | Style/EmptyLinesAroundModuleBody: 584 | Description: "Keeps track of empty lines around module bodies." 585 | Enabled: false 586 | 587 | Style/EmptyLinesAroundMethodBody: 588 | Description: "Keeps track of empty lines around method bodies." 589 | Enabled: false 590 | 591 | Style/EmptyLiteral: 592 | Description: 'Prefer literals to Array.new/Hash.new/String.new.' 593 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#literal-array-hash' 594 | Enabled: false 595 | 596 | Style/EndBlock: 597 | Description: 'Avoid the use of END blocks.' 598 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-END-blocks' 599 | Enabled: true 600 | 601 | Style/EndOfLine: 602 | Description: 'Use Unix-style line endings.' 603 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#crlf' 604 | Enabled: false 605 | 606 | Style/EvenOdd: 607 | Description: 'Favor the use of Fixnum#even? && Fixnum#odd?' 608 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#predicate-methods' 609 | Enabled: false 610 | 611 | Style/ExtraSpacing: 612 | Description: 'Do not use unnecessary spacing.' 613 | Enabled: true 614 | 615 | Style/FileName: 616 | Description: 'Use snake_case for source file names.' 617 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-files' 618 | Enabled: true 619 | 620 | Style/InitialIndentation: 621 | Description: >- 622 | Checks the indentation of the first non-blank non-comment line in a file. 623 | Enabled: true 624 | 625 | Style/FirstParameterIndentation: 626 | Description: 'Checks the indentation of the first parameter in a method call.' 627 | Enabled: false 628 | 629 | Style/FlipFlop: 630 | Description: 'Checks for flip flops' 631 | StyleGuide: 'https://blog.newrelic.com/2015/02/24/weird-ruby-part-3-fun-flip-flop-phenom/' 632 | Enabled: true 633 | 634 | Style/For: 635 | Description: 'Checks use of for or each in multiline loops.' 636 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-for-loops' 637 | Enabled: true 638 | 639 | Style/FormatString: 640 | Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.' 641 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#sprintf' 642 | Enabled: false 643 | 644 | Style/GlobalVars: 645 | Description: 'Do not introduce global variables.' 646 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#instance-vars' 647 | Reference: 'http://www.zenspider.com/Languages/Ruby/QuickRef.html' 648 | Enabled: true 649 | 650 | Style/GuardClause: 651 | Description: 'Check for conditionals that can be replaced with guard clauses' 652 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals' 653 | Enabled: false 654 | 655 | Style/HashSyntax: 656 | Description: >- 657 | Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax 658 | { :a => 1, :b => 2 }. 659 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#hash-literals' 660 | Enabled: true 661 | 662 | Style/IfUnlessModifier: 663 | Description: >- 664 | Favor modifier if/unless usage when you have a 665 | single-line body. 666 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier' 667 | Enabled: false 668 | 669 | Style/IfWithSemicolon: 670 | Description: 'Do not use if x; .... Use the ternary operator instead.' 671 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-semicolon-ifs' 672 | Enabled: true 673 | 674 | Style/IndentationConsistency: 675 | Description: 'Keep indentation straight.' 676 | Enabled: true 677 | 678 | Style/IndentationWidth: 679 | Description: 'Use 2 spaces for indentation.' 680 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-indentation' 681 | Enabled: true 682 | 683 | Style/IndentArray: 684 | Description: >- 685 | Checks the indentation of the first element in an array 686 | literal. 687 | Enabled: false 688 | 689 | Style/IndentHash: 690 | Description: 'Checks the indentation of the first key in a hash literal.' 691 | Enabled: false 692 | 693 | Style/InfiniteLoop: 694 | Description: 'Use Kernel#loop for infinite loops.' 695 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#infinite-loop' 696 | Enabled: true 697 | 698 | Style/Lambda: 699 | Description: 'Use the new lambda literal syntax for single-line blocks.' 700 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#lambda-multi-line' 701 | Enabled: true 702 | 703 | Style/LambdaCall: 704 | Description: 'Use lambda.call(...) instead of lambda.(...).' 705 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#proc-call' 706 | Enabled: false 707 | 708 | Style/LeadingCommentSpace: 709 | Description: 'Comments should start with a space.' 710 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#hash-space' 711 | Enabled: true 712 | 713 | Style/LineEndConcatenation: 714 | Description: >- 715 | Use \ instead of + or << to concatenate two string literals at 716 | line end. 717 | Enabled: true 718 | 719 | Style/MethodCallWithoutArgsParentheses: 720 | Description: 'Do not use parentheses for method calls with no arguments.' 721 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-args-no-parens' 722 | Enabled: false 723 | 724 | Style/MethodDefParentheses: 725 | Description: >- 726 | Checks if the method definitions have or don't have 727 | parentheses. 728 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#method-parens' 729 | Enabled: false 730 | 731 | Style/MethodName: 732 | Description: 'Use the configured style when naming methods.' 733 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-symbols-methods-vars' 734 | Enabled: false 735 | 736 | Style/ModuleFunction: 737 | Description: 'Checks for usage of `extend self` in modules.' 738 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#module-function' 739 | Enabled: true 740 | 741 | Style/MultilineBlockChain: 742 | Description: 'Avoid multi-line chains of blocks.' 743 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks' 744 | Enabled: true 745 | 746 | Style/MultilineBlockLayout: 747 | Description: 'Ensures newlines after multiline block do statements.' 748 | Enabled: false 749 | 750 | Style/MultilineIfThen: 751 | Description: 'Do not use then for multi-line if/unless.' 752 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-then' 753 | Enabled: true 754 | 755 | Style/MultilineOperationIndentation: 756 | Description: >- 757 | Checks indentation of binary operations that span more than 758 | one line. 759 | Enabled: false 760 | 761 | Style/MultilineTernaryOperator: 762 | Description: >- 763 | Avoid multi-line ?: (the ternary operator); 764 | use if/unless instead. 765 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-multiline-ternary' 766 | Enabled: true 767 | 768 | Style/NegatedIf: 769 | Description: >- 770 | Favor unless over if for negative conditions 771 | (or control flow or). 772 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#unless-for-negatives' 773 | Enabled: false 774 | 775 | Style/NegatedWhile: 776 | Description: 'Favor until over while for negative conditions.' 777 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#until-for-negatives' 778 | Enabled: false 779 | 780 | Style/NestedTernaryOperator: 781 | Description: 'Use one expression per branch in a ternary operator.' 782 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-ternary' 783 | Enabled: true 784 | 785 | Style/Next: 786 | Description: 'Use `next` to skip iteration instead of a condition at the end.' 787 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals' 788 | Enabled: true 789 | 790 | Style/NilComparison: 791 | Description: 'Prefer x.nil? to x == nil.' 792 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#predicate-methods' 793 | Enabled: true 794 | 795 | Style/NonNilCheck: 796 | Description: 'Checks for redundant nil checks.' 797 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-non-nil-checks' 798 | Enabled: true 799 | 800 | Style/Not: 801 | Description: 'Use ! instead of not.' 802 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#bang-not-not' 803 | Enabled: false 804 | 805 | Style/NumericLiterals: 806 | Description: >- 807 | Add underscores to large numeric literals to improve their 808 | readability. 809 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscores-in-numerics' 810 | Enabled: true 811 | 812 | Style/OneLineConditional: 813 | Description: >- 814 | Favor the ternary operator(?:) over 815 | if/then/else/end constructs. 816 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#ternary-operator' 817 | Enabled: true 818 | 819 | Style/OpMethod: 820 | Description: 'When defining binary operators, name the argument other.' 821 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#other-arg' 822 | Enabled: true 823 | 824 | Style/OptionalArguments: 825 | Description: >- 826 | Checks for optional arguments that do not appear at the end 827 | of the argument list 828 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#optional-arguments' 829 | Enabled: true 830 | 831 | Style/ParallelAssignment: 832 | Description: >- 833 | Check for simple usages of parallel assignment. 834 | It will only warn when the number of variables 835 | matches on both sides of the assignment. 836 | This also provides performance benefits 837 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parallel-assignment' 838 | Enabled: true 839 | 840 | Style/ParenthesesAroundCondition: 841 | Description: >- 842 | Don't use parentheses around the condition of an 843 | if/unless/while. 844 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-parens-if' 845 | Enabled: true 846 | 847 | Style/PercentLiteralDelimiters: 848 | Description: 'Use `%`-literal delimiters consistently' 849 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-literal-braces' 850 | Enabled: true 851 | 852 | Style/PercentQLiterals: 853 | Description: 'Checks if uses of %Q/%q match the configured preference.' 854 | Enabled: true 855 | 856 | Style/PerlBackrefs: 857 | Description: 'Avoid Perl-style regex back references.' 858 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers' 859 | Enabled: true 860 | 861 | Style/PredicateName: 862 | Description: 'Check the names of predicate methods.' 863 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#bool-methods-qmark' 864 | Enabled: false 865 | 866 | Style/Proc: 867 | Description: 'Use proc instead of Proc.new.' 868 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#proc' 869 | Enabled: false 870 | 871 | Style/RaiseArgs: 872 | Description: 'Checks the arguments passed to raise/fail.' 873 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#exception-class-messages' 874 | Enabled: true 875 | 876 | Style/RedundantBegin: 877 | Description: "Don't use begin blocks when they are not needed." 878 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#begin-implicit' 879 | Enabled: true 880 | 881 | Style/RedundantException: 882 | Description: "Checks for an obsolete RuntimeException argument in raise/fail." 883 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-explicit-runtimeerror' 884 | Enabled: true 885 | 886 | Style/RedundantReturn: 887 | Description: "Don't use return where it's not required." 888 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-explicit-return' 889 | Enabled: true 890 | 891 | Style/RedundantSelf: 892 | Description: "Don't use self where it's not needed." 893 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-self-unless-required' 894 | Enabled: true 895 | 896 | Style/RegexpLiteral: 897 | Description: 'Use / or %r around regular expressions.' 898 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-r' 899 | Enabled: true 900 | 901 | Style/RescueEnsureAlignment: 902 | Description: 'Align rescues and ensures correctly.' 903 | Enabled: true 904 | 905 | Style/RescueModifier: 906 | Description: 'Avoid using rescue in its modifier form.' 907 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-rescue-modifiers' 908 | Enabled: true 909 | 910 | Style/SelfAssignment: 911 | Description: >- 912 | Checks for places where self-assignment shorthand should have 913 | been used. 914 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#self-assignment' 915 | Enabled: false 916 | 917 | Style/Semicolon: 918 | Description: "Don't use semicolons to terminate expressions." 919 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-semicolon' 920 | Enabled: false 921 | 922 | Style/SignalException: 923 | Description: 'Checks for proper usage of fail and raise.' 924 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#fail-method' 925 | Enabled: true 926 | 927 | Style/SingleLineBlockParams: 928 | Description: 'Enforces the names of some block params.' 929 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#reduce-blocks' 930 | Enabled: false 931 | 932 | Style/SingleLineMethods: 933 | Description: 'Avoid single-line methods.' 934 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-single-line-methods' 935 | Enabled: false 936 | 937 | Style/SpaceBeforeFirstArg: 938 | Description: >- 939 | Checks that exactly one space is used between a method name 940 | and the first argument for method calls without parentheses. 941 | Enabled: true 942 | 943 | Style/SpaceAfterColon: 944 | Description: 'Use spaces after colons.' 945 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-operators' 946 | Enabled: true 947 | 948 | Style/SpaceAfterComma: 949 | Description: 'Use spaces after commas.' 950 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-operators' 951 | Enabled: true 952 | 953 | Style/SpaceAroundKeyword: 954 | Description: 'Use spaces around keywords.' 955 | Enabled: true 956 | 957 | Style/SpaceAfterMethodName: 958 | Description: >- 959 | Do not put a space between a method name and the opening 960 | parenthesis in a method definition. 961 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parens-no-spaces' 962 | Enabled: true 963 | 964 | Style/SpaceAfterNot: 965 | Description: Tracks redundant space after the ! operator. 966 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-space-bang' 967 | Enabled: true 968 | 969 | Style/SpaceAfterSemicolon: 970 | Description: 'Use spaces after semicolons.' 971 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-operators' 972 | Enabled: true 973 | 974 | Style/SpaceBeforeBlockBraces: 975 | Description: >- 976 | Checks that the left block brace has or doesn't have space 977 | before it. 978 | Enabled: false 979 | 980 | Style/SpaceBeforeComma: 981 | Description: 'No spaces before commas.' 982 | Enabled: true 983 | 984 | Style/SpaceBeforeComment: 985 | Description: >- 986 | Checks for missing space between code and a comment on the 987 | same line. 988 | Enabled: true 989 | 990 | Style/SpaceBeforeSemicolon: 991 | Description: 'No spaces before semicolons.' 992 | Enabled: true 993 | 994 | Style/SpaceInsideBlockBraces: 995 | Description: >- 996 | Checks that block braces have or don't have surrounding space. 997 | For blocks taking parameters, checks that the left brace has 998 | or doesn't have trailing space. 999 | Enabled: false 1000 | 1001 | Style/SpaceAroundBlockParameters: 1002 | Description: 'Checks the spacing inside and after block parameters pipes.' 1003 | Enabled: true 1004 | 1005 | Style/SpaceAroundEqualsInParameterDefault: 1006 | Description: >- 1007 | Checks that the equals signs in parameter default assignments 1008 | have or don't have surrounding space depending on 1009 | configuration. 1010 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-around-equals' 1011 | Enabled: false 1012 | 1013 | Style/SpaceAroundOperators: 1014 | Description: 'Use a single space around operators.' 1015 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-operators' 1016 | Enabled: false 1017 | 1018 | Style/SpaceInsideBrackets: 1019 | Description: 'No spaces after [ or before ].' 1020 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-spaces-braces' 1021 | Enabled: false 1022 | 1023 | Style/SpaceInsideHashLiteralBraces: 1024 | Description: "Use spaces inside hash literal braces - or don't." 1025 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-operators' 1026 | Enabled: false 1027 | 1028 | Style/SpaceInsideParens: 1029 | Description: 'No spaces after ( or before ).' 1030 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-spaces-braces' 1031 | Enabled: false 1032 | 1033 | Style/SpaceInsideRangeLiteral: 1034 | Description: 'No spaces inside range literals.' 1035 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-space-inside-range-literals' 1036 | Enabled: false 1037 | 1038 | Style/SpaceInsideStringInterpolation: 1039 | Description: 'Checks for padding/surrounding spaces inside string interpolation.' 1040 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#string-interpolation' 1041 | Enabled: false 1042 | 1043 | Style/SpecialGlobalVars: 1044 | Description: 'Avoid Perl-style global variables.' 1045 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-cryptic-perlisms' 1046 | Enabled: true 1047 | 1048 | Style/StringLiterals: 1049 | Description: 'Checks if uses of quotes match the configured preference.' 1050 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#consistent-string-literals' 1051 | Enabled: false 1052 | 1053 | Style/StringLiteralsInInterpolation: 1054 | Description: >- 1055 | Checks if uses of quotes inside expressions in interpolated 1056 | strings match the configured preference. 1057 | Enabled: false 1058 | 1059 | Style/StructInheritance: 1060 | Description: 'Checks for inheritance from Struct.new.' 1061 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-extend-struct-new' 1062 | Enabled: true 1063 | 1064 | Style/SymbolLiteral: 1065 | Description: 'Use plain symbols instead of string symbols when possible.' 1066 | Enabled: true 1067 | 1068 | Style/SymbolProc: 1069 | Description: 'Use symbols as procs instead of blocks when possible.' 1070 | Enabled: false 1071 | 1072 | Style/Tab: 1073 | Description: 'No hard tabs.' 1074 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#spaces-indentation' 1075 | Enabled: true 1076 | 1077 | Style/TrailingBlankLines: 1078 | Description: 'Checks trailing blank lines and final newline.' 1079 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#newline-eof' 1080 | Enabled: true 1081 | 1082 | Style/TrailingCommaInArguments: 1083 | Description: 'Checks for trailing comma in parameter lists.' 1084 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-params-comma' 1085 | Enabled: false 1086 | 1087 | Style/TrailingCommaInLiteral: 1088 | Description: 'Checks for trailing comma in literals.' 1089 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas' 1090 | Enabled: false 1091 | 1092 | Style/TrailingWhitespace: 1093 | Description: 'Avoid trailing whitespace.' 1094 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-whitespace' 1095 | Enabled: true 1096 | 1097 | Style/TrivialAccessors: 1098 | Description: 'Prefer attr_* methods to trivial readers/writers.' 1099 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#attr_family' 1100 | Enabled: false 1101 | 1102 | Style/UnlessElse: 1103 | Description: >- 1104 | Do not use unless with else. Rewrite these with the positive 1105 | case first. 1106 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-else-with-unless' 1107 | Enabled: true 1108 | 1109 | Style/UnneededCapitalW: 1110 | Description: 'Checks for %W when interpolation is not needed.' 1111 | Enabled: true 1112 | 1113 | Style/UnneededPercentQ: 1114 | Description: 'Checks for %q/%Q when single quotes or double quotes would do.' 1115 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-q' 1116 | Enabled: true 1117 | 1118 | Style/TrailingUnderscoreVariable: 1119 | Description: >- 1120 | Checks for the usage of unneeded trailing underscores at the 1121 | end of parallel variable assignment. 1122 | Enabled: false 1123 | 1124 | Style/VariableInterpolation: 1125 | Description: >- 1126 | Don't interpolate global, instance and class variables 1127 | directly in strings. 1128 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#curlies-interpolate' 1129 | Enabled: true 1130 | 1131 | Style/VariableName: 1132 | Description: 'Use the configured style when naming variables.' 1133 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-symbols-methods-vars' 1134 | Enabled: true 1135 | 1136 | Style/WhenThen: 1137 | Description: 'Use when x then ... for one-line cases.' 1138 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#one-line-cases' 1139 | Enabled: true 1140 | 1141 | Style/WhileUntilDo: 1142 | Description: 'Checks for redundant do after while or until.' 1143 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-multiline-while-do' 1144 | Enabled: true 1145 | 1146 | Style/WhileUntilModifier: 1147 | Description: >- 1148 | Favor modifier while/until usage when you have a 1149 | single-line body. 1150 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#while-as-a-modifier' 1151 | Enabled: true 1152 | 1153 | Style/WordArray: 1154 | Description: 'Use %w or %W for arrays of words.' 1155 | StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-w' 1156 | Enabled: false 1157 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | - 2.2.6 4 | - 2.3.3 5 | - 2.4.1 6 | env: 7 | global: 8 | - secure: qXpWydxv6DHMrvGL8WH4wNRY4MTY7KV/x308Y5dHkZCrI7k9UOccvznp69KT3Z+tzYEFDXfUix5wA6pgyVcvrsQyiLSjGcyzHhxJKs1gk0gcxAkmhwHmUP9aiXWUe/mzpj7Uoc2DHwpPTpK1wQ5kV6eV+jzQLuN3nhfNr2sL8b4= 9 | addons: 10 | code_climate: 11 | repo_token: 87b4abe10917ab899b09956c25e9f389e4ce3abe126c1f98549de726692c209c 12 | script: bundle exec rake test 13 | after_success: 14 | - bundle exec codeclimate-test-reporter 15 | 16 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Specify your gem's dependencies in elixirize.gemspec 4 | gemspec 5 | group :test do 6 | gem 'simplecov' 7 | gem 'codeclimate-test-reporter', '~> 1.0.0' 8 | end 9 | 10 | group :test do 11 | gem 'minitest', '~> 5.10' 12 | gem 'minitest-reporters', '~> 1.1' 13 | gem 'color_pound_spec_reporter', '~> 0.0.6' 14 | end 15 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Daniel P. Clark 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Gem Version](https://badge.fury.io/rb/elixirize.svg)](http://badge.fury.io/rb/elixirize) 2 | [![Code Climate](https://codeclimate.com/github/danielpclark/elixirize/badges/gpa.svg)](https://codeclimate.com/github/danielpclark/elixirize) 3 | [![Build Status](https://travis-ci.org/danielpclark/elixirize.svg)](https://travis-ci.org/danielpclark/elixirize) 4 | [![Test Coverage](https://codeclimate.com/github/danielpclark/elixirize/badges/coverage.svg)](https://codeclimate.com/github/danielpclark/elixirize) 5 | [![Inline docs](http://inch-ci.org/github/danielpclark/elixirize.svg?branch=master)](http://inch-ci.org/github/danielpclark/elixirize) 6 | [![SayThanks.io](https://img.shields.io/badge/SayThanks.io-%E2%98%BC-1EAEDB.svg)](https://saythanks.io/to/danielpclark) 7 | 8 | # Elixirize 9 | 10 | This adds the `ᐅ` method to Ruby. It pipes in the returned value of the left as the first parameter of the 11 | Proc _(or anything with `:call` defined)_ on the right. 12 | 13 | ### Unicode ᐅ 14 | 15 | To enter ᐅ you need to: 16 | 17 | * **Linux:** type **CTRl-SHIFT-U** and then **1405** followed by the **Space** or **Enter** key. 18 | * **Mac:** hold the **Option** key while you type **1405** and then release the **Option** key. 19 | * **VIM:** press **CTRL-v** then **SHIFT-U** then **1405** and hit **Enter**. 20 | * **Emacs:** press **CTRL-x** then **8** then **Enter** and type **1405** and hit **Enter**. 21 | 22 | ## Installation 23 | 24 | Add this line to your application's Gemfile: 25 | 26 | ```ruby 27 | gem 'elixirize' 28 | ``` 29 | 30 | And then execute: 31 | 32 | $ bundle 33 | 34 | Or install it yourself as: 35 | 36 | $ gem install elixirize 37 | 38 | ## Usage 39 | 40 | ```ruby 41 | def add a, b 42 | a + b 43 | end 44 | 45 | subtract = ->a, b{ a - b } 46 | 47 | add(4, 5).ᐅ subtract, 15 48 | # => -6 49 | 50 | def divide a, b 51 | a / b 52 | end 53 | 54 | add(40, 60).ᐅ method(:divide), 20 55 | # => 5 56 | ``` 57 | 58 | ## Extra 59 | 60 | Since Ruby is designed largely to call methods on the object that was returned 61 | I've written the `~` method on `Symbol` to allow method calls on the returned 62 | object rather than only being the first parameter passed in. 63 | 64 | **Example:** 65 | 66 | ```ruby 67 | s = "a b c d" 68 | val = s. 69 | ᐅ(~:split, " "). 70 | ᐅ(~:join, "-"). 71 | ᐅ ~:capitalize 72 | 73 | val 74 | # => "A-b-c-d" 75 | ``` 76 | 77 | You can mix both behaviors without any issue. 78 | 79 | This may seem counter intuitive as it's the same thing as just calling the method 80 | on the object, but consider this a noticeable refactoring step. If you're designing 81 | a project in a manner where you want results piped in as the first parameter then 82 | the tilde-symbol will be your TODO reminder to convert/refactor how your code base is 83 | implemented. 84 | 85 | ## Development 86 | 87 | After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. 88 | 89 | To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). 90 | 91 | ## Contributing 92 | 93 | Bug reports and pull requests are welcome on GitHub at https://github.com/danielpclark/elixirize. 94 | 95 | 96 | ## License 97 | 98 | The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). 99 | 100 | 101 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require "bundler/gem_tasks" 2 | require "rake/testtask" 3 | 4 | Rake::TestTask.new(:test) do |t| 5 | t.libs << "test" 6 | t.libs << "lib" 7 | t.test_files = FileList['test/**/*_test.rb'] 8 | end 9 | 10 | task default: :test 11 | -------------------------------------------------------------------------------- /bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require "bundler/setup" 4 | require "elixirize" 5 | 6 | # You can add fixtures and/or initialization code here to make experimenting 7 | # with your gem easier. You can also use a different console, if you like. 8 | 9 | # (If you use this, don't forget to add pry to your Gemfile!) 10 | # require "pry" 11 | # Pry.start 12 | 13 | require "irb" 14 | IRB.start(__FILE__) 15 | -------------------------------------------------------------------------------- /bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | IFS=$'\n\t' 4 | set -vx 5 | 6 | bundle install 7 | 8 | # Do any other automated setup that you need to do here 9 | -------------------------------------------------------------------------------- /elixirize.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | lib = File.expand_path('../lib', __FILE__) 3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 4 | require 'elixirize/version' 5 | 6 | Gem::Specification.new do |spec| 7 | spec.name = "elixirize" 8 | spec.version = Elixirize::VERSION 9 | spec.authors = ["Daniel P. Clark"] 10 | spec.email = ["6ftdan@gmail.com"] 11 | 12 | spec.summary = 'Add ᐅ method for Elixir feel.' 13 | spec.description = 'Add ᐅ method for Elixir feel, parameter must start with Proc' 14 | spec.homepage = 'https://github.com/danielpclark/elixirize' 15 | spec.license = "MIT" 16 | 17 | spec.files = `git ls-files -z`.split("\x0").reject do |f| 18 | f.match(%r{^(test|spec|features)/}) 19 | end 20 | spec.bindir = "exe" 21 | spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } 22 | spec.require_paths = ["lib"] 23 | 24 | spec.add_development_dependency "bundler", "~> 1.14" 25 | spec.add_development_dependency "rake", "~> 10.0" 26 | spec.add_development_dependency "minitest", "~> 5.0" 27 | end 28 | -------------------------------------------------------------------------------- /lib/elixirize.rb: -------------------------------------------------------------------------------- 1 | require "elixirize/version" 2 | 3 | module Elixirize 4 | ::Object.class_eval do 5 | 6 | def ᐅ other, *args, &block 7 | other.call(self, *args, &block) 8 | end 9 | 10 | alias_method :λ, :lambda 11 | end 12 | 13 | ::Symbol.class_eval do 14 | alias_method :~, :to_proc 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /lib/elixirize/version.rb: -------------------------------------------------------------------------------- 1 | module Elixirize 2 | VERSION = "0.5.0" 3 | end 4 | -------------------------------------------------------------------------------- /test/elixirize_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | def divide a, b 4 | a / b 5 | end 6 | 7 | class ElixirizeTest < Minitest::Test 8 | def test_it_can_pass_previous_results_to_next_item 9 | add = ->a, b{ a + b } 10 | subtract = ->a, b{ a - b } 11 | assert_equal(-6, add.(4, 5).ᐅ(subtract, 15)) 12 | end 13 | 14 | def test_it_takes_procd_method 15 | add = ->a, b{ a + b } 16 | assert_equal 5, add.(40, 60).ᐅ(method(:divide), 20) 17 | end 18 | 19 | def test_lamda 20 | multiply = λ {|a, b| a * b } 21 | assert_equal 4, multiply.call(2, 2) 22 | end 23 | 24 | def test_symbol_trickery 25 | s = "a b c d" 26 | val = s. 27 | ᐅ ~:split, " " 28 | assert_equal ["a", "b", "c", "d"], val 29 | end 30 | 31 | def test_chain_example_with_tilde 32 | s = "a b c d" 33 | val = s. 34 | ᐅ(~:split, " "). 35 | ᐅ(~:join, "-"). 36 | ᐅ ~:capitalize 37 | assert_equal "A-b-c-d", val 38 | end 39 | 40 | def test_chain_example_with_to_proc 41 | s = "a b c d" 42 | val = s. 43 | ᐅ(:split.to_proc, " "). 44 | ᐅ(:join.to_proc, "-"). 45 | ᐅ :capitalize.to_proc 46 | assert_equal "A-b-c-d", val 47 | end 48 | 49 | def test_multiple_arguments_on_proc 50 | result = "passes". 51 | ᐅ ~:gsub, 's', 'z' 52 | assert_equal "pazzez", result 53 | 54 | result = "passes". 55 | ᐅ :gsub.to_proc, 's', 'z' 56 | assert_equal "pazzez", result 57 | end 58 | 59 | def test_pipe_method_with_block 60 | sentance = "The rain in Spain stays mainly in the plain" 61 | ai = ->(s) { s['ai']} 62 | result = sentance. 63 | ᐅ(~:split). 64 | ᐅ ~:select, &ai 65 | assert_equal ["rain", "Spain", "mainly", "plain"], result 66 | 67 | aie = ->(enum) { enum.each(&ai) } 68 | result2 = sentance. 69 | ᐅ(~:split). 70 | ᐅ(~:select). 71 | ᐅ aie 72 | assert_equal ["rain", "Spain", "mainly", "plain"], result2 73 | end 74 | end 75 | -------------------------------------------------------------------------------- /test/test_helper.rb: -------------------------------------------------------------------------------- 1 | $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) 2 | require 'elixirize' 3 | 4 | require 'minitest/autorun' 5 | require 'simplecov' 6 | SimpleCov.start 7 | 8 | require 'color_pound_spec_reporter' 9 | Minitest::Reporters.use! [ColorPoundSpecReporter.new] 10 | --------------------------------------------------------------------------------