grape-app 0.10.0 → 0.11.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: a02f28a09a9bf9ac9f5222de88c553958c3984017e2b589dd0ad2f1850503513
4
- data.tar.gz: 869efcb8480678cff8924d6001cf3342cf0ae9558577a7d856ed572e8d3e2eef
3
+ metadata.gz: 39ce25e8c0f9c276a8c2c22d1b6138b1160172e850236ffe8ea959880851d375
4
+ data.tar.gz: 6380778138b98ee32ae6a844cb82a37adaa48d3747e7395c8eec21d478400a92
5
5
  SHA512:
6
- metadata.gz: b989f27b49f52f4247518dc5bb485de10d08149ca7da7eb912a53b8e6875bc68d82f8798bbd4d7e086e934b73523fbb384ff1359bc193153fe8f9baf59fa6180
7
- data.tar.gz: 01d7a80d34def80bf67e85b55ebd47b274c16b0acb384bd86ea41fca9b5fa99da305966d700824a1113e900e4cc11b03907f28c13e0751baf23ecfec17fca8bb
6
+ metadata.gz: 4479eb190adf06cd626071cd8be85146331c15f18a82fc20204c2c33dd466697aa85add791cc05dd24e0d690630538ed50573eb73a23d798a4d093eed8b2c1a0
7
+ data.tar.gz: 2a39eb90dcfff318003aef1c68246f25c674a543630f01adb2299bf71b8e12543e991a15df01056e9534b1b7607105bf01862a9e5e292198f9c5559af15ce505
@@ -16,7 +16,7 @@ jobs:
16
16
  env:
17
17
  BUNDLE_GEMFILE: ${{ matrix.gemfile }}
18
18
  steps:
19
- - uses: actions/checkout@v2
19
+ - uses: actions/checkout@v3
20
20
  - uses: ruby/setup-ruby@v1
21
21
  with:
22
22
  ruby-version: ${{ matrix.ruby-version }}
data/Gemfile.lock CHANGED
@@ -1,134 +1,137 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grape-app (0.10.0)
4
+ grape-app (0.11.0)
5
5
  activesupport
6
- grape (>= 1.2)
6
+ grape (>= 1.7)
7
7
  grape-entity
8
8
  openssl
9
9
  rack-cors (>= 1.1)
10
10
  rack-ssl-enforcer
11
11
  thor
12
- zeitwerk (>= 2.1)
12
+ zeitwerk (>= 2.6)
13
13
 
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- activejob (7.0.1)
18
- activesupport (= 7.0.1)
17
+ activejob (7.0.4.1)
18
+ activesupport (= 7.0.4.1)
19
19
  globalid (>= 0.3.6)
20
- activemodel (7.0.1)
21
- activesupport (= 7.0.1)
22
- activerecord (7.0.1)
23
- activemodel (= 7.0.1)
24
- activesupport (= 7.0.1)
25
- activesupport (7.0.1)
20
+ activemodel (7.0.4.1)
21
+ activesupport (= 7.0.4.1)
22
+ activerecord (7.0.4.1)
23
+ activemodel (= 7.0.4.1)
24
+ activesupport (= 7.0.4.1)
25
+ activesupport (7.0.4.1)
26
26
  concurrent-ruby (~> 1.0, >= 1.0.2)
27
27
  i18n (>= 1.6, < 2)
28
28
  minitest (>= 5.1)
29
29
  tzinfo (~> 2.0)
30
30
  ast (2.4.2)
31
31
  builder (3.2.4)
32
- concurrent-ruby (1.1.9)
32
+ concurrent-ruby (1.1.10)
33
33
  diff-lcs (1.5.0)
34
- dry-configurable (0.14.0)
34
+ dry-core (1.0.0)
35
35
  concurrent-ruby (~> 1.0)
36
- dry-core (~> 0.6)
37
- dry-container (0.9.0)
36
+ zeitwerk (~> 2.6)
37
+ dry-inflector (1.0.0)
38
+ dry-logic (1.5.0)
38
39
  concurrent-ruby (~> 1.0)
39
- dry-configurable (~> 0.13, >= 0.13.0)
40
- dry-core (0.7.1)
40
+ dry-core (~> 1.0, < 2)
41
+ zeitwerk (~> 2.6)
42
+ dry-types (1.7.0)
41
43
  concurrent-ruby (~> 1.0)
