ananke 1.1.3 → 2.0.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/lib/sinatra/ananke.rb +181 -0
- data/lib/sinatra/version.rb +3 -0
- metadata +28 -73
- data/Gemfile +0 -15
- data/Rakefile +0 -65
- data/lib/ananke/helpers.rb +0 -85
- data/lib/ananke/linking.rb +0 -35
- data/lib/ananke/routing.rb +0 -159
- data/lib/ananke/serialize.rb +0 -53
- data/lib/ananke/settings.rb +0 -28
- data/lib/ananke/validation.rb +0 -37
- data/lib/ananke.rb +0 -52
- data/lib/version.rb +0 -3
- data/spec/call_chain.rb +0 -23
- data/spec/cov_adapter.rb +0 -9
- data/spec/dumping.rb +0 -15
- data/spec/lib/ananke_spec.rb +0 -178
- data/spec/lib/error_spec.rb +0 -73
- data/spec/lib/json_spec.rb +0 -51
- data/spec/lib/link_to_spec.rb +0 -31
- data/spec/lib/linked_spec.rb +0 -107
- data/spec/lib/out_spec.rb +0 -20
- data/spec/lib/route_for_spec.rb +0 -97
- data/spec/lib/serialize_spec.rb +0 -65
- data/spec/lib/validation_spec.rb +0 -91
- data/spec/nice_formatter.rb +0 -346
- data/spec/spec_helper.rb +0 -27
data/spec/lib/link_to_spec.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
require './lib/ananke'
|
3
|
-
|
4
|
-
describe 'Link-To Resource' do
|
5
|
-
include Rack::Test::Methods
|
6
|
-
include Ananke
|
7
|
-
|
8
|
-
def app
|
9
|
-
Sinatra::Base
|
10
|
-
end
|
11
|
-
|
12
|
-
it """
|
13
|
-
Should be able to Output link to link_to
|
14
|
-
""" do
|
15
|
-
module Repository
|
16
|
-
module Link_to
|
17
|
-
def self.one(id)
|
18
|
-
{:link_id => id}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
route :link_to do
|
23
|
-
id :link_id
|
24
|
-
link_to :to
|
25
|
-
end
|
26
|
-
|
27
|
-
get "/link_to/1"
|
28
|
-
check_status(200)
|
29
|
-
last_response.body.should == '{"link_id":"1","links":[{"rel":"self","uri":"/link_to/1"},{"rel":"to","uri":"/to/link_to/1"}]}'
|
30
|
-
end
|
31
|
-
end
|
data/spec/lib/linked_spec.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
require './lib/ananke'
|
3
|
-
|
4
|
-
describe 'Resource' do
|
5
|
-
include Rack::Test::Methods
|
6
|
-
include Ananke
|
7
|
-
|
8
|
-
def app
|
9
|
-
Sinatra::Base
|
10
|
-
end
|
11
|
-
|
12
|
-
it """
|
13
|
-
Should be able to Output link to Self and Call that link
|
14
|
-
""" do
|
15
|
-
module Repository
|
16
|
-
module Self
|
17
|
-
def self.one(id) end
|
18
|
-
def self.add(data)
|
19
|
-
{:user_id => 1}
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
route :self do
|
24
|
-
id :user_id
|
25
|
-
end
|
26
|
-
|
27
|
-
post "/self", body={:user_id => 1, :username => '1234'}
|
28
|
-
check_status(201)
|
29
|
-
last_response.body.should == '{"user_id":1,"links":[{"rel":"self","uri":"/self/1"}]}'
|
30
|
-
|
31
|
-
hash = JSON.parse(last_response.body)
|
32
|
-
uri = hash['links'].map{|l| l['uri'] if l['rel'] == 'self'}[0]
|
33
|
-
get uri
|
34
|
-
check_status(200)
|
35
|
-
end
|
36
|
-
|
37
|
-
module Repository
|
38
|
-
module Linked
|
39
|
-
def self.one(id)
|
40
|
-
{:user_id => 1}
|
41
|
-
end
|
42
|
-
def self.all
|
43
|
-
[{:user_id => 1}, {:user_id => 2}]
|
44
|
-
end
|
45
|
-
def self.add(data)
|
46
|
-
{:user_id => 1}
|
47
|
-
end
|
48
|
-
def self.edit(id, data)
|
49
|
-
{:user_id => 1}
|
50
|
-
end
|
51
|
-
def self.line_id_list(user_id)
|
52
|
-
[1,2]
|
53
|
-
end
|
54
|
-
end
|
55
|
-
module Line
|
56
|
-
def self.one(id) end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
route :linked do
|
60
|
-
id :user_id
|
61
|
-
linked :line
|
62
|
-
end
|
63
|
-
route :line do
|
64
|
-
id :line_id
|
65
|
-
end
|
66
|
-
|
67
|
-
it """
|
68
|
-
Should be able to Output links to linkeds and Call those links
|
69
|
-
""" do
|
70
|
-
post "/linked", body={:user_id => 1, :username => '1234'}
|
71
|
-
check_status(201)
|
72
|
-
last_response.body.should == '{"user_id":1,"links":[{"rel":"self","uri":"/linked/1"},{"rel":"line","uri":"/line/1"},{"rel":"line","uri":"/line/2"}]}'
|
73
|
-
|
74
|
-
hash = JSON.parse(last_response.body)
|
75
|
-
hash['links'].each do |l|
|
76
|
-
get l['uri']
|
77
|
-
check_status(200)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
it "Should return links on Get One" do
|
82
|
-
get "/linked/1"
|
83
|
-
check_status(200)
|
84
|
-
last_response.body.should == '{"user_id":1,"links":[{"rel":"self","uri":"/linked/1"},{"rel":"line","uri":"/line/1"},{"rel":"line","uri":"/line/2"}]}'
|
85
|
-
end
|
86
|
-
|
87
|
-
it """
|
88
|
-
Should not inject links where it cannot find Repository Id lookup method
|
89
|
-
""" do
|
90
|
-
module Repository
|
91
|
-
module Linked_fail
|
92
|
-
def self.one(id) end
|
93
|
-
def self.add(data)
|
94
|
-
{:user_id => 1}
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
route :linked_fail do
|
99
|
-
id :user_id
|
100
|
-
linked :line
|
101
|
-
end
|
102
|
-
|
103
|
-
post "/linked_fail", body={:user_id => 1, :username => '1234'}
|
104
|
-
check_status(201)
|
105
|
-
last_response.body.should == '{"user_id":1,"links":[{"rel":"self","uri":"/linked_fail/1"}]}'
|
106
|
-
end
|
107
|
-
end
|
data/spec/lib/out_spec.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
require './lib/ananke'
|
3
|
-
|
4
|
-
describe 'Ananke Console Output' do
|
5
|
-
include Ananke
|
6
|
-
|
7
|
-
it """
|
8
|
-
Should be able to output in different Colors
|
9
|
-
""" do
|
10
|
-
output = Ananke.settings[:output]
|
11
|
-
Ananke.set :output, true
|
12
|
-
|
13
|
-
Ananke.send(:out, :info, 'test').should == 'test'.blue
|
14
|
-
Ananke.send(:out, :error, 'test').should == 'test'.red
|
15
|
-
Ananke.send(:out, :warning, 'test').should == 'test'.yellow
|
16
|
-
Ananke.send(:out, :some_other, 'test').should == nil
|
17
|
-
|
18
|
-
Ananke.set :output, output
|
19
|
-
end
|
20
|
-
end
|
data/spec/lib/route_for_spec.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
require './lib/ananke'
|
3
|
-
|
4
|
-
describe 'Resource Route-For' do
|
5
|
-
include Rack::Test::Methods
|
6
|
-
include Ananke
|
7
|
-
|
8
|
-
def app
|
9
|
-
Sinatra::Base
|
10
|
-
end
|
11
|
-
|
12
|
-
it """
|
13
|
-
should be able to accept route_for Registrations
|
14
|
-
""" do
|
15
|
-
module Repository
|
16
|
-
module Route_for
|
17
|
-
def self.custom(id)
|
18
|
-
{:route_for_id => id, :content => 'Test'}
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
route :route_for do
|
23
|
-
id :route_for_id
|
24
|
-
route_for :custom
|
25
|
-
end
|
26
|
-
|
27
|
-
get "/route_for/custom/1"
|
28
|
-
check_status(200)
|
29
|
-
last_response.body.should == '{"items":[{"route_for_id":"1","content":"Test","links":[{"rel":"self","uri":"/route_for/1"}]}]}'
|
30
|
-
end
|
31
|
-
|
32
|
-
it """
|
33
|
-
should be able to accept route_for Registrations with POST and multiple input parameters
|
34
|
-
""" do
|
35
|
-
module Repository
|
36
|
-
module Route_for
|
37
|
-
def self.multi(id, name)
|
38
|
-
{:route_for_id => id, :content => 'Test'}
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
route :route_for do
|
43
|
-
id :route_for_id
|
44
|
-
route_for :multi, :post
|
45
|
-
end
|
46
|
-
|
47
|
-
post "/route_for/multi", body={:id => 1, :name => 'some name'}
|
48
|
-
check_status(200)
|
49
|
-
last_response.body.should == '{"items":[{"route_for_id":"1","content":"Test","links":[{"rel":"self","uri":"/route_for/1"}]}]}'
|
50
|
-
end
|
51
|
-
|
52
|
-
it """
|
53
|
-
should be able to register multiple route_for's in one declaration
|
54
|
-
""" do
|
55
|
-
module Repository
|
56
|
-
module Route_for
|
57
|
-
def self.get_1(id)
|
58
|
-
end
|
59
|
-
def self.get_2(id)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
route :route_for do
|
64
|
-
id :route_for_id
|
65
|
-
route_for :get_1
|
66
|
-
route_for :get_2
|
67
|
-
end
|
68
|
-
|
69
|
-
get "/route_for/get_1/1"
|
70
|
-
check_status(200)
|
71
|
-
get "/route_for/get_2/2"
|
72
|
-
check_status(200)
|
73
|
-
end
|
74
|
-
|
75
|
-
it """
|
76
|
-
should be able to register multiple route_for's with POST in one declaration
|
77
|
-
""" do
|
78
|
-
module Repository
|
79
|
-
module Route_for
|
80
|
-
def self.post_1(id)
|
81
|
-
end
|
82
|
-
def self.post_2(id)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
route :route_for do
|
87
|
-
id :route_for_id
|
88
|
-
route_for :post_1, :post
|
89
|
-
route_for :post_2, :post
|
90
|
-
end
|
91
|
-
|
92
|
-
post "/route_for/post_1/1"
|
93
|
-
check_status(200)
|
94
|
-
post "/route_for/post_2/2"
|
95
|
-
check_status(200)
|
96
|
-
end
|
97
|
-
end
|
data/spec/lib/serialize_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
require './lib/ananke/serialize'
|
3
|
-
|
4
|
-
class Simple
|
5
|
-
attr_accessor :name, :surname
|
6
|
-
def initialize(name, surname)
|
7
|
-
@name = name
|
8
|
-
@surname = surname
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class SimplePlus
|
13
|
-
attr_accessor :name, :surname, :cars
|
14
|
-
def initialize(name, surname, cars)
|
15
|
-
@name = name
|
16
|
-
@surname = surname
|
17
|
-
@cars = cars
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class Nested
|
22
|
-
attr_accessor :id, :simple_plus
|
23
|
-
def initialize(id, simple_plus)
|
24
|
-
@id = id
|
25
|
-
@simple_plus = simple_plus
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe Serialize, '#self.to_hash' do
|
30
|
-
|
31
|
-
it "should serialize a simple class to hash form" do
|
32
|
-
obj = Simple.new('test', 'test')
|
33
|
-
Serialize.to_h(obj).should == {"name"=>"test", "surname" => "test"}
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should serialize a simple class with a hash to hash form" do
|
37
|
-
obj = SimplePlus.new('test', 'test', {:one => 1, :two => 2})
|
38
|
-
Serialize.to_h(obj).should == {"name" => "test", "surname" => "test", "cars" => {:one => 1, :two => 2}}
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should serialize a nested class to hash form" do
|
42
|
-
obj = Nested.new(1, SimplePlus.new('test', 'test', {:one => 1, :two => 2}))
|
43
|
-
Serialize.to_h(obj).should == {"id" => 1, "simple_plus" => {"name" => "test", "surname" => "test", "cars" => {:one => 1, :two => 2}}}
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
describe Serialize, '#self.to_json' do
|
49
|
-
|
50
|
-
it "should serialize a simple class to json" do
|
51
|
-
obj = Simple.new('test', 'test')
|
52
|
-
Serialize.to_j(obj).should == '{"name":"test","surname":"test"}'
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should serialize a simple class with a hash to json" do
|
56
|
-
obj = SimplePlus.new('test', 'test', {:one => 1, :two => 2})
|
57
|
-
Serialize.to_j(obj).should == '{"name":"test","surname":"test","cars":{"one":1,"two":2}}'
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should serialize a nested class to json" do
|
61
|
-
obj = Nested.new(1, SimplePlus.new('test', 'test', {:one => 1, :two => 2}))
|
62
|
-
Serialize.to_j(obj).should == '{"id":1,"simple_plus":{"name":"test","surname":"test","cars":{"one":1,"two":2}}}'
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
data/spec/lib/validation_spec.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
require './lib/ananke'
|
3
|
-
|
4
|
-
describe 'Resource' do
|
5
|
-
include Rack::Test::Methods
|
6
|
-
include Ananke
|
7
|
-
|
8
|
-
def app
|
9
|
-
Sinatra::Base
|
10
|
-
end
|
11
|
-
|
12
|
-
#--------------------------VALIDATION-----------------------------------
|
13
|
-
it """
|
14
|
-
Should be able to use Predefined Validation:
|
15
|
-
length
|
16
|
-
""" do
|
17
|
-
module Repository
|
18
|
-
module Basic
|
19
|
-
def self.add(data)end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
route :basic do
|
23
|
-
id :user_id
|
24
|
-
required :username, :length => 4
|
25
|
-
end
|
26
|
-
|
27
|
-
post "/basic", body={:user_id => 1, :username => ''}
|
28
|
-
check_status(400)
|
29
|
-
last_response.body.should == 'username: Value must be at least 4 characters long'
|
30
|
-
|
31
|
-
post "/basic", body={:user_id => 1, :username => '1234'}
|
32
|
-
check_status(201)
|
33
|
-
end
|
34
|
-
|
35
|
-
it """
|
36
|
-
Should be able to use Explicitly Defined Rule
|
37
|
-
""" do
|
38
|
-
module Ananke
|
39
|
-
module Rules
|
40
|
-
def self.validate_email
|
41
|
-
value =~ /[\w._%-]+@[\w.-]+.[a-zA-Z]{2,4}/ ? nil : "Invalid Email: #{value}"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
Ananke::Rules.respond_to?('validate_email').should == true
|
46
|
-
|
47
|
-
module Repository
|
48
|
-
module Explicit
|
49
|
-
def self.add(data)end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
route :explicit do
|
53
|
-
id :user_id
|
54
|
-
required :email, :email
|
55
|
-
end
|
56
|
-
|
57
|
-
post "/explicit", body={:user_id => 1, :email => 'some'}
|
58
|
-
check_status(400)
|
59
|
-
last_response.body.should == 'email: Invalid Email: some'
|
60
|
-
|
61
|
-
post "/explicit", body={:user_id => 1, :email => 'some1@some.com'}
|
62
|
-
check_status(201)
|
63
|
-
end
|
64
|
-
|
65
|
-
it """
|
66
|
-
Should be able to Add new Validations and Use them
|
67
|
-
""" do
|
68
|
-
rule :country, do
|
69
|
-
value == 'South Africa' ? nil : 'Not from South Africa'
|
70
|
-
end
|
71
|
-
module Repository
|
72
|
-
module Added
|
73
|
-
def self.add(data)
|
74
|
-
nil
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
route :added do
|
79
|
-
id :user_id
|
80
|
-
required :country, :country
|
81
|
-
end
|
82
|
-
Ananke::Rules.respond_to?('validate_country').should == true
|
83
|
-
|
84
|
-
post "/added", body={:user_id => 1, :country => 'England'}
|
85
|
-
check_status(400)
|
86
|
-
last_response.body.should == 'country: Not from South Africa'
|
87
|
-
|
88
|
-
post "/added", body={:user_id => 1, :country => 'South Africa'}
|
89
|
-
check_status(201)
|
90
|
-
end
|
91
|
-
end
|