sinatra_resource 0.4.21 → 0.4.22

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.
Files changed (88) hide show
  1. data/Gemfile +18 -0
  2. data/Gemfile.lock +51 -0
  3. data/README.mdown +1 -1
  4. data/VERSION +1 -1
  5. data/examples/datacatalog/.bundle/config +2 -0
  6. data/examples/datacatalog/Gemfile +14 -0
  7. data/examples/datacatalog/Gemfile.lock +33 -0
  8. data/examples/datacatalog/Rakefile +2 -2
  9. data/examples/datacatalog/app.rb +0 -2
  10. data/examples/datacatalog/config/config.rb +5 -7
  11. data/examples/datacatalog/lib/base.rb +2 -2
  12. data/examples/datacatalog/lib/resource.rb +5 -5
  13. data/examples/datacatalog/lib/roles.rb +2 -2
  14. data/examples/datacatalog/model_helpers/search.rb +6 -6
  15. data/examples/datacatalog/models/categorization.rb +1 -1
  16. data/examples/datacatalog/models/note.rb +1 -1
  17. data/examples/datacatalog/models/source.rb +3 -3
  18. data/examples/datacatalog/models/usage.rb +2 -2
  19. data/examples/datacatalog/models/user.rb +7 -7
  20. data/examples/datacatalog/resources/categories.rb +7 -7
  21. data/examples/datacatalog/resources/categories_sources.rb +4 -4
  22. data/examples/datacatalog/resources/notes.rb +1 -1
  23. data/examples/datacatalog/resources/sources.rb +3 -3
  24. data/examples/datacatalog/resources/sources_usages.rb +3 -3
  25. data/examples/datacatalog/resources/users.rb +3 -3
  26. data/examples/datacatalog/tasks/db.rake +2 -2
  27. data/examples/datacatalog/tasks/test.rake +1 -1
  28. data/examples/datacatalog/test/helpers/assertions/assert_include.rb +1 -1
  29. data/examples/datacatalog/test/helpers/assertions/assert_not_include.rb +1 -1
  30. data/examples/datacatalog/test/helpers/lib/model_factories.rb +7 -7
  31. data/examples/datacatalog/test/helpers/lib/model_helpers.rb +1 -1
  32. data/examples/datacatalog/test/helpers/lib/request_helpers.rb +7 -7
  33. data/examples/datacatalog/test/helpers/resource_test_helper.rb +1 -1
  34. data/examples/datacatalog/test/helpers/shared/api_keys.rb +11 -11
  35. data/examples/datacatalog/test/helpers/shared/common_body_responses.rb +1 -1
  36. data/examples/datacatalog/test/helpers/shared/model_counts.rb +2 -2
  37. data/examples/datacatalog/test/helpers/shared/status_codes.rb +4 -4
  38. data/examples/datacatalog/test/helpers/test_cases/resource_test_case.rb +4 -4
  39. data/examples/datacatalog/test/helpers/test_helper.rb +4 -10
  40. data/examples/datacatalog/test/models/categorization_test.rb +6 -6
  41. data/examples/datacatalog/test/models/category_test.rb +8 -8
  42. data/examples/datacatalog/test/models/note_test.rb +6 -6
  43. data/examples/datacatalog/test/models/search_test.rb +4 -4
  44. data/examples/datacatalog/test/models/source_test.rb +5 -5
  45. data/examples/datacatalog/test/models/user_test.rb +11 -11
  46. data/examples/datacatalog/test/resources/categories/categories_delete_test.rb +12 -12
  47. data/examples/datacatalog/test/resources/categories/categories_get_many_test.rb +9 -9
  48. data/examples/datacatalog/test/resources/categories/categories_get_one_test.rb +7 -7
  49. data/examples/datacatalog/test/resources/categories/categories_post_test.rb +16 -16
  50. data/examples/datacatalog/test/resources/categories/categories_put_test.rb +17 -17
  51. data/examples/datacatalog/test/resources/categories_sources/categories_sources_delete_test.rb +25 -25
  52. data/examples/datacatalog/test/resources/categories_sources/categories_sources_get_many_test.rb +5 -5
  53. data/examples/datacatalog/test/resources/categories_sources/categories_sources_get_one_test.rb +15 -15
  54. data/examples/datacatalog/test/resources/categories_sources/categories_sources_post_test.rb +31 -31
  55. data/examples/datacatalog/test/resources/categories_sources/categories_sources_put_test.rb +41 -41
  56. data/examples/datacatalog/test/resources/notes/notes_get_many_test.rb +15 -15
  57. data/examples/datacatalog/test/resources/notes/notes_get_one_test.rb +7 -7
  58. data/examples/datacatalog/test/resources/notes/notes_post_test.rb +12 -12
  59. data/examples/datacatalog/test/resources/sources/sources_delete_test.rb +12 -12
  60. data/examples/datacatalog/test/resources/sources/sources_get_many_search_test.rb +20 -20
  61. data/examples/datacatalog/test/resources/sources/sources_get_many_test.rb +8 -8
  62. data/examples/datacatalog/test/resources/sources/sources_get_one_test.rb +17 -9
  63. data/examples/datacatalog/test/resources/sources/sources_post_test.rb +13 -13
  64. data/examples/datacatalog/test/resources/sources/sources_put_test.rb +30 -30
  65. data/examples/datacatalog/test/resources/sources_usages/sources_usages_delete_test.rb +24 -24
  66. data/examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_filter_test.rb +9 -9
  67. data/examples/datacatalog/test/resources/sources_usages/sources_usages_get_many_test.rb +9 -9
  68. data/examples/datacatalog/test/resources/sources_usages/sources_usages_get_one_test.rb +15 -15
  69. data/examples/datacatalog/test/resources/sources_usages/sources_usages_post_test.rb +16 -16
  70. data/examples/datacatalog/test/resources/sources_usages/sources_usages_put_test.rb +33 -33
  71. data/examples/datacatalog/test/resources/users/users_delete_test.rb +21 -21
  72. data/examples/datacatalog/test/resources/users/users_get_many_test.rb +16 -16
  73. data/examples/datacatalog/test/resources/users/users_get_one_test.rb +8 -8
  74. data/examples/datacatalog/test/resources/users/users_post_test.rb +13 -13
  75. data/examples/datacatalog/test/resources/users/users_put_test.rb +18 -18
  76. data/lib/builder/action_definitions.rb +8 -8
  77. data/lib/builder/helpers.rb +10 -12
  78. data/lib/builder/mongo_helpers.rb +13 -14
  79. data/lib/builder.rb +10 -10
  80. data/lib/exceptions.rb +1 -1
  81. data/lib/resource.rb +20 -20
  82. data/lib/roles.rb +2 -2
  83. data/lib/utility.rb +2 -2
  84. data/notes/permissions.mdown +6 -6
  85. data/sinatra_resource.gemspec +9 -4
  86. data/spec/spec_helper.rb +1 -1
  87. data/spec/utility_spec.rb +2 -2
  88. metadata +30 -4
