spree_frontend 4.3.2 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.circleci/config.yml +191 -0
 - data/.codeclimate.yml +36 -0
 - data/.deepsource.toml +19 -0
 - data/.editorconfig +22 -0
 - data/.eslintignore +7 -0
 - data/.eslintrc +36 -0
 - data/.gem_release.yml +7 -0
 - data/.github/CONTRIBUTING.md +1 -0
 - data/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
 - data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
 - data/.github/ISSUE_TEMPLATE.md +39 -0
 - data/.github/dependabot.yml +32 -0
 - data/.gitignore +58 -0
 - data/.rubocop.yml +197 -0
 - data/.solargraph.yml +20 -0
 - data/.stylelintignore +4 -0
 - data/.stylelintrc +6 -0
 - data/CODE_OF_CONDUCT.md +22 -0
 - data/Gemfile +62 -3
 - data/LICENSE +1 -1
 - data/README.md +35 -0
 - data/SECURITY.md +1 -0
 - data/app/controllers/spree/addresses_controller.rb +2 -2
 - data/app/controllers/spree/locale_controller.rb +1 -1
 - data/app/controllers/spree/store_controller.rb +42 -1
 - data/app/helpers/spree/frontend_helper.rb +19 -1
 - data/app/helpers/spree/navigation_helper.rb +1 -1
 - data/app/helpers/spree/store_helper.rb +1 -1
 - data/app/models/spree/frontend_configuration.rb +7 -1
 - data/app/services/spree/build_localized_redirect_url.rb +101 -0
 - data/app/views/spree/checkout/_delivery.html.erb +1 -1
 - data/app/views/spree/products/_description.html.erb +1 -1
 - data/app/views/spree/shared/_link_to_account.html.erb +3 -1
 - data/app/views/spree/shared/_paths.html.erb +1 -1
 - data/config/routes.rb +4 -4
 - data/lib/spree/frontend/engine.rb +2 -1
 - data/lib/spree/frontend/version.rb +9 -0
 - data/license.md +13 -0
 - data/spree_frontend.gemspec +2 -2
 - metadata +32 -10
 - data/app/views/spree/shared/_taxonomies.html.erb +0 -16
 
    
        data/.rubocop.yml
    ADDED
    
    | 
         @@ -0,0 +1,197 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require: rubocop-rspec
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            AllCops:
         
     | 
| 
      
 4 
     | 
    
         
            +
              TargetRubyVersion: 2.5
         
     | 
| 
      
 5 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 6 
     | 
    
         
            +
                - '**/sandbox/**/*'
         
     | 
| 
      
 7 
     | 
    
         
            +
                - '**/db/migrate/*'
         
     | 
| 
      
 8 
     | 
    
         
            +
                - '**/Gemfile'
         
     | 
| 
      
 9 
     | 
    
         
            +
                - '**/Gemfile.lock'
         
     | 
| 
      
 10 
     | 
    
         
            +
                - '**/Rakefile'
         
     | 
| 
      
 11 
     | 
    
         
            +
                - '**/rails'
         
     | 
| 
      
 12 
     | 
    
         
            +
                - '**/*.gemspec'
         
     | 
| 
      
 13 
     | 
    
         
            +
                - '**/dummy/**/*'
         
     | 
| 
      
 14 
     | 
    
         
            +
                - '**/vendor/**/*'
         
     | 
| 
      
 15 
     | 
    
         
            +
                - '**/spec_helper.rb'
         
     | 
| 
      
 16 
     | 
    
         
            +
                - '**/templates/**/*'
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            Layout/MultilineOperationIndentation:
         
     | 
| 
      
 19 
     | 
    
         
            +
              EnforcedStyle: indented
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            Layout/ParameterAlignment:
         
     | 
| 
      
 22 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            Metrics/ClassLength:
         
     | 
| 
      
 25 
     | 
    
         
            +
              CountComments: false
         
     | 
| 
      
 26 
     | 
    
         
            +
              Max: 150
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            Metrics/ModuleLength:
         
     | 
| 
      
 29 
     | 
    
         
            +
              CountComments: false
         
     | 
| 
      
 30 
     | 
    
         
            +
              Max: 250
         
     | 
| 
      
 31 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 32 
     | 
    
         
            +
                - '**/spec/**/*'
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            Style/Documentation:
         
     | 
| 
      
 35 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            Layout/LineLength:
         
     | 
| 
      
 38 
     | 
    
         
            +
              Max: 150
         
     | 
| 
      
 39 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 40 
     | 
    
         
            +
                - '**/spec/**/*'
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            Metrics/MethodLength:
         
     | 
| 
      
 43 
     | 
    
         
            +
              CountComments: false
         
     | 
| 
      
 44 
     | 
    
         
            +
              Max: 50
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            Metrics/BlockLength:
         
     | 
| 
      
 47 
     | 
    
         
            +
              CountComments: false
         
     | 
