grape-dsl 1.2.2 → 1.3.0
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 -13
- data/VERSION +1 -1
- data/files.rb +6 -7
- data/grape-dsl.gemspec +1 -1
- data/lib/grape-dsl.rb +7 -9
- data/lib/grape-dsl/doc.rb +338 -340
- data/lib/grape-dsl/dsl.rb +63 -29
- data/lib/grape-dsl/endpoint.rb +7 -9
- data/lib/grape-dsl/headers.rb +60 -58
- data/lib/grape-dsl/mounter.rb +17 -15
- metadata +11 -13
- data/lib/grape-dsl/config.rb +0 -9
data/lib/grape-dsl/dsl.rb
CHANGED
@@ -1,46 +1,80 @@
|
|
1
1
|
#encoding: UTF-8
|
2
|
-
module Grape
|
3
|
-
# The API class is the primary entry point for
|
4
|
-
# creating Grape APIs.Users should subclass this
|
5
|
-
# class in order to build an API.
|
6
|
-
class API
|
7
|
-
class << self
|
8
|
-
|
9
|
-
# mount all the rest api classes that is subclass of the Grape::API
|
10
|
-
# make easy to manage
|
11
|
-
def mount_subclasses(*exception)
|
12
|
-
|
13
|
-
# mark self as exception
|
14
|
-
begin
|
15
|
-
exception.push(self)
|
16
|
-
end
|
17
2
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
3
|
+
module GrapeDSL
|
4
|
+
module Extend
|
5
|
+
|
6
|
+
module API
|
7
|
+
|
8
|
+
# defaults
|
9
|
+
# desc -> description for path
|
10
|
+
# body -> return body from the call
|
11
|
+
# convent_type -> real content type
|
12
|
+
def description
|
13
|
+
|
14
|
+
if desc.class <= String
|
15
|
+
tmp_string= desc
|
16
|
+
desc ::Hashie::Mash.new
|
17
|
+
desc[:desc]= tmp_string
|
18
|
+
end
|
19
|
+
|
20
|
+
unless desc.class <= Hash
|
21
|
+
desc ::Hashie::Mash.new
|
22
|
+
end
|
23
|
+
|
24
|
+
unless self.content_types.keys.empty?
|
25
|
+
|
26
|
+
content_type_name= nil
|
27
|
+
[:json,:xml,:txt].each do |element|
|
28
|
+
if self.content_types.keys.include? element
|
29
|
+
content_type_name ||= element.to_s.upcase
|
30
|
+
end
|
23
31
|
end
|
32
|
+
desc[:convent_type] ||= content_type_name
|
33
|
+
|
24
34
|
end
|
35
|
+
|
36
|
+
return desc
|
37
|
+
|
25
38
|
end
|
26
39
|
|
27
|
-
|
40
|
+
# mount all the rest api classes that is subclass of the Grape::API
|
41
|
+
# make easy to manage
|
42
|
+
def mount_subclasses(*exception)
|
43
|
+
|
44
|
+
# mark self as exception
|
45
|
+
begin
|
46
|
+
exception.push(self)
|
47
|
+
end
|
28
48
|
|
29
|
-
|
49
|
+
# mount components
|
50
|
+
begin
|
51
|
+
Grape::API.subclasses.each do |component|
|
52
|
+
unless exception.include?(component)
|
53
|
+
mount(component)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
30
57
|
|
31
|
-
|
32
|
-
def console_write_out_routes
|
58
|
+
return nil
|
33
59
|
|
34
|
-
$stdout.puts "\n\nREST::API ROUTES:"
|
35
|
-
self.routes.map do |route|
|
36
|
-
$stdout.puts "\t#{route.route_method}","#{route.route_path}"
|
37
60
|
end
|
38
61
|
|
39
|
-
|
40
|
-
|
62
|
+
# write out to the console the class routes
|
63
|
+
def console_write_out_routes
|
64
|
+
|
65
|
+
$stdout.puts "\n\nREST::API ROUTES:"
|
66
|
+
self.routes.map do |route|
|
67
|
+
$stdout.puts "\t#{route.route_method}","#{route.route_path}"
|
68
|
+
end
|
69
|
+
|
70
|
+
return nil
|
71
|
+
end
|
41
72
|
|
42
73
|
|
43
74
|
end
|
75
|
+
|
44
76
|
end
|
77
|
+
|
45
78
|
end
|
46
79
|
|
80
|
+
Grape::API.__send__ :extend, ::GrapeDSL::Extend::API
|
data/lib/grape-dsl/endpoint.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
|
4
|
-
# on the instance level of this class may be called
|
5
|
-
# from inside a `get`, `post`, etc.
|
6
|
-
class Endpoint
|
7
|
-
class << self
|
8
|
-
attr_accessor :header_config_obj
|
1
|
+
module GrapeDSL
|
2
|
+
module Extend
|
3
|
+
module Endpoint
|
9
4
|
|
5
|
+
attr_accessor :header_config_obj
|
10
6
|
alias :config_obj :header_config_obj
|
11
7
|
alias :config_obj= :header_config_obj=
|
12
8
|
|
13
9
|
end
|
14
10
|
end
|
15
|
-
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Grape::Endpoint.__send__ :extend, ::GrapeDSL::Extend::Endpoint
|
data/lib/grape-dsl/headers.rb
CHANGED
@@ -1,76 +1,78 @@
|
|
1
|
-
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
1
|
+
|
2
|
+
module GrapeDSL
|
3
|
+
module Extend
|
4
|
+
module Headers
|
5
|
+
|
6
|
+
# example in yaml format
|
7
|
+
# "header_name":
|
8
|
+
# - "header values"
|
9
|
+
# - "header value 2"
|
10
|
+
#
|
11
|
+
#
|
12
|
+
# real example for cors
|
13
|
+
# "Access-Control-Allow-Headers":
|
14
|
+
# - "X-Idp-Id"
|
15
|
+
# - "X-Token"
|
16
|
+
# - "Content-Type"
|
17
|
+
# "Access-Control-Allow-Origin":
|
18
|
+
# - "*"
|
19
|
+
# "Access-Control-Allow-Methods":
|
20
|
+
# - HEAD
|
21
|
+
# - OPTIONS
|
22
|
+
# - GET
|
23
|
+
# - POST
|
24
|
+
# - PUT
|
25
|
+
# - DELETE
|
26
|
+
#
|
27
|
+
#
|
28
|
+
# This will give headers to all call request response made after this
|
29
|
+
# make sure to load BEFORE every route call going to be made
|
30
|
+
def response_headers_to_new_calls(config_obj=nil)
|
31
|
+
|
32
|
+
Grape::Endpoint.config_obj= config_obj unless config_obj.nil?
|
33
|
+
Grape::API.inject_singleton_method :inherited, add: "after" do |subclass|
|
34
|
+
|
35
|
+
subclass.class_eval do
|
36
|
+
|
37
|
+
before do
|
38
|
+
Grape::Endpoint.header_config_obj.each do |header_key,header_value|
|
39
|
+
header header_key, header_value.join(', ')
|
40
|
+
end
|
39
41
|
end
|
42
|
+
|
40
43
|
end
|
41
44
|
|
42
45
|
end
|
43
46
|
|
47
|
+
return nil
|
44
48
|
end
|
45
49
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
# same config obj format like to "response_headers_to_new_calls"
|
51
|
-
# this will create headers for the options call to ALL already made route
|
52
|
-
# make sure to load after every route has been made
|
53
|
-
def response_headers_to_routes_options_request(config_obj=nil)
|
50
|
+
# same config obj format like to "response_headers_to_new_calls"
|
51
|
+
# this will create headers for the options call to ALL already made route
|
52
|
+
# make sure to load after every route has been made
|
53
|
+
def response_headers_to_routes_options_request(config_obj=nil)
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
Grape::Endpoint.header_config_obj= config_obj unless config_obj.nil?
|
56
|
+
Grape::API.subclasses.each do |rest_api_model|
|
57
|
+
rest_api_model.routes.map { |route| route.route_path.split('(.:format)')[0] }.uniq.each do |path|
|
58
|
+
rest_api_model.class_eval do
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
options path do
|
61
|
+
Grape::Endpoint.header_config_obj.each do |header_key,header_value|
|
62
|
+
header header_key, header_value.join(', ')
|
63
|
+
end
|
63
64
|
end
|
64
|
-
end
|
65
65
|
|
66
|
+
end
|
66
67
|
end
|
68
|
+
|
67
69
|
end
|
68
70
|
|
71
|
+
return nil
|
69
72
|
end
|
70
73
|
|
71
|
-
return nil
|
72
74
|
end
|
73
|
-
|
74
|
-
|
75
75
|
end
|
76
|
-
end
|
76
|
+
end
|
77
|
+
|
78
|
+
Grape.__send__ :extend, ::GrapeDSL::Extend::Headers
|
data/lib/grape-dsl/mounter.rb
CHANGED
@@ -1,21 +1,15 @@
|
|
1
1
|
# this is super if you want CORS with Grape
|
2
2
|
# This is a plugin for Mongoid
|
3
3
|
# models rest layer generate
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
# class in order to build an API.
|
8
|
-
|
9
|
-
class API
|
10
|
-
|
11
|
-
class << self
|
12
|
-
|
4
|
+
module GrapeDSL
|
5
|
+
module Extend
|
6
|
+
module Mounter
|
13
7
|
|
14
8
|
# Args will be seperated by they class type
|
15
9
|
# string = path part, will be joined with "/"
|
16
|
-
# hash = options element
|
10
|
+
# hash = grape options element
|
17
11
|
# Class = target class
|
18
|
-
# Symbol = method name
|
12
|
+
# Symbol = method name / REST METHOD NAME
|
19
13
|
# Proc = These procs will be called with the binding of GrapeEndpoint,
|
20
14
|
# so params and headers Hash::Mash will be allowed to use
|
21
15
|
# they will run BEFORE the method been called, so ideal for auth stuffs
|
@@ -27,8 +21,14 @@ module Grape
|
|
27
21
|
#
|
28
22
|
# ---------------
|
29
23
|
#
|
30
|
-
# looks like this:
|
31
|
-
# mount_method
|
24
|
+
# looks like this with FULL POWER:
|
25
|
+
# mount_method :GET,
|
26
|
+
# TestClass,
|
27
|
+
# :test_method,
|
28
|
+
# "funny_path_first_part",
|
29
|
+
# "funny_path_second_part",
|
30
|
+
# [:arg_hello,:json],
|
31
|
+
# Proc{ authorize_instance_method_from_grape_endpoint }
|
32
32
|
#
|
33
33
|
# you can give hash options just like to any other get,post put delete etc methods, it will work
|
34
34
|
#
|
@@ -93,7 +93,6 @@ module Grape
|
|
93
93
|
|
94
94
|
end
|
95
95
|
|
96
|
-
|
97
96
|
__send__(rest_method,path_name,options) do
|
98
97
|
|
99
98
|
|
@@ -124,6 +123,9 @@ module Grape
|
|
124
123
|
|
125
124
|
end
|
126
125
|
|
126
|
+
|
127
127
|
end
|
128
128
|
end
|
129
|
-
end
|
129
|
+
end
|
130
|
+
|
131
|
+
Grape::API.__send__ :extend, ::GrapeDSL::Extend::Mounter
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: loader
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
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
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: grape
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bindless
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: DSL for Grape module that let you use some basic function much easier.
|
@@ -69,7 +69,6 @@ files:
|
|
69
69
|
- files.rb
|
70
70
|
- grape-dsl.gemspec
|
71
71
|
- lib/grape-dsl.rb
|
72
|
-
- lib/grape-dsl/config.rb
|
73
72
|
- lib/grape-dsl/doc.rb
|
74
73
|
- lib/grape-dsl/dsl.rb
|
75
74
|
- lib/grape-dsl/endpoint.rb
|
@@ -85,19 +84,18 @@ require_paths:
|
|
85
84
|
- lib
|
86
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
87
86
|
requirements:
|
88
|
-
- -
|
87
|
+
- - ">="
|
89
88
|
- !ruby/object:Gem::Version
|
90
89
|
version: '0'
|
91
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
91
|
requirements:
|
93
|
-
- -
|
92
|
+
- - ">="
|
94
93
|
- !ruby/object:Gem::Version
|
95
94
|
version: '0'
|
96
95
|
requirements: []
|
97
96
|
rubyforge_project:
|
98
|
-
rubygems_version: 2.2.
|
97
|
+
rubygems_version: 2.2.2
|
99
98
|
signing_key:
|
100
99
|
specification_version: 4
|
101
100
|
summary: Simple Grape DSL for easer use cases
|
102
101
|
test_files: []
|
103
|
-
has_rdoc:
|