@@ -5,11 +5,11 @@ class CategoriesGetOneResourceTest < ResourceTestCase
5
5
  include DataCatalog
6
6
 
7
7
  def app; Categories end
8
-
8
+
9
9
  before do
10
10
  @category = create_category
11
11
  end
12
-
12
+
13
13
  after do
14
14
  @category.destroy
15
15
  end
@@ -19,7 +19,7 @@ class CategoriesGetOneResourceTest < ResourceTestCase
19
19
  before do
20
20
  get "/#{@category.id}"
21
21
  end
22
-
22
+
23
23
  use "return 401 because the API key is missing"
24
24
  end
25
25
 
@@ -27,7 +27,7 @@ class CategoriesGetOneResourceTest < ResourceTestCase
27
27
  before do
28
28
  get "/#{@category.id}", :api_key => BAD_API_KEY
29
29
  end
30
-
30
+
31
31
  use "return 401 because the API key is invalid"
32
32
  end
33
33
  end
@@ -37,7 +37,7 @@ class CategoriesGetOneResourceTest < ResourceTestCase
37
37
  before do
38
38
  get "/#{FAKE_ID}", :api_key => api_key_for(role)
39
39
  end
40
-
40
+
41
41
  use "return 404 Not Found with empty response body"
42
42
  end
43
43
 
@@ -50,7 +50,7 @@ class CategoriesGetOneResourceTest < ResourceTestCase
50
50
  )
51
51
  get "/#{@category.id}", :api_key => api_key_for(role)
52
52
  end
53
-
53
+
54
54
  after do
55
55
  @source.destroy
56
56
  @categorization.destroy
