grape-dsl 1.1.4 → 1.2.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 +8 -8
- data/README.md +49 -0
- data/VERSION +1 -1
- data/lib/grape-dsl.rb +2 -0
- data/lib/grape-dsl/mounter.rb +116 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NTVjYzEwMjMxMmJhNDAyMzg4ODk5YjhlYjE4YWNjMzhlOTc0MzEzOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTBlNDAwZTk2YjE2YjA1MGE1YzliOGVjYjUzZjI2MDU3ZGI0NDk3Yg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTE0ZmVmMzIwYmJmMmJhNDVkYWIwNzI2NDhmYjljMjdmNDI0NDFjN2JhYjhk
|
10
|
+
ZjU2MzZjODZhODBiYzhkMjYxODZhMWE0NTA0N2I0MmU1YmFjYTg2YjJiYTNm
|
11
|
+
YTQ2ZDhkMGY1MGJkMjE5MTVhMjE3NzA1ZjQ2OWQ3YTE0OGE0YTM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Y2NmZjI2NDZlYzUwYTM3YTA1MTBlYzNkNGNkNjlhMWQ4YzE0MWQ4MTk0MmRi
|
14
|
+
ZDYzOTY4OGM5ZWJkOGI4ODNmMjEwYzFjM2NmOGE3NjdjNjlmODljM2JkNTIz
|
15
|
+
NjAxY2IxY2FiZjgxMTRjMzA5NjE2MGUzNDk2NzRmZjI1Yjg2OGU=
|
data/README.md
CHANGED
@@ -4,6 +4,55 @@ Grape-DSL
|
|
4
4
|
DSL for Grape module that let you use some basic function much easier
|
5
5
|
if you use redmine wiki you can even create doc into it
|
6
6
|
|
7
|
+
### Use case
|
8
|
+
|
9
|
+
you can mount Grape::API-s all child class with
|
10
|
+
```ruby
|
11
|
+
class MainApi < Grape::API
|
12
|
+
mount_subclasses
|
13
|
+
end
|
14
|
+
```
|
15
|
+
|
16
|
+
you can mount only a single singleton method from a class like this
|
17
|
+
ps.: you can even set arguments to be json or yaml so it will be parsed before passing to method
|
18
|
+
```ruby
|
19
|
+
|
20
|
+
class TestClass
|
21
|
+
|
22
|
+
def self.test_method hello
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.complex_method
|
27
|
+
def self.complex_method hello, world="default", opts={},*args
|
28
|
+
|
29
|
+
puts "hello: #{hello}"
|
30
|
+
puts "world: #{world}"
|
31
|
+
puts "opts: #{opts.inspect}"
|
32
|
+
puts "args: #{args.inspect}"
|
33
|
+
puts "---"
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
class Api < Grape::API
|
40
|
+
|
41
|
+
mount_method TestClass, :test_method
|
42
|
+
mount_method Test,:test, "hello_world",[:opts,:json],[:args,:json]
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
```
|
47
|
+
|
48
|
+
or if you are big fan of the CURS , then you can use this two method:
|
49
|
+
response_headers_to_new_calls
|
50
|
+
response_headers_to_routes_options_request
|
51
|
+
|
52
|
+
there is description in he headers file.
|
53
|
+
|
54
|
+
so stuffs like this can be found in this project
|
55
|
+
|
7
56
|
|
8
57
|
## LICENSE
|
9
58
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/lib/grape-dsl.rb
CHANGED
@@ -0,0 +1,116 @@
|
|
1
|
+
# this is super if you want CORS with Grape
|
2
|
+
# This is a plugin for Mongoid
|
3
|
+
# models rest layer generate
|
4
|
+
module Grape
|
5
|
+
# The API class is the primary entry point for
|
6
|
+
# creating Grape APIs.Users should subclass this
|
7
|
+
# class in order to build an API.
|
8
|
+
|
9
|
+
class API
|
10
|
+
|
11
|
+
class << self
|
12
|
+
|
13
|
+
|
14
|
+
# Args description
|
15
|
+
# string = path part, will be joined with "/"
|
16
|
+
# hash = options element
|
17
|
+
# Class = target class
|
18
|
+
# Symbol = method name
|
19
|
+
#
|
20
|
+
# Array = This is for argument pre parsing, like when you use "hash" and the input will be a json
|
21
|
+
#
|
22
|
+
# simple use case: [:hello,:json],[:sup,:yaml]
|
23
|
+
#
|
24
|
+
#
|
25
|
+
# ---------------
|
26
|
+
#
|
27
|
+
# looks like this:
|
28
|
+
# mount_method TestClass, :test_method, "funny_path",:GET
|
29
|
+
#
|
30
|
+
# you can give hash options just like to any othere get,post put delete etc methods, it will work
|
31
|
+
#
|
32
|
+
def mount_method *args
|
33
|
+
|
34
|
+
options = Hash[*args.extract_class!(Hash)]
|
35
|
+
path_name = args.extract_class!(String).join('/')
|
36
|
+
class_name = args.extract_class!(Class)[0]
|
37
|
+
|
38
|
+
tmp_array = args.extract_class!(Array)
|
39
|
+
adapter_opt = Hash.new
|
40
|
+
|
41
|
+
tmp_array.each do |array_obj|
|
42
|
+
if array_obj.count == 2
|
43
|
+
adapter_opt[array_obj[0]]= array_obj[1]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
method_name = nil
|
48
|
+
rest_method = nil
|
49
|
+
|
50
|
+
args.extract_class!(Symbol).each do |element|
|
51
|
+
if element.to_s == element.to_s.downcase
|
52
|
+
method_name = element
|
53
|
+
elsif element.to_s == element.to_s.upcase
|
54
|
+
rest_method = element.to_s.downcase
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
rest_method ||= "get"
|
59
|
+
method_obj = class_name.method(method_name).clone
|
60
|
+
|
61
|
+
|
62
|
+
params do
|
63
|
+
|
64
|
+
method_obj.parameters.each do |array_obj|
|
65
|
+
|
66
|
+
case array_obj[0]
|
67
|
+
|
68
|
+
when :req
|
69
|
+
requires array_obj[1]
|
70
|
+
when :opt
|
71
|
+
optional array_obj[1]
|
72
|
+
when :rest
|
73
|
+
optional array_obj[1],
|
74
|
+
type: Array
|
75
|
+
|
76
|
+
#when :block
|
77
|
+
# optional array_obj[1],
|
78
|
+
# type: String,
|
79
|
+
# desc: "Ruby code to be used"
|
80
|
+
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
__send__(rest_method,path_name,options) do
|
90
|
+
|
91
|
+
|
92
|
+
method_arguments= (method_obj.parameters.map{|element|
|
93
|
+
if !params[element[1]].nil?
|
94
|
+
|
95
|
+
case adapter_opt[element[1]]
|
96
|
+
when :json
|
97
|
+
params[element[1]]= JSON.parse(params[element[1]])
|
98
|
+
|
99
|
+
when :yaml
|
100
|
+
params[element[1]]= YAML.parse(params[element[1]])
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
params[element[1]]
|
105
|
+
end
|
106
|
+
}-[nil])
|
107
|
+
|
108
|
+
method_obj.call(*method_arguments)
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.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-02-
|
11
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: procemon
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- lib/grape-dsl/dsl.rb
|
61
61
|
- lib/grape-dsl/endpoint.rb
|
62
62
|
- lib/grape-dsl/headers.rb
|
63
|
+
- lib/grape-dsl/mounter.rb
|
63
64
|
homepage: https://github.com/adamluzsi/grape-dsl
|
64
65
|
licenses:
|
65
66
|
- MIT
|