42
- dry-inflector (0.2.1)
43
- dry-logic (1.2.0)
44
- concurrent-ruby (~> 1.0)
45
- dry-core (~> 0.5, >= 0.5)
46
- dry-types (1.5.1)
47
- concurrent-ruby (~> 1.0)
48
- dry-container (~> 0.3)
49
- dry-core (~> 0.5, >= 0.5)
50
- dry-inflector (~> 0.1, >= 0.1.2)
51
- dry-logic (~> 1.0, >= 1.0.2)
52
- globalid (1.0.0)
44
+ dry-core (~> 1.0, < 2)
45
+ dry-inflector (~> 1.0, < 2)
46
+ dry-logic (>= 1.4, < 2)
47
+ zeitwerk (~> 2.6)
48
+ globalid (1.0.1)
53
49
  activesupport (>= 5.0)
54
- grape (1.6.2)
50
+ grape (1.7.0)
55
51
  activesupport
56
52
  builder
57
53
  dry-types (>= 1.1)
58
54
  mustermann-grape (~> 1.0.0)
59
55
  rack (>= 1.3.0)
60
56
  rack-accept
61
- grape-entity (0.10.1)
57
+ grape-entity (0.10.2)
62
58
  activesupport (>= 3.0.0)
63
59
  multi_json (>= 1.3.2)
64
- i18n (1.9.1)
60
+ i18n (1.12.0)
65
61
  concurrent-ruby (~> 1.0)
66
- minitest (5.15.0)
62
+ json (2.6.3)
63
+ mini_portile2 (2.8.1)
64
+ minitest (5.17.0)
67
65
  multi_json (1.15.0)
68
- mustermann (1.1.1)
66
+ mustermann (3.0.0)
69
67
  ruby2_keywords (~> 0.0.1)
70
- mustermann-grape (1.0.1)
68
+ mustermann-grape (1.0.2)
71
69
  mustermann (>= 1.0.0)
72
- openssl (3.0.0)
73
- parallel (1.21.0)
74
- parser (3.1.0.0)
70
+ openssl (3.1.0)
71
+ parallel (1.22.1)
72
+ parser (3.2.0.0)
75
73
  ast (~> 2.4.1)
76
- rack (2.2.3)
74
+ rack (3.0.4.1)
77
75
  rack-accept (0.4.5)
78
76
  rack (>= 0.4)
79
77
  rack-cors (1.1.1)
80
78
  rack (>= 2.0.0)
81
79
  rack-ssl-enforcer (0.2.9)
82
- rack-test (1.1.0)
83
- rack (>= 1.0, < 3)
80
+ rack-test (2.0.2)
81
+ rack (>= 1.3)
84
82
  rainbow (3.1.1)
85
83
  rake (13.0.6)
86
- regexp_parser (2.2.0)
84
+ regexp_parser (2.6.2)
87
85
  rexml (3.2.5)
88
- rspec (3.10.0)
89
- rspec-core (~> 3.10.0)
90
- rspec-expectations (~> 3.10.0)
91
- rspec-mocks (~> 3.10.0)
92
- rspec-core (3.10.2)
93
- rspec-support (~> 3.10.0)
94
- rspec-expectations (3.10.2)
86
+ rspec (3.12.0)
87
+ rspec-core (~> 3.12.0)
88
+ rspec-expectations (~> 3.12.0)
89
+ rspec-mocks (~> 3.12.0)
90
+ rspec-core (3.12.0)
91
+ rspec-support (~> 3.12.0)
92
+ rspec-expectations (3.12.2)
95
93
  diff-lcs (>= 1.2.0, < 2.0)
96
- rspec-support (~> 3.10.0)
97
- rspec-mocks (3.10.3)
94
+ rspec-support (~> 3.12.0)
95
+ rspec-mocks (3.12.3)
98
96
  diff-lcs (>= 1.2.0, < 2.0)
99
- rspec-support (~> 3.10.0)
100
- rspec-support (3.10.3)
101
- rubocop (1.25.1)
97
+ rspec-support (~> 3.12.0)
98
+ rspec-support (3.12.0)
99
+ rubocop (1.43.0)
100
+ json (~> 2.3)
102
101
  parallel (~> 1.10)
103
- parser (>= 3.1.0.0)
102
+ parser (>= 3.2.0.0)
104
103
  rainbow (>= 2.2.2, < 4.0)
105
104
  regexp_parser (>= 1.8, < 3.0)
106
- rexml
107
- rubocop-ast (>= 1.15.1, < 2.0)
105
+ rexml (>= 3.2.5, < 4.0)
106
+ rubocop-ast (>= 1.24.1, < 2.0)
108
107
  ruby-progressbar (~> 1.7)
109
- unicode-display_width (>= 1.4.0, < 3.0)
110
- rubocop-ast (1.15.1)
111
- parser (>= 3.0.1.1)
112
- rubocop-bsm (0.6.0)
108
+ unicode-display_width (>= 2.4.0, < 3.0)
109
+ rubocop-ast (1.24.1)
110
+ parser (>= 3.1.1.0)
111
+ rubocop-bsm (0.6.1)
113
112
  rubocop (~> 1.0)
