rack-rest-rspec 0.0.1 → 0.0.3
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/Gemfile +20 -0
- data/README.md +78 -0
- data/Rakefile +6 -12
- data/VERSION +1 -1
- data/lib/rack-rest-rspec/helpers/memorizer.rb +17 -0
- data/lib/rack-rest-rspec/helpers/yml.rb +5 -0
- data/lib/rack-rest-rspec/lib/rest_service.rb +25 -0
- data/lib/rack-rest-rspec/prepare.rb +1 -1
- data/rack-rest-rspec.gemspec +10 -10
- metadata +27 -88
- data/lib/rack-rest-rspec/helpers/hash.rb +0 -14
- data/lib/rack-rest-rspec/lib/restcrudservice.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 991c3ce92453468607c170e5546f355d3ce1cec02c970651906599af34e3ec0e
|
4
|
+
data.tar.gz: 77955b805aed17ad1639496176821b9203dde097228b5aebaf237db9727c8947
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ba8ada8c6a9d413484b75b71fa368e9e9b59a09f1e903e1d8728a3a49a59f516054937e316b0f6d5948c155ef0cf4b304f55eeace61c479757a15c32497c880
|
7
|
+
data.tar.gz: b8ce3dad6fcac708eac0b5f0d50fc140dd5f6e98a4455c5b0e275a9d5a307740ec9f934f0da98297e80baf5f652a98abe8b6f52514e92741a1f07fe4826351a2
|
data/Gemfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
6
|
+
|
7
|
+
group :test, :development do
|
8
|
+
gem "roodi", "~> 5.0"
|
9
|
+
gem "rake", "~> 13.0"
|
10
|
+
gem "code_statistics", "~> 0.2.13"
|
11
|
+
gem "rspec", "~> 3.11"
|
12
|
+
gem "yard", "~> 0.9.28"
|
13
|
+
gem "yard-rspec", "~> 0.1"
|
14
|
+
end
|
15
|
+
|
16
|
+
gem "rack-test", "~> 2.0"
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
gem "version", "~> 1.1"
|
data/README.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# Rack REST RSpec
|
2
|
+
|
3
|
+
RSpec Matchers for REST Rack webservice
|
4
|
+
|
5
|
+
|
6
|
+
Install it yourself as:
|
7
|
+
|
8
|
+
$ gem install rack-rest-rspec
|
9
|
+
|
10
|
+
or
|
11
|
+
|
12
|
+
$ bundle add 'rack-rest-rspec'
|
13
|
+
|
14
|
+
## Usage
|
15
|
+
|
16
|
+
### Basic usage : install in your spec/spec_helper.rb or spec/prepare.rb
|
17
|
+
|
18
|
+
require 'rack-rest-rspec/prepare'
|
19
|
+
|
20
|
+
### Basic usage : sample of spec matchers usage
|
21
|
+
|
22
|
+
describe 'Posts REST API' do
|
23
|
+
before :all do
|
24
|
+
$service = RestService::new :service => MYRack::ModularApp
|
25
|
+
end
|
26
|
+
|
27
|
+
subject { $service }
|
28
|
+
context "GET /api/v1/posts : test for a collections of Post (empty)" do
|
29
|
+
it { expect(subject.get('/api/v1/posts')).to be_correctly_sent }
|
30
|
+
it { expect(subject).to respond_with_status 200 }
|
31
|
+
it { expect(subject).to respond_a_collection_of_record }
|
32
|
+
it { expect(subject).to respond_with_collection_size 0 }
|
33
|
+
end
|
34
|
+
|
35
|
+
context "POST /api/v1/post : create a new record" do
|
36
|
+
it { expect(subject.post('/api/v1/post',{id: 1, title: "test", body: "content"}.to_json)).to be_correctly_sent }
|
37
|
+
it { expect(subject).to respond_with_status 201 }
|
38
|
+
end
|
39
|
+
|
40
|
+
context "GET /api/v1/posts : test for a collections of Post" do
|
41
|
+
it { expect(subject.get('/api/v1/posts')).to be_correctly_sent }
|
42
|
+
it { expect(subject).to respond_with_status 200 }
|
43
|
+
it { expect(subject).to respond_a_collection_of_record }
|
44
|
+
it { expect(subject).to respond_with_collection_size 1 }
|
45
|
+
end
|
46
|
+
|
47
|
+
context "GET /api/v1/post/:id : get a record by code" do
|
48
|
+
it { expect(subject.get("/api/v1/post/1")).to be_correctly_sent }
|
49
|
+
it { expect(subject).to respond_with_status 200 }
|
50
|
+
it { expect(subject).to respond_a_record }
|
51
|
+
it { expect(subject).to respond_with_data({id: 1, title: "test", body: "content"}) }
|
52
|
+
end
|
53
|
+
|
54
|
+
context "DELETE /api/v1/post/:id : delete a pots by id" do
|
55
|
+
it{ expect(subject.delete("/api/v1/post/1")).to be_correctly_sent }
|
56
|
+
it { expect(subject).to respond_with_status 204 }
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
## Available matchers :
|
65
|
+
|
66
|
+
* be_correctly_send : check if return is HTTP valid
|
67
|
+
* respond_with_a_collection_of_record : check if the return is a JSON Array
|
68
|
+
* respond_a_record : check if the return is a JSON Hash
|
69
|
+
* respond_with_collection_size <Integer> : check if the collection have the good size
|
70
|
+
* respond_with_data <Object> : check if the return match the given object
|
71
|
+
* respond_with_status <Integer> : check if the HTTP response code is the good.
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require 'rubygems'
|
3
|
+
require 'version'
|
4
|
+
require 'rake/version_task'
|
3
5
|
require 'rspec'
|
4
6
|
require 'rake'
|
5
7
|
require "rake/clean"
|
@@ -14,6 +16,10 @@ require "roodi"
|
|
14
16
|
require "roodi_task"
|
15
17
|
|
16
18
|
|
19
|
+
task default: :spec
|
20
|
+
|
21
|
+
Rake::VersionTask.new
|
22
|
+
|
17
23
|
RoodiTask.new() do | t |
|
18
24
|
t.patterns = %w(lib/**/*.rb)
|
19
25
|
t.config = "ultragreen_roodi_coding_convention.yml"
|
@@ -45,16 +51,4 @@ end
|
|
45
51
|
task :clobber => "yardoc:clobber"
|
46
52
|
|
47
53
|
|
48
|
-
Gem::PackageTask.new(spec) do |pkg|
|
49
|
-
pkg.need_tar = true
|
50
|
-
pkg.need_zip = true
|
51
|
-
end
|
52
|
-
|
53
|
-
Rake::RDocTask.new('rdoc') do |d|
|
54
|
-
d.rdoc_files.include('doc/**/*','bin/*')
|
55
|
-
d.title = 'Dorsal : Yard'
|
56
|
-
d.options << '--line-numbers' << '--diagram' << '-SHN'
|
57
|
-
end
|
58
|
-
|
59
|
-
task :default => [:gem]
|
60
54
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'pstore'
|
2
|
+
|
3
|
+
def memorize(options)
|
4
|
+
|
5
|
+
$store = PStore.new("/tmp/data.pstore")
|
6
|
+
$store.transaction do
|
7
|
+
options.each do |key,val|
|
8
|
+
$store[key] = val
|
9
|
+
end
|
10
|
+
$store.commit
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def retrieve(key)
|
15
|
+
$store = PStore.new("/tmp/data.pstore")
|
16
|
+
return $store.transaction { $store[key] }
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
|
4
|
+
class RestService
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
|
8
|
+
attr_reader :path
|
9
|
+
attr_reader :service
|
10
|
+
attr_reader :browser
|
11
|
+
|
12
|
+
def initialize(params = {})
|
13
|
+
defaults = {
|
14
|
+
:service => Sinatra::Base,
|
15
|
+
:path => '/'
|
16
|
+
}
|
17
|
+
defaults.merge! params
|
18
|
+
@service = defaults[:service]
|
19
|
+
@path = defaults[:path]
|
20
|
+
@browser = Rack::Test::Session.new(Rack::MockSession.new(@service))
|
21
|
+
end
|
22
|
+
|
23
|
+
def_delegators :@browser, :get, :post, :put, :delete
|
24
|
+
|
25
|
+
end
|
data/rack-rest-rspec.gemspec
CHANGED
@@ -5,27 +5,27 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rack-rest-rspec"
|
8
|
-
spec.version =
|
8
|
+
spec.version = `cat VERSION`
|
9
9
|
spec.authors = ["Romain GEORGES"]
|
10
10
|
spec.email = ["romain@ultragreen.net"]
|
11
11
|
spec.summary = %q{Rack-rest-rspec: RSpec Matchers for REST Rack webservice }
|
12
12
|
spec.description = %q{Rack-rest-rspec: RSpec Matchers for REST Rack webservice }
|
13
13
|
spec.homepage = "http://github.com/Ultragreen/rack-rest-rspec"
|
14
14
|
spec.license = "BSD-2"
|
15
|
+
|
15
16
|
spec.files = `git ls-files -z`.split("\x0")
|
16
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
19
|
spec.require_paths = ["lib"]
|
19
20
|
|
20
|
-
spec.add_development_dependency "
|
21
|
-
spec.add_development_dependency "rake"
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
|
27
|
-
spec.
|
28
|
-
spec.add_runtime_dependency "rack-test", "~> 0.6", ">= 0.6.3"
|
21
|
+
spec.add_development_dependency "roodi", "~> 5.0"
|
22
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
23
|
+
spec.add_development_dependency "code_statistics", "~> 0.2.13"
|
24
|
+
spec.add_development_dependency "rspec", "~> 3.11"
|
25
|
+
spec.add_development_dependency "yard", "~> 0.9.28"
|
26
|
+
spec.add_development_dependency "yard-rspec", "~> 0.1"
|
27
|
+
|
28
|
+
spec.add_runtime_dependency "rack-test", "~> 2.0"
|
29
29
|
|
30
30
|
|
31
31
|
end
|
metadata
CHANGED
@@ -1,143 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-rest-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Romain GEORGES
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: roodi
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '2.14'
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 2.14.1
|
51
|
-
type: :development
|
52
|
-
prerelease: false
|
53
|
-
version_requirements: !ruby/object:Gem::Requirement
|
54
|
-
requirements:
|
55
|
-
- - "~>"
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: '2.14'
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 2.14.1
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: yard
|
63
29
|
requirement: !ruby/object:Gem::Requirement
|
64
30
|
requirements:
|
65
31
|
- - "~>"
|
66
32
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0
|
68
|
-
- - ">="
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: 0.8.7.2
|
33
|
+
version: '13.0'
|
71
34
|
type: :development
|
72
35
|
prerelease: false
|
73
36
|
version_requirements: !ruby/object:Gem::Requirement
|
74
37
|
requirements:
|
75
38
|
- - "~>"
|
76
39
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0
|
78
|
-
- - ">="
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: 0.8.7.2
|
40
|
+
version: '13.0'
|
81
41
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
42
|
+
name: code_statistics
|
83
43
|
requirement: !ruby/object:Gem::Requirement
|
84
44
|
requirements:
|
85
45
|
- - "~>"
|
86
46
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: 4.0.1
|
47
|
+
version: 0.2.13
|
91
48
|
type: :development
|
92
49
|
prerelease: false
|
93
50
|
version_requirements: !ruby/object:Gem::Requirement
|
94
51
|
requirements:
|
95
52
|
- - "~>"
|
96
53
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
98
|
-
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: 4.0.1
|
54
|
+
version: 0.2.13
|
101
55
|
- !ruby/object:Gem::Dependency
|
102
|
-
name:
|
56
|
+
name: rspec
|
103
57
|
requirement: !ruby/object:Gem::Requirement
|
104
58
|
requirements:
|
105
59
|
- - "~>"
|
106
60
|
- !ruby/object:Gem::Version
|
107
|
-
version: '3.
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 3.1.1
|
61
|
+
version: '3.11'
|
111
62
|
type: :development
|
112
63
|
prerelease: false
|
113
64
|
version_requirements: !ruby/object:Gem::Requirement
|
114
65
|
requirements:
|
115
66
|
- - "~>"
|
116
67
|
- !ruby/object:Gem::Version
|
117
|
-
version: '3.
|
118
|
-
- - ">="
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
version: 3.1.1
|
68
|
+
version: '3.11'
|
121
69
|
- !ruby/object:Gem::Dependency
|
122
|
-
name:
|
70
|
+
name: yard
|
123
71
|
requirement: !ruby/object:Gem::Requirement
|
124
72
|
requirements:
|
125
73
|
- - "~>"
|
126
74
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
128
|
-
- - ">="
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: 0.2.13
|
75
|
+
version: 0.9.28
|
131
76
|
type: :development
|
132
77
|
prerelease: false
|
133
78
|
version_requirements: !ruby/object:Gem::Requirement
|
134
79
|
requirements:
|
135
80
|
- - "~>"
|
136
81
|
- !ruby/object:Gem::Version
|
137
|
-
version:
|
138
|
-
- - ">="
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: 0.2.13
|
82
|
+
version: 0.9.28
|
141
83
|
- !ruby/object:Gem::Dependency
|
142
84
|
name: yard-rspec
|
143
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,20 +100,14 @@ dependencies:
|
|
158
100
|
requirements:
|
159
101
|
- - "~>"
|
160
102
|
- !ruby/object:Gem::Version
|
161
|
-
version: '0
|
162
|
-
- - ">="
|
163
|
-
- !ruby/object:Gem::Version
|
164
|
-
version: 0.6.3
|
103
|
+
version: '2.0'
|
165
104
|
type: :runtime
|
166
105
|
prerelease: false
|
167
106
|
version_requirements: !ruby/object:Gem::Requirement
|
168
107
|
requirements:
|
169
108
|
- - "~>"
|
170
109
|
- !ruby/object:Gem::Version
|
171
|
-
version: '0
|
172
|
-
- - ">="
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
version: 0.6.3
|
110
|
+
version: '2.0'
|
175
111
|
description: 'Rack-rest-rspec: RSpec Matchers for REST Rack webservice '
|
176
112
|
email:
|
177
113
|
- romain@ultragreen.net
|
@@ -179,11 +115,14 @@ executables: []
|
|
179
115
|
extensions: []
|
180
116
|
extra_rdoc_files: []
|
181
117
|
files:
|
118
|
+
- Gemfile
|
119
|
+
- README.md
|
182
120
|
- Rakefile
|
183
121
|
- VERSION
|
184
|
-
- lib/rack-rest-rspec/helpers/hash.rb
|
185
122
|
- lib/rack-rest-rspec/helpers/init.rb
|
186
|
-
- lib/rack-rest-rspec/
|
123
|
+
- lib/rack-rest-rspec/helpers/memorizer.rb
|
124
|
+
- lib/rack-rest-rspec/helpers/yml.rb
|
125
|
+
- lib/rack-rest-rspec/lib/rest_service.rb
|
187
126
|
- lib/rack-rest-rspec/matchers/be_correctly_sent.rb
|
188
127
|
- lib/rack-rest-rspec/matchers/init.rb
|
189
128
|
- lib/rack-rest-rspec/matchers/respond_a_collection_of_record.rb
|
@@ -199,7 +138,7 @@ homepage: http://github.com/Ultragreen/rack-rest-rspec
|
|
199
138
|
licenses:
|
200
139
|
- BSD-2
|
201
140
|
metadata: {}
|
202
|
-
post_install_message:
|
141
|
+
post_install_message:
|
203
142
|
rdoc_options: []
|
204
143
|
require_paths:
|
205
144
|
- lib
|
@@ -214,8 +153,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
153
|
- !ruby/object:Gem::Version
|
215
154
|
version: '0'
|
216
155
|
requirements: []
|
217
|
-
rubygems_version: 3.2
|
218
|
-
signing_key:
|
156
|
+
rubygems_version: 3.1.2
|
157
|
+
signing_key:
|
219
158
|
specification_version: 4
|
220
159
|
summary: 'Rack-rest-rspec: RSpec Matchers for REST Rack webservice'
|
221
160
|
test_files: []
|
@@ -1,45 +0,0 @@
|
|
1
|
-
class RestCRUDService
|
2
|
-
|
3
|
-
attr_reader :path
|
4
|
-
attr_reader :object
|
5
|
-
attr_reader :browser
|
6
|
-
|
7
|
-
def initialize(params = {})
|
8
|
-
defaults = {
|
9
|
-
:path => '/api/',
|
10
|
-
:object => '',
|
11
|
-
:browser => Rack::Test::Session.new(Rack::MockSession.new(Sinatra::Application))
|
12
|
-
}
|
13
|
-
defaults.merge! params
|
14
|
-
@path = defaults[:path]
|
15
|
-
@object = defaults[:object]
|
16
|
-
@browser = defaults[:browser]
|
17
|
-
end
|
18
|
-
|
19
|
-
def url
|
20
|
-
return "#{@path}/#{@object}"
|
21
|
-
end
|
22
|
-
|
23
|
-
def create_record _data
|
24
|
-
return @browser.post self.url, _data
|
25
|
-
end
|
26
|
-
|
27
|
-
def retrieve_all_records
|
28
|
-
return @browser.get self.url
|
29
|
-
end
|
30
|
-
|
31
|
-
def retrieve_record _nb
|
32
|
-
return @browser.get "#{self.url}/#{_nb}"
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
def update_record _nb,_data
|
37
|
-
return @browser.put "#{self.url}/#{_nb}", _data
|
38
|
-
end
|
39
|
-
|
40
|
-
|
41
|
-
def destroy_record _nb
|
42
|
-
return @browser.delete "#{self.url}/#{_nb}"
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|