| 
      
 48 
     | 
    
         
            +
              Max: 50
         
     | 
| 
      
 49 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 50 
     | 
    
         
            +
                - '**/spec/**/*'
         
     | 
| 
      
 51 
     | 
    
         
            +
                - '**/*.rake'
         
     | 
| 
      
 52 
     | 
    
         
            +
                - '**/factories/**/*'
         
     | 
| 
      
 53 
     | 
    
         
            +
                - '**/config/routes.rb'
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            Metrics/AbcSize:
         
     | 
| 
      
 56 
     | 
    
         
            +
             Max: 45
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            Style/StringLiterals:
         
     | 
| 
      
 59 
     | 
    
         
            +
              EnforcedStyle: single_quotes
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            Layout/DotPosition:
         
     | 
| 
      
 62 
     | 
    
         
            +
              EnforcedStyle: trailing
         
     | 
| 
      
 63 
     | 
    
         
            +
              Enabled: true
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            Layout/SpaceInsideArrayLiteralBrackets:
         
     | 
| 
      
 66 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 67 
     | 
    
         
            +
                - 'api/spec/integration/**/*.rb'
         
     | 
| 
      
 68 
     | 
    
         
            +
                - 'api/lib/spree/api/testing_support/v2/platform_contexts.rb'
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            Style/FrozenStringLiteralComment:
         
     | 
| 
      
 71 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            Style/RegexpLiteral:
         
     | 
| 
      
 74 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            Style/WordArray:
         
     | 
| 
      
 77 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            Style/SymbolArray:
         
     | 
| 
      
 80 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            Style/SymbolProc:
         
     | 
| 
      
 83 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 84 
     | 
    
         
            +
                - '**/app/serializers/**/*'
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
            Style/GuardClause:
         
     | 
| 
      
 87 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            Style/TrailingCommaInArrayLiteral:
         
     | 
| 
      
 90 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            Style/TrailingCommaInHashLiteral:
         
     | 
| 
      
 93 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            Style/BarePercentLiterals:
         
     | 
| 
      
 96 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            Style/MutableConstant:
         
     | 
| 
      
 99 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            Style/PercentLiteralDelimiters:
         
     | 
| 
      
 102 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            Style/IfUnlessModifier:
         
     | 
| 
      
 105 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
            Naming/VariableNumber:
         
     | 
| 
      
 108 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            Style/RedundantPercentQ:
         
     | 
| 
      
 111 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            Lint/ParenthesesAsGroupedExpression:
         
     | 
| 
      
 114 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
            Style/NumericPredicate:
         
     | 
| 
      
 117 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            Metrics/PerceivedComplexity:
         
     | 
| 
      
 120 
     | 
    
         
            +
              Max: 10
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            Metrics/CyclomaticComplexity:
         
     | 
| 
      
 123 
     | 
    
         
            +
              Max: 10
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            Style/ClassAndModuleChildren:
         
     | 
| 
      
 126 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            Style/AndOr:
         
     | 
| 
      
 129 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 130 
     | 
    
         
            +
                - '**/*controller.rb'
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
            Style/HashEachMethods:
         
     | 
| 
      
 133 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
            Style/HashTransformKeys:
         
     | 
| 
      
 136 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
            Style/HashTransformValues:
         
     | 
| 
      
 139 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
            RSpec/NestedGroups:
         
     | 
| 
      
 142 
     | 
    
         
            +
              Max: 7
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            Lint/AmbiguousBlockAssociation:
         
     | 
| 
      
 145 
     | 
    
         
            +
              Exclude:
         
     | 
| 
      
 146 
     | 
    
         
            +
                - '**/spec/**/*'
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            Style/NumericLiterals:
         
     | 
| 
      
 149 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
            RSpec/DescribeClass:
         
     | 
| 
      
 152 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
            RSpec/VerifiedDoubles:
         
     | 
| 
      
 155 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
            RSpec/MessageChain:
         
     | 
| 
      
 158 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            RSpec/AnyInstance:
         
     | 
| 
      
 161 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
            RSpec/InstanceVariable:
         
     | 
| 
      
 164 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
            RSpec/ContextWording:
         
     | 
| 
      
 167 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
            RSpec/ExpectInHook:
         
     | 
| 
      
 170 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
            RSpec/ExampleLength:
         
     | 
| 
      
 173 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
            RSpec/MessageSpies:
         
     | 
| 
      
 176 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
            RSpec/NamedSubject:
         
     | 
| 
      
 179 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
            RSpec/MultipleExpectations:
         
     | 
| 
      
 182 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
            RSpec/FilePath:
         
     | 
| 
      
 185 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
            RSpec/LetSetup:
         
     | 
| 
      
 188 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
            RSpec/SubjectStub:
         
     | 
| 
      
 191 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
            RSpec/VoidExpect:
         
     | 