114
113
  rubocop-performance
115
114
  rubocop-rake
116
115
  rubocop-rspec
117
- rubocop-performance (1.13.2)
116
+ rubocop-capybara (2.17.0)
117
+ rubocop (~> 1.41)
118
+ rubocop-performance (1.15.2)
118
119
  rubocop (>= 1.7.0, < 2.0)
119
120
  rubocop-ast (>= 0.4.0)
120
121
  rubocop-rake (0.6.0)
121
122
  rubocop (~> 1.0)
122
- rubocop-rspec (2.8.0)
123
- rubocop (~> 1.19)
123
+ rubocop-rspec (2.18.1)
124
+ rubocop (~> 1.33)
125
+ rubocop-capybara (~> 2.17)
124
126
  ruby-progressbar (1.11.0)
125
127
  ruby2_keywords (0.0.5)
126
- sqlite3 (1.4.2)
128
+ sqlite3 (1.6.0)
129
+ mini_portile2 (~> 2.8.0)
127
130
  thor (1.2.1)
128
- tzinfo (2.0.4)
131
+ tzinfo (2.0.5)
129
132
  concurrent-ruby (~> 1.0)
130
- unicode-display_width (2.1.0)
131
- zeitwerk (2.5.4)
133
+ unicode-display_width (2.4.2)
134
+ zeitwerk (2.6.6)
132
135
 
133
136
  PLATFORMS
134
137
  ruby
@@ -145,4 +148,4 @@ DEPENDENCIES
145
148
  sqlite3
146
149
 
147
150
  BUNDLED WITH
148
- 2.3.4
151
+ 2.3.9
data/Gemfile.rails6.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grape-app (0.10.0)
4
+ grape-app (0.10.1)
5
5
  activesupport
6
6
  grape (>= 1.2)
7
7
  grape-entity
@@ -14,15 +14,15 @@ PATH
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- activejob (6.1.4.4)
18
- activesupport (= 6.1.4.4)
17
+ activejob (6.1.6.1)
18
+ activesupport (= 6.1.6.1)
19
19
  globalid (>= 0.3.6)
20
- activemodel (6.1.4.4)
21
- activesupport (= 6.1.4.4)
22
- activerecord (6.1.4.4)
23
- activemodel (= 6.1.4.4)
24
- activesupport (= 6.1.4.4)
25
- activesupport (6.1.4.4)
20
+ activemodel (6.1.6.1)
21
+ activesupport (= 6.1.6.1)
22
+ activerecord (6.1.6.1)
23
+ activemodel (= 6.1.6.1)
24
+ activesupport (= 6.1.6.1)
25
+ activesupport (6.1.6.1)
26
26
  concurrent-ruby (~> 1.0, >= 1.0.2)
27
27
  i18n (>= 1.6, < 2)
28
28
  minitest (>= 5.1)
@@ -30,17 +30,13 @@ GEM
30
30
  zeitwerk (~> 2.3)
31
31
  ast (2.4.2)
32
32
  builder (3.2.4)
33
- concurrent-ruby (1.1.9)
33
+ concurrent-ruby (1.1.10)
34
34
  diff-lcs (1.5.0)
35
- dry-configurable (0.14.0)
35
+ dry-container (0.10.0)
36
36
  concurrent-ruby (~> 1.0)
37
- dry-core (~> 0.6)
38
- dry-container (0.9.0)
39
- concurrent-ruby (~> 1.0)
40
- dry-configurable (~> 0.13, >= 0.13.0)
41
37
  dry-core (0.7.1)
42
38
  concurrent-ruby (~> 1.0)
43
- dry-inflector (0.2.1)
39
+ dry-inflector (0.3.0)
44
40
  dry-logic (1.2.0)
45
41
  concurrent-ruby (~> 1.0)
46
42
  dry-core (~> 0.5, >= 0.5)
@@ -62,74 +58,76 @@ GEM
62
58
  grape-entity (0.10.1)
63
59
  activesupport (>= 3.0.0)
64
60
  multi_json (>= 1.3.2)
65
- i18n (1.9.1)
61
+ i18n (1.11.0)
66
62
  concurrent-ruby (~> 1.0)
67
- minitest (5.15.0)
63
+ json (2.6.2)
64
+ minitest (5.16.2)
68
65
  multi_json (1.15.0)
69
66
  mustermann (1.1.1)
70
67
  ruby2_keywords (~> 0.0.1)
71
- mustermann-grape (1.0.1)
68
+ mustermann-grape (1.0.2)
72
69
  mustermann (>= 1.0.0)
