cloudflare-turnstile-rails 1.0.1 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae18cf79497e4415f5e55355501f6d0699bd6c697c770fc7cff4032f691b98f4
4
- data.tar.gz: 995935bd9b57cfac7022a235a61109d052c6f2163f25340b675109dd9e2fce86
3
+ metadata.gz: b7a94bbf6a29069c0d4f5f291ca3e80d368942aad2e03f20ae7b64091f9d900e
4
+ data.tar.gz: 3156465de7ffac378b48b61250377536272acd9bd15998d61be263701fe92657
5
5
  SHA512:
6
- metadata.gz: 5a0fa9c6c4f076a8b8ad8f44687ce321c30a9715048e4a77c3bd4bcf939fa751c0ca0b9660e05eedd6745af1392e9c85f2685429e040576d255e5acb20bfdc63
7
- data.tar.gz: 990129c6c08a33c5fb5d52b93d85d9d549787d88eff8751eb1b80bacd2ef6525e31db1211f34846a92ddb660a6a05c8dd192b34a7239f61d7253f63b4239df5a
6
+ metadata.gz: e7304843b0657e901e07f3264e6ab6676914af2b9d6a8f38a0778b53587cff1ba7454c71793fe45cac69bb7741e8264e3495337fb4544bd5f88551e569847a5d
7
+ data.tar.gz: 808592cee1ae30ea1a6c19a9887bfe62d33979b991810bb078bec618a0e2e37ec4a93152d7f5552c4786245a25f4497e2ab7f0cdf925c387f0e5588468cb4a52
data/README.md CHANGED
@@ -1,13 +1,15 @@
1
1
  # Cloudflare Turnstile Rails
2
2
 
