mirror of
https://github.com/danbee/slugtastic
synced 2025-03-04 08:49:05 +00:00
Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a92774cc35 | |||
| 56abe4c340 | |||
| 38390b4e7c | |||
| 4b35645bc9 | |||
| 5c06a15c39 | |||
| 4bedac5aed | |||
| 1c4478223f | |||
| d8b335d8cf | |||
| ff59741b4d | |||
| 32ece72e95 | |||
| 13ea634db5 | |||
| babb6d843c | |||
| f067690272 | |||
| 1536e51534 | |||
| a6637f463a | |||
| c1529f0867 | |||
| 175bae7c50 | |||
| 8c6497934c | |||
|
|
3b09a3524b | ||
|
|
da428eae3d | ||
|
|
c2fa3b810b | ||
|
|
2a4fa31aef | ||
|
|
78bd5ee3bd | ||
|
|
c464bfda51 | ||
|
|
ab98be95a0 | ||
|
|
8d12d9e6b2 | ||
|
|
e5ca126c8a | ||
|
|
117b4e9398 | ||
|
|
066d38cb9b | ||
|
|
edaaa06930 |
651
.rubocop.yml
Normal file
651
.rubocop.yml
Normal file
@ -0,0 +1,651 @@
|
|||||||
|
AllCops:
|
||||||
|
Exclude:
|
||||||
|
- db/schema.rb
|
||||||
|
TargetRubyVersion: 2.3
|
||||||
|
|
||||||
|
Naming/AccessorMethodName:
|
||||||
|
Description: Check the naming of accessor methods for get_/set_.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Alias:
|
||||||
|
Description: 'Use alias_method instead of alias.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#alias-method'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/ArrayJoin:
|
||||||
|
Description: 'Use Array#join instead of Array#*.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#array-join'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/AsciiComments:
|
||||||
|
Description: 'Use only ascii symbols in comments.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-comments'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Naming/AsciiIdentifiers:
|
||||||
|
Description: 'Use only ascii symbols in identifiers.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#english-identifiers'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Attr:
|
||||||
|
Description: 'Checks for uses of Module#attr.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#attr'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/BlockNesting:
|
||||||
|
Description: 'Avoid excessive block nesting'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#three-is-the-number-thou-shalt-count'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/CaseEquality:
|
||||||
|
Description: 'Avoid explicit use of the case equality operator(===).'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-case-equality'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/CharacterLiteral:
|
||||||
|
Description: 'Checks for uses of character literals.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-character-literals'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/ClassAndModuleChildren:
|
||||||
|
Description: 'Checks style of children classes and modules.'
|
||||||
|
Enabled: true
|
||||||
|
EnforcedStyle: nested
|
||||||
|
|
||||||
|
Metrics/ClassLength:
|
||||||
|
Description: 'Avoid classes longer than 100 lines of code.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/ModuleLength:
|
||||||
|
Description: 'Avoid modules longer than 100 lines of code.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/ClassVars:
|
||||||
|
Description: 'Avoid the use of class variables.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-class-vars'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/CollectionMethods:
|
||||||
|
Enabled: true
|
||||||
|
PreferredMethods:
|
||||||
|
find: detect
|
||||||
|
inject: reduce
|
||||||
|
collect: map
|
||||||
|
find_all: select
|
||||||
|
|
||||||
|
Style/ColonMethodCall:
|
||||||
|
Description: 'Do not use :: for method call.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#double-colons'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/CommentAnnotation:
|
||||||
|
Description: >-
|
||||||
|
Checks formatting of special comments
|
||||||
|
(TODO, FIXME, OPTIMIZE, HACK, REVIEW).
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#annotate-keywords'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/AbcSize:
|
||||||
|
Description: >-
|
||||||
|
A calculated magnitude based on number of assignments,
|
||||||
|
branches, and conditions.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/BlockLength:
|
||||||
|
CountComments: true # count full line comments?
|
||||||
|
Max: 25
|
||||||
|
ExcludedMethods: []
|
||||||
|
Exclude:
|
||||||
|
- "spec/**/*"
|
||||||
|
|
||||||
|
Metrics/CyclomaticComplexity:
|
||||||
|
Description: >-
|
||||||
|
A complexity metric that is strongly correlated to the number
|
||||||
|
of test cases needed to validate a method.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/Delegate:
|
||||||
|
Description: 'Prefer delegate method for delegations.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/PreferredHashMethods:
|
||||||
|
Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
|
||||||
|
StyleGuide: '#hash-key'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Documentation:
|
||||||
|
Description: 'Document classes and non-namespace modules.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/DoubleNegation:
|
||||||
|
Description: 'Checks for uses of double negation (!!).'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-bang-bang'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/EachWithObject:
|
||||||
|
Description: 'Prefer `each_with_object` over `inject` or `reduce`.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/EmptyLiteral:
|
||||||
|
Description: 'Prefer literals to Array.new/Hash.new/String.new.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#literal-array-hash'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Checks whether the source file has a utf-8 encoding comment or not
|
||||||
|
# AutoCorrectEncodingComment must match the regex
|
||||||
|
# /#.*coding\s?[:=]\s?(?:UTF|utf)-8/
|
||||||
|
Style/Encoding:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/EvenOdd:
|
||||||
|
Description: 'Favor the use of Fixnum#even? && Fixnum#odd?'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#predicate-methods'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Naming/FileName:
|
||||||
|
Description: 'Use snake_case for source file names.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#snake-case-files'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/FrozenStringLiteralComment:
|
||||||
|
Description: >-
|
||||||
|
Add the frozen_string_literal comment to the top of files
|
||||||
|
to help transition from Ruby 2.3.0 to Ruby 3.0.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/FlipFlop:
|
||||||
|
Description: 'Checks for flip flops'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-flip-flops'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/FormatString:
|
||||||
|
Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#sprintf'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/GlobalVars:
|
||||||
|
Description: 'Do not introduce global variables.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#instance-vars'
|
||||||
|
Reference: 'http://www.zenspider.com/Languages/Ruby/QuickRef.html'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/GuardClause:
|
||||||
|
Description: 'Check for conditionals that can be replaced with guard clauses'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/IfUnlessModifier:
|
||||||
|
Description: >-
|
||||||
|
Favor modifier if/unless usage when you have a
|
||||||
|
single-line body.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/IfWithSemicolon:
|
||||||
|
Description: 'Do not use if x; .... Use the ternary operator instead.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-semicolon-ifs'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/InlineComment:
|
||||||
|
Description: 'Avoid inline comments.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Lambda:
|
||||||
|
Description: 'Use the new lambda literal syntax for single-line blocks.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#lambda-multi-line'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/LambdaCall:
|
||||||
|
Description: 'Use lambda.call(...) instead of lambda.(...).'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#proc-call'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/LineEndConcatenation:
|
||||||
|
Description: >-
|
||||||
|
Use \ instead of + or << to concatenate two string literals at
|
||||||
|
line end.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/LineLength:
|
||||||
|
Description: 'Limit lines to 80 characters.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits'
|
||||||
|
Max: 80
|
||||||
|
|
||||||
|
Metrics/MethodLength:
|
||||||
|
Description: 'Avoid methods longer than 10 lines of code.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#short-methods'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/ModuleFunction:
|
||||||
|
Description: 'Checks for usage of `extend self` in modules.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#module-function'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/MultilineBlockChain:
|
||||||
|
Description: 'Avoid multi-line chains of blocks.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#single-line-blocks'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/NegatedIf:
|
||||||
|
Description: >-
|
||||||
|
Favor unless over if for negative conditions
|
||||||
|
(or control flow or).
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#unless-for-negatives'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/NegatedWhile:
|
||||||
|
Description: 'Favor until over while for negative conditions.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#until-for-negatives'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Next:
|
||||||
|
Description: 'Use `next` to skip iteration instead of a condition at the end.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/NilComparison:
|
||||||
|
Description: 'Prefer x.nil? to x == nil.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#predicate-methods'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/Not:
|
||||||
|
Description: 'Use ! instead of not.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#bang-not-not'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/NumericLiterals:
|
||||||
|
Description: >-
|
||||||
|
Add underscores to large numeric literals to improve their
|
||||||
|
readability.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscores-in-numerics'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/OneLineConditional:
|
||||||
|
Description: >-
|
||||||
|
Favor the ternary operator(?:) over
|
||||||
|
if/then/else/end constructs.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#ternary-operator'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Naming/BinaryOperatorParameterName:
|
||||||
|
Description: 'When defining binary operators, name the argument other.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#other-arg'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Metrics/ParameterLists:
|
||||||
|
Description: 'Avoid parameter lists longer than three or four parameters.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#too-many-params'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/PercentLiteralDelimiters:
|
||||||
|
Description: 'Use `%`-literal delimiters consistently'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-literal-braces'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/PerlBackrefs:
|
||||||
|
Description: 'Avoid Perl-style regex back references.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Naming/PredicateName:
|
||||||
|
Description: 'Check the names of predicate methods.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#bool-methods-qmark'
|
||||||
|
NamePrefixBlacklist:
|
||||||
|
- is_
|
||||||
|
Exclude:
|
||||||
|
- spec/**/*
|
||||||
|
|
||||||
|
Style/Proc:
|
||||||
|
Description: 'Use proc instead of Proc.new.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#proc'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/RaiseArgs:
|
||||||
|
Description: 'Checks the arguments passed to raise/fail.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#exception-class-messages'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/RegexpLiteral:
|
||||||
|
Description: 'Use / or %r around regular expressions.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-r'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/SelfAssignment:
|
||||||
|
Description: >-
|
||||||
|
Checks for places where self-assignment shorthand should have
|
||||||
|
been used.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#self-assignment'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/SingleLineBlockParams:
|
||||||
|
Description: 'Enforces the names of some block params.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#reduce-blocks'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/SingleLineMethods:
|
||||||
|
Description: 'Avoid single-line methods.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-single-line-methods'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/SignalException:
|
||||||
|
Description: 'Checks for proper usage of fail and raise.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#fail-method'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/SpecialGlobalVars:
|
||||||
|
Description: 'Avoid Perl-style global variables.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-cryptic-perlisms'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/StringLiterals:
|
||||||
|
Description: 'Checks if uses of quotes match the configured preference.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#consistent-string-literals'
|
||||||
|
EnforcedStyle: double_quotes
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Style/TrailingCommaInArguments:
|
||||||
|
Description: 'Checks for trailing comma in argument lists.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
|
||||||
|
EnforcedStyleForMultiline: comma
|
||||||
|
SupportedStylesForMultiline:
|
||||||
|
- comma
|
||||||
|
- consistent_comma
|
||||||
|
- no_comma
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Style/TrailingCommaInArrayLiteral:
|
||||||
|
Description: 'Checks for trailing comma in array literals.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
|
||||||
|
EnforcedStyleForMultiline: comma
|
||||||
|
SupportedStylesForMultiline:
|
||||||
|
- comma
|
||||||
|
- consistent_comma
|
||||||
|
- no_comma
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Style/TrailingCommaInHashLiteral:
|
||||||
|
Description: 'Checks for trailing comma in hash literals.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
|
||||||
|
EnforcedStyleForMultiline: comma
|
||||||
|
SupportedStylesForMultiline:
|
||||||
|
- comma
|
||||||
|
- consistent_comma
|
||||||
|
- no_comma
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Style/TrivialAccessors:
|
||||||
|
Description: 'Prefer attr_* methods to trivial readers/writers.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#attr_family'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/VariableInterpolation:
|
||||||
|
Description: >-
|
||||||
|
Don't interpolate global, instance and class variables
|
||||||
|
directly in strings.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#curlies-interpolate'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/WhenThen:
|
||||||
|
Description: 'Use when x then ... for one-line cases.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#one-line-cases'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/WhileUntilModifier:
|
||||||
|
Description: >-
|
||||||
|
Favor modifier while/until usage when you have a
|
||||||
|
single-line body.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#while-as-a-modifier'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Style/WordArray:
|
||||||
|
Description: 'Use %w or %W for arrays of words.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#percent-w'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Layout
|
||||||
|
|
||||||
|
Layout/AlignParameters:
|
||||||
|
Description: 'Here we check if the parameters on a multi-line method call or definition are aligned.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-double-indent'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Layout/ConditionPosition:
|
||||||
|
Description: >-
|
||||||
|
Checks for condition placed in a confusing position relative to
|
||||||
|
the keyword.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#same-line-condition'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Layout/DotPosition:
|
||||||
|
Description: 'Checks the position of the dot in multi-line method calls.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains'
|
||||||
|
EnforcedStyle: leading
|
||||||
|
|
||||||
|
Layout/ExtraSpacing:
|
||||||
|
Description: 'Do not use unnecessary spacing.'
|
||||||
|
Enabled: true
|
||||||
|
|
||||||
|
Layout/MultilineOperationIndentation:
|
||||||
|
Description: >-
|
||||||
|
Checks indentation of binary operations that span more than
|
||||||
|
one line.
|
||||||
|
Enabled: true
|
||||||
|
EnforcedStyle: indented
|
||||||
|
|
||||||
|
Layout/MultilineMethodCallIndentation:
|
||||||
|
Description: >-
|
||||||
|
Checks indentation of method calls with the dot operator
|
||||||
|
that span more than one line.
|
||||||
|
Enabled: true
|
||||||
|
EnforcedStyle: indented
|
||||||
|
|
||||||
|
Layout/InitialIndentation:
|
||||||
|
Description: >-
|
||||||
|
Checks the indentation of the first non-blank non-comment line in a file.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Lint
|
||||||
|
|
||||||
|
Lint/AmbiguousOperator:
|
||||||
|
Description: >-
|
||||||
|
Checks for ambiguous operators in the first argument of a
|
||||||
|
method invocation without parentheses.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parens-as-args'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/AmbiguousRegexpLiteral:
|
||||||
|
Description: >-
|
||||||
|
Checks for ambiguous regexp literals in the first argument of
|
||||||
|
a method invocation without parenthesis.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/AssignmentInCondition:
|
||||||
|
Description: "Don't use assignment in conditions."
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#safe-assignment-in-condition'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/CircularArgumentReference:
|
||||||
|
Description: "Don't refer to the keyword argument in the default value."
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/DeprecatedClassMethods:
|
||||||
|
Description: 'Check for deprecated class method calls.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/DuplicatedKey:
|
||||||
|
Description: 'Check for duplicate keys in hash literals.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/EachWithObjectArgument:
|
||||||
|
Description: 'Check for immutable argument given to each_with_object.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/ElseLayout:
|
||||||
|
Description: 'Check for odd code arrangement in an else block.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/FormatParameterMismatch:
|
||||||
|
Description: 'The number of parameters to format/sprint must match the fields.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/HandleExceptions:
|
||||||
|
Description: "Don't suppress exception."
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/LiteralAsCondition:
|
||||||
|
Description: 'Checks of literals used in conditions.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/LiteralInInterpolation:
|
||||||
|
Description: 'Checks for literals used in interpolation.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/Loop:
|
||||||
|
Description: >-
|
||||||
|
Use Kernel#loop with break rather than begin/end/until or
|
||||||
|
begin/end/while for post-loop tests.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#loop-with-break'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/NestedMethodDefinition:
|
||||||
|
Description: 'Do not use nested method definitions.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-nested-methods'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/NonLocalExitFromIterator:
|
||||||
|
Description: 'Do not use return in iterator to cause non-local exit.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/ParenthesesAsGroupedExpression:
|
||||||
|
Description: >-
|
||||||
|
Checks for method calls with a space before the opening
|
||||||
|
parenthesis.
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#parens-no-spaces'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/RequireParentheses:
|
||||||
|
Description: >-
|
||||||
|
Use parentheses in the method call to avoid confusion
|
||||||
|
about precedence.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/UnderscorePrefixedVariableName:
|
||||||
|
Description: 'Do not use prefix `_` for a variable that is used.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/UnneededCopDisableDirective:
|
||||||
|
Description: >-
|
||||||
|
Checks for rubocop:disable comments that can be removed.
|
||||||
|
Note: this cop is not disabled when disabling all cops.
|
||||||
|
It must be explicitly disabled.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Lint/Void:
|
||||||
|
Description: 'Possible use of operator/literal/variable in void context.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Performance
|
||||||
|
|
||||||
|
Performance/CaseWhenSplat:
|
||||||
|
Description: >-
|
||||||
|
Place `when` conditions that use splat at the end
|
||||||
|
of the list of `when` branches.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Performance/Count:
|
||||||
|
Description: >-
|
||||||
|
Use `count` instead of `select...size`, `reject...size`,
|
||||||
|
`select...count`, `reject...count`, `select...length`,
|
||||||
|
and `reject...length`.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Performance/Detect:
|
||||||
|
Description: >-
|
||||||
|
Use `detect` instead of `select.first`, `find_all.first`,
|
||||||
|
`select.last`, and `find_all.last`.
|
||||||
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerabledetect-vs-enumerableselectfirst-code'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Performance/FlatMap:
|
||||||
|
Description: >-
|
||||||
|
Use `Enumerable#flat_map`
|
||||||
|
instead of `Enumerable#map...Array#flatten(1)`
|
||||||
|
or `Enumberable#collect..Array#flatten(1)`
|
||||||
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablemaparrayflatten-vs-enumerableflat_map-code'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Performance/ReverseEach:
|
||||||
|
Description: 'Use `reverse_each` instead of `reverse.each`.'
|
||||||
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#enumerablereverseeach-vs-enumerablereverse_each-code'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Performance/Sample:
|
||||||
|
Description: >-
|
||||||
|
Use `sample` instead of `shuffle.first`,
|
||||||
|
`shuffle.last`, and `shuffle[Fixnum]`.
|
||||||
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#arrayshufflefirst-vs-arraysample-code'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Performance/Size:
|
||||||
|
Description: >-
|
||||||
|
Use `size` instead of `count` for counting
|
||||||
|
the number of elements in `Array` and `Hash`.
|
||||||
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#arraycount-vs-arraysize-code'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Performance/StringReplacement:
|
||||||
|
Description: >-
|
||||||
|
Use `tr` instead of `gsub` when you are replacing the same
|
||||||
|
number of characters. Use `delete` instead of `gsub` when
|
||||||
|
you are deleting characters.
|
||||||
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#stringgsub-vs-stringtr-code'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Rails
|
||||||
|
|
||||||
|
Rails/ActionFilter:
|
||||||
|
Description: 'Enforces consistent use of action filter methods.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/Date:
|
||||||
|
Description: >-
|
||||||
|
Checks the correct usage of date aware methods,
|
||||||
|
such as Date.today, Date.current etc.
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/FindBy:
|
||||||
|
Description: 'Prefer find_by over where.first.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/FindEach:
|
||||||
|
Description: 'Prefer all.find_each over all.find.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/HasAndBelongsToMany:
|
||||||
|
Description: 'Prefer has_many :through to has_and_belongs_to_many.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/Output:
|
||||||
|
Description: 'Checks for calls to puts, print, etc.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/ReadWriteAttribute:
|
||||||
|
Description: >-
|
||||||
|
Checks for read_attribute(:attr) and
|
||||||
|
write_attribute(:attr, val).
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/ScopeArgs:
|
||||||
|
Description: 'Checks the arguments of ActiveRecord scopes.'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/TimeZone:
|
||||||
|
Description: 'Checks the correct usage of time zone aware methods.'
|
||||||
|
StyleGuide: 'https://github.com/bbatsov/rails-style-guide#time'
|
||||||
|
Reference: 'http://danilenko.org/2012/7/6/rails_timezones'
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
Rails/Validation:
|
||||||
|
Description: 'Use validates :attribute, hash of validations.'
|
||||||
|
Enabled: false
|
||||||
@ -1,3 +0,0 @@
|
|||||||
rvm:
|
|
||||||
- 1.9.2
|
|
||||||
- 1.9.3
|
|
||||||
22
CHANGELOG.md
22
CHANGELOG.md
@ -1,3 +1,25 @@
|
|||||||
|
## v2.0.1
|
||||||
|
|
||||||
|
* Update homepage to new location.
|
||||||
|
|
||||||
|
## v2.0.0
|
||||||
|
|
||||||
|
* Remove dependency on supermodel for tests.
|
||||||
|
|
||||||
|
## v1.2.0
|
||||||
|
|
||||||
|
* Added ability to substitute hyphen delimiter.
|
||||||
|
|
||||||
|
## v1.1.0
|
||||||
|
|
||||||
|
* Slugs are now generated with `parameterize`.
|
||||||
|
* Spaces get converted to hyphens instead of underscores. Hyphens in the original string are collapsed.
|
||||||
|
* Removed dependence on iconv.
|
||||||
|
|
||||||
|
## v1.0.0
|
||||||
|
|
||||||
|
* Added test for slugs with numbers.
|
||||||
|
|
||||||
## v0.2.1
|
## v0.2.1
|
||||||
|
|
||||||
* Added basic transliteration with IConv.
|
* Added basic transliteration with IConv.
|
||||||
|
|||||||
2
Gemfile
2
Gemfile
@ -1,4 +1,4 @@
|
|||||||
source 'https://rubygems.org'
|
source "https://rubygems.org"
|
||||||
|
|
||||||
# Specify your gem's dependencies in slugtastic.gemspec
|
# Specify your gem's dependencies in slugtastic.gemspec
|
||||||
gemspec
|
gemspec
|
||||||
|
|||||||
59
Gemfile.lock
59
Gemfile.lock
@ -1,36 +1,49 @@
|
|||||||
PATH
|
PATH
|
||||||
remote: .
|
remote: .
|
||||||
specs:
|
specs:
|
||||||
slugtastic (0.2.1)
|
slugtastic (2.0.1)
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
activemodel (3.0.17)
|
activemodel (5.2.0)
|
||||||
activesupport (= 3.0.17)
|
activesupport (= 5.2.0)
|
||||||
builder (~> 2.1.2)
|
activesupport (5.2.0)
|
||||||
i18n (~> 0.5.0)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
activesupport (3.0.17)
|
i18n (>= 0.7, < 2)
|
||||||
builder (2.1.2)
|
minitest (~> 5.1)
|
||||||
diff-lcs (1.1.3)
|
tzinfo (~> 1.1)
|
||||||
i18n (0.5.0)
|
concurrent-ruby (1.0.5)
|
||||||
rake (0.9.2.2)
|
diff-lcs (1.3)
|
||||||
rspec (2.11.0)
|
i18n (1.0.1)
|
||||||
rspec-core (~> 2.11.0)
|
concurrent-ruby (~> 1.0)
|
||||||
rspec-expectations (~> 2.11.0)
|
minitest (5.11.3)
|
||||||
rspec-mocks (~> 2.11.0)
|
rake (12.3.1)
|
||||||
rspec-core (2.11.1)
|
rspec (3.7.0)
|
||||||
rspec-expectations (2.11.2)
|
rspec-core (~> 3.7.0)
|
||||||
diff-lcs (~> 1.1.3)
|
rspec-expectations (~> 3.7.0)
|
||||||
rspec-mocks (2.11.2)
|
rspec-mocks (~> 3.7.0)
|
||||||
supermodel (0.1.6)
|
rspec-core (3.7.1)
|
||||||
activemodel (~> 3.0.0)
|
rspec-support (~> 3.7.0)
|
||||||
|
rspec-expectations (3.7.0)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.7.0)
|
||||||
|
rspec-mocks (3.7.0)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.7.0)
|
||||||
|
rspec-support (3.7.1)
|
||||||
|
thread_safe (0.3.6)
|
||||||
|
tzinfo (1.2.5)
|
||||||
|
thread_safe (~> 0.1)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
rake
|
activemodel (~> 5)
|
||||||
rspec
|
rake (~> 12.3)
|
||||||
|
rspec (~> 3.7)
|
||||||
slugtastic!
|
slugtastic!
|
||||||
supermodel
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.16.1
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2012 Dan Barber
|
Copyright (c) 2015 Dan Barber
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
|
|||||||
24
README.md
24
README.md
@ -1,19 +1,25 @@
|
|||||||
# Slugtastic [](http://travis-ci.org/danbee/slugtastic)
|
# Slugtastic
|
||||||
|
|
||||||
Simple gem for autogenerating permalink style slugs for your ActiveRecord models.
|
[](https://codeship.com/projects/30797)
|
||||||
|
|
||||||
|
[](https://badge.fury.io/rb/slugtastic)
|
||||||
|
|
||||||
|
Simple gem for autogenerating permalink style slugs for your ActiveRecord
|
||||||
|
models.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* Ruby 1.9.2 or 1.9.3
|
* Ruby 2.2.0+
|
||||||
* Rails 3.1 or higher.
|
* Rails 5 or higher.
|
||||||
|
|
||||||
It should work with Rails 3.0 but it hasn't been tested.
|
It will probably work just find with earlier versions--down to Rails 3.1 and
|
||||||
|
Ruby 1.9.3--but it's not tested.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Add this line to your application's Gemfile:
|
Add this line to your application's Gemfile:
|
||||||
|
|
||||||
gem 'slugtastic'
|
gem "slugtastic"
|
||||||
|
|
||||||
And then execute:
|
And then execute:
|
||||||
|
|
||||||
@ -27,9 +33,11 @@ Or install it yourself as:
|
|||||||
|
|
||||||
Usage is very simple. Just add the following to your model:
|
Usage is very simple. Just add the following to your model:
|
||||||
|
|
||||||
has_slug :slug, :from => :title
|
slug :slug, from: :title
|
||||||
|
|
||||||
This will generate a slug string from the title atrribute and store it in the slug attribute unless the slug already contains a string. The slug is generated pre-validation so you can still use `validates_presence_of :slug`.
|
This will generate a slug string from the title attribute and store it in the
|
||||||
|
slug attribute unless the slug already contains a string. The slug is generated
|
||||||
|
pre-validation so you can still use `validates_presence_of :slug`.
|
||||||
|
|
||||||
There are no extra options at present.
|
There are no extra options at present.
|
||||||
|
|
||||||
|
|||||||
@ -2,12 +2,11 @@ require "slugtastic/version"
|
|||||||
require "slugtastic/model_additions"
|
require "slugtastic/model_additions"
|
||||||
require "slugtastic/railtie" if defined? Rails
|
require "slugtastic/railtie" if defined? Rails
|
||||||
|
|
||||||
# TODO: iconv will be deprecated in the future.
|
|
||||||
require 'iconv'
|
|
||||||
|
|
||||||
module Slugtastic
|
module Slugtastic
|
||||||
def self.generate_slug(string)
|
def self.generate_slug(string, delimiter = nil)
|
||||||
return if string.nil?
|
return if string.nil?
|
||||||
Iconv.iconv("ASCII//TRANSLIT//IGNORE", "UTF-8", string).join.downcase.gsub(/ /, '_').gsub(/[^a-z0-9\-_]/, '')
|
slug = string.parameterize
|
||||||
|
slug.gsub!("-", delimiter) if delimiter
|
||||||
|
slug
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,19 +1,25 @@
|
|||||||
module Slugtastic
|
module Slugtastic
|
||||||
module ModelAdditions
|
module ModelAdditions
|
||||||
|
|
||||||
# To generate a slug from another value, call <tt>has_slug</tt> in any
|
# To generate a slug from another value, call <tt>has_slug</tt> in any
|
||||||
# ActiveRecord model and pass in the name of the slug attribute.
|
# ActiveRecord model and pass in the name of the slug attribute.
|
||||||
# By default the slug will be generated from the <tt>title</tt> attribute, but
|
# By default the slug will be generated from the <tt>title</tt> attribute,
|
||||||
# you can specify by adding <tt>:from => {attribute}</tt>.
|
# but you can specify by adding <tt>:from => {attribute}</tt>.
|
||||||
#
|
#
|
||||||
# class Article < ActiveRecord::Base
|
# class Article < ActiveRecord::Base
|
||||||
# has_slug :slug, :from => :title
|
# has_slug :slug, :from => :title
|
||||||
# end
|
# end
|
||||||
def has_slug name, options = { :from => :title }
|
#
|
||||||
before_validation do |record|
|
def slug(name, options = {})
|
||||||
send("#{name}=", Slugtastic.generate_slug(send(options[:from]))) if send(name).nil? or send(name).blank?
|
options.reverse_merge!(from: :title)
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
before_validation do
|
||||||
|
if send(name).nil? || send(name).blank?
|
||||||
|
send(
|
||||||
|
"#{name}=",
|
||||||
|
Slugtastic.generate_slug(send(options[:from]), options[:delimiter]),
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
module Slugtastic
|
module Slugtastic
|
||||||
VERSION = "1.0.0"
|
VERSION = "2.0.1".freeze
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,21 +1,24 @@
|
|||||||
# -*- encoding: utf-8 -*-
|
# -*- encoding: utf-8 -*-
|
||||||
require File.expand_path('../lib/slugtastic/version', __FILE__)
|
|
||||||
|
require File.expand_path("lib/slugtastic/version", __dir__)
|
||||||
|
|
||||||
Gem::Specification.new do |gem|
|
Gem::Specification.new do |gem|
|
||||||
gem.authors = ["Dan Barber"]
|
gem.authors = ["Dan Barber"]
|
||||||
gem.email = ["danbee@gmail.com"]
|
gem.email = ["danbee@gmail.com"]
|
||||||
gem.description = %q{A simple slug string generator for ActiveRecord. Will populate a slug attribute from another attribute.}
|
gem.licenses = ["MIT"]
|
||||||
gem.summary = %q{A simple slug string generator for ActiveRecord.}
|
gem.description = "A simple slug string generator for ActiveRecord. " \
|
||||||
gem.homepage = ""
|
"Will populate a slug attribute from another attribute."
|
||||||
|
gem.summary = "A simple slug string generator for ActiveRecord."
|
||||||
|
gem.homepage = "https://danbee.github.io/slugtastic"
|
||||||
|
|
||||||
gem.files = `git ls-files`.split($\)
|
gem.files = `git ls-files`.split($\)
|
||||||
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
||||||
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
||||||
gem.name = "slugtastic"
|
gem.name = "slugtastic"
|
||||||
gem.require_paths = ["lib"]
|
gem.require_paths = ["lib"]
|
||||||
gem.version = Slugtastic::VERSION
|
gem.version = Slugtastic::VERSION
|
||||||
|
|
||||||
gem.add_development_dependency "rake"
|
gem.add_development_dependency "activemodel", "~> 5"
|
||||||
gem.add_development_dependency "rspec"
|
gem.add_development_dependency "rake", "~> 12.3"
|
||||||
gem.add_development_dependency "supermodel"
|
gem.add_development_dependency "rspec", "~> 3.7"
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,24 +1,48 @@
|
|||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
class Model < SuperModel::Base
|
require "spec_helper"
|
||||||
include ActiveModel::Validations::Callbacks
|
require "support/fake_model"
|
||||||
|
|
||||||
|
class BaseModel < FakeModel
|
||||||
extend Slugtastic::ModelAdditions
|
extend Slugtastic::ModelAdditions
|
||||||
|
end
|
||||||
|
|
||||||
|
class Model < BaseModel
|
||||||
|
attr_accessor :slug, :name
|
||||||
|
slug :slug, from: :name
|
||||||
|
end
|
||||||
|
|
||||||
|
class ModelDefault < BaseModel
|
||||||
attr_accessor :slug, :title
|
attr_accessor :slug, :title
|
||||||
has_slug :slug, from: :title
|
slug :slug
|
||||||
|
end
|
||||||
|
|
||||||
|
class ModelDelimiter < BaseModel
|
||||||
|
attr_accessor :slug, :title
|
||||||
|
slug :slug, delimiter: "_"
|
||||||
end
|
end
|
||||||
|
|
||||||
describe Slugtastic::ModelAdditions do
|
describe Slugtastic::ModelAdditions do
|
||||||
it "generates a slug from the title" do
|
it "generates a slug from the name" do
|
||||||
Model.create!(:title => "A Simple Title").slug.should eq "a_simple_title"
|
expect(Model.create!(name: "A Simple Name").slug).to eq "a-simple-name"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "defaults to generating the slug from title" do
|
||||||
|
expect(ModelDefault.create!(title: "A Simple Title").slug)
|
||||||
|
.to eq "a-simple-title"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "generates a slug from the title with delimiter substitutions" do
|
||||||
|
expect(ModelDelimiter.create!(title: "A Simple Title").slug)
|
||||||
|
.to eq "a_simple_title"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't regenerate the slug if it already exists" do
|
it "doesn't regenerate the slug if it already exists" do
|
||||||
model = Model.create!(:title => "A Simple Title")
|
model = Model.create!(name: "A Simple Name")
|
||||||
model.slug.should eq "a_simple_title"
|
expect(model.slug).to eq "a-simple-name"
|
||||||
|
|
||||||
model.title = "A new title"
|
model.name = "A new title"
|
||||||
model.save
|
model.save
|
||||||
model.slug.should eq "a_simple_title"
|
expect(model.slug).to eq "a-simple-name"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,31 +1,43 @@
|
|||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
require 'spec_helper'
|
|
||||||
|
require "spec_helper"
|
||||||
|
|
||||||
describe Slugtastic do
|
describe Slugtastic do
|
||||||
describe ".generate_slug" do
|
describe ".generate_slug" do
|
||||||
it "returns empty if the input string is empty" do
|
it "returns empty if the input string is empty" do
|
||||||
Slugtastic.generate_slug("").should eq ""
|
expect(Slugtastic.generate_slug("")).to eq ""
|
||||||
end
|
end
|
||||||
|
|
||||||
it "generates a slug from a simple string" do
|
it "generates a slug from a simple string" do
|
||||||
Slugtastic.generate_slug("A simple string.").should eq "a_simple_string"
|
expect(Slugtastic.generate_slug("A simple string."))
|
||||||
|
.to eq "a-simple-string"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "substitutes hyphens for delimiter if specified" do
|
||||||
|
expect(Slugtastic.generate_slug("A simple string.", "_"))
|
||||||
|
.to eq "a_simple_string"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "generates a slug from a string with numbers" do
|
it "generates a slug from a string with numbers" do
|
||||||
Slugtastic.generate_slug("Slugtastic was built in 2012.").should eq "slugtastic_was_built_in_2012"
|
expect(Slugtastic.generate_slug("Slugtastic was built in 2012."))
|
||||||
|
.to eq "slugtastic-was-built-in-2012"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "handles strings with hypens in them" do
|
it "handles strings with hypens in them" do
|
||||||
Slugtastic.generate_slug("A string - with Hyphens").should eq "a_string_-_with_hyphens"
|
expect(Slugtastic.generate_slug("A string - with Hyphens"))
|
||||||
|
.to eq "a-string-with-hyphens"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "handles strings with other characters in them" do
|
it "handles strings with other characters in them" do
|
||||||
Slugtastic.generate_slug("A string, with /All sorts!").should eq "a_string_with_all_sorts"
|
expect(Slugtastic.generate_slug("A string, with /All sorts!"))
|
||||||
|
.to eq "a-string-with-all-sorts"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "handles basic transliteration" do
|
it "handles basic transliteration" do
|
||||||
Slugtastic.generate_slug("Un été À la maison.").should eq "un_ete_a_la_maison"
|
expect(Slugtastic.generate_slug("Un été À la maison."))
|
||||||
Slugtastic.generate_slug("Ātri brūna lapsa").should eq "atri_bruna_lapsa"
|
.to eq "un-ete-a-la-maison"
|
||||||
|
expect(Slugtastic.generate_slug("Ātri brūna lapsa"))
|
||||||
|
.to eq "atri-bruna-lapsa"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,2 +1 @@
|
|||||||
require "slugtastic"
|
require "slugtastic"
|
||||||
require "supermodel"
|
|
||||||
|
|||||||
21
spec/support/fake_model.rb
Normal file
21
spec/support/fake_model.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
require "active_support/core_ext/hash/reverse_merge"
|
||||||
|
require "active_model"
|
||||||
|
|
||||||
|
class FakeModel
|
||||||
|
include ActiveModel::Validations::Callbacks
|
||||||
|
|
||||||
|
def initialize(attrs = {})
|
||||||
|
attrs.each do |key, value|
|
||||||
|
instance_variable_set(:"@#{key}", value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.create!(attrs)
|
||||||
|
new(attrs).save
|
||||||
|
end
|
||||||
|
|
||||||
|
def save
|
||||||
|
_run_validation_callbacks
|
||||||
|
self
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in New Issue
Block a user