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 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