3
- [![Gem Version](https://img.shields.io/gem/v/cloudflare-turnstile-rails.svg)](https://rubygems.org/gems/cloudflare-turnstile-rails)
4
- [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
- [![Lint Status](https://github.com/vkononov/cloudflare-turnstile-rails/actions/workflows/lint.yml/badge.svg)](https://github.com/vkononov/cloudflare-turnstile-rails/actions/workflows/lint.yml)
6
- [![Test Status](https://github.com/vkononov/cloudflare-turnstile-rails/actions/workflows/test.yml/badge.svg)](https://github.com/vkononov/cloudflare-turnstile-rails/actions/workflows/test.yml)
3
+ [![Gem Version](https://img.shields.io/gem/v/cloudflare-turnstile-rails.svg?label=Gem&logo=rubygems&logoColor=white)](https://rubygems.org/gems/cloudflare-turnstile-rails)
4
+ [![Ruby](https://img.shields.io/badge/Ruby-2.6%20to%204.0-CC342D?logo=ruby&logoColor=white)](https://github.com/vkononov/cloudflare-turnstile-rails/blob/main/.github/workflows/test.yml)
5
+ [![Rails](https://img.shields.io/badge/Rails-5.0%20to%208.1-D30001?logo=rubyonrails&logoColor=white)](https://github.com/vkononov/cloudflare-turnstile-rails/blob/main/Appraisals)
6
+ [![Test Matrix](https://img.shields.io/github/actions/workflow/status/vkononov/cloudflare-turnstile-rails/test.yml?branch=main&label=Test%20Matrix&logo=github)](https://github.com/vkononov/cloudflare-turnstile-rails/actions/workflows/test.yml)
7
+ [![Lint](https://img.shields.io/github/actions/workflow/status/vkononov/cloudflare-turnstile-rails/lint.yml?branch=main&label=Lint&logo=github)](https://github.com/vkononov/cloudflare-turnstile-rails/actions/workflows/lint.yml)
8
+ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
9
 
8
10
  Cloudflare Turnstile gem for Ruby on Rails with built-in Turbo and Turbolinks support and CSP compliance.
9
11
 
10
- Supports `Rails >= 5.0` with `Ruby >= 2.6.0`.
12
+ Supports **Rails 5.0 → latest** and **Ruby 2.6 → latest**, with the full Rails/Ruby matrix tested daily in CI.
11
13
 
12
14
  [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/yellow_img.png)](https://www.buymeacoffee.com/vkononov)
13
15
 
@@ -87,10 +89,35 @@ Supports `Rails >= 5.0` with `Ruby >= 2.6.0`.
87
89
  <%= cloudflare_turnstile_tag %>
88
90
  ```
89
91
 
90
- That's it! Though it is recommended to match your `theme` and `language` to your app's design and locale:
92
+ That's it! By default the widget auto-detects the visitor's `theme` and `language`.
93
+
94
+ * To match your app's design and locale, set defaults once in the initializer and they'll apply to every `cloudflare_turnstile_tag` automatically:
95
+
96
+ ```ruby
97
+ Cloudflare::Turnstile::Rails.configure do |config|
98
+ config.default_data = {
99
+ theme: 'light',
100
+ language: 'en'
101
+ }
102
+ end
103
+ ```
104
+
105
+ Values may also be a proc, evaluated at render time — useful for following the current locale:
106
+
107
+ ```ruby
108
+ config.default_data = { language: -> { I18n.locale } }
109
+ ```
110
+
111
+ * You can still override any default (or add extra options) on an individual tag via the `data:` option. Per-tag values take precedence over the configured defaults:
112
+
113
+ ```erb
114
+ <%= cloudflare_turnstile_tag data: { theme: 'dark' } %>
115
+ ```
116
+
117
+ * To drop a configured default on a single tag (so its attribute isn't rendered at all), pass `nil` for that key:
91
118
 
92
119
  ```erb
93
- <%= cloudflare_turnstile_tag data: { theme: 'light', language: 'en' } %>
120
+ <%= cloudflare_turnstile_tag data: { theme: nil } %>
94
121
  ```
95
122
 
96
123
  * For all available **data-**\* options (e.g., `action`, `cdata`, `theme`, etc.), refer to the official Cloudflare client-side rendering docs:
@@ -3,7 +3,7 @@ module Cloudflare
3
3
  module Rails
4
4
  class Configuration
5
5
  attr_writer :script_url
6
- attr_accessor :site_key, :secret_key, :render, :onload, :auto_populate_response_in_test_env
6
+ attr_accessor :site_key, :secret_key, :render, :onload, :default_data, :auto_populate_response_in_test_env
7
7
 
8
8
  def initialize
9
9
  @script_url = Cloudflare::SCRIPT_URL
@@ -11,6 +11,7 @@ module Cloudflare
11
11
  @secret_key = nil
12
12
  @render = nil
13
13
  @onload = nil
14
+ @default_data = {}
14
15
  @auto_populate_response_in_test_env = true
15
16
  end
16
17
 
@@ -7,7 +7,7 @@ module Cloudflare
7
7
  def cloudflare_turnstile_tag(site_key: nil, include_script: true, **html_options) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
8
8
  site_key ||= Rails.configuration.site_key
9
9
  html_options[:class] = Cloudflare::WIDGET_CLASS unless html_options.key?(:class)
10
- html_options[:data] ||= {}
10
+ html_options[:data] = cloudflare_turnstile_default_data.merge(html_options[:data] || {})
11
11
  html_options[:data][:sitekey] ||= site_key
12
12
 
13
13
  script_tag = nil
@@ -27,6 +27,16 @@ module Cloudflare
27
27
  widget = content_tag(:div, '', html_options)
28
28
  safe_join([script_tag, widget].compact, "\n")
29
29
  end
30
+
31
+ private
32
+
33
+ # Resolves the configured default data attributes, evaluating any
34
+ # callable values (e.g. a proc bound to I18n.locale) at render time.
35
+ def cloudflare_turnstile_default_data
36
+ (Rails.configuration.default_data || {}).transform_values do |value|
37
+ value.respond_to?(:call) ? value.call : value
38
+ end
39
+ end
30
40
  end
31
41
  end
32
42
  end
@@ -1,7 +1,7 @@
1
1
  module Cloudflare
2
2
  module Turnstile
3
3
  module Rails
4
- VERSION = '1.0.1'.freeze
4
+ VERSION = '1.1.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -16,6 +16,15 @@ Cloudflare::Turnstile::Rails.configure do |config|
16
16
  # config.render = 'explicit'
17
17
  # config.onload = 'onloadTurnstileCallback'
18
18
 
19
+ # Optional: Default data-* attributes applied to every `cloudflare_turnstile_tag`.
20
+ # These are merged into each widget and can be overridden per tag via the `data:` option.
21
+ # See https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/#configuration-options
22
+ # Values may be a proc, evaluated at render time (e.g. to follow the current locale).
23
+ # config.default_data = {
24
+ # theme: 'auto',
25
+ # language: -> { I18n.locale }
26
+ # }
27
+
19
28
  # In the Rails Test environment, automatically fill in a dummy response if none was provided.
20
29
  # This lets you keep existing controller tests without having to add
21
30
  # params["cf-turnstile-response"] manually in every test.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudflare-turnstile-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vadim Kononov
@@ -9,34 +9,6 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: actionpack
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - ">="
17
- - !ruby/object:Gem::Version
18
- version: '5.0'
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: '5.0'
26
- - !ruby/object:Gem::Dependency
27
- name: actionview
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: '5.0'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '5.0'
40
12
  - !ruby/object:Gem::Dependency
41
13
  name: railties
42
14
  requirement: !ruby/object:Gem::Requirement
@@ -59,12 +31,8 @@ executables: []
59
31
  extensions: []
60
32
  extra_rdoc_files: []
61
33
  files:
62
- - ".rubocop.yml"
63
- - Appraisals
64
34
  - LICENSE.txt
65
35
  - README.md
66
- - Rakefile
67
- - eslint.config.js
68
36
  - lib/cloudflare/turnstile/rails.rb
69
37
  - lib/cloudflare/turnstile/rails/assets/javascripts/cloudflare_turnstile_helper.js
70
38
  - lib/cloudflare/turnstile/rails/configuration.rb
@@ -93,7 +61,6 @@ files:
93
61
  - lib/cloudflare/turnstile/rails/version.rb
94
62
  - lib/generators/cloudflare_turnstile/install_generator.rb
95
63
  - lib/generators/cloudflare_turnstile/templates/cloudflare_turnstile.rb
96
- - package.json
97
64
  homepage: https://github.com/vkononov/cloudflare-turnstile-rails
98
65
  licenses:
99
66
  - MIT
@@ -116,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
83
  - !ruby/object:Gem::Version
117
84
  version: '0'
118
85
  requirements: []
119
- rubygems_version: 4.0.6
86
+ rubygems_version: 4.0.10
120
87
  specification_version: 4
121
88
  summary: Cloudflare Turnstile gem for Rails with built-in Turbo and Turbolinks support
122
89
  and CSP compliance
data/.rubocop.yml DELETED
@@ -1,46 +0,0 @@
1
- plugins:
2
- - rubocop-md
3
- - rubocop-minitest
4
- - rubocop-performance
5
- - rubocop-rake
6
-
7
- AllCops:
8
- TargetRubyVersion: 2.6.0
9
- NewCops: enable
10
- Exclude:
11
- - .git/**/*
12
- - node_modules/**/*
13
- - vendor/bundle/**/*
14
-
15
- Layout/IndentationConsistency:
16
- Exclude:
17
- - README.md
18
-
19
- Layout/InitialIndentation:
20
- Exclude:
21
- - README.md
22
-
23
- Layout/LineLength:
24
- Max: 120
25
- Exclude:
26
- - lib/cloudflare/turnstile/rails/constants/*.rb
27
- - cloudflare-turnstile-rails.gemspec
28
-
29
- Layout/SpaceInsideHashLiteralBraces:
30
- Enabled: false
31
-
32
- Metrics/MethodLength:
33
- Max: 12
34
-
35
- Minitest/MultipleAssertions:
36
- Enabled: false
37
-
38
- Style/Documentation:
39
- Enabled: false
40
-
41
- Style/EmptyElse:
42
- Exclude:
43
- - README.md
44
-
45
- Style/FrozenStringLiteralComment:
46
- EnforcedStyle: never
data/Appraisals DELETED
@@ -1,69 +0,0 @@
1
- appraise 'rails-5.0' do
2
- gem 'rails', '~> 5.0.0'
3
- if RUBY_VERSION >= '3.4.0'
4
- gem 'base64'
5
- gem 'mutex_m'
6
- end
7
- end
8
-
9
- appraise 'rails-5.1' do
10
- gem 'rails', '~> 5.1.0'
11
- if RUBY_VERSION >= '3.4.0'
12
- gem 'base64'
13
- gem 'mutex_m'
14
- end
15
- end
16
-
17
- appraise 'rails-5.2' do
18
- gem 'rails', '~> 5.2.0'
19
- if RUBY_VERSION >= '3.4.0'
20
- gem 'base64'
21
- gem 'mutex_m'
22
- end
23
- end
24
-
25
- appraise 'rails-6.0' do
26
- gem 'rails', '~> 6.0.0'
27
- if RUBY_VERSION >= '3.4.0'
28
- gem 'drb'
29
- gem 'mutex_m'
30
- end
31
- end
32
-
33
- appraise 'rails-6.1' do
34
- gem 'rails', '~> 6.1.0'
35
- if RUBY_VERSION >= '3.4.0'
36
- gem 'drb'
37
- gem 'mutex_m'
38
- end
39
- end
40
-
41
- if RUBY_VERSION >= '2.7.0'
42
- appraise 'rails-7.0' do
43
- gem 'rails', '~> 7.0.0'
44
- if RUBY_VERSION >= '3.4.0'
45
- gem 'drb'
46
- gem 'mutex_m'
47
- end
48
- end
49
-
50
- appraise 'rails-7.1' do
51
- gem 'rails', '~> 7.1.0'
52
- end
53
- end
54
-
55
- if RUBY_VERSION >= '3.1.0'
56
- appraise 'rails-7.2' do
57
- gem 'rails', '~> 7.2.0'
58
- end
59
- end
60
-
61
- if RUBY_VERSION >= '3.2.0'
62
- appraise 'rails-8.0' do
63
- gem 'rails', '~> 8.0.0'
64
- end
65
-
66
- appraise 'rails-8.1' do
67
- gem 'rails', '~> 8.1.0'
68
- end
69
- end
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'minitest/test_task'
3
-
4
- Minitest::TestTask.create
5
-
6
- require 'rubocop/rake_task'
7
-
8
- RuboCop::RakeTask.new
9
-
10
- task default: %i[test rubocop]
data/eslint.config.js DELETED
@@ -1,232 +0,0 @@
1
- import js from '@eslint/js';
2
- import globals from 'globals';
3
-
4
- export default [
5
- js.configs.recommended,
6
- {
7
- ignores: [
8
- 'node_modules/**',
9
- 'vendor/**',
10
- 'tmp/**',
11
- 'test/generators/tmp/**',
12
- 'eslint.config.js'
13
- ]
14
- },
15
- {
16
- files: ['**/*.js'],
17
- languageOptions: {
18
- ecmaVersion: 5,
19
- sourceType: 'script',
20
- globals: {
21
- ...globals.browser,
22
- turnstile: 'readonly',
23
- Turbolinks: 'readonly'
24
- }
25
- },
26
- rules: {
27
- 'for-direction': 'error',
28
- 'getter-return': 'error',
29
- 'no-mixed-operators': 'error',
30
- 'no-await-in-loop': 'error',
31
- 'no-compare-neg-zero': 'error',
32
- 'no-cond-assign': 'error',
33
- 'no-console': 'warn',
34
- 'no-constant-condition': 'error',
35
- 'no-control-regex': 'error',
36
- 'no-debugger': 'error',
37
- 'no-dupe-args': 'error',
38
- 'no-dupe-keys': 'error',
39
- 'no-duplicate-case': 'error',
40
- 'no-empty': 'error',
41
- 'no-empty-character-class': 'error',
42
- 'no-ex-assign': 'error',
43
- 'no-extra-boolean-cast': 'error',
44
- 'no-extra-parens': 'off',
45
- 'no-extra-semi': 'error',
46
- 'no-func-assign': 'error',
47
- 'no-inner-declarations': ['error', 'both'],
48
- 'no-invalid-regexp': 'error',
49
- 'no-irregular-whitespace': 'error',
50
- 'no-obj-calls': 'error',
51
- 'no-prototype-builtins': 'error',
52
- 'no-regex-spaces': 'error',
53
- 'no-sparse-arrays': 'error',
54
- 'no-template-curly-in-string': 'off',
55
- 'no-unexpected-multiline': 'error',
56
- 'no-unreachable': 'error',
57
- 'no-unsafe-finally': 'error',
58
- 'no-unsafe-negation': 'error',
59
- 'use-isnan': 'error',
60
- 'valid-typeof': 'error',
61
-
62
- // BEST PRACTICES
63
- 'accessor-pairs': 'error',
64
- 'array-callback-return': 'error',
65
- 'block-scoped-var': 'error',
66
- 'consistent-return': 'error',
67
- curly: 'error',
68
- 'default-case': 'error',
69
- 'dot-location': ['error', 'property'],
70
- 'dot-notation': 'error',
71
- eqeqeq: 'error',
72
- 'guard-for-in': 'error',
73
- 'no-alert': 'error',
74
- 'no-caller': 'error',
75
- 'no-case-declarations': 'error',
76
- 'no-div-regex': 'error',
77
- 'no-else-return': 'error',
78
- 'no-empty-function': 'error',
79
- 'no-empty-pattern': 'error',
80
- 'no-eq-null': 'error',
81
- 'no-eval': 'error',
82
- 'no-extend-native': 'error',
83
- 'no-extra-bind': 'error',
84
- 'no-extra-label': 'error',
85
- 'no-fallthrough': 'error',
86
- 'no-floating-decimal': 'error',
87
- 'no-global-assign': 'error',
88
- 'no-implicit-coercion': 'error',
89
- 'no-implicit-globals': 'error',
90
- 'no-implied-eval': 'error',
91
- 'no-invalid-this': 'off',
92
- 'no-iterator': 'error',
93
- 'no-labels': 'error',
94
- 'no-lone-blocks': 'error',
95
- 'no-loop-func': 'error',
96
- 'no-magic-numbers': 'off',
97
- 'no-multi-spaces': 'error',
98
- 'no-multi-str': 'error',
99
- 'no-new': 'off',
100
- 'no-new-func': 'error',
101
- 'no-new-wrappers': 'error',
102
- 'no-octal': 'error',
103
- 'no-octal-escape': 'error',
104
- 'no-param-reassign': 'error',
105
- 'no-proto': 'error',
106
- 'no-redeclare': 'error',
107
- 'no-restricted-properties': 'error',
108
- 'no-return-assign': 'error',
109
- 'no-return-await': 'error',
110
- 'no-script-url': 'error',
111
- 'no-self-assign': 'error',
112
- 'no-self-compare': 'error',
113
- 'no-sequences': 'error',
114
- 'no-throw-literal': 'error',
115
- 'no-unmodified-loop-condition': 'error',
116
- 'no-unused-expressions': 'error',
117
- 'no-unused-labels': 'error',
118
- 'no-useless-call': 'error',
119
- 'no-useless-concat': 'error',
120
- 'no-useless-escape': 'error',
121
- 'no-useless-return': 'error',
122
- 'no-void': 'error',
123
- 'no-warning-comments': 'error',
124
- 'no-with': 'error',
125
- 'prefer-promise-reject-errors': 'error',
126
- radix: 'error',
127
- 'require-await': 'error',
128
- 'vars-on-top': 'error',
129
- 'wrap-iife': 'error',
130
- yoda: 'error',
131
-
132
- // STRICT MODE - allow function-level strict mode for IIFEs
133
- strict: ['error', 'function'],
134
-
135
- // VARIABLES
136
- 'no-delete-var': 'error',
137
- 'no-label-var': 'error',
138
- 'no-restricted-globals': 'error',
139
- 'no-shadow': 'error',
140
- 'no-shadow-restricted-names': 'error',
141
- 'no-undef': 'warn',
142
- 'no-undef-init': 'error',
143
- 'no-undefined': 'error',
144
- 'no-unused-vars': 'error',
145
- 'no-use-before-define': 'error',
146
-
147
- // STYLISTIC ISSUES
148
- 'array-bracket-spacing': ['error', 'never'],
149
- 'block-spacing': 'error',
150
- 'brace-style': ['error', 'stroustrup'],
151
- camelcase: 'error',
152
- 'comma-dangle': ['error', 'never'],
153
- 'comma-spacing': 'error',
154
- 'comma-style': 'error',
155
- 'computed-property-spacing': ['error', 'never'],
156
- 'consistent-this': ['error', 'null'],
157
- 'eol-last': ['error', 'always'],
158
- 'func-call-spacing': ['error', 'never'],
159
- 'func-name-matching': ['error', 'always'],
160
- 'func-style': 'off',
161
- 'function-paren-newline': ['error', 'never'],
162
- indent: ['error', 2],
163
- 'key-spacing': ['error', {beforeColon: false, afterColon: true}],
164
- 'keyword-spacing': ['error', {after: true}],
165
- 'linebreak-style': ['error', 'unix'],
166
- 'lines-between-class-members': ['error', 'always'],
167
- 'max-depth': ['error', 4],
168
- 'max-len': ['error', 120, 4],
169
- 'max-nested-callbacks': ['error', 3],
170
- 'max-params': ['error', 5],
171
- 'max-statements': ['error', 30],
172
- 'max-statements-per-line': ['error', {max: 2}],
173
- 'multiline-comment-style': ['error', 'starred-block'],
174
- 'new-cap': 'error',
175
- 'new-parens': 'error',
176
- 'no-array-constructor': 'error',
177
- 'no-bitwise': 'error',
178
- 'no-lonely-if': 'error',
179
- 'no-mixed-spaces-and-tabs': 'error',
180
- 'no-multiple-empty-lines': ['error', {max: 1, maxBOF: 0, maxEOF: 0}],
181
- 'no-negated-condition': 'error',
182
- 'no-nested-ternary': 'error',
183
- 'no-new-object': 'error',
184
- 'no-tabs': 'error',
185
- 'no-trailing-spaces': 'error',
186
- 'no-unneeded-ternary': 'error',
187
- 'no-whitespace-before-property': 'error',
188
- 'nonblock-statement-body-position': ['error', 'beside'],
189
- 'object-curly-spacing': ['error', 'never'],
190
- 'operator-assignment': ['error', 'always'],
191
- 'operator-linebreak': 'error',
192
- 'padded-blocks': ['error', 'never'],
193
- 'padding-line-between-statements': [
194
- 'error',
195
- {blankLine: 'always', prev: '*', next: 'block'},
196
- {blankLine: 'always', prev: '*', next: 'block'},
197
- {blankLine: 'always', prev: '*', next: 'class'},
198
- {blankLine: 'always', prev: '*', next: 'export'},
199
- {blankLine: 'always', prev: '*', next: 'multiline-block-like'},
200
- {blankLine: 'always', prev: 'block', next: '*'},
201
- {blankLine: 'always', prev: 'block-like', next: '*'},
202
- {blankLine: 'always', prev: 'class', next: '*'},
203
- {blankLine: 'always', prev: 'default', next: '*'},
204
- {blankLine: 'always', prev: 'multiline-block-like', next: '*'},
205
- {blankLine: 'never', prev: 'import', next: 'import'}
206
- ],
207
- 'quote-props': ['error', 'as-needed'],
208
- quotes: ['error', 'single'],
209
- semi: ['error', 'always'],
210
- 'semi-spacing': ['error', {before: false, after: true}],
211
- 'semi-style': ['error', 'last'],
212
- 'space-before-blocks': ['error', 'always'],
213
- 'space-before-function-paren': ['error', 'never'],
214
- 'space-in-parens': ['error', 'never'],
215
- 'space-infix-ops': 'error',
216
- 'space-unary-ops': ['error', {words: true, nonwords: false}],
217
- 'spaced-comment': ['error', 'always'],
218
- 'switch-colon-spacing': ['error', {before: false, after: true}],
219
- 'template-tag-spacing': ['error', 'always'],
220
- 'unicode-bom': ['error', 'never'],
221
- 'wrap-regex': 'error',
222
-
223
- // ES6+ rules - disabled for older browser compatibility
224
- 'no-var': 'off',
225
- 'prefer-const': 'off',
226
- 'prefer-arrow-callback': 'off',
227
- 'prefer-rest-params': 'off',
228
- 'prefer-spread': 'off',
229
- 'prefer-template': 'off'
230
- }
231
- }
232
- ];
data/package.json DELETED
@@ -1,14 +0,0 @@
1
- {
2
- "name": "cloudflare-turnstile-rails",
3
- "private": true,
4
- "type": "module",
5
- "scripts": {
6
- "lint": "eslint .",
7
- "lint:fix": "eslint . --fix"
8
- },
9
- "devDependencies": {
10
- "@eslint/js": "^9.17.0",
11
- "eslint": "^9.17.0",
12
- "globals": "^15.14.0"
13
- }
14
- }