| 
      
 194 
     | 
    
         
            +
              Enabled: false
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
            RSpec/BeforeAfterAll:
         
     | 
| 
      
 197 
     | 
    
         
            +
              Enabled: false
         
     | 
    
        data/.solargraph.yml
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            include:
         
     | 
| 
      
 3 
     | 
    
         
            +
            - "**/*.rb"
         
     | 
| 
      
 4 
     | 
    
         
            +
            exclude:
         
     | 
| 
      
 5 
     | 
    
         
            +
            - "*/spec/**/*"
         
     | 
| 
      
 6 
     | 
    
         
            +
            - "*test/**/*"
         
     | 
| 
      
 7 
     | 
    
         
            +
            - "*/vendor/**/*"
         
     | 
| 
      
 8 
     | 
    
         
            +
            - vendor/**/*
         
     | 
| 
      
 9 
     | 
    
         
            +
            - ".bundle/**/*"
         
     | 
| 
      
 10 
     | 
    
         
            +
            - sample/**/*
         
     | 
| 
      
 11 
     | 
    
         
            +
            - sandbox/**/*
         
     | 
| 
      
 12 
     | 
    
         
            +
            - pkg/**/*
         
     | 
| 
      
 13 
     | 
    
         
            +
            - cli/**/*.gemspec
         
     | 
| 
      
 14 
     | 
    
         
            +
            require: []
         
     | 
| 
      
 15 
     | 
    
         
            +
            domains: []
         
     | 
| 
      
 16 
     | 
    
         
            +
            reporters:
         
     | 
| 
      
 17 
     | 
    
         
            +
            - rubocop
         
     | 
| 
      
 18 
     | 
    
         
            +
            - require_not_found
         
     | 
| 
      
 19 
     | 
    
         
            +
            require_paths: []
         
     | 
| 
      
 20 
     | 
    
         
            +
            max_files: 50_000
         
     | 
    
        data/.stylelintignore
    ADDED
    
    
    
        data/.stylelintrc
    ADDED
    
    
    
        data/CODE_OF_CONDUCT.md
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Contributor Code of Conduct
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Examples of unacceptable behavior by participants include:
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            * The use of sexualized language or imagery
         
     | 
| 
      
 10 
     | 
    
         
            +
            * Personal attacks
         
     | 
| 
      
 11 
     | 
    
         
            +
            * Trolling or insulting/derogatory comments
         
     | 
| 
      
 12 
     | 
    
         
            +
            * Public or private harassment
         
     | 
| 
      
 13 
     | 
    
         
            +
            * Publishing other's private information, such as physical or electronic addresses, without explicit permission
         
     | 
| 
      
 14 
     | 
    
         
            +
            * Other unethical or unprofessional conduct.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -1,6 +1,65 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            source 'https://rubygems.org'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            gem ' 
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            %w[
         
     | 
| 
      
 6 
     | 
    
         
            +
              actionmailer actionpack actionview activejob activemodel activerecord
         
     | 
| 
      
 7 
     | 
    
         
            +
              activestorage activesupport railties
         
     | 
| 
      
 8 
     | 
    
         
            +
            ].each do |rails_gem|
         
     | 
| 
      
 9 
     | 
    
         
            +
              gem rails_gem, ENV.fetch('RAILS_VERSION', '~> 6.1.0'), require: false
         
     | 
| 
      
 10 
     | 
    
         
            +
            end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            platforms :jruby do
         
     | 
| 
      
 13 
     | 
    
         
            +
              gem 'jruby-openssl'
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            platforms :ruby do
         
     | 
| 
      
 17 
     | 
    
         
            +
              if ENV['DB'] == 'mysql'
         
     | 
| 
      
 18 
     | 
    
         
            +
                gem 'mysql2'
         
     | 
| 
      
 19 
     | 
    
         
            +
              else
         
     | 
| 
      
 20 
     | 
    
         
            +
                gem 'pg', '~> 1.1'
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            group :test do
         
     | 
| 
      
 25 
     | 
    
         
            +
              gem 'capybara', '~> 3.24'
         
     | 
| 
      
 26 
     | 
    
         
            +
              gem 'capybara-screenshot', '~> 1.0'
         
     | 
| 
      
 27 
     | 
    
         
            +
              gem 'capybara-select-2'
         
     | 
| 
      
 28 
     | 
    
         
            +
              gem 'database_cleaner', '~> 2.0'
         
     | 
| 
      
 29 
     | 
    
         
            +
              gem 'email_spec'
         
     | 
| 
      
 30 
     | 
    
         
            +
              gem 'factory_bot_rails', '~> 6.0'
         
     | 
| 
      
 31 
     | 
    
         
            +
              gem 'multi_json'
         
     | 
| 
      
 32 
     | 
    
         
            +
              gem 'rspec-activemodel-mocks', '~> 1.0'
         
     | 
