marley 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +3 -8
- data/lib/marley.rb +27 -131
- data/lib/marley/controllers.rb +12 -7
- data/lib/marley/core_ext.rb +8 -0
- data/lib/marley/errors.rb +51 -0
- data/lib/marley/joint.rb +14 -19
- data/lib/marley/joints/forum.rb +88 -0
- data/lib/marley/joints/messages.rb +86 -0
- data/lib/marley/joints/section.rb +63 -0
- data/lib/marley/joints/tags.rb +99 -0
- data/lib/marley/joints/user.rb +120 -0
- data/lib/marley/plugin.rb +39 -0
- data/lib/marley/plugins/orm_rest_convenience.rb +92 -0
- data/lib/marley/plugins/rest_convenience.rb +28 -0
- data/lib/marley/reggae.rb +5 -2
- data/lib/marley/resources.rb +10 -0
- data/lib/marley/router.rb +61 -0
- data/lib/marley/test_helpers.rb +12 -1
- data/lib/marley/utils.rb +57 -25
- data/rdoc/example_joint.rb +33 -0
- data/rdoc/example_plugin.rb +20 -0
- data/rdoc/forum_joint.rb +50 -0
- data/rdoc/forum_joint.rdoc +19 -0
- data/rdoc/hello.rb +14 -0
- data/rdoc/hello.rdoc +14 -0
- data/rdoc/joints.rdoc +69 -0
- data/rdoc/messages_joint.rb +34 -0
- data/rdoc/messages_joint.rdoc +18 -0
- data/rdoc/messages_joint/private_messages.rdoc +59 -0
- data/rdoc/messages_joint/public_messages.rdoc +65 -0
- data/rdoc/orm_rest_convenience_plugin.rb +28 -0
- data/rdoc/orm_rest_convenience_plugin.rdoc +99 -0
- data/rdoc/plugins.rdoc +35 -0
- data/rdoc/reggae.rb +3 -0
- data/rdoc/reggae.rdoc +11 -0
- data/rdoc/reggae/generate.rdoc +13 -0
- data/rdoc/reggae/parse.rdoc +44 -0
- data/rdoc/section_joint.rb +13 -0
- data/rdoc/section_joint.rdoc +19 -0
- data/rdoc/tags_joint.rb +16 -0
- data/rdoc/tags_joint.rdoc +22 -0
- data/rdoc/tags_joint/announcements.rdoc +64 -0
- data/rdoc/tags_joint/secrets.rdoc +65 -0
- data/rdoc/user_joint.rb +62 -0
- data/rdoc/user_joint.rdoc +13 -0
- data/rdoc/user_joint/exiting_users.rdoc +120 -0
- data/rdoc/user_joint/no_auth_provided.rdoc +34 -0
- data/reggae.ebnf +1 -1
- metadata +45 -37
- data/Favicon.ico +0 -0
- data/Rakefile +0 -14
- data/TODO +0 -19
- data/examples/blog.rb +0 -26
- data/examples/empty.sqlite3 +0 -0
- data/examples/forum.css +0 -3
- data/examples/forum.js +0 -23
- data/examples/forum.rb +0 -20
- data/examples/forum.sql +0 -42
- data/examples/forum.sqlite3 +0 -0
- data/examples/forum_test.sqlite3 +0 -0
- data/examples/run.sh +0 -14
- data/lib/client/jamaica.css +0 -270
- data/lib/client/jamaica.js +0 -353
- data/lib/client/jamaica.rb +0 -38
- data/lib/client/jquery-1.6.2.js +0 -8981
- data/lib/client/jquery.form.js +0 -814
- data/lib/joints/basic_menu_system.rb +0 -41
- data/lib/joints/basic_messaging.rb +0 -88
- data/lib/joints/basic_user.rb +0 -51
- data/lib/joints/tagged_messaging.rb +0 -122
- data/lib/joints/tagging.rb +0 -56
- data/lib/sequel/plugins/rest_auth.rb +0 -53
- data/lib/sequel/plugins/rest_convenience.rb +0 -87
- data/marley-0.4.0.gem +0 -0
- data/marley.gemspec +0 -17
- data/test/empty.sqlite3 +0 -0
- data/test/menu_tests.rb +0 -9
- data/test/tagged_messaging_tests.rb +0 -289
- data/test/test.sqlite3 +0 -0
- data/test/test_include.rb +0 -16
- data/test/user_tests.rb +0 -72
data/rdoc/tags_joint.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'user_joint.rb'
|
2
|
+
|
3
|
+
DB.create_table :tags do
|
4
|
+
primary_key :id
|
5
|
+
integer :user_id
|
6
|
+
text :tag
|
7
|
+
end
|
8
|
+
DB.create_table :messages_tags do
|
9
|
+
primary_key :id
|
10
|
+
integer :tag_id
|
11
|
+
integer :message_id
|
12
|
+
end
|
13
|
+
Marley.joint('tags')
|
14
|
+
Marley.plugin(:tagging,{:tag_type => 'private'}).apply('Secret')
|
15
|
+
Marley.plugin(:tagging,{:tag_type => 'private'}).apply('Announcement')
|
16
|
+
Marley.plugin(:tagging,{:tag_type => 'public'}).apply('Announcement')
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
== The Tags Joint
|
3
|
+
|
4
|
+
setup
|
5
|
+
DB[:users].delete
|
6
|
+
DB[:messages].delete
|
7
|
+
DB[:messages_tags].delete
|
8
|
+
DB[:tags].delete
|
9
|
+
DB[:SQLITE_SEQUENCE].update(:seq => 0)
|
10
|
+
user_client=Marley::TestClient.new(:resource_name => 'user')
|
11
|
+
user=user_client.read({},:method => 'new').set_values(:password => 'asdfasdf', :confirm_password => 'asdfasdf')
|
12
|
+
[1,2,3].each { |i|
|
13
|
+
user_client.create(user.set_values(:name => "user#{i}"))
|
14
|
+
}
|
15
|
+
@user1_auth=['user1', 'asdfasdf']
|
16
|
+
@user2_auth=['user2', 'asdfasdf']
|
17
|
+
@user3_auth=['user3', 'asdfasdf']
|
18
|
+
end
|
19
|
+
|
20
|
+
example:
|
21
|
+
|
22
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
=== Announcements
|
4
|
+
|
5
|
+
setup
|
6
|
+
@client1=Marley::TestClient.new(:resource_name => 'announcement', :auth => @user1_auth)
|
7
|
+
@client2=Marley::TestClient.new(:resource_name => 'announcement', :auth => @user2_auth)
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
examples: announcements with private and public tags
|
12
|
+
|
13
|
+
>> @announcement1=@client1.read({},{:method => 'new'})
|
14
|
+
=> [:instance, {:schema=>[["integer", :user_id, 3, 1], ["text", :name, 4, nil], ["text", :message, 0, nil], ["text", :_private_tags, 0, nil], ["text", :_public_tags, 0, nil]], :url=>"/announcement/", :new_rec=>true, :actions=>nil, :name=>"announcement"}, []]
|
15
|
+
|
16
|
+
>> @client1.create(@announcement1.set_values({:name => 'user1 ann1', :message => 'user1ann1 msg', :_private_tags => 'aaa,bbb',:_public_tags => 'ppp'}), :url => @announcement1.url)
|
17
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 ann1"], ["text", :message, 0, "user1ann1 msg"], ["text", :_private_tags, 0, "aaa, bbb"], ["text", :_public_tags, 0, "ppp"]], :url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :name=>"announcement"}, []]
|
18
|
+
>> @client1.read
|
19
|
+
=> [[:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 ann1"], ["text", :message, 0, "user1ann1 msg"], ["text", :_private_tags, 0, "aaa, bbb"], ["text", :_public_tags, 0, "ppp"]], :url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :name=>"announcement"}, []]]
|
20
|
+
|
21
|
+
>> @client2.read
|
22
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 ann1"], ["text", :message, 2, "user1ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "ppp"]], :name=>"announcement"}, []]]
|
23
|
+
|
24
|
+
>> @announcement2=@client2.read({},{:method => 'new'})
|
25
|
+
=> [:instance, {:url=>"/announcement/", :new_rec=>true, :actions=>nil, :schema=>[["integer", :user_id, 3, 2], ["text", :name, 4, nil], ["text", :message, 0, nil], ["text", :_private_tags, 0, nil], ["text", :_public_tags, 0, nil]], :name=>"announcement"}, []]
|
26
|
+
>> @client1.create(@announcement.set_values({:name => 'user1 ann1', :message => 'user1ann1 msg', :_private_tags => 'aaa,bbb',:_public_tags => 'ppp'}), :url => @announcement.url)
|
27
|
+
>> @client2.create(@announcement2.set_values({:name => 'user2 ann1', :message => 'user2ann1 msg', :_private_tags => 'xxx',:_public_tags => 'yyy,zzz'}), :url => @announcement2.url)
|
28
|
+
=> [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>{:delete=>"/announcement/2"}, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 ann1"], ["text", :message, 0, "user2ann1 msg"], ["text", :_private_tags, 0, "xxx"], ["text", :_public_tags, 0, "yyy, zzz"]], :name=>"announcement"}, []]
|
29
|
+
|
30
|
+
>> @client1.read
|
31
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 ann1"], ["text", :message, 0, "user1ann1 msg"], ["text", :_private_tags, 0, "aaa, bbb"], ["text", :_public_tags, 0, "ppp"]], :name=>"announcement"}, []], [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 6, "user2 ann1"], ["text", :message, 2, "user2ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "yyy, zzz"]], :name=>"announcement"}, []]]
|
32
|
+
>> @client2.read
|
33
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 ann1"], ["text", :message, 2, "user1ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "ppp"]], :name=>"announcement"}, []], [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>{:delete=>"/announcement/2"}, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 ann1"], ["text", :message, 0, "user2ann1 msg"], ["text", :_private_tags, 0, "xxx"], ["text", :_public_tags, 0, "yyy, zzz"]], :name=>"announcement"}, []]]
|
34
|
+
|
35
|
+
>> @ann1client1=@client1.read({},:instance_id => 1)
|
36
|
+
=> [:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 ann1"], ["text", :message, 0, "user1ann1 msg"], ["text", :_private_tags, 0, "aaa, bbb"], ["text", :_public_tags, 0, "ppp"]], :name=>"announcement"}, []]
|
37
|
+
:_public_tags, 0, "ppp"]], :name=>"announcement"}, []]
|
38
|
+
|
39
|
+
>> @ann1client2=@client2.read({},:instance_id => 1)
|
40
|
+
=> [:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 ann1"], ["text", :message, 2, "user1ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "ppp"]], :name=>"announcement"}, []]
|
41
|
+
|
42
|
+
>> @ann2client1=@client1.read({},:instance_id => 2)
|
43
|
+
=> [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 6, "user2 ann1"], ["text", :message, 2, "user2ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "yyy, zzz"]], :name=>"announcement"}, []]
|
44
|
+
|
45
|
+
>> @ann2client2=@client2.read({},:instance_id => 2)
|
46
|
+
=> [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>{:delete=>"/announcement/2"}, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 ann1"], ["text", :message, 0, "user2ann1 msg"], ["text", :_private_tags, 0, "xxx"], ["text", :_public_tags, 0, "yyy, zzz"]], :name=>"announcement"}, []]
|
47
|
+
|
48
|
+
|
49
|
+
>> @client1.update(@ann1client1.set_values(:_public_tags => 'uuu'), :url => @ann1client1.url)
|
50
|
+
=> [:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 ann1"], ["text", :message, 0, "user1ann1 msg"], ["text", :_private_tags, 0, "aaa, bbb"], ["text", :_public_tags, 0, "uuu"]], :name=>"announcement"}, []]
|
51
|
+
|
52
|
+
>> @client2.read({},:instance_id => 1)
|
53
|
+
=> [:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 ann1"], ["text", :message, 2, "user1ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "uuu"]], :name=>"announcement"}, []]
|
54
|
+
>> @client1.update(@ann1client1.set_values(:_private_tags => 'u,v,w'), :url => @ann1client1.url)
|
55
|
+
=> [:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 ann1"], ["text", :message, 0, "user1ann1 msg"], ["text", :_private_tags, 0, "u, v, w"], ["text", :_public_tags, 0, "uuu"]], :name=>"announcement"}, []]
|
56
|
+
>> @client2.read({},:instance_id => 1)
|
57
|
+
=> [:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 ann1"], ["text", :message, 2, "user1ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "uuu"]], :name=>"announcement"}, []]
|
58
|
+
>> @client2.update(@ann1client2.set_values(:_public_tags => 'ddd',:_private_tags => 'ee,www,rr'),:url => @ann1client2.url)
|
59
|
+
=> [:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 ann1"], ["text", :message, 2, "user1ann1 msg"], ["text", :_private_tags, 0, "ee, www, rr"], ["text", :_public_tags, 0, "ddd"]], :name=>"announcement"}, []]
|
60
|
+
|
61
|
+
>> @client1.read
|
62
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 ann1"], ["text", :message, 0, "user1ann1 msg"], ["text", :_private_tags, 0, "u, v, w"], ["text", :_public_tags, 0, "ddd"]], :name=>"announcement"}, []], [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 6, "user2 ann1"], ["text", :message, 2, "user2ann1 msg"], ["text", :_private_tags, 0, ""], ["text", :_public_tags, 0, "yyy, zzz"]], :name=>"announcement"}, []]]
|
63
|
+
|
64
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
=== Secrets
|
3
|
+
|
4
|
+
setup
|
5
|
+
@client=Marley::TestClient.new(:resource_name => 'secret')
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
examples:
|
10
|
+
|
11
|
+
>> @client.auth=@user1_auth
|
12
|
+
=> ["user1", "asdfasdf"]
|
13
|
+
>> @secret=@client.read({}, :method => 'new')
|
14
|
+
=> [:instance, {:schema=>[["integer", :user_id, 3, 1], ["text", :name, 4, nil], ["text", :message, 0, nil], ["text", :_private_tags, 0, nil]], :url=>"/secret/", :new_rec=>true, :actions=>nil, :name=>"secret"}, []]
|
15
|
+
|
16
|
+
>> @client.create(@secret.set_values(:name => 'user1 secret1', :_private_tags => 'xxxxxx,sss'))
|
17
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 secret1"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "xxxxxx, sss"]], :url=>"/secret/1", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
18
|
+
|
19
|
+
>> @secret=@client.read[0]
|
20
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 secret1"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "xxxxxx, sss"]], :url=>"/secret/1", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
21
|
+
|
22
|
+
>> @client.update(@secret.set_values(:_private_tags => "#{@secret.col_value(:_private_tags)},zzz,aaa"), :url => @secret.url)
|
23
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 secret1"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "xxxxxx, sss, zzz, aaa"]], :url=>"/secret/1", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
24
|
+
>> @secret=@client.read[0]
|
25
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 secret1"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "xxxxxx, sss, zzz, aaa"]], :url=>"/secret/1", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
26
|
+
|
27
|
+
>> @client.update(@secret.set_values(:_private_tags => "foo"), :url => @secret.url)
|
28
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 secret1"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "foo"]], :url=>"/secret/1", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
29
|
+
>> @secret=@client.read[0]
|
30
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 secret1"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "foo"]], :url=>"/secret/1", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
31
|
+
|
32
|
+
>> DB[:tags].all
|
33
|
+
=> [{:tag=>"xxxxxx", :id=>1, :user_id=>1}, {:tag=>"sss", :id=>2, :user_id=>1}, {:tag=>"sss", :id=>3, :user_id=>1}, {:tag=>"zzz", :id=>4, :user_id=>1}, {:tag=>"aaa", :id=>5, :user_id=>1}, {:tag=>"foo", :id=>6, :user_id=>1}]
|
34
|
+
>> DB[:messages_tags].all
|
35
|
+
=> [{:tag_id=>6, :message_id=>1, :id=>7}]
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
>> @client.auth=@user2_auth
|
40
|
+
=> ["user2", "asdfasdf"]
|
41
|
+
>> @client.read
|
42
|
+
=> []
|
43
|
+
|
44
|
+
>> @secret=@client.read({}, :method => 'new')
|
45
|
+
=> [:instance, {:schema=>[["integer", :user_id, 3, 2], ["text", :name, 4, nil], ["text", :message, 0, nil], ["text", :_private_tags, 0, nil]], :url=>"/secret/", :new_rec=>true, :actions=>nil, :name=>"secret"}, []]
|
46
|
+
|
47
|
+
>> @client.create(@secret.set_values(:name => 'user2 secret', :_private_tags => 'foo,bar'))
|
48
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 secret"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "foo, bar"]], :url=>"/secret/2", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
49
|
+
|
50
|
+
>> @secret=@client.read[0]
|
51
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 secret"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "foo, bar"]], :url=>"/secret/2", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
52
|
+
>> @client.update(@secret.set_values(:_private_tags => "#{@secret.col_value(:_private_tags)},baz,bat"), :url => @secret.url)
|
53
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 secret"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "foo, bar, baz, bat"]], :url=>"/secret/2", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
54
|
+
|
55
|
+
>> @secret=@client.read[0]
|
56
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 secret"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "foo, bar, baz, bat"]], :url=>"/secret/2", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
57
|
+
>> @client.update(@secret.set_values(:_private_tags => "boo"), :url => @secret.url)
|
58
|
+
=> [:instance, {:schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 secret"], ["text", :message, 0, nil], ["text", :_private_tags, 0, "boo"]], :url=>"/secret/2", :new_rec=>false, :actions=>nil, :name=>"secret"}, []]
|
59
|
+
|
60
|
+
>> DB[:tags].all
|
61
|
+
=> [{:tag=>"xxxxxx", :id=>1, :user_id=>1}, {:tag=>"sss", :id=>2, :user_id=>1}, {:tag=>"sss", :id=>3, :user_id=>1}, {:tag=>"zzz", :id=>4, :user_id=>1}, {:tag=>"aaa", :id=>5, :user_id=>1}, {:tag=>"foo", :id=>6, :user_id=>1}, {:tag=>"foo", :id=>7, :user_id=>2}, {:tag=>"bar", :id=>8, :user_id=>2}, {:tag=>"bar", :id=>9, :user_id=>2}, {:tag=>"baz", :id=>10, :user_id=>2}, {:tag=>"bat", :id=>11, :user_id=>2}, {:tag=>"boo", :id=>12, :user_id=>2}]
|
62
|
+
>> DB[:messages_tags].all
|
63
|
+
=> [{:tag_id=>6, :message_id=>1, :id=>7}, {:tag_id=>12, :message_id=>2, :id=>14}]
|
64
|
+
|
65
|
+
|
data/rdoc/user_joint.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
|
2
|
+
require 'rubygems'
|
3
|
+
require 'sequel'
|
4
|
+
require 'marley'
|
5
|
+
require 'marley/test_helpers'
|
6
|
+
|
7
|
+
DB=Sequel.sqlite('')
|
8
|
+
DB.create_table :users do
|
9
|
+
primary_key :id
|
10
|
+
text :name, :unique => true
|
11
|
+
text :user_type, :index => true
|
12
|
+
text :pw_hash
|
13
|
+
text :email
|
14
|
+
date :birthday
|
15
|
+
datetime :date_created
|
16
|
+
text :description
|
17
|
+
end
|
18
|
+
DB.create_table :messages do
|
19
|
+
primary_key :id
|
20
|
+
integer :user_id, :index => true
|
21
|
+
text :message_type, :index => true
|
22
|
+
text :name, :index => true,:null => false
|
23
|
+
text :message
|
24
|
+
end
|
25
|
+
|
26
|
+
Marley.plugin('orm_rest_convenience').apply(Sequel::Model)
|
27
|
+
Marley.joint 'user'
|
28
|
+
Marley.plugin('current_user_methods').apply(Sequel::Model)
|
29
|
+
|
30
|
+
module Marley
|
31
|
+
module Resources
|
32
|
+
class Admin < User
|
33
|
+
def self.requires_user?; true;end
|
34
|
+
end
|
35
|
+
class Message < Sequel::Model
|
36
|
+
def validate
|
37
|
+
super
|
38
|
+
validates_presence [:name]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
class Secret < Message
|
42
|
+
User.join_to(self)
|
43
|
+
def self.list_dataset
|
44
|
+
current_user_ds
|
45
|
+
end
|
46
|
+
end
|
47
|
+
class Announcement < Message
|
48
|
+
ro_cols![:current_user_role]={'reader' => [/.*/]}
|
49
|
+
def current_user_role
|
50
|
+
super || 'reader' unless User.current_user.new?
|
51
|
+
end
|
52
|
+
def actions(parent_instance=nil)
|
53
|
+
if current_user_role=='owner' && ! self.new?
|
54
|
+
{:delete => self.url}.update(super ? super : {})
|
55
|
+
else
|
56
|
+
super
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
== The User Joint
|
3
|
+
|
4
|
+
setup
|
5
|
+
MR::User.delete
|
6
|
+
MR::Message.delete
|
7
|
+
DB[:SQLITE_SEQUENCE].delete #kinda hate this but it seems necessary for the moment
|
8
|
+
@client=Marley::TestClient.new(:resource_name => 'user')
|
9
|
+
@user=@client.read({},:method => 'new')
|
10
|
+
end
|
11
|
+
|
12
|
+
examples:
|
13
|
+
|
@@ -0,0 +1,120 @@
|
|
1
|
+
|
2
|
+
setup
|
3
|
+
@client.create(@user.set_values(:name => 'user1', :password => 'asdfasdf',:confirm_password => 'asdfasdf'))
|
4
|
+
@client.create(@user.set_values(:name => 'user2', :password => 'asdfasdf',:confirm_password => 'asdfasdf'))
|
5
|
+
@user1_auth=['user1', 'asdfasdf']
|
6
|
+
@user2_auth=['user2', 'asdfasdf']
|
7
|
+
end
|
8
|
+
|
9
|
+
examples: 2 users exist
|
10
|
+
>> MR::User.count
|
11
|
+
=> 2
|
12
|
+
|
13
|
+
example: user1 logged in
|
14
|
+
>> @client.auth=@user1_auth
|
15
|
+
=> ["user1", "asdfasdf"]
|
16
|
+
|
17
|
+
# Note: Date hack, defined in test_helper.rb is causing the strings to appear in the date_created/updated fields
|
18
|
+
|
19
|
+
>> @client.read
|
20
|
+
=> [[:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 0, "user1"], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 0, nil], [:password, :old_password, 0, nil], [:password, :password, 0, nil], [:password, :confirm_password, 0, nil]], :name=>"user", :url=>"/user/1"}, []], [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 2], ["text", :name, 2, "user2"], ["text", :email, 2, nil], ["date", :birthday, 2, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 2, nil]], :name=>"user", :url=>"/user/2"}, []]]
|
21
|
+
|
22
|
+
>> @client.instance_id=1
|
23
|
+
=> 1
|
24
|
+
>> @user1=@client.read
|
25
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 0, "user1"], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 0, nil], [:password, :old_password, 0, nil], [:password, :password, 0, nil], [:password, :confirm_password, 0, nil]], :name=>"user", :url=>"/user/1"}, []]
|
26
|
+
>> @client.update(@user1)
|
27
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 0, "user1"], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 0, nil], [:password, :old_password, 0, nil], [:password, :password, 0, nil], [:password, :confirm_password, 0, nil]], :name=>"user", :url=>"/user/1"}, []]
|
28
|
+
|
29
|
+
>> @user1=@client.read
|
30
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 0, "user1"], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 0, nil], [:password, :old_password, 0, nil], [:password, :password, 0, nil], [:password, :confirm_password, 0, nil]], :name=>"user", :url=>"/user/1"}, []]
|
31
|
+
>> @client.update(@user1)
|
32
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 0, "user1"], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 0, nil], [:password, :old_password, 0, nil], [:password, :password, 0, nil], [:password, :confirm_password, 0, nil]], :name=>"user", :url=>"/user/1"}, []]
|
33
|
+
>> @user1.col_value(:password, 'zxcvzxcv')
|
34
|
+
=> "zxcvzxcv"
|
35
|
+
>> @client.update(@user1,{:code => 400})
|
36
|
+
=> [:error, {:error_type=>"validation", :error_details=>{:old_password=>["Old Password Incorrect"], :confirm_password=>["Passwords do not match"]}, :description=>nil}]
|
37
|
+
>> @user1.set_values(:confirm_password => 'zxcvzxcv',:old_password => 'asdfasdf')
|
38
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 0, "user1"], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 0, nil], [:password, :old_password, 0, "asdfasdf"], [:password, :password, 0, "zxcvzxcv"], [:password, :confirm_password, 0, "zxcvzxcv"]], :name=>"user", :url=>"/user/1"}, []]
|
39
|
+
>> @client.update(@user1)
|
40
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 2, "user1"], ["text", :email, 2, nil], ["date", :birthday, 2, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 2, nil]], :name=>"user", :url=>"/user/1"}, []]
|
41
|
+
>> @client.read({},:code => 401)
|
42
|
+
=> [:error, {:error_type=>"authentication", :error_details=>nil, :description=>nil}]
|
43
|
+
>> @client.read({},:auth => ['user1', 'zxcvzxcv'])
|
44
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["text", :name, 0, "user1"], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["datetime", :date_created, 2, "date_created"], ["text", :description, 0, nil], [:password, :old_password, 0, nil], [:password, :password, 0, nil], [:password, :confirm_password, 0, nil]], :name=>"user", :url=>"/user/1"}, []]
|
45
|
+
|
46
|
+
example: user1 reading/writing secrets
|
47
|
+
|
48
|
+
>> @client.auth=@user1_auth
|
49
|
+
=> ["user1", "asdfasdf"]
|
50
|
+
>> @client.resource_name='secret'
|
51
|
+
=> "secret"
|
52
|
+
|
53
|
+
>> @client.read
|
54
|
+
=> []
|
55
|
+
>> @secret=@client.read({}, {:method => 'new'})
|
56
|
+
=> [:instance, {:new_rec=>true, :actions=>nil, :schema=>[["integer", :user_id, 3, 1], ["text", :name, 4, nil], ["text", :message, 0, nil]], :name=>"secret", :url=>"/secret/"}, []]
|
57
|
+
|
58
|
+
>> @client.create(@secret, {:code => 400})
|
59
|
+
=> [:error, {:error_type=>"validation", :error_details=>{:name=>["is required"]}, :description=>nil}]
|
60
|
+
>> @client.create(@secret.set_values(:name => 'this is my secret'))
|
61
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "this is my secret"], ["text", :message, 0, nil]], :name=>"secret", :url=>"/secret/1"}, []]
|
62
|
+
>> @client.read
|
63
|
+
=> [[:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "this is my secret"], ["text", :message, 0, nil]], :name=>"secret", :url=>"/secret/1"}, []]]
|
64
|
+
>> @client.read({},:auth => @user2_auth)
|
65
|
+
=> []
|
66
|
+
>> @client.read({},:auth => @user2_auth,:instance_id => 1, :code => 403)
|
67
|
+
=> [:error, {:error_type=>"authorization", :error_details=>nil, :description=>"You are not authorized for this operation"}]
|
68
|
+
|
69
|
+
example: user2 reading/writing secrets
|
70
|
+
>> @client.auth=@user2_auth
|
71
|
+
=> ["user2", "asdfasdf"]
|
72
|
+
>> @client.resource_name='secret'
|
73
|
+
=> "secret"
|
74
|
+
>> @client.read
|
75
|
+
=> []
|
76
|
+
>> @secret=@client.read({}, {:method => 'new'})
|
77
|
+
=> [:instance, {:new_rec=>true, :actions=>nil, :schema=>[["integer", :user_id, 3, 2], ["text", :name, 4, nil], ["text", :message, 0, nil]], :name=>"secret", :url=>"/secret/"}, []]
|
78
|
+
>> @client.create(@secret.set_values(:name => 'user2 my secret'))
|
79
|
+
=> [:instance, {:new_rec=>false, :actions=>nil, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 my secret"], ["text", :message, 0, nil]], :name=>"secret", :url=>"/secret/1"}, []]
|
80
|
+
|
81
|
+
>> @client.read({}, :auth => @user1_auth)
|
82
|
+
=> []
|
83
|
+
>> @client.read({}, :auth => @user1_auth, :instance_id => 1,:code => 403)
|
84
|
+
=> [:error, {:error_type=>"authorization", :error_details=>nil, :description=>"You are not authorized for this operation"}]
|
85
|
+
|
86
|
+
examples: announcements
|
87
|
+
>> @client.auth=@user1_auth
|
88
|
+
=> ["user1", "asdfasdf"]
|
89
|
+
>> @client.resource_name='announcement'
|
90
|
+
=> "announcement"
|
91
|
+
>> @client.read
|
92
|
+
=> []
|
93
|
+
|
94
|
+
>> @announcement=@client.read({},{:method => 'new'})
|
95
|
+
=> [:instance, {:new_rec=>true, :actions=>nil, :schema=>[["integer", :user_id, 3, 1], ["text", :name, 4, nil], ["text", :message, 0, nil]], :name=>"announcement", :url=>"/announcement/"}, []]
|
96
|
+
>> @client.create(@announcement.set_values({:name => 'user1 announcement'}))
|
97
|
+
=> [:instance, {:new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 announcement"], ["text", :message, 0, nil]], :name=>"announcement", :url=>"/announcement/1"}, []]
|
98
|
+
>> @client.read
|
99
|
+
=> [[:instance, {:new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 announcement"], ["text", :message, 0, nil]], :name=>"announcement", :url=>"/announcement/1"}, []]]
|
100
|
+
>> @client.create(@announcement.set_values({:name => 'user1 announcement2'}))
|
101
|
+
=> [:instance, {:new_rec=>false, :actions=>{:delete=>"/announcement/2"}, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 announcement2"], ["text", :message, 0, nil]], :name=>"announcement", :url=>"/announcement/2"}, []]
|
102
|
+
>> @client.read
|
103
|
+
=> [[:instance, {:new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 announcement"], ["text", :message, 0, nil]], :name=>"announcement", :url=>"/announcement/1"}, []], [:instance, {:new_rec=>false, :actions=>{:delete=>"/announcement/2"}, :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 announcement2"], ["text", :message, 0, nil]], :name=>"announcement", :url=>"/announcement/2"}, []]]
|
104
|
+
|
105
|
+
>> @client.auth=@user2_auth
|
106
|
+
=> ["user2", "asdfasdf"]
|
107
|
+
>> @client.read
|
108
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :name=>"announcement", :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 announcement"], ["text", :message, 2, nil]]}, []], [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>nil, :name=>"announcement", :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 announcement2"], ["text", :message, 2, nil]]}, []]]
|
109
|
+
|
110
|
+
>> @client.read
|
111
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :name=>"announcement", :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 announcement"], ["text", :message, 2, nil]]}, []], [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>nil, :name=>"announcement", :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 announcement2"], ["text", :message, 2, nil]]}, []]]
|
112
|
+
>> @announcement=@client.read({},{:method => 'new'})
|
113
|
+
=> [:instance, {:url=>"/announcement/", :new_rec=>true, :actions=>nil, :name=>"announcement", :schema=>[["integer", :user_id, 3, 2], ["text", :name, 4, nil], ["text", :message, 0, nil]]}, []]
|
114
|
+
>> @client.create(@announcement.set_values({:name => 'user2 announcement'}))
|
115
|
+
=> [:instance, {:url=>"/announcement/3", :new_rec=>false, :actions=>{:delete=>"/announcement/3"}, :name=>"announcement", :schema=>[["integer", :id, 2, 3], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 announcement"], ["text", :message, 0, nil]]}, []]
|
116
|
+
>> @client.read
|
117
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>nil, :name=>"announcement", :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 announcement"], ["text", :message, 2, nil]]}, []], [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>nil, :name=>"announcement", :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 1], ["text", :name, 6, "user1 announcement2"], ["text", :message, 2, nil]]}, []], [:instance, {:url=>"/announcement/3", :new_rec=>false, :actions=>{:delete=>"/announcement/3"}, :name=>"announcement", :schema=>[["integer", :id, 2, 3], ["integer", :user_id, 3, 2], ["text", :name, 4, "user2 announcement"], ["text", :message, 0, nil]]}, []]]
|
118
|
+
>> @client.read({}, :auth => @user1_auth)
|
119
|
+
=> [[:instance, {:url=>"/announcement/1", :new_rec=>false, :actions=>{:delete=>"/announcement/1"}, :name=>"announcement", :schema=>[["integer", :id, 2, 1], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 announcement"], ["text", :message, 0, nil]]}, []], [:instance, {:url=>"/announcement/2", :new_rec=>false, :actions=>{:delete=>"/announcement/2"}, :name=>"announcement", :schema=>[["integer", :id, 2, 2], ["integer", :user_id, 3, 1], ["text", :name, 4, "user1 announcement2"], ["text", :message, 0, nil]]}, []], [:instance, {:url=>"/announcement/3", :new_rec=>false, :actions=>nil, :name=>"announcement", :schema=>[["integer", :id, 2, 3], ["integer", :user_id, 3, 2], ["text", :name, 6, "user2 announcement"], ["text", :message, 2, nil]]}, []]]
|
120
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
example: read new user form but not user list
|
3
|
+
>> @client.read({},:code => 401)
|
4
|
+
=> [:error, {:error_type=>"authentication", :error_details=>nil, :description=>nil}]
|
5
|
+
>> @client.read({},:method => 'new')
|
6
|
+
=> [:instance, {:new_rec=>true, :actions=>nil, :schema=>[["text", :name, 0, nil], ["text", :email, 0, nil], ["date", :birthday, 0, nil], ["text", :description, 0, nil], [:password, :password, 4, nil], [:password, :confirm_password, 4, nil]], :name=>"user", :url=>"/user/"}, []]
|
7
|
+
|
8
|
+
|
9
|
+
example: user validation
|
10
|
+
>> @client.create({}, :code => 400)
|
11
|
+
=> [:error, {:error_type=>"validation", :error_details=>{:name=>["is required"], :password=>["Password must contain at least 8 characters"]}, :description=>nil}]
|
12
|
+
>> @client.create(@user.set_values(:name => 'asdf', :password => 'asdfasdf',:confirm_password => 'asdfasdf'))
|
13
|
+
=> [:msg, {:title=>"Success!"}, "Your login, 'asdf', has been sucessfully created. You can now log in."]
|
14
|
+
|
15
|
+
|
16
|
+
example: cannot list any other resources
|
17
|
+
>> @client.read({},{:resource_name => 'secrets',:code => 401})
|
18
|
+
=> [:error, {:error_type=>"authentication", :error_details=>nil, :description=>nil}]
|
19
|
+
>> @client.read({},{:resource_name => 'announcements',:code => 401})
|
20
|
+
=> [:error, {:error_type=>"authentication", :error_details=>nil, :description=>nil}]
|
21
|
+
|
22
|
+
example: non-existent resource yields 401, not 404
|
23
|
+
>> @client.read({},{:resource_name => 'xxx',:code => 401})
|
24
|
+
=> [:error, {:error_type=>"authentication", :error_details=>nil, :description=>nil}]
|
25
|
+
|
26
|
+
example: unable to create admin user
|
27
|
+
>> @client.create(@user.set_values(:name => 'admin',:password => 'asdfasdf',:confirm_password => 'asdfasdf'),:resource_name => 'admin', :code=> 401)
|
28
|
+
=> [:error, {:error_type=>"authentication", :error_details=>nil, :description=>nil}]
|
29
|
+
|
30
|
+
>> @client.create(@user.set_values(:name => 'admin',:password => 'asdfasdf',:confirm_password => 'asdfasdf').to_params.update("user[user_type]" => 'Admin'),:code => 403)
|
31
|
+
=> [:error, {:error_type=>"authorization", :error_details=>nil, :description=>"You are not authorized for this operation"}]
|
32
|
+
|
33
|
+
|
34
|
+
|
data/reggae.ebnf
CHANGED
@@ -11,7 +11,7 @@ property ::= section_property | link_property | instance_property |instance_lis
|
|
11
11
|
|
12
12
|
value ::= title_value | description_value | navigation_value | name_value | new_rec_value | search_value | schema_value | get_actions_value | delete_action_value | items_value | col_value | error_type_value | error_details_value |
|
13
13
|
|
14
|
-
section_property ::= 'title' | 'description' | 'navigation'
|
14
|
+
section_property ::= 'name' | 'title' | 'description' | 'navigation'
|
15
15
|
|
16
16
|
link_property ::= 'title' | 'description' | 'url'
|
17
17
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marley
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Herb Daily
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2012-02-22 00:00:00 -03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -50,9 +50,9 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
53
|
+
version: 0.13.4
|
54
54
|
version:
|
55
|
-
description: "Marley
|
55
|
+
description: "Marley is a framework for quickly building RESTful web services and applications. Development is fast because Marley implements lots of sensible defaults, all of which can be overridden and most of which can be overridden easily. "
|
56
56
|
email: herb.daily@safe-mail.net
|
57
57
|
executables: []
|
58
58
|
|
@@ -61,46 +61,54 @@ extensions: []
|
|
61
61
|
extra_rdoc_files: []
|
62
62
|
|
63
63
|
files:
|
64
|
-
- marley.gemspec
|
65
|
-
- Rakefile
|
66
|
-
- Favicon.ico
|
67
64
|
- README.rdoc
|
68
|
-
- TODO
|
69
65
|
- reggae.ebnf
|
70
|
-
- marley-0.4.0.gem
|
71
66
|
- lib/marley.rb
|
67
|
+
- lib/marley/core_ext.rb
|
72
68
|
- lib/marley/test_helpers.rb
|
69
|
+
- lib/marley/plugin.rb
|
70
|
+
- lib/marley/resources.rb
|
71
|
+
- lib/marley/router.rb
|
72
|
+
- lib/marley/joints/forum.rb
|
73
|
+
- lib/marley/joints/messages.rb
|
74
|
+
- lib/marley/joints/section.rb
|
75
|
+
- lib/marley/joints/user.rb
|
76
|
+
- lib/marley/joints/tags.rb
|
73
77
|
- lib/marley/utils.rb
|
74
78
|
- lib/marley/joint.rb
|
79
|
+
- lib/marley/plugins/orm_rest_convenience.rb
|
80
|
+
- lib/marley/plugins/rest_convenience.rb
|
75
81
|
- lib/marley/controllers.rb
|
82
|
+
- lib/marley/errors.rb
|
76
83
|
- lib/marley/reggae.rb
|
77
|
-
-
|
78
|
-
-
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
84
|
-
-
|
85
|
-
-
|
86
|
-
-
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
-
|
91
|
-
-
|
92
|
-
-
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
96
|
-
-
|
97
|
-
-
|
98
|
-
-
|
99
|
-
-
|
100
|
-
-
|
101
|
-
-
|
102
|
-
-
|
103
|
-
-
|
84
|
+
- rdoc/orm_rest_convenience_plugin.rb
|
85
|
+
- rdoc/section_joint.rb
|
86
|
+
- rdoc/forum_joint.rb
|
87
|
+
- rdoc/tags_joint.rdoc
|
88
|
+
- rdoc/user_joint/no_auth_provided.rdoc
|
89
|
+
- rdoc/user_joint/exiting_users.rdoc
|
90
|
+
- rdoc/messages_joint.rb
|
91
|
+
- rdoc/messages_joint.rdoc
|
92
|
+
- rdoc/hello.rb
|
93
|
+
- rdoc/section_joint.rdoc
|
94
|
+
- rdoc/user_joint.rdoc
|
95
|
+
- rdoc/example_plugin.rb
|
96
|
+
- rdoc/plugins.rdoc
|
97
|
+
- rdoc/example_joint.rb
|
98
|
+
- rdoc/messages_joint/private_messages.rdoc
|
99
|
+
- rdoc/messages_joint/public_messages.rdoc
|
100
|
+
- rdoc/forum_joint.rdoc
|
101
|
+
- rdoc/orm_rest_convenience_plugin.rdoc
|
102
|
+
- rdoc/reggae/generate.rdoc
|
103
|
+
- rdoc/reggae/parse.rdoc
|
104
|
+
- rdoc/user_joint.rb
|
105
|
+
- rdoc/joints.rdoc
|
106
|
+
- rdoc/hello.rdoc
|
107
|
+
- rdoc/tags_joint.rb
|
108
|
+
- rdoc/tags_joint/announcements.rdoc
|
109
|
+
- rdoc/tags_joint/secrets.rdoc
|
110
|
+
- rdoc/reggae.rb
|
111
|
+
- rdoc/reggae.rdoc
|
104
112
|
has_rdoc: true
|
105
113
|
homepage: http://github.com/herbdaily/marley
|
106
114
|
licenses: []
|
@@ -128,6 +136,6 @@ rubyforge_project:
|
|
128
136
|
rubygems_version: 1.3.5
|
129
137
|
signing_key:
|
130
138
|
specification_version: 3
|
131
|
-
summary: Irie default restful routes for
|
139
|
+
summary: Irie default restful routes for models and other objects
|
132
140
|
test_files: []
|
133
141
|
|