hyperdrive 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14f62cf18a7559e936f29410ddf251bc0459eef2
4
- data.tar.gz: 38f5994e09e250db0664af87242badbb39bb09c0
3
+ metadata.gz: 1773ebd648b23d917073080a22cdfbdc7f1db732
4
+ data.tar.gz: b01991fbf7b86592e493a6001a9c3855e6d9648f
5
5
  SHA512:
6
- metadata.gz: bd23d6d26370771f9bab0cf2f8482b4f02d8d810816b541d28fa7478c0bc0b0fe2b8867acb295d8aeb92240ff823e1365ba570e40c826ac1e2aaf63eda656546
7
- data.tar.gz: eb213755881b6e07cc8fe29947b5fed3d5b910bd6e6bff82daa35a537fe075a5ba50c49e9edb49d355e02572efd20f2ca9d099f0bb560341abdf3b3469987cb4
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
- hyperdrive(:deal) do
24
- name 'Deals'
25
- desc 'Exclusive offers and coupons'
26
-
27
- param :name, '50 Chars or less', required: true
28
- param :start_date, 'Format: YYYY-MM-DD'
29
- param :end_date, 'Format: YYYY-MM-DD'
30
-
31
- filter :start_date
32
- filter :end_date
33
- filter :partner_id, required: true
34
- end
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
@@ -1,4 +1,7 @@
1
- require "hyperdrive/version"
1
+ # encoding: utf-8
2
+
3
+ require 'hyperdrive/resource'
4
+ require 'hyperdrive/version'
2
5
 
3
6
  module Hyperdrive
4
7
  # spinning up the FTL drive
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Hyperdrive
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -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
@@ -7,6 +7,9 @@ lib_path = File.expand_path('../lib', __FILE__)
7
7
  require 'bundler'
8
8
  Bundler.setup(:default, ENV['RACK_ENV'])
9
9
 
10
+ # test subject
11
+ require 'hyperdrive'
12
+
10
13
  # BDD Stack
11
14
  require 'minitest/autorun'
12
15
  require "minitest-spec-context"
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.2
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