73
70
  openssl (3.0.0)
74
- parallel (1.21.0)
75
- parser (3.1.0.0)
71
+ parallel (1.22.1)
72
+ parser (3.1.2.0)
76
73
  ast (~> 2.4.1)
77
- rack (2.2.3)
74
+ rack (2.2.4)
78
75
  rack-accept (0.4.5)
79
76
  rack (>= 0.4)
80
77
  rack-cors (1.1.1)
81
78
  rack (>= 2.0.0)
82
79
  rack-ssl-enforcer (0.2.9)
83
- rack-test (1.1.0)
84
- rack (>= 1.0, < 3)
80
+ rack-test (2.0.2)
81
+ rack (>= 1.3)
85
82
  rainbow (3.1.1)
86
83
  rake (13.0.6)
87
- regexp_parser (2.2.0)
84
+ regexp_parser (2.5.0)
88
85
  rexml (3.2.5)
89
- rspec (3.10.0)
90
- rspec-core (~> 3.10.0)
91
- rspec-expectations (~> 3.10.0)
92
- rspec-mocks (~> 3.10.0)
93
- rspec-core (3.10.2)
94
- rspec-support (~> 3.10.0)
95
- rspec-expectations (3.10.2)
86
+ rspec (3.11.0)
87
+ rspec-core (~> 3.11.0)
88
+ rspec-expectations (~> 3.11.0)
89
+ rspec-mocks (~> 3.11.0)
90
+ rspec-core (3.11.0)
91
+ rspec-support (~> 3.11.0)
92
+ rspec-expectations (3.11.0)
96
93
  diff-lcs (>= 1.2.0, < 2.0)
97
- rspec-support (~> 3.10.0)
98
- rspec-mocks (3.10.3)
94
+ rspec-support (~> 3.11.0)
95
+ rspec-mocks (3.11.1)
99
96
  diff-lcs (>= 1.2.0, < 2.0)
100
- rspec-support (~> 3.10.0)
101
- rspec-support (3.10.3)
102
- rubocop (1.25.1)
97
+ rspec-support (~> 3.11.0)
98
+ rspec-support (3.11.0)
99
+ rubocop (1.31.2)
100
+ json (~> 2.3)
103
101
  parallel (~> 1.10)
104
102
  parser (>= 3.1.0.0)
105
103
  rainbow (>= 2.2.2, < 4.0)
106
104
  regexp_parser (>= 1.8, < 3.0)
107
- rexml
108
- rubocop-ast (>= 1.15.1, < 2.0)
105
+ rexml (>= 3.2.5, < 4.0)
106
+ rubocop-ast (>= 1.18.0, < 2.0)
109
107
  ruby-progressbar (~> 1.7)
110
108
  unicode-display_width (>= 1.4.0, < 3.0)
111
- rubocop-ast (1.15.1)
112
- parser (>= 3.0.1.1)
109
+ rubocop-ast (1.19.1)
110
+ parser (>= 3.1.1.0)
113
111
  rubocop-bsm (0.6.0)
114
112
  rubocop (~> 1.0)
115
113
  rubocop-performance
116
114
  rubocop-rake
117
115
  rubocop-rspec
118
- rubocop-performance (1.13.2)
116
+ rubocop-performance (1.14.2)
119
117
  rubocop (>= 1.7.0, < 2.0)
120
118
  rubocop-ast (>= 0.4.0)
121
119
  rubocop-rake (0.6.0)
122
120
  rubocop (~> 1.0)
123
- rubocop-rspec (2.8.0)
124
- rubocop (~> 1.19)
121
+ rubocop-rspec (2.12.1)
122
+ rubocop (~> 1.31)
125
123
  ruby-progressbar (1.11.0)
126
124
  ruby2_keywords (0.0.5)
127
- sqlite3 (1.4.2)
125
+ sqlite3 (1.4.4)
128
126
  thor (1.2.1)
129
127
  tzinfo (2.0.4)
130
128
  concurrent-ruby (~> 1.0)
131
- unicode-display_width (2.1.0)
132
- zeitwerk (2.5.4)
129
+ unicode-display_width (2.2.0)
130
+ zeitwerk (2.6.0)
133
131
 
134
132
  PLATFORMS
135
133
  x86_64-linux
data/grape-app.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'grape-app'
3
- s.version = '0.10.0'
3
+ s.version = '0.11.0'
4
4
  s.authors = ['Black Square Media Ltd']
5
5
  s.email = ['info@blacksquaremedia.com']
6
6
  s.summary = %(Standalone Grape API apps)
@@ -9,19 +9,18 @@ Gem::Specification.new do |s|
9
9
  s.license = 'MIT'
10
10
 
11
11
  s.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^spec/}) }