| 
      
 33 
     | 
    
         
            +
              gem 'rspec-rails', '~> 5.0'
         
     | 
| 
      
 34 
     | 
    
         
            +
              gem 'rspec-retry'
         
     | 
| 
      
 35 
     | 
    
         
            +
              gem 'rspec_junit_formatter'
         
     | 
| 
      
 36 
     | 
    
         
            +
              gem 'rswag-specs'
         
     | 
| 
      
 37 
     | 
    
         
            +
              gem 'jsonapi-rspec'
         
     | 
| 
      
 38 
     | 
    
         
            +
              gem 'simplecov', '0.17.1'
         
     | 
| 
      
 39 
     | 
    
         
            +
              gem 'webmock', '~> 3.7'
         
     | 
| 
      
 40 
     | 
    
         
            +
              gem 'timecop'
         
     | 
| 
      
 41 
     | 
    
         
            +
              gem 'rails-controller-testing'
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            group :test, :development do
         
     | 
| 
      
 45 
     | 
    
         
            +
              gem 'awesome_print'
         
     | 
| 
      
 46 
     | 
    
         
            +
              gem 'gem-release'
         
     | 
| 
      
 47 
     | 
    
         
            +
              gem 'redis'
         
     | 
| 
      
 48 
     | 
    
         
            +
              gem 'rubocop', '~> 1.22.3', require: false # bumped
         
     | 
| 
      
 49 
     | 
    
         
            +
              gem 'rubocop-rspec', require: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              gem 'pry-byebug'
         
     | 
| 
      
 51 
     | 
    
         
            +
              gem 'webdrivers', '~> 4.1'
         
     | 
| 
      
 52 
     | 
    
         
            +
              gem 'puma'
         
     | 
| 
      
 53 
     | 
    
         
            +
              gem 'ffaker'
         
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            group :development do
         
     | 
| 
      
 57 
     | 
    
         
            +
              gem 'github_fast_changelog'
         
     | 
| 
      
 58 
     | 
    
         
            +
              gem 'solargraph'
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            spree_opts = { github: 'spree/spree', branch: ENV.fetch('SPREE_BRANCH', '4-4-stable') }
         
     | 
| 
      
 62 
     | 
    
         
            +
            gem 'spree_core', spree_opts
         
     | 
| 
      
 63 
     | 
    
         
            +
            gem 'spree_api', spree_opts
         
     | 
| 
       5 
64 
     | 
    
         | 
| 
       6 
65 
     | 
    
         
             
            gemspec
         
     | 
    
        data/LICENSE
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            Copyright (c) 2007- 
     | 
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2007-2021, Spree Commerce, Inc., Spark Solutions Sp. z o.o. and other contributors
         
     | 
| 
       2 
2 
     | 
    
         
             
            All rights reserved.
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            Redistribution and use in source and binary forms, with or without modification,
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,35 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Spree (Legacy) Frontend
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            This is the old Spree Storefront extracted from Spree < 4.3.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Add
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 10 
     | 
    
         
            +
            gem 'spree_frontend'
         
     | 
