calamum 1.0.2 → 1.1.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.
- data/bin/calamum +3 -3
- data/lib/calamum.rb +13 -7
- data/lib/calamum/config.rb +15 -7
- data/lib/calamum/doc_generator.rb +20 -49
- data/lib/calamum/doc_parser.rb +49 -0
- data/lib/calamum/helpers.rb +31 -0
- data/lib/calamum/resource.rb +47 -0
- data/lib/calamum/runner.rb +82 -57
- data/lib/calamum/templates/bootstrap/assets/stylesheets/main.css +15 -0
- data/lib/calamum/templates/bootstrap/index.html.erb +12 -8
- data/lib/calamum/templates/twitter/assets/css/main.css +1055 -0
- data/lib/calamum/templates/twitter/assets/javascripts/bootstrap.js +2276 -0
- data/lib/calamum/templates/twitter/assets/javascripts/jquery-1.7.2.min.js +4 -0
- data/lib/calamum/templates/twitter/index.html.erb +63 -0
- data/lib/calamum/templates/twitter/view.html.erb +94 -0
- data/lib/calamum/version.rb +1 -1
- metadata +19 -64
- data/.gitignore +0 -18
- data/Gemfile +0 -5
- data/Gemfile.lock +0 -44
- data/LICENSE.txt +0 -7
- data/README.md +0 -39
- data/Rakefile +0 -0
- data/calamum.gemspec +0 -25
- data/lib/calamum/calamum_helper.rb +0 -10
- data/lib/calamum/definition_parser.rb +0 -75
- data/lib/calamum/request.rb +0 -40
- data/sample/sample.yml +0 -83
- data/spec/data/my_definition.yml +0 -41
- data/spec/definition_parser_spec.rb +0 -17
- data/spec/request_spec.rb +0 -13
- data/spec/spec_helper.rb +0 -3
@@ -1,75 +0,0 @@
|
|
1
|
-
|
2
|
-
class Calamum::DefinitionParser
|
3
|
-
attr_accessor :definition, :resources
|
4
|
-
|
5
|
-
def initialize(definition_yaml)
|
6
|
-
@definition = definition_yaml
|
7
|
-
@resources = Hash.new
|
8
|
-
end
|
9
|
-
|
10
|
-
def get_resources
|
11
|
-
Calamum::Config[:sort]? @definition['resources'].sort : @definition['resources']
|
12
|
-
end
|
13
|
-
|
14
|
-
def get_name
|
15
|
-
@definition['name']
|
16
|
-
end
|
17
|
-
|
18
|
-
def get_url
|
19
|
-
@definition['url']
|
20
|
-
end
|
21
|
-
|
22
|
-
def get_description
|
23
|
-
@definition['description']
|
24
|
-
end
|
25
|
-
|
26
|
-
def get_resources_names
|
27
|
-
@definition['resources'].inject([]){|resources, (key, content)| resources << key}
|
28
|
-
end
|
29
|
-
|
30
|
-
def load_requests
|
31
|
-
self.get_resources.each do |resource, requests|
|
32
|
-
@resources[resource] = []
|
33
|
-
index = 0
|
34
|
-
requests.each do |request|
|
35
|
-
req = initialize_request(request)
|
36
|
-
unless req.nil?
|
37
|
-
@resources[resource][index]= req
|
38
|
-
index += 1
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
@resources
|
43
|
-
end
|
44
|
-
|
45
|
-
def initialize_request(request)
|
46
|
-
req = Calamum::Request.new({
|
47
|
-
:uri => request['uri'],
|
48
|
-
:action => request['action'],
|
49
|
-
:params => request['params'],
|
50
|
-
:description => request['description'],
|
51
|
-
:headers => request['headers'],
|
52
|
-
:response => request['response'],
|
53
|
-
})
|
54
|
-
if req.errors.empty?
|
55
|
-
puts_info "Request #{request['action']}: #{request['uri']} loading success"
|
56
|
-
req
|
57
|
-
else
|
58
|
-
puts_error "Request #{request['action']}: #{request['uri']} not valid: #{req.errors}"
|
59
|
-
nil
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def get_resource_uris(name)
|
64
|
-
@resources[name]
|
65
|
-
end
|
66
|
-
|
67
|
-
def find_resource_uri_by_label(resource, label)
|
68
|
-
@resources.select{|r| r['label']==label}.first['uri']
|
69
|
-
end
|
70
|
-
|
71
|
-
def find_resource_action_by_label(resource, label)
|
72
|
-
@resources.select{|r| r['label']==label}.first['action']
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
data/lib/calamum/request.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
class Calamum::Request
|
2
|
-
include ActiveModel::Validations
|
3
|
-
|
4
|
-
attr_reader :errors
|
5
|
-
attr_accessor :uri, :action, :params, :description, :headers, :response
|
6
|
-
ACTIONS= %{GET POST PUT DELETE}
|
7
|
-
|
8
|
-
validates :uri, :action, :presence => true
|
9
|
-
# validates :uri, :uniqueness => true
|
10
|
-
validates :action, :inclusion => { :in => ACTIONS, :message => "is not included in [#{ACTIONS}]"}
|
11
|
-
|
12
|
-
def initialize(attrs)
|
13
|
-
@uri= attrs[:uri]
|
14
|
-
@action= attrs[:action].upcase
|
15
|
-
@params= attrs[:params] || {}
|
16
|
-
@headers = attrs[:headers] || {}
|
17
|
-
@response = attrs[:response] || ''
|
18
|
-
@description = attrs[:description]
|
19
|
-
@errors = ActiveModel::Errors.new(self)
|
20
|
-
self.valid?
|
21
|
-
end
|
22
|
-
|
23
|
-
def action_label
|
24
|
-
case @action
|
25
|
-
when 'GET'
|
26
|
-
'label-info'
|
27
|
-
when 'POST'
|
28
|
-
'label-success'
|
29
|
-
when 'PUT'
|
30
|
-
'label-warning'
|
31
|
-
when 'DELETE'
|
32
|
-
'label-important'
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def to_s
|
37
|
-
"#{action}: #{uri}"
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
data/sample/sample.yml
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
name: 'Calamum'
|
2
|
-
url: 'http://calamum-sample:3000/api'
|
3
|
-
description: 'Calamum is a simple ruby build program to generate a REST API documentation from a YAML file definition'
|
4
|
-
resources:
|
5
|
-
user:
|
6
|
-
-
|
7
|
-
uri: '/users'
|
8
|
-
action: 'get'
|
9
|
-
headers:
|
10
|
-
content_type: 'application/json'
|
11
|
-
description: 'Get the users list'
|
12
|
-
response: '{"users":[{"id":"12354","name":"test", "mail":"test@test.com"}, {"id":"123789","name":"test2", "mail":"test@test.com"}}'
|
13
|
-
-
|
14
|
-
uri: '/users/:id'
|
15
|
-
action: 'get'
|
16
|
-
headers:
|
17
|
-
content_type: 'application/json'
|
18
|
-
content_language: 'en-US'
|
19
|
-
params:
|
20
|
-
id:
|
21
|
-
type: 'String'
|
22
|
-
description: 'User id'
|
23
|
-
required: true
|
24
|
-
response: '{"user":{"name":"test", "mail":"test@test.com"}}'
|
25
|
-
|
26
|
-
-
|
27
|
-
uri: '/users'
|
28
|
-
action: 'post'
|
29
|
-
description: 'Create a new user'
|
30
|
-
headers:
|
31
|
-
content_type: 'application/json'
|
32
|
-
content_language: 'en-US'
|
33
|
-
params:
|
34
|
-
id:
|
35
|
-
type: 'String'
|
36
|
-
description: 'User id'
|
37
|
-
required: true
|
38
|
-
name:
|
39
|
-
type: 'String'
|
40
|
-
description: 'User name'
|
41
|
-
required: false
|
42
|
-
email:
|
43
|
-
type: 'String'
|
44
|
-
description: 'User email'
|
45
|
-
required: true
|
46
|
-
-
|
47
|
-
uri: '/users/:id'
|
48
|
-
action: 'put'
|
49
|
-
description: 'Update the user'
|
50
|
-
headers:
|
51
|
-
content_type: 'application/json'
|
52
|
-
content_language: 'en-US'
|
53
|
-
params:
|
54
|
-
id:
|
55
|
-
type: 'String'
|
56
|
-
description: 'User id'
|
57
|
-
required: true
|
58
|
-
name:
|
59
|
-
type: 'String'
|
60
|
-
description: 'User name'
|
61
|
-
required: false
|
62
|
-
email:
|
63
|
-
type: 'String'
|
64
|
-
description: 'User email'
|
65
|
-
required: true
|
66
|
-
-
|
67
|
-
uri: '/users/:id'
|
68
|
-
action: 'delete'
|
69
|
-
description: 'Delete the user'
|
70
|
-
headers:
|
71
|
-
content_type: 'application/json'
|
72
|
-
content_language: 'en-US'
|
73
|
-
params:
|
74
|
-
id:
|
75
|
-
type: 'String'
|
76
|
-
description: 'User id'
|
77
|
-
required: true
|
78
|
-
group:
|
79
|
-
-
|
80
|
-
uri: '/groups'
|
81
|
-
action: 'get'
|
82
|
-
content_type: 'application/json'
|
83
|
-
description: 'Get the list og groups'
|
data/spec/data/my_definition.yml
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
name: 'Drive'
|
2
|
-
url: 'http://localhost:3000/api'
|
3
|
-
resources:
|
4
|
-
user:
|
5
|
-
-
|
6
|
-
uri: '/users'
|
7
|
-
action: 'get'
|
8
|
-
description: 'Get the list of the users'
|
9
|
-
-
|
10
|
-
uri: '/users/:id'
|
11
|
-
action: 'get'
|
12
|
-
headers:
|
13
|
-
content_type: 'application/json'
|
14
|
-
content_language: 'en-US'
|
15
|
-
params:
|
16
|
-
id:
|
17
|
-
type: 'String'
|
18
|
-
-
|
19
|
-
uri: '/users/:id'
|
20
|
-
action: 'put'
|
21
|
-
headers:
|
22
|
-
content_type: 'application/json'
|
23
|
-
content_language: 'en-US'
|
24
|
-
params:
|
25
|
-
id:
|
26
|
-
type: 'String'
|
27
|
-
description: 'User id'
|
28
|
-
required: true
|
29
|
-
name:
|
30
|
-
type: 'String'
|
31
|
-
description: 'User name'
|
32
|
-
required: false
|
33
|
-
email:
|
34
|
-
type: 'String'
|
35
|
-
description: 'User email'
|
36
|
-
required: true
|
37
|
-
group:
|
38
|
-
-
|
39
|
-
uri: '/groups'
|
40
|
-
action: 'get'
|
41
|
-
description: 'Get the list og groups'
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Calamum::DefinitionParser do
|
4
|
-
before do
|
5
|
-
definition = YAML.load(File.open("spec/data/my_definition.yml"))
|
6
|
-
@api_definition = Calamum::DefinitionParser.new(definition)
|
7
|
-
@api_definition.load_requests
|
8
|
-
end
|
9
|
-
|
10
|
-
specify{@api_definition.get_resources_names.should == ['user', 'group']}
|
11
|
-
specify{@api_definition.get_resource_uris('user').size.should == 3}
|
12
|
-
specify{@api_definition.resources['user'].size.should == 3}
|
13
|
-
specify{@api_definition.resources['user'][0].errors.should be_empty}
|
14
|
-
specify{@api_definition.resources['user'][0].action.should == 'GET'}
|
15
|
-
specify{@api_definition.resources['user'][0].uri.should == '/users'}
|
16
|
-
specify{@api_definition.resources['user'][1].headers.should_not be_empty}
|
17
|
-
end
|
data/spec/request_spec.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Calamum::Request do
|
4
|
-
before do
|
5
|
-
@attrs = {uri: '/users', action: 'get', params: {id:{type: 'String'}}, content_type: 'application/json'}
|
6
|
-
end
|
7
|
-
|
8
|
-
specify{Calamum::Request.new(@attrs).should be_true}
|
9
|
-
specify{Calamum::Request.new(@attrs.merge(uri:'')).errors[:uri].should == ["can't be blank"]}
|
10
|
-
specify{Calamum::Request.new(@attrs.merge(action:'')).errors[:action].should == ["can't be blank"]}
|
11
|
-
specify{Calamum::Request.new(@attrs.merge(action:'foo')).errors[:action].should == ["is not included in [GET POST PUT DELETE]"]}
|
12
|
-
|
13
|
-
end
|
data/spec/spec_helper.rb
DELETED