cuba-api 0.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/MIT-LICENSE +20 -0
- data/README.md +82 -0
- data/lib/cuba_api/accept_content.rb +71 -0
- data/lib/cuba_api/accept_content.rb~ +176 -0
- data/lib/cuba_api/config.rb +41 -0
- data/lib/cuba_api/config.rb~ +28 -0
- data/lib/cuba_api/current_user.rb +55 -0
- data/lib/cuba_api/current_user.rb~ +176 -0
- data/lib/cuba_api/guard.rb +37 -0
- data/lib/cuba_api/guard.rb~ +176 -0
- data/lib/cuba_api/serializer.rb +47 -0
- data/lib/cuba_api/serializer.rb~ +176 -0
- data/lib/cuba_api/write_aspect.rb +57 -0
- data/lib/cuba_api/write_aspect.rb~ +39 -0
- data/lib/cuba_api/write_aspects.rb~ +176 -0
- data/lib/cuba_api.rb +40 -0
- data/lib/cuba_api.rb~ +28 -0
- data/spec/accept_spec.rb +57 -0
- data/spec/aspects_spec.rb +42 -0
- data/spec/config_spec.rb +34 -0
- data/spec/current_user_spec.rb +43 -0
- data/spec/serializer_spec.rb +42 -0
- metadata +152 -0
data/lib/cuba_api.rb~
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- Coding: utf-8 -*-
|
2
|
+
require "cuba"
|
3
|
+
|
4
|
+
require 'cuba_api/write_aspect'
|
5
|
+
require 'cuba_api/serializer'
|
6
|
+
require 'cuba_api/current_user'
|
7
|
+
require 'cuba_api/guard'
|
8
|
+
require 'cuba_api/accept_content'
|
9
|
+
|
10
|
+
class CubaAPI < Cuba
|
11
|
+
def self.map
|
12
|
+
@map ||= {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.[]( key )
|
16
|
+
map[ key ] || settings[ key ] || (superclass == Cuba ? Cuba.settings[ key ] : superclass[ key ])
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.[]=( key, value )
|
20
|
+
map[ key ] = value
|
21
|
+
end
|
22
|
+
|
23
|
+
plugin CubaApi::WriteAspect
|
24
|
+
plugin CubaApi::Serializer
|
25
|
+
plugin CubaApi::AcceptContent
|
26
|
+
plugin CubaApi::CurrentUser
|
27
|
+
plugin CubaApi::Guard
|
28
|
+
end
|
data/spec/accept_spec.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cuba_api/write_aspect'
|
3
|
+
require 'cuba_api/accept_content'
|
4
|
+
|
5
|
+
class B
|
6
|
+
def method_missing( method, *args )
|
7
|
+
method.to_s
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe CubaApi::AcceptContent do
|
12
|
+
|
13
|
+
before do
|
14
|
+
Cuba.reset!
|
15
|
+
Cuba.plugin CubaApi::Config
|
16
|
+
Cuba[ :aspects ] = []
|
17
|
+
Cuba.plugin CubaApi::WriteAspect
|
18
|
+
Cuba.plugin CubaApi::AcceptContent
|
19
|
+
Cuba.accept :yaml
|
20
|
+
Cuba.define do
|
21
|
+
on default do
|
22
|
+
write B.new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'creates yaml' do
|
28
|
+
_, _, resp = Cuba.call({"SCRIPT_NAME" => "/bla.yaml"})
|
29
|
+
resp[ 0 ] = resp[ 0 ].sub(/.*!/, "---!").sub( /\n\n/, "\n")
|
30
|
+
resp.join.must.eq "---!ruby/object:B {}\n"
|
31
|
+
|
32
|
+
_, _, resp = Cuba.call({"HTTP_ACCEPT" => "application/x-yaml"})
|
33
|
+
resp[ 0 ] = resp[ 0 ].sub(/.*!/, "---!").sub( /\n\n/, "\n")
|
34
|
+
resp.join.must.eq "---!ruby/object:B {}\n"
|
35
|
+
|
36
|
+
_, _, resp = Cuba.call({"HTTP_ACCEPT" => "text/yaml"})
|
37
|
+
resp[ 0 ] = resp[ 0 ].sub(/.*!/, "---!").sub( /\n\n/, "\n")
|
38
|
+
resp.join.must.eq "---!ruby/object:B {}\n"
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'gives not found for not configured xml' do
|
42
|
+
status, _, _ = Cuba.call({"SCRIPT_NAME" => "/bla.xml"})
|
43
|
+
status.must.eq 404
|
44
|
+
|
45
|
+
status, _, _ = Cuba.call({"HTTP_ACCEPT" => "application/xml"})
|
46
|
+
status.must.eq 404
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'gives preference to script extension' do
|
50
|
+
_, _, resp = Cuba.call({"SCRIPT_NAME" => "/bla.yaml", "HTTP_ACCEPT" => "application/xml"})
|
51
|
+
resp[ 0 ] = resp[ 0 ].sub(/.*!/, "---!").sub( /\n\n/, "\n")
|
52
|
+
resp.join.must.eq "---!ruby/object:B {}\n"
|
53
|
+
|
54
|
+
status, _, _ = Cuba.call({"SCRIPT_NAME" => "/bla.xml", "HTTP_ACCEPT" => "application/x-yaml"})
|
55
|
+
status.must.eq 404
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cuba_api/config'
|
3
|
+
require 'cuba_api/write_aspect'
|
4
|
+
|
5
|
+
module Plugin
|
6
|
+
def one( obj, opts )
|
7
|
+
obj + "-one"
|
8
|
+
end
|
9
|
+
def two( obj, opts )
|
10
|
+
obj + "-two"
|
11
|
+
end
|
12
|
+
def three( obj, opts )
|
13
|
+
obj + "-three"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe CubaApi::WriteAspect do
|
18
|
+
|
19
|
+
before do
|
20
|
+
Cuba.reset!
|
21
|
+
Cuba[ :aspects ] = []
|
22
|
+
Cuba.plugin CubaApi::Config
|
23
|
+
Cuba.plugin CubaApi::WriteAspect
|
24
|
+
Cuba.plugin Plugin
|
25
|
+
Cuba.append_aspect :one
|
26
|
+
Cuba.prepend_aspect :two
|
27
|
+
Cuba.append_aspect :three
|
28
|
+
Cuba.define do
|
29
|
+
on true do
|
30
|
+
write 'start'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
after { Cuba.config.clear }
|
36
|
+
|
37
|
+
it 'should execute aspects in the right order' do
|
38
|
+
_, _, resp = Cuba.call({})
|
39
|
+
|
40
|
+
resp.join.must.eq "start-two-one-three"
|
41
|
+
end
|
42
|
+
end
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cuba_api/config'
|
3
|
+
|
4
|
+
describe CubaApi::Config do
|
5
|
+
|
6
|
+
before do
|
7
|
+
Cuba.reset!
|
8
|
+
Cuba.plugin CubaApi::Config
|
9
|
+
Cuba[ :main ] = Cuba.method( :define )
|
10
|
+
Cuba[ :name ] = :root
|
11
|
+
class Other < Cuba; end
|
12
|
+
end
|
13
|
+
|
14
|
+
after { Cuba.config.clear }
|
15
|
+
|
16
|
+
it 'should overwrite super-cuba' do
|
17
|
+
Other[ :main ] = :other
|
18
|
+
|
19
|
+
Cuba[ :main ].class.must.eq Method
|
20
|
+
Other[ :main ].must.eq :other
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should inherit super-cuba on new attributes' do
|
24
|
+
Cuba[ :more ] = :more
|
25
|
+
|
26
|
+
Cuba[ :more ].must.eq :more
|
27
|
+
Other[ :more ].must.eq :more
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should see config from super-cuba' do
|
31
|
+
Cuba[ :name ].must.eq :root
|
32
|
+
Other[ :name ].must.eq :root
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cuba_api/current_user'
|
3
|
+
|
4
|
+
class SessionManager
|
5
|
+
def to_session( user )
|
6
|
+
@u ||= user
|
7
|
+
end
|
8
|
+
def from_session( data )
|
9
|
+
u = @u.dup unless @u.nil?
|
10
|
+
def u.login; self;end
|
11
|
+
u
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe CubaApi::CurrentUser do
|
16
|
+
|
17
|
+
before do
|
18
|
+
Cuba.reset!
|
19
|
+
Cuba.plugin CubaApi::CurrentUser
|
20
|
+
Cuba.use Rack::Session::Cookie
|
21
|
+
Cuba[ :sessions ] = SessionManager.new
|
22
|
+
Cuba.define do
|
23
|
+
on authenticated? do
|
24
|
+
res.write current_user
|
25
|
+
end
|
26
|
+
on default do
|
27
|
+
name = current_user_name
|
28
|
+
current_user "user1"
|
29
|
+
res.write "logged in - #{name}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should authenticate' do
|
35
|
+
_, _, resp = Cuba.call({})
|
36
|
+
|
37
|
+
resp.join.must.eq "logged in - ???"
|
38
|
+
|
39
|
+
_, _, resp = Cuba.call({})
|
40
|
+
|
41
|
+
resp.join.must.eq "user1"
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'cuba_api/write_aspect'
|
3
|
+
require 'cuba_api/serializer'
|
4
|
+
require 'yaml'
|
5
|
+
require 'ixtlan/babel/serializer'
|
6
|
+
|
7
|
+
class A
|
8
|
+
def attributes
|
9
|
+
{ :name => 'me and the corner' }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
class ASerializer < Ixtlan::Babel::Serializer
|
13
|
+
end
|
14
|
+
module ToYaml
|
15
|
+
def to_yaml( obj, opts )
|
16
|
+
obj.to_yaml
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe CubaApi::Serializer do
|
21
|
+
|
22
|
+
before do
|
23
|
+
Cuba.reset!
|
24
|
+
Cuba[ :aspects ] = []
|
25
|
+
Cuba.plugin CubaApi::WriteAspect
|
26
|
+
Cuba.plugin CubaApi::Serializer
|
27
|
+
Cuba.plugin ToYaml
|
28
|
+
Cuba.append_aspect :to_yaml
|
29
|
+
Cuba.define do
|
30
|
+
on default do
|
31
|
+
write A.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should write out yaml' do
|
37
|
+
_, _, resp = Cuba.call({})
|
38
|
+
|
39
|
+
resp[ 0 ] = resp[ 0 ].sub(/.*\n/, "---\n")
|
40
|
+
resp.must_equal ["---\nname: me and the corner\n"]
|
41
|
+
end
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cuba-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Christian Meier
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: cuba
|
16
|
+
requirement: &18852600 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.1'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *18852600
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: ixtlan-babel
|
27
|
+
requirement: &18850840 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.2.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *18850840
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: copyright-header
|
38
|
+
requirement: &18849320 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.0.7
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *18849320
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: minitest
|
49
|
+
requirement: &18845760 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 4.3.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *18845760
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: mustard
|
60
|
+
requirement: &18844760 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0.1'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *18844760
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: &18843280 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 10.0.3
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *18843280
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: backports
|
82
|
+
requirement: &18792320 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 2.6.3
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *18792320
|
91
|
+
description: add content negogiation, serialization of objects (their attributes map),
|
92
|
+
and some helpers for authentication + authorization to the cuba framework
|
93
|
+
email:
|
94
|
+
- m.kristian@web.de
|
95
|
+
executables: []
|
96
|
+
extensions: []
|
97
|
+
extra_rdoc_files: []
|
98
|
+
files:
|
99
|
+
- MIT-LICENSE
|
100
|
+
- README.md
|
101
|
+
- lib/cuba_api/write_aspects.rb~
|
102
|
+
- lib/cuba_api/guard.rb
|
103
|
+
- lib/cuba_api/serializer.rb~
|
104
|
+
- lib/cuba_api/accept_content.rb~
|
105
|
+
- lib/cuba_api/current_user.rb
|
106
|
+
- lib/cuba_api/write_aspect.rb
|
107
|
+
- lib/cuba_api/write_aspect.rb~
|
108
|
+
- lib/cuba_api/current_user.rb~
|
109
|
+
- lib/cuba_api/config.rb
|
110
|
+
- lib/cuba_api/guard.rb~
|
111
|
+
- lib/cuba_api/accept_content.rb
|
112
|
+
- lib/cuba_api/config.rb~
|
113
|
+
- lib/cuba_api/serializer.rb
|
114
|
+
- lib/cuba_api.rb
|
115
|
+
- lib/cuba_api.rb~
|
116
|
+
- spec/serializer_spec.rb
|
117
|
+
- spec/aspects_spec.rb
|
118
|
+
- spec/config_spec.rb
|
119
|
+
- spec/accept_spec.rb
|
120
|
+
- spec/current_user_spec.rb
|
121
|
+
homepage: http://github.com/mkristian/cuba-api
|
122
|
+
licenses:
|
123
|
+
- MIT
|
124
|
+
post_install_message:
|
125
|
+
rdoc_options: []
|
126
|
+
require_paths:
|
127
|
+
- lib
|
128
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ! '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 1.8.11
|
143
|
+
signing_key:
|
144
|
+
specification_version: 3
|
145
|
+
summary: set of plugins for using cuba as API server
|
146
|
+
test_files:
|
147
|
+
- spec/serializer_spec.rb
|
148
|
+
- spec/aspects_spec.rb
|
149
|
+
- spec/config_spec.rb
|
150
|
+
- spec/accept_spec.rb
|
151
|
+
- spec/current_user_spec.rb
|
152
|
+
has_rdoc:
|