hobby 0.1.0 → 0.2.1
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 +5 -5
- data/.travis.yml +1 -0
- data/Gemfile +1 -2
- data/hobby.gemspec +5 -3
- data/lib/hobby.rb +1 -1
- data/lib/hobby/helpers.rb +5 -1
- data/lib/hobby/router.rb +1 -2
- data/readme.adoc +13 -38
- data/spec/app_spec.rb +10 -0
- data/spec/apps/ScriptName.rb +12 -0
- data/spec/helper.rb +1 -29
- data/spec/mutant_patches.rb +27 -0
- data/spec/router_matchers.rb +1 -1
- metadata +13 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d2b39e55ddd774df20a8ba6ff04156303c99bccccb90c08f8915694615faefbe
|
4
|
+
data.tar.gz: 4c175492dc2b6edf91844b0b826657929d373c6f5985dce4aeb39ca041d70040
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 576536cd9c0e2269658a0d982a92cd2283ca553fa0e95e9725cb40067eda935f8d75753ec9c2ec21b98e0a64b6c3af983591edac6e0aded8a1a28216ec12dec0
|
7
|
+
data.tar.gz: 0f0e7bb9edde95240b69fcf8447a1d5421e807da3fa8bc8fb38878fc1e7d54d79819709fb18a160b8059f020843b99104bf35fae70fbc10fd27213f938f50228
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/hobby.gemspec
CHANGED
@@ -4,10 +4,10 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'hobby'
|
7
|
-
spec.version = '0.1
|
7
|
+
spec.version = '0.2.1'
|
8
8
|
spec.authors = ['Anatoly Chernow']
|
9
9
|
spec.email = ['chertoly@gmail.com']
|
10
|
-
spec.summary = %q{A
|
10
|
+
spec.summary = %q{A professional way to create Rack applications.}
|
11
11
|
spec.homepage = 'https://github.com/ch1c0t/hobby'
|
12
12
|
spec.license = 'MIT'
|
13
13
|
|
@@ -16,5 +16,7 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
spec.require_paths = ['lib']
|
18
18
|
|
19
|
-
spec.add_dependency 'rack'
|
19
|
+
spec.add_dependency 'rack', '~> 2'
|
20
|
+
|
21
|
+
spec.required_ruby_version = '>= 2.6.6'
|
20
22
|
end
|
data/lib/hobby.rb
CHANGED
data/lib/hobby/helpers.rb
CHANGED
@@ -27,7 +27,7 @@ module Hobby
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def halt
|
30
|
-
throw :halt, response
|
30
|
+
throw :halt, response.to_a
|
31
31
|
end
|
32
32
|
|
33
33
|
def not_found
|
@@ -42,5 +42,9 @@ module Hobby
|
|
42
42
|
def status status
|
43
43
|
response.status = status
|
44
44
|
end
|
45
|
+
|
46
|
+
def script_name
|
47
|
+
env.fetch 'SCRIPT_NAME'
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
data/lib/hobby/router.rb
CHANGED
data/readme.adoc
CHANGED
@@ -27,8 +27,7 @@ $ gem install hobby
|
|
27
27
|
[[introduction]]
|
28
28
|
== Introduction
|
29
29
|
|
30
|
-
Hobby
|
31
|
-
Hobby applications behave like usual Ruby classes.
|
30
|
+
Hobby provides a Ruby DSL to create web applications. It is well suited both for standalone and inside-Rails use.
|
32
31
|
|
33
32
|
To create a Hobby application, you create a class and include `Hobby` in it.
|
34
33
|
For example:
|
@@ -40,9 +39,9 @@ require 'hobby'
|
|
40
39
|
class C
|
41
40
|
include Hobby
|
42
41
|
|
43
|
-
get
|
42
|
+
get "/hello" do
|
44
43
|
"Hello, world."
|
45
|
-
|
44
|
+
end
|
46
45
|
end
|
47
46
|
----
|
48
47
|
|
@@ -74,9 +73,9 @@ class C
|
|
74
73
|
@name = name
|
75
74
|
end
|
76
75
|
|
77
|
-
get
|
76
|
+
get "/hello" do
|
78
77
|
"Hello, #{@name}."
|
79
|
-
|
78
|
+
end
|
80
79
|
end
|
81
80
|
----
|
82
81
|
|
@@ -95,9 +94,9 @@ class C
|
|
95
94
|
@name.upcase
|
96
95
|
end
|
97
96
|
|
98
|
-
get
|
97
|
+
get "/hello" do
|
99
98
|
"Hello, #{name}."
|
100
|
-
|
99
|
+
end
|
101
100
|
end
|
102
101
|
----
|
103
102
|
|
@@ -133,29 +132,12 @@ For common HTTP verbs, Hobby provides the route definers(methods named according
|
|
133
132
|
class App
|
134
133
|
include Hobby
|
135
134
|
|
136
|
-
get '
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
put '/' do
|
145
|
-
# ...
|
146
|
-
end
|
147
|
-
|
148
|
-
patch '/' do
|
149
|
-
# ...
|
150
|
-
end
|
151
|
-
|
152
|
-
delete '/' do
|
153
|
-
# ...
|
154
|
-
end
|
155
|
-
|
156
|
-
options '/' do
|
157
|
-
# ...
|
158
|
-
end
|
135
|
+
get { 'Some string.' }
|
136
|
+
post { 'Some string.' }
|
137
|
+
put { 'Some string.' }
|
138
|
+
patch { 'Some string.' }
|
139
|
+
delete { 'Some string.' }
|
140
|
+
# TODO: find a good example for `options`
|
159
141
|
end
|
160
142
|
----
|
161
143
|
|
@@ -344,10 +326,3 @@ To run the specs:
|
|
344
326
|
----
|
345
327
|
bundle exec rspec
|
346
328
|
----
|
347
|
-
|
348
|
-
To perform mutation analysis:
|
349
|
-
|
350
|
-
[source,bash]
|
351
|
-
----
|
352
|
-
bundle exec mutant --use rspec 'Hobby*'
|
353
|
-
----
|
data/spec/app_spec.rb
CHANGED
@@ -272,5 +272,15 @@ describe Hobby::App do
|
|
272
272
|
assert { last_response.content_type == 'application/html' }
|
273
273
|
end
|
274
274
|
end
|
275
|
+
|
276
|
+
describe ScriptName do
|
277
|
+
it do
|
278
|
+
get '/'
|
279
|
+
assert { last_response.body == '' }
|
280
|
+
|
281
|
+
get '/some/path'
|
282
|
+
assert { last_response.body == '/some/path' }
|
283
|
+
end
|
284
|
+
end
|
275
285
|
end
|
276
286
|
end
|
data/spec/helper.rb
CHANGED
@@ -1,38 +1,10 @@
|
|
1
|
-
require 'devtools/spec_helper'
|
2
|
-
|
3
1
|
require 'hobby'
|
2
|
+
require_relative 'mutant_patches' if defined? Mutant
|
4
3
|
|
5
4
|
require 'minitest'
|
6
5
|
require 'minitest-power_assert'
|
7
6
|
Minitest::Assertions.prepend Minitest::PowerAssert::Assertions
|
8
7
|
|
9
|
-
if defined? Mutant
|
10
|
-
class Mutant::Selector::Expression
|
11
|
-
def call _subject
|
12
|
-
integration.all_tests
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Mutant::Isolation::Fork
|
17
|
-
def result
|
18
|
-
yield
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class Mutant::Loader
|
23
|
-
def call
|
24
|
-
source = Unparser.unparse node
|
25
|
-
|
26
|
-
puts <<~S
|
27
|
-
Current mutantion:
|
28
|
-
#{source}
|
29
|
-
S
|
30
|
-
|
31
|
-
kernel.eval source, binding, subject.source_path.to_s, subject.source_line
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
8
|
module EnvFor
|
37
9
|
def env_for path, verb = 'GET'
|
38
10
|
{'REQUEST_METHOD' => verb, 'PATH_INFO' => path }
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Run all the specs for any subject.
|
2
|
+
class Mutant::Selector::Expression
|
3
|
+
def call _subject
|
4
|
+
integration.all_tests
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
# Do not silence stdout and stderr of the running mutation.
|
9
|
+
class Mutant::Isolation::Fork
|
10
|
+
def result
|
11
|
+
yield
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Print the source of the current mutation.
|
16
|
+
class Mutant::Loader
|
17
|
+
def call
|
18
|
+
source = Unparser.unparse node
|
19
|
+
|
20
|
+
puts <<~S
|
21
|
+
Current mutation:
|
22
|
+
#{source}
|
23
|
+
S
|
24
|
+
|
25
|
+
kernel.eval source, binding, subject.source_path.to_s, subject.source_line
|
26
|
+
end
|
27
|
+
end
|
data/spec/router_matchers.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anatoly Chernow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2'
|
20
20
|
type: :runtime
|
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: '2'
|
27
27
|
description:
|
28
28
|
email:
|
29
29
|
- chertoly@gmail.com
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- spec/apps/MapInsideInitialize.rb
|
54
54
|
- spec/apps/Nested.rb
|
55
55
|
- spec/apps/OneRouteRouter.rb
|
56
|
+
- spec/apps/ScriptName.rb
|
56
57
|
- spec/apps/Status.rb
|
57
58
|
- spec/apps/UnshareableRouterMaps.rb
|
58
59
|
- spec/apps/UnshareableRouterUses.rb
|
@@ -60,6 +61,7 @@ files:
|
|
60
61
|
- spec/apps/UseInsideInitialize.rb
|
61
62
|
- spec/apps/WithoutPath.rb
|
62
63
|
- spec/helper.rb
|
64
|
+
- spec/mutant_patches.rb
|
63
65
|
- spec/router_matchers.rb
|
64
66
|
- spec/router_spec.rb
|
65
67
|
homepage: https://github.com/ch1c0t/hobby
|
@@ -74,18 +76,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
74
76
|
requirements:
|
75
77
|
- - ">="
|
76
78
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
79
|
+
version: 2.6.6
|
78
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
81
|
requirements:
|
80
82
|
- - ">="
|
81
83
|
- !ruby/object:Gem::Version
|
82
84
|
version: '0'
|
83
85
|
requirements: []
|
84
|
-
|
85
|
-
rubygems_version: 2.6.13
|
86
|
+
rubygems_version: 3.2.3
|
86
87
|
signing_key:
|
87
88
|
specification_version: 4
|
88
|
-
summary: A
|
89
|
+
summary: A professional way to create Rack applications.
|
89
90
|
test_files:
|
90
91
|
- spec/app_spec.rb
|
91
92
|
- spec/apps/ContentType.rb
|
@@ -97,6 +98,7 @@ test_files:
|
|
97
98
|
- spec/apps/MapInsideInitialize.rb
|
98
99
|
- spec/apps/Nested.rb
|
99
100
|
- spec/apps/OneRouteRouter.rb
|
101
|
+
- spec/apps/ScriptName.rb
|
100
102
|
- spec/apps/Status.rb
|
101
103
|
- spec/apps/UnshareableRouterMaps.rb
|
102
104
|
- spec/apps/UnshareableRouterUses.rb
|
@@ -104,5 +106,6 @@ test_files:
|
|
104
106
|
- spec/apps/UseInsideInitialize.rb
|
105
107
|
- spec/apps/WithoutPath.rb
|
106
108
|
- spec/helper.rb
|
109
|
+
- spec/mutant_patches.rb
|
107
110
|
- spec/router_matchers.rb
|
108
111
|
- spec/router_spec.rb
|