12
- s.test_files = `git ls-files -z -- spec/*`.split("\x0")
13
12
  s.executables = ['grape-app']
14
13
  s.require_paths = ['lib']
15
14
  s.required_ruby_version = '>= 2.7'
16
15
 
17
16
  s.add_dependency 'activesupport'
18
- s.add_dependency 'grape', '>= 1.2'
17
+ s.add_dependency 'grape', '>= 1.7'
19
18
  s.add_dependency 'grape-entity'
20
19
  s.add_dependency 'openssl'
21
20
  s.add_dependency 'rack-cors', '>= 1.1'
22
21
  s.add_dependency 'rack-ssl-enforcer'
23
22
  s.add_dependency 'thor'
24
- s.add_dependency 'zeitwerk', '>= 2.1'
23
+ s.add_dependency 'zeitwerk', '>= 2.6'
25
24
 
26
25
  s.add_development_dependency 'activejob'
27
26
  s.add_development_dependency 'activerecord'
@@ -4,7 +4,7 @@ end
4
4
 
5
5
  desc 'Launch console'
6
6
  task console: :environment do
7
- ::ARGV.clear
7
+ ARGV.clear
8
8
 
9
9
  require 'irb'
10
10
  require 'irb/completion'
@@ -23,11 +23,10 @@ namespace :db do
23
23
 
24
24
  desc 'Create a new migration using NAME'
25
25
  task migration: :environment do
26
- abort 'No NAME specified. Example usage: `rake db:migration NAME=create_widgets`' unless ENV['NAME']
26
+ name = ENV.fetch('NAME', nil)
27
+ abort 'No NAME specified. Example usage: `rake db:migration NAME=create_widgets`' unless name
27
28
 
28
29
  migrations_path = ActiveRecord::Migrator.migrations_paths.first
29
-
30
- name = ENV['NAME']
31
30
  path = File.join(migrations_path, "#{Time.now.utc.strftime('%Y%m%d%H%M%S')}_#{name}.rb")
32
31
 
33
32
  ar_version = [ActiveRecord::VERSION::MAJOR, ActiveRecord::VERSION::MINOR].join('.')
data/lib/grape/app.rb CHANGED
@@ -62,7 +62,7 @@ class Grape::App < Grape::API
62
62
 
63
63
  # @return [ActiveSupport::StringInquirer] env name
64
64
  def env
65
- @env ||= ActiveSupport::StringInquirer.new(ENV['GRAPE_ENV'] || ENV['RACK_ENV'] || 'development')
65
+ @env ||= ActiveSupport::StringInquirer.new(ENV.fetch('GRAPE_ENV') { ENV.fetch('RACK_ENV', 'development') })
66
66
  end
67
67
 
68
68
  # @return [Zeitwerk::Loader] loader
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-07 00:00:00.000000000 Z
11
+ date: 2023-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.2'
33
+ version: '1.7'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.2'
40
+ version: '1.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: grape-entity
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '2.1'
117
+ version: '2.6'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '2.1'
124
+ version: '2.6'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: activejob
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -285,19 +285,6 @@ files:
285
285
  - lib/grape/app/templates/db/seeds.rb
286
286
  - lib/grape/app/templates/spec/spec_helper.rb
287
287
  - lib/grape_app.rb
288
- - spec/grape/app/helpers/caching_spec.rb
289
- - spec/grape/app/helpers/params_spec.rb
290
- - spec/grape/app/middleware/connection_management_spec.rb
291
- - spec/grape/app_spec.rb
292
- - spec/scenario/Gemfile
293
- - spec/scenario/app/api.rb
294
- - spec/scenario/app/api/posts.rb
295
- - spec/scenario/app/api/v1.rb
296
- - spec/scenario/config/database.yml
297
- - spec/scenario/config/environments/test.rb
298
- - spec/scenario/config/locales/en.yml
299
- - spec/scenario/lib/my_lib.rb
300
- - spec/spec_helper.rb
301
288
  homepage: https://github.com/bsm/grape-app
302
289
  licenses:
303
290
  - MIT
@@ -318,21 +305,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
305
  - !ruby/object:Gem::Version
319
306
  version: '0'
320
307
  requirements: []
321
- rubygems_version: 3.3.3
308
+ rubygems_version: 3.3.7
322
309
  signing_key:
323
310
  specification_version: 4
324
311
  summary: Standalone Grape API apps
