hyperdrive 0.0.2 → 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/README.md +24 -12
- data/lib/hyperdrive.rb +4 -1
- data/lib/hyperdrive/resource.rb +46 -0
- data/lib/hyperdrive/version.rb +1 -1
- data/spec/hyperdrive/resource_spec.rb +43 -0
- data/spec/spec_helper.rb +3 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1773ebd648b23d917073080a22cdfbdc7f1db732
|
4
|
+
data.tar.gz: b01991fbf7b86592e493a6001a9c3855e6d9648f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12fa4db2f3a29dde64ed725c164c8ba7368163f2d178518e7a67e999b5d24e889919668d99a16e8f3f89aeaadb5e467717c7990283560a514eb3c5be948ec0b2
|
7
|
+
data.tar.gz: 492dd95b6214f6a1a16cb9df13d1484879351984c0ca46c89a0fdb2d9e574212ccf506741d54ab00770fd74c4d7e451030cbcf53f6bfd2739bf832c63de7135e
|
data/README.md
CHANGED
@@ -20,18 +20,30 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
Proposed Syntax (WIP):
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
23
|
+
```ruby
|
24
|
+
hyperdrive do
|
25
|
+
resource(:thing) do
|
26
|
+
name 'Thing Resource'
|
27
|
+
desc 'Description of Thing Resource'
|
28
|
+
|
29
|
+
# Register the params you want to allow in POST, PUT, PATCH,
|
30
|
+
# and DELETE requests. The :id param is auto-registered
|
31
|
+
# and is allowed for all requests but only required for PUT,
|
32
|
+
# PATCH, and DELETE requests
|
33
|
+
param :name, '50 Chars or less' # params are required by default
|
34
|
+
param :start_date, 'Format: YYYY-MM-DD', required: false
|
35
|
+
param :end_date, 'Format: YYYY-MM-DD', required: false
|
36
|
+
|
37
|
+
# Filters only apply to GET, HEAD and OPTIONS requests
|
38
|
+
# Like allowed params, :id is registered by default. Requests without an ID
|
39
|
+
# should return an array of 1 or more resources (that match any filters
|
40
|
+
# applied). Unlike allowed params, filters are not required by default.
|
41
|
+
filter :start_date, 'Format: YYYY-MM-DD'
|
42
|
+
filter :end_date, 'Format: YYYY-MM-DD'
|
43
|
+
filter :parent_id, 'Parent ID of Thing", required: true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
```
|
35
47
|
|
36
48
|
## Project Status
|
37
49
|
|
data/lib/hyperdrive.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Hyperdrive
|
4
|
+
class Resource
|
5
|
+
attr_reader :resource, :allowed_params, :filters
|
6
|
+
attr_accessor :name, :desc
|
7
|
+
|
8
|
+
def initialize(resource)
|
9
|
+
@resource = resource
|
10
|
+
@allowed_params = default_allowed_params
|
11
|
+
@filters = default_filters
|
12
|
+
end
|
13
|
+
|
14
|
+
def register_param(key, description, options = {})
|
15
|
+
options = default_param_options.merge(options)
|
16
|
+
@allowed_params[key] = { desc: description }.merge(options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def register_filter(key, description, options = {})
|
20
|
+
options = default_filter_options.merge(options)
|
21
|
+
@filters[key] = { desc: description }.merge(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def default_allowed_params
|
27
|
+
{
|
28
|
+
id: { desc: 'Resource Identifier', required: %w(PUT PATCH DELETE) }
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def default_param_options
|
33
|
+
{ required: true }.freeze
|
34
|
+
end
|
35
|
+
|
36
|
+
def default_filters
|
37
|
+
{
|
38
|
+
id: { desc: 'Resource Identifier', required: false }
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
def default_filter_options
|
43
|
+
{ required: false }.freeze
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/hyperdrive/version.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hyperdrive::Resource do
|
4
|
+
before do
|
5
|
+
@resource = Hyperdrive::Resource.new(:thing)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "creates a new resource" do
|
9
|
+
@resource.resource.must_equal :thing
|
10
|
+
end
|
11
|
+
|
12
|
+
it "has a name" do
|
13
|
+
@resource.name = 'Thing'
|
14
|
+
@resource.name.must_equal 'Thing'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has a description" do
|
18
|
+
@resource.desc = 'Description of Thing Resource'
|
19
|
+
@resource.desc.must_equal 'Description of Thing Resource'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "auto-registers the :id param" do
|
23
|
+
@resource.allowed_params[:id][:desc].must_equal 'Resource Identifier'
|
24
|
+
@resource.allowed_params[:id][:required].must_equal %w(PUT PATCH DELETE)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "registers an allowed param" do
|
28
|
+
@resource.register_param(:name, "Thing's Name")
|
29
|
+
@resource.allowed_params[:name][:desc].must_equal "Thing's Name"
|
30
|
+
@resource.allowed_params[:name][:required].must_equal true
|
31
|
+
end
|
32
|
+
|
33
|
+
it "auto-registers the :id filter" do
|
34
|
+
@resource.filters[:id][:desc].must_equal 'Resource Identifier'
|
35
|
+
@resource.filters[:id][:required].must_equal false
|
36
|
+
end
|
37
|
+
|
38
|
+
it "registers a filter" do
|
39
|
+
@resource.register_filter(:parent_id, 'Parent ID of Thing', required: true)
|
40
|
+
@resource.filters[:parent_id][:desc].must_equal 'Parent ID of Thing'
|
41
|
+
@resource.filters[:parent_id][:required].must_equal true
|
42
|
+
end
|
43
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyperdrive
|
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
|
- StyleSeek Engineering
|
@@ -26,7 +26,9 @@ files:
|
|
26
26
|
- Rakefile
|
27
27
|
- hyperdrive.gemspec
|
28
28
|
- lib/hyperdrive.rb
|
29
|
+
- lib/hyperdrive/resource.rb
|
29
30
|
- lib/hyperdrive/version.rb
|
31
|
+
- spec/hyperdrive/resource_spec.rb
|
30
32
|
- spec/spec_helper.rb
|
31
33
|
homepage: https://github.com/styleseek/hyperdrive
|
32
34
|
licenses:
|
@@ -53,4 +55,5 @@ signing_key:
|
|
53
55
|
specification_version: 4
|
54
56
|
summary: Hypermedia State Machine
|
55
57
|
test_files:
|
58
|
+
- spec/hyperdrive/resource_spec.rb
|
56
59
|
- spec/spec_helper.rb
|