@@ -58,7 +58,7 @@ class CategoriesGetOneResourceTest < ResourceTestCase
58
58
 
59
59
  use "return 200 Ok"
60
60
  doc_properties %w(name log id created_at updated_at sources)
61
-
61
+
62
62
  test "body should have correct sources" do
63
63
  expected = [
64
64
  {
@@ -18,7 +18,7 @@ class CategoriesPostResourceTest < ResourceTestCase
18
18
  before do
19
19
  post "/", @valid_params
20
20
  end
21
-
21
+
22
22
  use "return 401 because the API key is missing"
23
23
  use "no change in category count"
24
24
  end
@@ -27,40 +27,40 @@ class CategoriesPostResourceTest < ResourceTestCase
27
27
  before do
28
28
  post "/", @valid_params.merge(:api_key => BAD_API_KEY)
29
29
  end
30
-
30
+
31
31
  use "return 401 because the API key is invalid"
32
32
  use "no change in category count"
33
33
  end
34
34
  end
35
-
35
+
36
36
  %w(basic).each do |role|
37
37
  [:name].each do |missing|
38
38
  context "#{role} : post / but missing #{missing}" do
39
39
  before do
40
40
  post "/", valid_params_for(role).delete_if { |k, v| k == missing }
41
41
  end
42
-
42
+
43
43
  use "return 401 because the API key is unauthorized"
44
44
  use "no change in category count"
45
45
  end
46
46
  end
47
-
47
+
48
48
  [:id, :created_at, :updated_at, :sources, :junk].each do |invalid|
49
49
  context "#{role} : post / but with #{invalid}" do
50
50
  before do
51
51
  post "/", valid_params_for(role).merge(invalid => 9)
52
52
  end
53
-
53
+
54
54
  use "return 401 because the API key is unauthorized"
55
55
  use "no change in category count"
56
56
  end
57
57
  end
58
-
58
+
59
59
  context "#{role} : post / with valid params" do
60
60
  before do
61
61
  post "/", valid_params_for(role)
62
62
  end
63
-
63
+
64
64
  use "return 401 because the API key is unauthorized"
65
65
  use "no change in category count"
66
66
  end
@@ -72,39 +72,39 @@ class CategoriesPostResourceTest < ResourceTestCase
72
72
  before do
73
73
  post "/", valid_params_for(role).delete_if { |k, v| k == missing }
74
74
  end
75
-
75
+
76
76
  use "return 400 Bad Request"
77
77
  use "no change in category count"
78
78
  missing_param missing
79
79
  end
80
80
  end
81
-
81
+
82
82
  [:id, :created_at, :updated_at, :sources, :junk].each do |invalid|
83
83
  context "#{role} : post / but with #{invalid}" do
84
84
  before do
85
85
  post "/", valid_params_for(role).merge(invalid => 9)
86
86
  end
87
-
87
+
88
88
  use "return 400 Bad Request"
89
89
  use "no change in category count"
90
90
  invalid_param invalid
91
91
  end
92
92
  end
93
-
93
+
94
94
  context "#{role} : post / with valid params" do
95
95
  before do
96
96
  post "/", valid_params_for(role)
97
97
  end
98
-
98
+
99
99
  after do
100
100
  Category.find_by_id(parsed_response_body["id"]).destroy
101
101
  end
102
-
102
+
103
103
  use "return 201 Created"
104
104
  location_header "categories"
105
105
  use "one new category"
106
106
  doc_properties %w(name log id created_at updated_at sources)
107
-
107
+
108
108
  test "should set all fields in database" do
109
109
  category = Category.find_by_id(parsed_response_body["id"])
110
110
  raise "Cannot find category" unless category
@@ -112,7 +112,7 @@ class CategoriesPostResourceTest < ResourceTestCase
112
112
  assert_equal value, category[key]
113
113
  end
114
114
  end
115
-
115
+
116
116
  test "callbacks should work" do
117
117
  assert_equal "before_create after_create", parsed_response_body["log"]
118
118
  end
@@ -17,22 +17,22 @@ class CategoriesPutResourceTest < ResourceTestCase
17
17
  after do
18
18
  @category.destroy
19
19
  end
20
-
20
+
21
21
  context "put /:id" do
22
22
  context "anonymous" do
23
23
  before do
24
24
  put "/#{@category.id}", @valid_params
25
25
  end
26
-
26
+
27
27
  use "return 401 because the API key is missing"
28
28
  use "category unchanged"
29
29
  end
30
-
30
+
31
31
  context "incorrect API key" do
32
32
  before do
33
33
  put "/#{@category.id}", @valid_params.merge(:api_key => BAD_API_KEY)
34
34
  end
35
-
35
+
36
36
  use "return 401 because the API key is invalid"
37
37
  use "category unchanged"
38
38
  end
@@ -53,7 +53,7 @@ class CategoriesPutResourceTest < ResourceTestCase
53
53
  before do
54
54
  put "/#{@category.id}", valid_params_for(role).merge(invalid => 9)
55
55
  end
56
-
56
+
57
57
  use "return 401 because the API key is unauthorized"
58
58
  use "category unchanged"
59
59
  end
@@ -64,7 +64,7 @@ class CategoriesPutResourceTest < ResourceTestCase
64
64
  before do
65
65
  put "/#{@category.id}", valid_params_for(role).merge(erase => "")
66
66
  end
67
-
67
+
68
68
  use "return 401 because the API key is unauthorized"
69
69
  use "category unchanged"
70
70
  end
@@ -74,7 +74,7 @@ class CategoriesPutResourceTest < ResourceTestCase
74
74
  before do
75
75
  put "/#{FAKE_ID}", valid_params_for(role)
76
76
  end
77
-
77
+
78
78
  use "return 401 because the API key is unauthorized"
79
79
  use "category unchanged"
80
80
  end
@@ -83,12 +83,12 @@ class CategoriesPutResourceTest < ResourceTestCase
83
83
  before do
84
84
  put "/#{@category.id}", valid_params_for(role)
85
85
  end
86
-
86
+
87
87
  use "return 401 because the API key is unauthorized"
88
88
  use "category unchanged"
89
89
  end
90
90
  end
91
-
91
+
92
92
  %w(curator admin).each do |role|
93
93
  context "#{role} : put /:fake_id with no params" do
94
94
  before do
@@ -114,7 +114,7 @@ class CategoriesPutResourceTest < ResourceTestCase
114
114
  before do
115
115
  put "/#{@category.id}", valid_params_for(role).merge(invalid => 9)
116
116
  end
117
-
117
+
118
118
  use "return 400 Bad Request"
119
119
  use "category unchanged"
120
120
  invalid_param invalid
@@ -126,19 +126,19 @@ class CategoriesPutResourceTest < ResourceTestCase
126
126
  before do
127
127
  put "/#{FAKE_ID}", valid_params_for(role).merge(erase => "")
128
128
  end
129
-
129
+
130
130
  use "return 404 Not Found with empty response body"
131
131
  # (The 404 'takes precedence' over the 400.)
132
132
  use "category unchanged"
133
133
  end
134
- end
134
+ end
135
135
 
136
136
  [:name].each do |erase|
137
137
  context "#{role} : put /:id but blanking out #{erase}" do
138
138
  before do
139
139
  put "/#{@category.id}", valid_params_for(role).merge(erase => "")
140
140
  end
141
-
141
+
142
142
  use "return 400 Bad Request"
143
143
  use "category unchanged"
144
144
  missing_param erase
@@ -149,7 +149,7 @@ class CategoriesPutResourceTest < ResourceTestCase
149
149
  before do
150
150
  put "/#{FAKE_ID}", valid_params_for(role)
151
151
  end
152
-
152
+
153
153
  use "return 404 Not Found with empty response body"
154
154
  use "category unchanged"
155
155
  end
@@ -158,17 +158,17 @@ class CategoriesPutResourceTest < ResourceTestCase
158
158
  before do
159
159
  put "/#{@category.id}", valid_params_for(role)
160
160
  end
161
-
161
+
162
162
  use "return 200 Ok"
163
163
  doc_properties %w(name log id created_at updated_at sources)
164
-
164
+
165
165
  test "should change all fields in database" do
166
166
  category = Category.find_by_id(@category.id)
167
167
  @valid_params.each_pair do |key, value|
168
168
  assert_equal value, category[key]
169
169
  end
170
170
  end
171
-
171
+
172
172
  test "callbacks should work" do
173
173
  assert_equal "before_update after_update", parsed_response_body["log"]
174
174
  end
@@ -5,7 +5,7 @@ class CategoriesSourcesDeleteResourceTest < ResourceTestCase
5
5
  include DataCatalog
6
6
 
7
7
  def app; Categories end
8
-
8
+
9
9
  before do
10
10
  @category = create_category
11
11
  @source = create_source
@@ -36,114 +36,114 @@ class CategoriesSourcesDeleteResourceTest < ResourceTestCase
36
36
  before do
37
37
  delete "/#{@category.id}/sources/#{@source.id}"
38
38
  end
39
-
39
+
40
40
  use "return 401 because the API key is missing"
41
41
  end
42
-
42
+
43
43
  context "incorrect API key" do
44
44
  before do
45
45
  delete "/#{@category.id}/sources/#{@source.id}", :api_key => BAD_API_KEY
46
46
  end
47
-
47
+
48
48
  use "return 401 because the API key is invalid"
49
49
  end
50
50
  end
51
-
51
+
52
52
  %w(basic).each do |role|
53
53
  context "#{role} : delete /:fake_id/sources/:fake_id" do
54
54
  before do
55
55
  delete "/#{FAKE_ID}/sources/#{FAKE_ID}", :api_key => api_key_for(role)
56
56
  end
57
-
57
+
58
58
  use "return 404 Not Found with empty response body"
59
59
  use "no change in source count"
60
60
  end
61
-
61
+
62
62
  context "#{role} : delete /:fake_id/sources/:id" do
63
63
  before do
64
64
  delete "/#{FAKE_ID}/sources/#{@source.id}", :api_key => api_key_for(role)
65
65
  end
66
-
66
+
67
67
  use "return 404 Not Found with empty response body"
68
68
  use "no change in source count"
69
69
  end
70
-
70
+
71
71
  context "#{role} : delete /:id/sources/:fake_id" do
72
72
  before do
73
73
  delete "/#{@category.id}/sources/#{FAKE_ID}", :api_key => api_key_for(role)
74
74
  end
75
-
75
+
76
76
  use "return 401 because the API key is unauthorized"
77
77
  use "no change in source count"
78
78
  end
79
-
79
+
80
80
  context "#{role} : delete /:id/sources/:not_related_id" do
81
81
  before do
82
82
  delete "/#{@category.id}/sources/#{@other_source.id}",
83
83
  :api_key => api_key_for(role)
84
84
  end
85
-
85
+
86
86
  use "return 401 because the API key is unauthorized"
87
87
  use "no change in source count"
88
88
  end
89
-
89
+
90
90
  context "#{role} : delete /:id/sources/:id" do
91
91
  before do
92
92
  delete "/#{@category.id}/sources/#{@source.id}", :api_key => api_key_for(role)
93
93
  end
94
-
94
+
95
95
  use "return 401 because the API key is unauthorized"
96
96
  use "no change in source count"
97
97
  end
98
98
  end
99
-
99
+
100
100
  %w(curator admin).each do |role|
101
101
  context "#{role} : delete /:fake_id/sources/:fake_id" do
102
102
  before do
103
103
  delete "/#{FAKE_ID}/sources/#{FAKE_ID}", :api_key => api_key_for(role)
104
104
  end
105
-
105
+
106
106
  use "return 404 Not Found with empty response body"
107
107
  use "no change in source count"
108
108
  end
109
-
109
+
110
110
  context "#{role} : delete /:fake_id/sources/:id" do
111
111
  before do
112
112
  delete "/#{FAKE_ID}/sources/#{@source.id}", :api_key => api_key_for(role)
113
113
  end
114
-
114
+
115
115
  use "return 404 Not Found with empty response body"
116
116
  use "no change in source count"
117
117
  end
118
-
118
+
119
119
  context "#{role} : delete /:id/sources/:fake_id" do
120
120
  before do
121
121
  delete "/#{@category.id}/sources/#{FAKE_ID}", :api_key => api_key_for(role)
122
122
  end
123
-
123
+
124
124
  use "return 404 Not Found with empty response body"
125
125
  use "no change in source count"
126
126
  end
127
-
127
+
128
128
  context "#{role} : delete /:id/sources/:not_related_id" do
129
129
  before do
130
130
  delete "/#{@category.id}/sources/#{@other_source.id}",
131
131
  :api_key => api_key_for(role)
132
132
  end
133
-
133
+
134
134
  use "return 404 Not Found with empty response body"
135
135
  use "no change in source count"
136
136
  end
137
-
137
+
138
138
  context "#{role} : delete /:id/sources/:id" do
139
139
  before do
140
140
  delete "/#{@category.id}/sources/#{@source.id}",
141
141
  :api_key => api_key_for(role)
142
142
  end
143
-
143
+
144
144
  use "return 204 No Content"
145
145
  use "one less source"
146
146
  end
147
147
  end
148
-
148
+
149
149
  end
@@ -33,7 +33,7 @@ class CategoriesSourcesGetManyResourceTest < ResourceTestCase
33
33
  end
34
34
  @source_titles = ["Source 0", "Source 1", "Source 2"].sort
35
35
  end
36
-
36
+
37
37
  after do
38
38
  @other_categorizations.each { |x| x.destroy }
39
39
  @other_sources.each { |x| x.destroy }
@@ -48,15 +48,15 @@ class CategoriesSourcesGetManyResourceTest < ResourceTestCase
48
48
  before do
49
49
  get "/#{@category.id}/sources"
50
50
  end
51
-
51
+
52
52
  use "return 401 because the API key is missing"
53
53
  end
54
-
54
+
55
55
  context "incorrect API key" do
56
56
  before do
57
57
  get "/#{@category.id}/sources", :api_key => BAD_API_KEY
58
58
  end
59
-
59
+
60
60
  use "return 401 because the API key is invalid"
61
61
  end
62
62
  end
@@ -66,7 +66,7 @@ class CategoriesSourcesGetManyResourceTest < ResourceTestCase
66
66
  before do
67
67
  get "/#{FAKE_ID}/sources", :api_key => api_key_for(role)
68
68
  end
69
-
69
+
70
70
  use "return 404 Not Found with empty response body"
71
71
  end
72
72
 
@@ -5,7 +5,7 @@ class CategoriesSourcesGetOneResourceTest < ResourceTestCase
5
5
  include DataCatalog
6
6
 
7
7
  def app; Categories end
8
-
8
+
9
9
  before do
10
10
  @category = create_category
11
11
  @source = create_source
@@ -35,61 +35,61 @@ class CategoriesSourcesGetOneResourceTest < ResourceTestCase
35
35
  before do
36
36
  get "/#{@category.id}/sources/#{@source.id}"
37
37
  end
38
-
38
+
39
39
  use "return 401 because the API key is missing"
40
40
  end
41
-
41
+
42
42
  context "incorrect API key" do
43
43
  before do
44
44
  get "/#{@category.id}/sources/#{@source.id}", :api_key => BAD_API_KEY
45
45
  end
46
-
46
+
47
47
  use "return 401 because the API key is invalid"
48
48
  end
49
49
  end
50
-
50
+
51
51
  %w(basic curator admin).each do |role|
52
52
  context "#{role} : get /:fake_id/sources/:fake_id" do
53
53
  before do
54
54
  get "/#{FAKE_ID}/sources/#{FAKE_ID}", :api_key => api_key_for(role)
55
55
  end
56
-
56
+
57
57
  use "return 404 Not Found with empty response body"
58
58
  end
59
-
59
+
60
60
  context "#{role} : get /:fake_id/sources/:id" do
61
61
  before do
62
62
  get "/#{FAKE_ID}/sources/#{@source.id}", :api_key => api_key_for(role)
63
63
  end
64
-
64
+
65
65
  use "return 404 Not Found with empty response body"
66
66
  end
67
-
67
+
68
68
  context "#{role} : get /:id/sources/:fake_id" do
69
69
  before do
70
70
  get "/#{@category.id}/sources/#{FAKE_ID}", :api_key => api_key_for(role)
71
71
  end
72
-
72
+
73
73
  use "return 404 Not Found with empty response body"
74
74
  end
75
-
75
+
76
76
  context "#{role} : get /:id/sources/:not_related_id" do
77
77
  before do
78
78
  get "/#{@category.id}/sources/#{@other_source.id}",
79
79
  :api_key => api_key_for(role)
80
80
  end
81
-
81
+
82
82
  use "return 404 Not Found with empty response body"
83
83
  end
84
-
84
+
85
85
  context "#{role} : get /:id/sources/:id" do
86
86
  before do
87
87
  get "/#{@category.id}/sources/#{@source.id}", :api_key => api_key_for(role)
88
88
  end
89
-
89
+
90
90
  use "return 200 Ok"
91
91
  doc_properties %w(title url raw id created_at updated_at)
92
92
  end
93
93
  end
94
-
94
+
95
95
  end