325
- test_files:
326
- - spec/grape/app/helpers/caching_spec.rb
327
- - spec/grape/app/helpers/params_spec.rb
328
- - spec/grape/app/middleware/connection_management_spec.rb
329
- - spec/grape/app_spec.rb
330
- - spec/scenario/Gemfile
331
- - spec/scenario/app/api.rb
332
- - spec/scenario/app/api/posts.rb
333
- - spec/scenario/app/api/v1.rb
334
- - spec/scenario/config/database.yml
335
- - spec/scenario/config/environments/test.rb
336
- - spec/scenario/config/locales/en.yml
337
- - spec/scenario/lib/my_lib.rb
338
- - spec/spec_helper.rb
312
+ test_files: []
@@ -1,105 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Grape::App::Helpers::Caching do
4
- include Rack::Test::Methods
5
-
6
- let :app do
7
- helper = described_class
8
- Class.new(Grape::API) do
9
- format :json
10
-
11
- helpers helper
12
-
13
- get '/articles' do
14
- scope = Article.order(:id)
15
- opts = params[:public] ? { public: params[:public] } : {}
16
- fresh_when(scope, **opts)
17
- scope.to_a
18
- end
19
-
20
- get '/articles/never_updated' do
21
- article = Article.first
22
- article.updated_at = nil
23
-
24
- fresh_when(article, last_modified_field: :created_at)
25
- end
26
-
27
- get '/articles/:id' do
28
- article = Article.first
29
- article if stale?(article, stale_if_error: 5, extras: { a: 1, b: 2 })
30
- end
31
- end
32
- end
33
- let(:created_at) { Time.at(1515151500).utc }
34
-
35
- before do
36
- Article.create! title: 'Welcome', created_at: created_at, updated_at: created_at + 10
37
- Article.create! title: 'Bye', created_at: created_at, updated_at: created_at + 20
38
- end
39
-
40
- it 'handles fresh-when' do
41
- get '/articles'
42
- expect(last_response.status).to eq(200)
43
- expect(last_response.headers).to include(
44
- 'Content-Type' => 'application/json',
45
- 'ETag' => 'a5f6c4b024510c9835d8d70cbd3ed00c',
46
- 'Last-Modified' => 'Fri, 05 Jan 2018 11:25:20 GMT',
47
- )
48
- expect(JSON.parse(last_response.body).size).to eq(2)
49
-
50
- get '/articles', {}, 'HTTP_IF_NONE_MATCH' => last_response.headers['ETag']
51
- expect(last_response.status).to eq(304)
52
- get '/articles', {}, 'HTTP_IF_MODIFIED_SINCE' => 'Fri, 05 Jan 2018 11:25:20 GMT'
53
- expect(last_response.status).to eq(304)
54
- get '/articles', {}, 'HTTP_IF_NONE_MATCH' => last_response.headers['ETag'], 'HTTP_IF_MODIFIED_SINCE' => 'Fri, 05 Jan 2018 11:25:21 GMT'
55
- expect(last_response.status).to eq(304)
56
-
57
- get '/articles', {}, 'HTTP_IF_MODIFIED_SINCE' => 'Fri, 05 Jan 2018 11:25:19 GMT'
58
- expect(last_response.status).to eq(200)
59
- get '/articles', {}, 'HTTP_IF_MODIFIED_SINCE' => 'Fri, 05 Jan 2018 11:25:19 GMT', 'HTTP_IF_NONE_MATCH' => last_response.headers['ETag']
60
- expect(last_response.status).to eq(200)
61
- get '/articles', {}, 'HTTP_IF_MODIFIED_SINCE' => 'Fri, 05 Jan 2018 11:25:20 GMT', 'HTTP_IF_NONE_MATCH' => 'other'
62
- expect(last_response.status).to eq(200)
63
- end
64
-
65
- it 'handles fresh_when for records that were never updated' do
66
- get '/articles/never_updated'
67
- expect(last_response.status).to eq(200)
68
- expect(last_response.headers).to include(
69
- 'Last-Modified' => 'Fri, 05 Jan 2018 11:25:00 GMT',
70
- )
71
- end
72
-
73
- it 'supports cache-control' do
74
- get '/articles?public=true'
75
- expect(last_response.status).to eq(200)
76
- expect(last_response.headers).to include(
77
- 'Cache-Control' => 'public',
78
- )
79
- end
80
-
81
- it 'handles stale? (with cache-control)' do
82
- get '/articles/1'
83
- expect(last_response.status).to eq(200)
84
- expect(last_response.headers).to include(
85
- 'Cache-Control' => 'private, stale-if-error=5, a=1, b=2',
86
- 'Content-Type' => 'application/json',
87
- 'ETag' => '0154407bafc97186a494a05e0652ff61',
88
- 'Last-Modified' => 'Fri, 05 Jan 2018 11:25:10 GMT',
89
- )
90
- expect(JSON.parse(last_response.body)).to eq(
91
- 'id' => 1,
92
- 'title' => 'Welcome',
93
- 'updated_at' => '2018-01-05T11:25:10.000Z',
94
- 'created_at' => '2018-01-05T11:25:00.000Z',
95
- )
96
-
97
- get '/articles/1', {}, 'HTTP_IF_NONE_MATCH' => last_response.headers['ETag']
98
- expect(last_response.status).to eq(304)
99
- expect(last_response.headers).to include(
100
- 'Cache-Control' => 'private, stale-if-error=5, a=1, b=2',
101
- 'ETag' => '0154407bafc97186a494a05e0652ff61',
102
- 'Last-Modified' => 'Fri, 05 Jan 2018 11:25:10 GMT',
103
- )
104
- end
105
- end
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Grape::App::Helpers::Params do
4
- include Rack::Test::Methods
5
-
6
- let :app do
7
- helper = described_class
8
- Class.new(Grape::API) do
9
- format :json
10
-
11
- helpers helper
12
-
13
- params do
14
- optional :title
15
- end
16
- post '/articles' do
17
- attrs = { id: 9, updated_at: Time.at(1515151515).utc }
18
- attrs.update(declared_params)
19
- Article.new(attrs)
20
- end
21
- end
22
- end
23
-
24
- it 'limits params' do
25
- post '/articles', title: 'Today', id: 1234, updated_at: Time.now
26
- expect(last_response.status).to eq(201)
27
- expect(JSON.parse(last_response.body)).to eq(
28
- 'created_at' => nil,
29
- 'id' => 9,
30
- 'title' => 'Today',
31
- 'updated_at' => '2018-01-05T11:25:15.000Z',
32
- )
33
- end
34
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Grape::App::Middleware::ConnectionManagement do
4
- include Rack::Test::Methods
5
-
6
- let :app do
7
- failing = ->(_) { raise(ActiveRecord::StatementInvalid) }
8
- middleware = described_class
9
- Rack::Builder.new do
10
- use middleware
11
- run failing
12
- end
13
- end
14
-
15
- it 'clears active connections' do
16
- ActiveRecord::Base.connection
17
- expect(ActiveRecord::Base.connection_handler).to be_active_connections
18
-
19
- expect { get '/' }.to raise_error(ActiveRecord::StatementInvalid)
20
- expect(ActiveRecord::Base.connection_handler).not_to be_active_connections
21
- end
22
- end
@@ -1,102 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe Grape::App do
4
- include Rack::Test::Methods
5
-
6
- subject { described_class }
7
-
8
- before { subject.init! File.expand_path('../scenario', __dir__) }
9
-
10
- def app
11
- subject.middleware
12
- end
13
-
14
- it 'has an env' do
15
- expect(subject.env).to be_instance_of(ActiveSupport::StringInquirer)
16
- expect(subject.env).to eq('test')
17
- end
18
-
19
- it 'has an root' do
20
- expect(subject.root).to be_instance_of(Pathname)
21
- end
22
-
23
- it 'is an API instance' do
24
- expect(subject).to be < Grape::API
25
- end
26
-
27
- it 'inits with default time zone' do
28
- expect(Time.zone.name).to eq('UTC')
29
- expect(Thread.new { Time.zone }.value.name).to eq('UTC')
30
- end
31
-
32
- it 'configures i18n' do
33
- expect(I18n.load_path).to include(subject.root.join('config', 'locales', 'en.yml').to_s)
34
- expect(I18n.default_locale).to eq(:en)
35
- expect(I18n.exception_handler).to be_a(I18n::ExceptionHandler)
36
- end
37
-
38
- it 'configures ActiveSupport' do
39
- expect(ActiveSupport.to_time_preserves_timezone).to be(true)
40
- expect(ActiveSupport.utc_to_local_returns_utc_offset_times).to be(true)
41
- expect(ActiveSupport::Digest.hash_digest_class).to be(OpenSSL::Digest::SHA256)
42
- expect(ActiveSupport::MessageEncryptor.use_authenticated_message_encryption).to be(true)
43
- if ActiveSupport::VERSION::MAJOR >= 7
44
- expect(ActiveSupport::KeyGenerator.hash_digest_class).to be(OpenSSL::Digest::SHA256)
45
- expect(ActiveSupport::IsolatedExecutionState.isolation_level).to be(:thread)
46
- expect(Digest::UUID.use_rfc4122_namespaced_uuids).to be(true)
47
- end
48
- end
49
-
50
- it 'configures ActiveRecord' do
51
- if ActiveRecord::VERSION::MAJOR >= 7
52
- expect(ActiveRecord.default_timezone).to be(:utc)
53
- expect(ActiveRecord.legacy_connection_handling).to be(false)
54
- expect(ActiveRecord.verify_foreign_keys_for_fixtures).to be(true)
55
- expect(ActiveRecord::Base.partial_inserts).to be(false)
56
- expect(ActiveRecord::Base.automatic_scope_inversing).to be(true)
57
- end
58
- expect(ActiveRecord::Base.belongs_to_required_by_default).to be(true)
59
- expect(ActiveRecord::Base.cache_versioning).to be(true)
60
- expect(ActiveRecord::Base.collection_cache_versioning).to be(true)
61
- expect(ActiveRecord::Base.has_many_inversing).to be(true)
62
- end
63
-
64
- it 'configures ActiveJob' do
65
- expect(ActiveJob::Base.retry_jitter).to eq(0.15)
66
- end
67
-
68
- it 'reads env specific initializers' do
69
- expect(subject.config).to include(
70
- :test_specific,
71
- :raise_on_missing_translations,
72
- :cors,
73
- :middleware,
74
- )
75
- end
76
-
77
- it 'prepares middleware' do
78
- expect(subject.middleware).to be_instance_of(Rack::Builder)
79
- expect(subject.middleware.send(:instance_variable_get, :@use).size).to eq(3)
80
- expect(subject.middleware.send(:instance_variable_get, :@run)).to be(subject)
81
- end
82
-
83
- it 'applies middleware' do
84
- header 'Origin', 'test.host'
85
- get '/v1/ok'
86
- expect(last_response).to be_ok
87
- expect(last_response.body).to eq(%({"status":"OK"}))
88
- expect(last_response.headers).to include(
89
- 'Access-Control-Allow-Origin' => '*',
90
- 'X-MyApp' => 'true',
91
- )
92
-
93
- header 'Origin', 'test.host'
94
- get '/v1/failing'
95
- expect(last_response).to be_bad_request
96
- expect(last_response.body).to eq(%({"error":"bad request"}))
97
- expect(last_response.headers).to include(
98
- 'Access-Control-Allow-Origin' => '*',
99
- 'X-MyApp' => 'true',
100
- )
101
- end
102
- end
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'activerecord', require: 'active_record'
4
- gem 'grape-app', path: '../../'
@@ -1,5 +0,0 @@
1
- class API::Posts < Grape::API
2
- get '/posts' do
3
- []
4
- end
5
- end
@@ -1,18 +0,0 @@
1
- class API::V1 < Grape::API
2
- version 'v1'
3
- format :json
4
-
5
- rescue_from MyLib::BadRequest do |e|
6
- error!({ error: e }, 400)
7
- end
8
-
9
- get '/ok' do
10
- { status: 'OK' }
11
- end
12
-
13
- get '/failing' do
14
- raise MyLib::BadRequest, 'bad request'
15
- end
16
-
17
- mount API::Posts
18
- end
@@ -1,7 +0,0 @@
1
- module API
2
- end
3
-
4
- # Mount root API to app
5
- Grape::App.instance_eval do
6
- mount API::V1
7
- end
@@ -1,3 +0,0 @@
1
- test:
2
- adapter: "sqlite3"
3
- database: ":memory:"
@@ -1,16 +0,0 @@
1
- require 'my_lib'
2
-
3
- Grape::App.configure do |c|
4
- c.eager_load = true
5
- c.test_specific = true
6
- c.raise_on_missing_translations = true
7
- c.cors do
8
- allow do
9
- origins '*'
10
- resource '*', headers: :any, methods: %i[get post options]
11
- end
12
- end
13
- c.middleware do
14
- use MyLib::Middleware
15
- end
16
- end
@@ -1,2 +0,0 @@
1
- en:
2
- hi: hello
@@ -1,16 +0,0 @@
1
- class MyLib
2
- class BadRequest < StandardError
3
- end
4
-
5
- class Middleware
6
- def initialize(app)
7
- @app = app
8
- end
9
-
10
- def call(env)
11
- status, headers, body = @app.call(env)
12
- headers['X-MyApp'] = 'true'
13
- [status, headers, body]
14
- end
15
- end
16
- end
data/spec/spec_helper.rb DELETED
@@ -1,17 +0,0 @@
1
- ENV['RACK_ENV'] ||= 'test'
2
- require 'grape-app'
3
- require 'rack/test'
4
- require 'active_record'
5
- require 'active_job'
6
-
7
- ActiveRecord::Base.configurations = { 'test' => { 'adapter' => 'sqlite3', 'database' => ':memory:' } }
8
- ActiveRecord::Base.establish_connection :test
9
- ActiveRecord::Base.connection.instance_eval do
10
- create_table :articles do |t|
11
- t.string :title
12
- t.timestamps
13
- end
14
- end
15
-
16
- class Article < ActiveRecord::Base
17
- end