| 
      
 11 
     | 
    
         
            +
            ```
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            to your `Gemfile`.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            Run:
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 18 
     | 
    
         
            +
            bundle install
         
     | 
| 
      
 19 
     | 
    
         
            +
            bin/rails g spree:frontend:install
         
     | 
| 
      
 20 
     | 
    
         
            +
            ```
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            ## Maintanence policy
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            This gem is in maintainence mode.
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            We only accept bug fixes, Spree/Rails compatibility improvements & security patches.
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            For new project we recommend using [Storefront API](https://api.spreecommerce.org/) to create your own unique storefront or use one of the pre-built starters: 
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            * [Next.js](https://dev-docs.spreecommerce.org/storefronts/next.js-commerce)
         
     | 
| 
      
 31 
     | 
    
         
            +
            * [Vue Storefront](https://dev-docs.spreecommerce.org/storefronts/vue-storefront)
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            ## Customization
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            [Developer documentation](https://dev-docs.spreecommerce.org/customization/storefront)
         
     | 
    
        data/SECURITY.md
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Please see [Spree Guides Security section](https://dev-docs.spreecommerce.org/security/index).
         
     | 
| 
         @@ -45,11 +45,11 @@ module Spree 
     | 
|
| 
       45 
45 
     | 
    
         
             
                end
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                def create_service
         
     | 
| 
       48 
     | 
    
         
            -
                  Spree::Dependencies. 
     | 
| 
      
 48 
     | 
    
         
            +
                  Spree::Dependencies.address_create_service.constantize
         
     | 
| 
       49 
49 
     | 
    
         
             
                end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
51 
     | 
    
         
             
                def update_service
         
     | 
| 
       52 
     | 
    
         
            -
                  Spree::Dependencies. 
     | 
| 
      
 52 
     | 
    
         
            +
                  Spree::Dependencies.address_update_service.constantize
         
     | 
| 
       53 
53 
     | 
    
         
             
                end
         
     | 
| 
       54 
54 
     | 
    
         
             
              end
         
     | 
| 
       55 
55 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,7 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Spree
         
     | 
| 
       2 
2 
     | 
    
         
             
              class StoreController < ApplicationController
         
     | 
| 
       3 
3 
     | 
    
         
             
                include Spree::Core::ControllerHelpers::Auth
         
     | 
| 
       4 
     | 
    
         
            -
                include Spree::Core::ControllerHelpers::Common
         
     | 
| 
       5 
4 
     | 
    
         
             
                include Spree::Core::ControllerHelpers::Search
         
     | 
| 
       6 
5 
     | 
    
         
             
                include Spree::Core::ControllerHelpers::Store
         
     | 
| 
       7 
6 
     | 
    
         
             
                include Spree::Core::ControllerHelpers::StrongParameters
         
     | 
| 
         @@ -12,10 +11,16 @@ module Spree 
     | 
|
| 
       12 
11 
     | 
    
         | 
| 
       13 
12 
     | 
    
         
             
                respond_to :html
         
     | 
| 
       14 
13 
     | 
    
         | 
| 
      
 14 
     | 
    
         
            +
                layout :get_layout
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       15 
16 
     | 
    
         
             
                helper 'spree/base'
         
     | 
| 
       16 
17 
     | 
    
         
             
                helper 'spree/locale'
         
     | 
| 
       17 
18 
     | 
    
         
             
                helper 'spree/currency'
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
                helper_method :title
         
     | 
| 
      
 21 
     | 
    
         
            +
                helper_method :title=
         
     | 
| 
      
 22 
     | 
    
         
            +
                helper_method :accurate_title
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       19 
24 
     | 
    
         
             
                skip_before_action :verify_authenticity_token, only: :ensure_cart, raise: false
         
     | 
| 
       20 
25 
     | 
    
         | 
| 
       21 
26 
     | 
    
         
             
                before_action :redirect_to_default_locale
         
     | 
| 
         @@ -43,10 +48,46 @@ module Spree 
     | 
|
| 
       43 
48 
     | 
    
         | 
| 
       44 
49 
     | 
    
         
             
                protected
         
     | 
| 
       45 
50 
     | 
    
         | 
| 
      
 51 
     | 
    
         
            +
                # can be used in views as well as controllers.
         
     | 
| 
      
 52 
     | 
    
         
            +
                # e.g. <% self.title = 'This is a custom title for this view' %>
         
     | 
| 
      
 53 
     | 
    
         
            +
                attr_writer :title
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def title
         
     | 
| 
      
 56 
     | 
    
         
            +
                  title_string = @title.present? ? @title : accurate_title
         
     | 
| 
      
 57 
     | 
    
         
            +
                  if title_string.present?
         
     | 
| 
      
 58 
     | 
    
         
            +
                    if Spree::Frontend::Config[:always_put_site_name_in_title] && !title_string.include?(default_title)
         
     | 
| 
      
 59 
     | 
    
         
            +
                      [title_string, default_title].join(" #{Spree::Frontend::Config[:title_site_name_separator]} ")
         
     | 
| 
      
 60 
     | 
    
         
            +
                    else
         
     | 
| 
      
 61 
     | 
    
         
            +
                      title_string
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
      
 63 
     | 
    
         
            +
                  else
         
     | 
| 
      
 64 
     | 
    
         
            +
                    default_title
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                def default_title
         
     | 
| 
      
 69 
     | 
    
         
            +
                  current_store.name
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                # this is a hook for subclasses to provide title
         
     | 
| 
      
 73 
     | 
    
         
            +
                def accurate_title
         
     | 
| 
      
 74 
     | 
    
         
            +
                  current_store.seo_title
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
       46 
77 
     | 
    
         
             
                def config_locale
         
     | 
| 
       47 
78 
     | 
    
         
             
                  Spree::Frontend::Config[:locale]
         
     | 
| 
       48 
79 
     | 
    
         
             
                end
         
     | 
| 
       49 
80 
     | 
    
         | 
| 
      
 81 
     | 
    
         
            +
                # Returns which layout to render.
         
     | 
| 
      
 82 
     | 
    
         
            +
                #
         
     | 
| 
      
 83 
     | 
    
         
            +
                # You can set the layout you want to render inside your Spree configuration with the +:layout+ option.
         
     | 
| 
      
 84 
     | 
    
         
            +
                #
         
     | 
| 
      
 85 
     | 
    
         
            +
                # Default layout is: +app/views/spree/layouts/spree_application+
         
     | 
| 
      
 86 
     | 
    
         
            +
                #
         
     | 
| 
      
 87 
     | 
    
         
            +
                def get_layout
         
     | 
| 
      
 88 
     | 
    
         
            +
                  layout ||= Spree::Frontend::Config[:layout]
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       50 
91 
     | 
    
         
             
                def store_etag
         
     | 
| 
       51 
92 
     | 
    
         
             
                  [
         
     | 
| 
       52 
93 
     | 
    
         
             
                    current_store,
         
     | 
| 
         @@ -14,7 +14,7 @@ module Spree 
     | 
|
| 
       14 
14 
     | 
    
         
             
                                 elsif current_store.logo.attached? && current_store.logo.image?
         
     | 
| 
       15 
15 
     | 
    
         
             
                                   main_app.url_for(current_store.logo)
         
     | 
| 
       16 
16 
     | 
    
         
             
                                 else
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
                                  'logo/spree_50.png'
         
     | 
| 
       18 
18 
     | 
    
         
             
                                 end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
                  path = spree.respond_to?(:root_path) ? spree.root_path : main_app.root_path
         
     | 
| 
         @@ -373,6 +373,24 @@ module Spree 
     | 
|
| 
       373 
373 
     | 
    
         
             
                  content_tag :span, nil, class: "flag-icon flag-icon-#{country_iso_code.downcase}"
         
     | 
| 
       374 
374 
     | 
    
         
             
                end
         
     | 
| 
       375 
375 
     | 
    
         | 
| 
      
 376 
     | 
    
         
            +
                def product_wysiwyg_editor_enabled?
         
     | 
| 
      
 377 
     | 
    
         
            +
                  defined?(Spree::Backend) && Spree::Backend::Config[:product_wysiwyg_editor_enabled]
         
     | 
| 
      
 378 
     | 
    
         
            +
                end
         
     | 
| 
      
 379 
     | 
    
         
            +
             
     | 
| 
      
 380 
     | 
    
         
            +
                def taxon_wysiwyg_editor_enabled?
         
     | 
| 
      
 381 
     | 
    
         
            +
                  defined?(Spree::Backend) && Spree::Backend::Config[:taxon_wysiwyg_editor_enabled]
         
     | 
| 
      
 382 
     | 
    
         
            +
                end
         
     | 
| 
      
 383 
     | 
    
         
            +
             
     | 
| 
      
 384 
     | 
    
         
            +
                # converts line breaks in product description into <p> tags (for html display purposes)
         
     | 
| 
      
 385 
     | 
    
         
            +
                def product_description(product)
         
     | 
| 
      
 386 
     | 
    
         
            +
                  description = if Spree::Frontend::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled?
         
     | 
| 
      
 387 
     | 
    
         
            +
                                  product.description
         
     | 
| 
      
 388 
     | 
    
         
            +
                                else
         
     | 
| 
      
 389 
     | 
    
         
            +
                                  product.description.to_s.gsub(/(.*?)\r?\n\r?\n/m, '<p>\1</p>')
         
     | 
| 
      
 390 
     | 
    
         
            +
                                end
         
     | 
| 
      
 391 
     | 
    
         
            +
                  description.blank? ? Spree.t(:product_has_no_description) : description
         
     | 
| 
      
 392 
     | 
    
         
            +
                end
         
     | 
| 
      
 393 
     | 
    
         
            +
             
     | 
| 
       376 
394 
     | 
    
         
             
                private
         
     | 
| 
       377 
395 
     | 
    
         | 
| 
       378 
396 
     | 
    
         
             
                def formatted_price(value)
         
     | 
| 
         @@ -26,7 +26,7 @@ module Spree 
     | 
|
| 
       26 
26 
     | 
    
         
             
                  DEPRECATION
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                  @spree_nav_cache_key = begin
         
     | 
| 
       29 
     | 
    
         
            -
                    keys = base_cache_key + [current_store, spree_navigation_data_cache_key,  
     | 
| 
      
 29 
     | 
    
         
            +
                    keys = base_cache_key + [current_store, spree_navigation_data_cache_key, stores&.cache_key_with_version, section]
         
     | 
| 
       30 
30 
     | 
    
         
             
                    Digest::MD5.hexdigest(keys.join('-'))
         
     | 
| 
       31 
31 
     | 
    
         
             
                  end
         
     | 
| 
       32 
32 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1,10 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Spree
         
     | 
| 
       2 
2 
     | 
    
         
             
              class FrontendConfiguration < Preferences::Configuration
         
     | 
| 
      
 3 
     | 
    
         
            +
                preference :additional_filters_partials, :array, default: %w()
         
     | 
| 
      
 4 
     | 
    
         
            +
                preference :always_put_site_name_in_title, :boolean, default: true
         
     | 
| 
       3 
5 
     | 
    
         
             
                preference :coupon_codes_enabled, :boolean, default: true # Determines if we show coupon code form at cart and checkout
         
     | 
| 
       4 
6 
     | 
    
         
             
                preference :http_cache_enabled, :boolean, default: true
         
     | 
| 
      
 7 
     | 
    
         
            +
                preference :layout, :string, default: 'spree/layouts/spree_application'
         
     | 
| 
       5 
8 
     | 
    
         
             
                preference :locale, :string, default: nil
         
     | 
| 
       6 
9 
     | 
    
         
             
                preference :products_filters, :array, default: %w(keywords price sort_by)
         
     | 
| 
       7 
     | 
    
         
            -
                preference :additional_filters_partials, :array, default: %w()
         
     | 
| 
       8 
10 
     | 
    
         
             
                preference :remember_me_enabled, :boolean, default: true
         
     | 
| 
      
 11 
     | 
    
         
            +
                preference :shipping_instructions, :boolean, default: false # Request instructions/info for shipping
         
     | 
| 
      
 12 
     | 
    
         
            +
                preference :show_raw_product_description, :boolean, default: false
         
     | 
| 
      
 13 
     | 
    
         
            +
                preference :show_store_selector, :boolean, default: false
         
     | 
| 
      
 14 
     | 
    
         
            +
                preference :title_site_name_separator, :string, default: '-' # When always_put_site_name_in_title is true, insert a separator character before the site name in the title
         
     | 
| 
       9 
15 
     | 
    
         
             
              end
         
     | 
| 
       10 
16 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,101 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Spree
         
     | 
| 
      
 4 
     | 
    
         
            +
              class BuildLocalizedRedirectUrl
         
     | 
| 
      
 5 
     | 
    
         
            +
                prepend Spree::ServiceModule::Base
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                LOCALE_REGEX = /^\/[A-Za-z]{2}\/|^\/[A-Za-z]{2}-[A-Za-z]{2}\/|^\/[A-Za-z]{2}$|^\/[A-Za-z]{2}-[A-Za-z]{2}$/.freeze
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                SUPPORTED_PATHS_REGEX = /\/(products|t\/|cart|checkout|addresses|content|pages)/.freeze
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                # rubocop:disable Lint/UnusedMethodArgument
         
     | 
| 
      
 12 
     | 
    
         
            +
                def call(url:, locale:, default_locale: nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  run :initialize_url_object
         
     | 
| 
      
 14 
     | 
    
         
            +
                  run :generate_new_path
         
     | 
| 
      
 15 
     | 
    
         
            +
                  run :append_locale_param
         
     | 
| 
      
 16 
     | 
    
         
            +
                  run :build_url
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
                # rubocop:enable Lint/UnusedMethodArgument
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                protected
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def initialize_url_object(url:, locale:, default_locale:)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  success(
         
     | 
| 
      
 24 
     | 
    
         
            +
                    url: URI(url),
         
     | 
| 
      
 25 
     | 
    
         
            +
                    locale: locale,
         
     | 
| 
      
 26 
     | 
    
         
            +
                    default_locale_supplied: default_locale_supplied?(locale, default_locale)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  )
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                def generate_new_path(url:, locale:, default_locale_supplied:)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  unless supported_path?(url.path)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    return success(
         
     | 
| 
      
 33 
     | 
    
         
            +
                      url: url,
         
     | 
| 
      
 34 
     | 
    
         
            +
                      locale: locale,
         
     | 
| 
      
 35 
     | 
    
         
            +
                      path: cleanup_path(url.path),
         
     | 
| 
      
 36 
     | 
    
         
            +
                      default_locale_supplied: default_locale_supplied,
         
     | 
| 
      
 37 
     | 
    
         
            +
                      locale_added_to_path: false
         
     | 
| 
      
 38 
     | 
    
         
            +
                    )
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  new_path = if default_locale_supplied
         
     | 
| 
      
 42 
     | 
    
         
            +
                               maches_locale_regex?(url.path) ? url.path.gsub(LOCALE_REGEX, '/') : url.path
         
     | 
| 
      
 43 
     | 
    
         
            +
                             else
         
     | 
| 
      
 44 
     | 
    
         
            +
                               maches_locale_regex?(url.path) ? url.path.gsub(LOCALE_REGEX, "/#{locale}/") : "/#{locale}#{url.path}"
         
     | 
| 
      
 45 
     | 
    
         
            +
                             end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  success(
         
     | 
| 
      
 48 
     | 
    
         
            +
                    url: url,
         
     | 
| 
      
 49 
     | 
    
         
            +
                    locale: locale,
         
     | 
| 
      
 50 
     | 
    
         
            +
                    path: cleanup_path(new_path),
         
     | 
| 
      
 51 
     | 
    
         
            +
                    default_locale_supplied: default_locale_supplied,
         
     | 
| 
      
 52 
     | 
    
         
            +
                    locale_added_to_path: true
         
     | 
| 
      
 53 
     | 
    
         
            +
                  )
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                def append_locale_param(url:, locale:, path:, default_locale_supplied:, locale_added_to_path:)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  return success(url: url, path: path, query: url.query) if locale_added_to_path
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  query_params = Rack::Utils.parse_nested_query(url.query)
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  if default_locale_supplied
         
     | 
| 
      
 62 
     | 
    
         
            +
                    query_params.delete('locale')
         
     | 
| 
      
 63 
     | 
    
         
            +
                  else
         
     | 
| 
      
 64 
     | 
    
         
            +
                    query_params.merge!('locale' => locale)
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  query_string = query_params.any? ? query_params.to_query : nil
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  success(url: url, path: path, query: query_string)
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                def build_url(url:, path:, query:)
         
     | 
| 
      
 73 
     | 
    
         
            +
                  localized_url = builder_class(url).build(host: url.host, port: url.port, path: path, query: query).to_s
         
     | 
| 
      
 74 
     | 
    
         
            +
                  success(localized_url)
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                private
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                def supported_path?(path)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  return true if path.blank? || path == '/' || maches_locale_regex?(path)
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  path.match(SUPPORTED_PATHS_REGEX)
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                def maches_locale_regex?(path)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  path.match(LOCALE_REGEX)[0].gsub('/', '') if path.match(LOCALE_REGEX)
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                def default_locale_supplied?(locale, default_locale)
         
     | 
| 
      
 90 
     | 
    
         
            +
                  default_locale.present? && default_locale.to_s == locale.to_s
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                def cleanup_path(path)
         
     | 
| 
      
 94 
     | 
    
         
            +
                  path.chomp('/').gsub('//', '/')
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                def builder_class(url)
         
     | 
| 
      
 98 
     | 
    
         
            +
                  url.scheme == 'http' ? URI::HTTP : URI::HTTPS
         
     | 
| 
      
 99 
     | 
    
         
            +
                end
         
     | 
| 
      
 100 
     | 
    
         
            +
              end
         
     | 
| 
      
 101 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            <h3 class="pt-4 font-weight-bold text-uppercase product-details-subtitle"><%= Spree.t(:description) %></h3>
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            <% if Spree::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled? %>
         
     | 
| 
      
 3 
     | 
    
         
            +
            <% if Spree::Frontend::Config[:show_raw_product_description] || product_wysiwyg_editor_enabled? %>
         
     | 
| 
       4 
4 
     | 
    
         
             
              <div id="product-description-long" class="m-0 text-break product-description" data-hook="description">
         
     | 
| 
       5 
5 
     | 
    
         
             
                <%= raw product_description(@product) %>
         
     | 
| 
       6 
6 
     | 
    
         
             
              </div>
         
     | 
| 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            <% if try_spree_current_user %>
         
     | 
| 
       2 
2 
     | 
    
         
             
              <%= link_to Spree.t(:my_account).upcase, spree.account_path, class: 'dropdown-item' if spree.respond_to?(:account_path) %>
         
     | 
| 
       3 
     | 
    
         
            -
               
     | 
| 
      
 3 
     | 
    
         
            +
              <% if spree.respond_to(:admin_orders_path) %>
         
     | 
| 
      
 4 
     | 
    
         
            +
                <%= link_to Spree.t('nav_bar.admin_panel'), spree.admin_orders_path(locale: nil), class: 'dropdown-item text-uppercase' if try_spree_current_user.has_spree_role?(:admin) %>
         
     | 
| 
      
 5 
     | 
    
         
            +
              <% end %>
         
     | 
| 
       4 
6 
     | 
    
         
             
              <%= link_to Spree.t(:logout).upcase, spree_logout_path, class: 'dropdown-item', method: :get if defined?(spree_logout_path) %>
         
     | 
| 
       5 
7 
     | 
    
         
             
            <% else %>
         
     | 
| 
       6 
8 
     | 
    
         
             
              <%= link_to Spree.t(:login).upcase, spree_login_path, class: 'dropdown-item' if defined?(spree_login_path) %>
         
     | 
| 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
              SpreePaths = <%==
         
     | 
| 
       3 
3 
     | 
    
         
             
              {
         
     | 
| 
       4 
4 
     | 
    
         
             
                mounted_at: Rails.application.routes.url_helpers.spree_path(trailing_slash: true),
         
     | 
| 
       5 
     | 
    
         
            -
                admin: Spree.admin_path.gsub(/\A(\/)?(.*[^\/])(\/)?\z/, '\\2/')
         
     | 
| 
      
 5 
     | 
    
         
            +
                admin: Spree.respond_to?(:admin_path) ? Spree.admin_path.gsub(/\A(\/)?(.*[^\/])(\/)?\z/, '\\2/') : '/admin'
         
     | 
| 
       6 
6 
     | 
    
         
             
              }.to_json
         
     | 
| 
       7 
7 
     | 
    
         
             
              %>
         
     | 
| 
       8 
8 
     | 
    
         
             
            </script>
         
     |