moonrope 1.4.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -0
  3. data/Gemfile.lock +47 -0
  4. data/MIT-LICENCE +20 -0
  5. data/README.md +24 -0
  6. data/bin/moonrope +28 -0
  7. data/docs/authentication.md +114 -0
  8. data/docs/controllers.md +106 -0
  9. data/docs/exceptions.md +27 -0
  10. data/docs/introduction.md +29 -0
  11. data/docs/structures.md +214 -0
  12. data/example/authentication.rb +50 -0
  13. data/example/controllers/meta_controller.rb +14 -0
  14. data/example/controllers/users_controller.rb +92 -0
  15. data/example/structures/pet_structure.rb +12 -0
  16. data/example/structures/user_structure.rb +35 -0
  17. data/html/assets/lock.svg +3 -0
  18. data/html/assets/reset.css +101 -0
  19. data/html/assets/style.css +348 -0
  20. data/html/assets/tool.svg +4 -0
  21. data/html/assets/try.js +151 -0
  22. data/html/authenticators/default.html +191 -0
  23. data/html/controllers/meta/version.html +144 -0
  24. data/html/controllers/meta.html +73 -0
  25. data/html/controllers/users/create.html +341 -0
  26. data/html/controllers/users/list.html +348 -0
  27. data/html/controllers/users/show.html +261 -0
  28. data/html/controllers/users/update.html +387 -0
  29. data/html/controllers/users.html +93 -0
  30. data/html/index.html +166 -0
  31. data/html/moonrope.txt +0 -0
  32. data/html/structures/pet.html +176 -0
  33. data/html/structures/user.html +338 -0
  34. data/lib/moonrope/action.rb +165 -37
  35. data/lib/moonrope/authenticator.rb +39 -0
  36. data/lib/moonrope/base.rb +24 -6
  37. data/lib/moonrope/controller.rb +4 -2
  38. data/lib/moonrope/doc_context.rb +94 -0
  39. data/lib/moonrope/doc_server.rb +123 -0
  40. data/lib/moonrope/dsl/action_dsl.rb +159 -9
  41. data/lib/moonrope/dsl/authenticator_dsl.rb +31 -0
  42. data/lib/moonrope/dsl/base_dsl.rb +21 -18
  43. data/lib/moonrope/dsl/controller_dsl.rb +60 -9
  44. data/lib/moonrope/dsl/filterable_dsl.rb +27 -0
  45. data/lib/moonrope/dsl/structure_dsl.rb +27 -2
  46. data/lib/moonrope/errors.rb +3 -0
  47. data/lib/moonrope/eval_environment.rb +82 -3
  48. data/lib/moonrope/eval_helpers/filter_helper.rb +82 -0
  49. data/lib/moonrope/eval_helpers.rb +28 -5
  50. data/lib/moonrope/guard.rb +35 -0
  51. data/lib/moonrope/html_generator.rb +65 -0
  52. data/lib/moonrope/param_set.rb +11 -1
  53. data/lib/moonrope/rack_middleware.rb +1 -1
  54. data/lib/moonrope/railtie.rb +31 -14
  55. data/lib/moonrope/request.rb +25 -14
  56. data/lib/moonrope/structure.rb +74 -11
  57. data/lib/moonrope/structure_attribute.rb +15 -0
  58. data/lib/moonrope/version.rb +1 -1
  59. data/lib/moonrope.rb +5 -4
  60. data/moonrope.gemspec +21 -0
  61. data/spec/spec_helper.rb +32 -0
  62. data/spec/specs/action_spec.rb +455 -0
  63. data/spec/specs/base_spec.rb +29 -0
  64. data/spec/specs/controller_spec.rb +31 -0
  65. data/spec/specs/param_set_spec.rb +31 -0
  66. data/templates/basic/_action_form.erb +77 -0
  67. data/templates/basic/_errors_table.erb +32 -0
  68. data/templates/basic/_structure_attributes_list.erb +55 -0
  69. data/templates/basic/action.erb +168 -0
  70. data/templates/basic/assets/lock.svg +3 -0
  71. data/templates/basic/assets/reset.css +101 -0
  72. data/templates/basic/assets/style.css +348 -0
  73. data/templates/basic/assets/tool.svg +4 -0
  74. data/templates/basic/assets/try.js +151 -0
  75. data/templates/basic/authenticator.erb +51 -0
  76. data/templates/basic/controller.erb +20 -0
  77. data/templates/basic/index.erb +114 -0
  78. data/templates/basic/layout.erb +46 -0
  79. data/templates/basic/structure.erb +23 -0
  80. data/test/test_helper.rb +81 -0
  81. data/test/tests/action_access_test.rb +63 -0
  82. data/test/tests/actions_test.rb +524 -0
  83. data/test/tests/authenticators_test.rb +87 -0
  84. data/test/tests/base_test.rb +35 -0
  85. data/test/tests/controllers_test.rb +49 -0
  86. data/test/tests/eval_environment_test.rb +136 -0
  87. data/test/tests/evel_helpers_test.rb +60 -0
  88. data/test/tests/examples_test.rb +11 -0
  89. data/test/tests/helpers_test.rb +97 -0
  90. data/test/tests/param_set_test.rb +44 -0
  91. data/test/tests/rack_middleware_test.rb +109 -0
  92. data/test/tests/request_test.rb +232 -0
  93. data/test/tests/structures_param_extensions_test.rb +159 -0
  94. data/test/tests/structures_test.rb +335 -0
  95. metadata +82 -48
@@ -0,0 +1,159 @@
1
+ class StructuresParamExtensionsTest < Test::Unit::TestCase
2
+ def setup
3
+ @base = Moonrope::Base.new do
4
+ structure :animal do
5
+ basic :id
6
+ full :color
7
+ expansion :user, :structure => :user
8
+ end
9
+ structure :user do
10
+ basic :id
11
+ end
12
+ controller :users do
13
+ action :info do
14
+ action do
15
+ structure @auth_user
16
+ end
17
+ end
18
+ end
19
+ end
20
+ @user = User.new(:id => 456)
21
+ @animal = Animal.new(:id => 123, :user => @user, :color => 'blue')
22
+ end
23
+
24
+ def test_no_expansions_occur_by_default_with_array
25
+ request = FakeRequest.new(:params => {'_expansions' => ['user']})
26
+ environment = Moonrope::EvalEnvironment.new(@base, request)
27
+ structure = environment.structure(:animal, @animal)
28
+ assert_equal nil, structure[:user]
29
+ end
30
+
31
+ def test_default_behaviour_when_paramable_is_only_option
32
+ request = FakeRequest.new(:params => {})
33
+ environment = Moonrope::EvalEnvironment.new(@base, request)
34
+ # From nil
35
+ structure = environment.structure(:animal, @animal, :paramable => true)
36
+ assert_equal nil, structure[:user]
37
+ assert_equal nil, structure[:color]
38
+ end
39
+
40
+ def test_no_expansions_occur_by_default_with_true
41
+ request = FakeRequest.new(:params => {'_expansions' => true})
42
+ environment = Moonrope::EvalEnvironment.new(@base, request)
43
+ structure = environment.structure(:animal, @animal)
44
+ assert_equal nil, structure[:user]
45
+ end
46
+
47
+ def test_expansions_use_paramable_value_as_default
48
+ request = FakeRequest.new(:params => {})
49
+ environment = Moonrope::EvalEnvironment.new(@base, request)
50
+ # From nil
51
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => nil})
52
+ assert_equal nil, structure[:user]
53
+ # From true
54
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => true})
55
+ assert_equal Hash, structure[:user].class
56
+ # From a list
57
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => [:user]})
58
+ assert_equal Hash, structure[:user].class
59
+ end
60
+
61
+ def test_all_expansions_are_provided_when_paramable_is_true
62
+ request = FakeRequest.new(:params => {"_expansions" => true})
63
+ environment = Moonrope::EvalEnvironment.new(@base, request)
64
+ structure = environment.structure(:animal, @animal, :paramable => true)
65
+ assert_equal Hash, structure[:user].class
66
+ end
67
+
68
+ def test_using_array_as_expansions_param
69
+ request = FakeRequest.new(:params => {'_expansions' => ['user']})
70
+ environment = Moonrope::EvalEnvironment.new(@base, request)
71
+ # Works
72
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => [:user]})
73
+ assert_equal Hash, structure[:user].class
74
+ # Works
75
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => true})
76
+ assert_equal Hash, structure[:user].class
77
+ # Shouldn't ret
78
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => [:other]})
79
+ assert_equal nil, structure[:user]
80
+ end
81
+
82
+ def test_surpressing_default_expansions_with_empty_array
83
+ request = FakeRequest.new(:params => {'_expansions' => []})
84
+ environment = Moonrope::EvalEnvironment.new(@base, request)
85
+ # Shouldn't return the user structure because we've asked for none
86
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => [:user]})
87
+ assert_equal nil, structure[:user]
88
+ # Shouldn't return the user structure because we've asked for none
89
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => true})
90
+ assert_equal nil, structure[:user]
91
+ end
92
+
93
+ def test_surpressing_default_expansions_with_false
94
+ request = FakeRequest.new(:params => {'_expansions' => false})
95
+ environment = Moonrope::EvalEnvironment.new(@base, request)
96
+ # Shouldn't return the user structure because we've asked for none
97
+ structure = environment.structure(:animal, @animal, :paramable => true)
98
+ assert_equal nil, structure[:user]
99
+ # Shouldn't return the user structure because we've asked for none
100
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => [:user]})
101
+ assert_equal nil, structure[:user]
102
+ # Shouldn't return the user structure because we've asked for none
103
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => true})
104
+ assert_equal nil, structure[:user]
105
+ end
106
+
107
+
108
+ def test_using_true_as_expansions_param_to_return_all_suitable_expansions
109
+ request = FakeRequest.new(:params => {'_expansions' => true})
110
+ environment = Moonrope::EvalEnvironment.new(@base, request)
111
+ # Requesting all with no default
112
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => nil})
113
+ assert_equal Hash, structure[:user].class
114
+ # Requesting all with no array default
115
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => [:user]})
116
+ assert_equal Hash, structure[:user].class
117
+ # Requesting all with true default
118
+ structure = environment.structure(:animal, @animal, :paramable => {:expansions => true})
119
+ assert_equal Hash, structure[:user].class
120
+ end
121
+
122
+ def test_empty_paramable_array
123
+ request = FakeRequest.new(:params => {'_expansions' => true})
124
+ environment = Moonrope::EvalEnvironment.new(@base, request)
125
+ # Should not return anything because paramable doesn't specify expansions
126
+ # as a suitable option
127
+ structure = environment.structure(:animal, @animal, :paramable => {})
128
+ assert_equal nil, structure[:user]
129
+ end
130
+
131
+ def test_returning_full_data_by_default
132
+ request = FakeRequest.new()
133
+ environment = Moonrope::EvalEnvironment.new(@base, request)
134
+ structure = environment.structure(:animal, @animal, :paramable => {:full => true, :expansions => false})
135
+ assert_equal String, structure[:color].class
136
+ end
137
+
138
+ def test_full_value_provides_full_access
139
+ request = FakeRequest.new(:params => {'_full' => true})
140
+ environment = Moonrope::EvalEnvironment.new(@base, request)
141
+ # No full value set
142
+ structure = environment.structure(:animal, @animal, :paramable => {})
143
+ assert_equal nil, structure[:color]
144
+ # With full set as default
145
+ structure = environment.structure(:animal, @animal, :paramable => {:full => true})
146
+ assert_equal String, structure[:color].class
147
+ # With full set as hidden by default
148
+ structure = environment.structure(:animal, @animal, :paramable => {:full => false})
149
+ assert_equal String, structure[:color].class
150
+ end
151
+
152
+ def test_supressing_default_full_data
153
+ request = FakeRequest.new(:params => {'_full' => false})
154
+ environment = Moonrope::EvalEnvironment.new(@base, request)
155
+ structure = environment.structure(:animal, @animal, :paramable => {:full => true})
156
+ assert_equal nil, structure[:color]
157
+ end
158
+
159
+ end
@@ -0,0 +1,335 @@
1
+ class StructuresTest < Test::Unit::TestCase
2
+
3
+ def setup
4
+ @base = Moonrope::Base.new
5
+ end
6
+
7
+ def test_structure_creation
8
+ structure = Moonrope::Structure.new(@base, :user) do
9
+ basic { {:id => o.id} }
10
+ full { {:username => o.username} }
11
+ end
12
+ assert_equal Moonrope::Structure, structure.class
13
+ assert structure.basic.is_a?(Proc)
14
+ assert structure.full.is_a?(Proc)
15
+ end
16
+
17
+ def test_structure_hash_with_basic_data
18
+ structure = Moonrope::Structure.new(@base, :user) do
19
+ basic { {:id => o.id} }
20
+ full { {:username => o.username} }
21
+ end
22
+
23
+ user = User.new(:id => 1, :username => 'adam')
24
+
25
+ hash = structure.hash(user)
26
+ assert_equal user.id, hash[:id]
27
+ assert_equal false, hash.keys.include?(:username)
28
+
29
+ hash = structure.hash(user, :full => true)
30
+ assert_equal user.id, hash[:id]
31
+ assert_equal user.username, hash[:username]
32
+ end
33
+
34
+ def test_passing_the_version
35
+ structure = Moonrope::Structure.new(@base, :user) do
36
+ basic do
37
+ {
38
+ :id => o.id,
39
+ :username => (version == 1 ? o.username : "@#{o.username}")
40
+ }
41
+ end
42
+ end
43
+ user = User.new(:id => 1, :username => 'adam')
44
+ # check version 2
45
+ request = FakeRequest.new(:version => 2)
46
+ hash = structure.hash(user, :request => request)
47
+ assert_equal "@#{user.username}", hash[:username]
48
+ # check version 1
49
+ request = FakeRequest.new(:version => 1)
50
+ hash = structure.hash(user, :request => request)
51
+ assert_equal user.username, hash[:username]
52
+ end
53
+
54
+ def test_structure_hash_with_expansions
55
+ user = User.new(:id => 1, :username => 'dave')
56
+ animal1 = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginder', :user => user)
57
+ animal2 = Animal.new(:id => 2, :name => 'Jess', :color => 'Black & White', :user => user)
58
+ user.animals << animal1
59
+ user.animals << animal2
60
+
61
+ base = Moonrope::Base.new do
62
+ structure :user do
63
+ basic { {:id => o.id, :username => o.username } }
64
+ expansion :animals do
65
+ o.animals.map { |a| structure(:animal, a) }
66
+ end
67
+ end
68
+
69
+ structure :animal do
70
+ basic { {:id => o.id, :name => o.name} }
71
+ full { {:color => o.color, :user => structure(:user, o.user)} }
72
+ end
73
+ end
74
+
75
+ animal_structure = base.structure(:animal)
76
+
77
+ # Test the full animal structure includes the user
78
+ hash = animal_structure.hash(animal1, :full => true)
79
+ assert_equal animal1.name, hash[:name]
80
+ assert_equal user.username, hash[:user][:username]
81
+
82
+ # Test that a user structure with expansions includes the
83
+ # animals which are included
84
+ user_structure = base.structure(:user)
85
+ hash = user_structure.hash(user, :expansions => true)
86
+ assert hash[:animals].is_a?(Array), "hash[:animals] is not an array"
87
+ assert_equal hash[:animals][0][:name], 'Fido'
88
+ assert_equal hash[:animals][1][:name], 'Jess'
89
+
90
+ # Test that when expansions was false
91
+ hash = user_structure.hash(user, :expansions => false)
92
+ assert_equal nil, hash[:animals], "hash[:animals] is present"
93
+
94
+ # Test cases when expansions are provided as an array
95
+ hash = user_structure.hash(user, :expansions => [:something, :else])
96
+ assert_equal nil, hash[:animals], "hash[:animals] is present"
97
+ hash = user_structure.hash(user, :expansions => [:animals])
98
+ assert_equal Array, hash[:animals].class, "hash[:animals] is present"
99
+ end
100
+
101
+ def test_structured_structures
102
+ base = Moonrope::Base.new do
103
+ structure :animal do
104
+ basic :id, :description => "The ID of the aniaml object", :example => 1, :type => Integer
105
+ basic :name, :description => "The name of the animal", :example => "Boris", :type => String
106
+ full :hair_color, :description => "The color of the animal's hair", :example => "Blue", :type => String, :source_attribute => :color
107
+ expansion :user, :type => Hash, :structure => :user
108
+
109
+ group :colors do
110
+ basic :eye, :example => "Green", :type => String, :source_attribute => :color
111
+ full :hair, :example => "Blue", :type => String, :source_attribute => :color
112
+ expansion :owner, :structure => :user, :type => Hash, :source_attribute => :user
113
+ end
114
+ end
115
+
116
+ structure :user do
117
+ basic :id, :example => 1, :type => Integer
118
+ basic :username, :example => "adam", :type => String
119
+ expansion :animals, :type => Array, :structure => :animal, :structure_opts => {:full => true}
120
+ end
121
+ end
122
+
123
+ user = User.new(:id => 1, :username => 'adam', :private_code => 9876)
124
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger', :user => user)
125
+ user.animals << animal
126
+ animal2 = Animal.new(:id => 2, :name => 'Boris', :color => 'Black', :user => user)
127
+ user.animals << animal2
128
+
129
+ # a full hash with all expansions
130
+ hash = base.structure(:animal).hash(animal, :full => true, :expansions => true)
131
+ # standard attributes
132
+ assert_equal 1, hash[:id]
133
+ assert_equal 'Fido', hash[:name]
134
+ assert_equal 'Ginger', hash[:hair_color]
135
+ # expansion in a group
136
+ assert_equal Hash, hash[:colors][:owner].class
137
+ # normal expansion
138
+ assert_equal Hash, hash[:user].class
139
+ assert_equal 'adam', hash[:user][:username]
140
+ assert_equal nil, hash[:user][:animals]
141
+ # group
142
+ assert_equal Hash, hash[:colors].class
143
+ assert_equal 'Ginger', hash[:colors][:eye]
144
+ assert_equal 'Ginger', hash[:colors][:hair]
145
+
146
+ # basic hash
147
+ hash = base.structure(:animal).hash(animal)
148
+ # normal attributes
149
+ assert_equal 1, hash[:id]
150
+ assert_equal 'Fido', hash[:name]
151
+ # groups
152
+ assert_equal Hash, hash[:colors].class
153
+ assert_equal 'Ginger', hash[:colors][:eye]
154
+ assert_equal nil, hash[:colors][:hair]
155
+
156
+ # a full user hash with all expansions
157
+ hash = base.structure(:user).hash(user, :full => true, :expansions => true)
158
+ # arrays
159
+ assert_equal Array, hash[:animals].class
160
+ assert_equal 'Fido', hash[:animals][0][:name]
161
+ assert_equal 'Boris', hash[:animals][1][:name]
162
+ assert_equal 'Black', hash[:animals][1][:hair_color]
163
+ end
164
+
165
+ def test_ifs
166
+ base = Moonrope::Base.new do
167
+ structure :animal do
168
+ condition Proc.new { true } do
169
+ basic :id1, :example => 1, :type => Integer, :source_attribute => :id
170
+ end
171
+
172
+ condition Proc.new { false } do
173
+ basic :id2, :example => 2, :type => Integer, :source_attribute => :id
174
+ end
175
+ end
176
+ end
177
+
178
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
179
+ hash = base.structure(:animal).hash(animal)
180
+ assert_equal 1, hash[:id1]
181
+ assert_equal nil, hash[:id2]
182
+ end
183
+
184
+ def test_ifs_with_expansion
185
+ base = Moonrope::Base.new do
186
+ structure :animal do
187
+ condition Proc.new { true } do
188
+ expansion :example do
189
+ {:hello => 'world'}
190
+ end
191
+ end
192
+
193
+ condition Proc.new { false } do
194
+ expansion :example2 do
195
+ {:hello => 'land'}
196
+ end
197
+ end
198
+ end
199
+ end
200
+
201
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
202
+ hash = base.structure(:animal).hash(animal, :expansions => true)
203
+ assert_equal true, hash.keys.include?(:example)
204
+ assert_equal false, hash.keys.include?(:example2)
205
+ end
206
+
207
+ def test_condition_with_description
208
+ base = Moonrope::Base.new do
209
+ structure :animal do
210
+ condition Proc.new { false }, "An example description" do
211
+ basic :id
212
+ expansion :example do
213
+ {:hello => 'land'}
214
+ end
215
+ end
216
+ end
217
+ end
218
+
219
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
220
+ hash = base.structure(:animal).hash(animal, :expansions => true)
221
+ assert_equal false, hash.keys.include?(:example)
222
+ assert_equal false, hash.keys.include?(:id)
223
+ end
224
+
225
+ def test_condition_with_access_rule
226
+ base = Moonrope::Base.new do
227
+ authenticator :default do
228
+ lookup { true }
229
+ rule(:default, "NotPermitted") { true }
230
+ rule(:false_rule, "MustNotBeFalse") { false }
231
+ end
232
+ structure :animal do
233
+ condition :default => :false_rule do
234
+ basic :id
235
+ end
236
+
237
+ condition :default => :default do
238
+ basic :name
239
+ end
240
+ end
241
+ end
242
+
243
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
244
+ hash = base.structure(:animal).hash(animal, :expansions => true)
245
+ assert_equal false, hash.keys.include?(:id)
246
+ assert_equal true, hash.keys.include?(:name)
247
+ end
248
+
249
+ def test_condition_with_access_rule_and_default_authenticator
250
+ base = Moonrope::Base.new do
251
+ authenticator :default do
252
+ lookup { true }
253
+ rule(:default, "NotPermitted") { true }
254
+ rule(:false_rule, "MustNotBeFalse") { false }
255
+ end
256
+ structure :animal do
257
+ condition :false_rule do
258
+ basic :id
259
+ end
260
+
261
+ condition :default do
262
+ basic :name
263
+ end
264
+ end
265
+ end
266
+
267
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
268
+ hash = base.structure(:animal).hash(animal, :expansions => true)
269
+ assert_equal false, hash.keys.include?(:id)
270
+ assert_equal true, hash.keys.include?(:name)
271
+ end
272
+
273
+
274
+ def test_scopes
275
+ base = Moonrope::Base.new do
276
+ structure :animal do
277
+ group :group1 do
278
+ basic :id
279
+ basic :name
280
+ group :group2 do
281
+ basic :id_g2, :source_attribute => :id
282
+ basic :name2, :source_attribute => :name
283
+ group :group3 do
284
+ basic :id_g3, :source_attribute => :id
285
+ basic :name3, :source_attribute => :name
286
+ end
287
+ end
288
+ end
289
+
290
+ condition Proc.new { false } do
291
+ basic :id2, :name => :id
292
+ end
293
+ end
294
+ end
295
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
296
+ hash = base.structure(:animal).hash(animal, :full => true)
297
+
298
+ assert_equal 1, hash[:group1][:id]
299
+ assert_equal 1, hash[:group1][:group2][:id_g2]
300
+ assert_equal 1, hash[:group1][:group2][:group3][:id_g3]
301
+
302
+ assert_equal 'Fido', hash[:group1][:name]
303
+ assert_equal 'Fido', hash[:group1][:group2][:name2]
304
+ assert_equal 'Fido', hash[:group1][:group2][:group3][:name3]
305
+
306
+ # id2 shouldn't exist because it's if block returns false
307
+ assert_equal false, hash.keys.include?(:id2)
308
+ end
309
+
310
+ def test_passing_values_from_the_definition
311
+ base = Moonrope::Base.new do
312
+ structure :animal do
313
+ basic :example, :value => 1234
314
+ basic :example_with_block, :value => Proc.new { "#{o.name}!!!" }
315
+ end
316
+ end
317
+
318
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
319
+ hash = base.structure(:animal).hash(animal)
320
+ assert_equal 1234, hash[:example]
321
+ assert_equal "Fido!!!", hash[:example_with_block]
322
+ end
323
+
324
+ def test_creating_a_structure_with_description
325
+ base = Moonrope::Base.new do
326
+ structure :animal do
327
+ basic :example, "Hello there!", :value => 1234
328
+ basic :example2, :description => "Bananas!"
329
+ end
330
+ end
331
+ assert_equal "Hello there!", base.structure(:animal).attributes[:basic].select { |a| a.name == :example }.first.description
332
+ assert_equal "Bananas!", base.structure(:animal).attributes[:basic].select { |a| a.name == :example2 }.first.description
333
+ end
334
+
335
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moonrope
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2016-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -28,14 +28,14 @@ dependencies:
28
28
  name: rack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.4'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.4'
41
41
  - !ruby/object:Gem::Dependency
@@ -66,71 +66,70 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.3'
69
- - !ruby/object:Gem::Dependency
70
- name: test-unit
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '2.5'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '2.5'
83
- - !ruby/object:Gem::Dependency
84
- name: yard
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.8'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.8'
97
- - !ruby/object:Gem::Dependency
98
- name: rack-test
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
69
  description: A full library allowing you to create sexy DSLs to define your RPC-like
112
70
  APIs.
113
71
  email:
114
72
  - adam@atechmedia.com
115
- executables: []
73
+ executables:
74
+ - moonrope
116
75
  extensions: []
117
76
  extra_rdoc_files: []
118
77
  files:
78
+ - Gemfile
79
+ - Gemfile.lock
80
+ - MIT-LICENCE
81
+ - README.md
119
82
  - Rakefile
83
+ - bin/moonrope
84
+ - docs/authentication.md
85
+ - docs/controllers.md
86
+ - docs/exceptions.md
87
+ - docs/introduction.md
88
+ - docs/structures.md
89
+ - example/authentication.rb
90
+ - example/controllers/meta_controller.rb
91
+ - example/controllers/users_controller.rb
92
+ - example/structures/pet_structure.rb
93
+ - example/structures/user_structure.rb
94
+ - html/assets/lock.svg
95
+ - html/assets/reset.css
96
+ - html/assets/style.css
97
+ - html/assets/tool.svg
98
+ - html/assets/try.js
99
+ - html/authenticators/default.html
100
+ - html/controllers/meta.html
101
+ - html/controllers/meta/version.html
102
+ - html/controllers/users.html
103
+ - html/controllers/users/create.html
104
+ - html/controllers/users/list.html
105
+ - html/controllers/users/show.html
106
+ - html/controllers/users/update.html
107
+ - html/index.html
108
+ - html/moonrope.txt
109
+ - html/structures/pet.html
110
+ - html/structures/user.html
120
111
  - lib/moonrope.rb
121
112
  - lib/moonrope/action.rb
122
113
  - lib/moonrope/action_result.rb
114
+ - lib/moonrope/authenticator.rb
123
115
  - lib/moonrope/base.rb
124
116
  - lib/moonrope/before_action.rb
125
117
  - lib/moonrope/controller.rb
118
+ - lib/moonrope/doc_context.rb
119
+ - lib/moonrope/doc_server.rb
126
120
  - lib/moonrope/dsl/action_dsl.rb
121
+ - lib/moonrope/dsl/authenticator_dsl.rb
127
122
  - lib/moonrope/dsl/base_dsl.rb
128
123
  - lib/moonrope/dsl/controller_dsl.rb
124
+ - lib/moonrope/dsl/filterable_dsl.rb
129
125
  - lib/moonrope/dsl/structure_dsl.rb
130
126
  - lib/moonrope/errors.rb
131
127
  - lib/moonrope/eval_environment.rb
132
128
  - lib/moonrope/eval_helpers.rb
129
+ - lib/moonrope/eval_helpers/filter_helper.rb
130
+ - lib/moonrope/guard.rb
133
131
  - lib/moonrope/helper.rb
132
+ - lib/moonrope/html_generator.rb
134
133
  - lib/moonrope/param_set.rb
135
134
  - lib/moonrope/rack_middleware.rb
136
135
  - lib/moonrope/railtie.rb
@@ -138,6 +137,41 @@ files:
138
137
  - lib/moonrope/structure.rb
139
138
  - lib/moonrope/structure_attribute.rb
140
139
  - lib/moonrope/version.rb
140
+ - moonrope.gemspec
141
+ - spec/spec_helper.rb
142
+ - spec/specs/action_spec.rb
143
+ - spec/specs/base_spec.rb
144
+ - spec/specs/controller_spec.rb
145
+ - spec/specs/param_set_spec.rb
146
+ - templates/basic/_action_form.erb
147
+ - templates/basic/_errors_table.erb
148
+ - templates/basic/_structure_attributes_list.erb
149
+ - templates/basic/action.erb
150
+ - templates/basic/assets/lock.svg
151
+ - templates/basic/assets/reset.css
152
+ - templates/basic/assets/style.css
153
+ - templates/basic/assets/tool.svg
154
+ - templates/basic/assets/try.js
155
+ - templates/basic/authenticator.erb
156
+ - templates/basic/controller.erb
157
+ - templates/basic/index.erb
158
+ - templates/basic/layout.erb
159
+ - templates/basic/structure.erb
160
+ - test/test_helper.rb
161
+ - test/tests/action_access_test.rb
162
+ - test/tests/actions_test.rb
163
+ - test/tests/authenticators_test.rb
164
+ - test/tests/base_test.rb
165
+ - test/tests/controllers_test.rb
166
+ - test/tests/eval_environment_test.rb
167
+ - test/tests/evel_helpers_test.rb
168
+ - test/tests/examples_test.rb
169
+ - test/tests/helpers_test.rb
170
+ - test/tests/param_set_test.rb
171
+ - test/tests/rack_middleware_test.rb
172
+ - test/tests/request_test.rb
173
+ - test/tests/structures_param_extensions_test.rb
174
+ - test/tests/structures_test.rb
141
175
  homepage: http://adamcooke.io
142
176
  licenses:
143
177
  - MIT
@@ -158,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
192
  version: '0'
159
193
  requirements: []
160
194
  rubyforge_project:
161
- rubygems_version: 2.2.2
195
+ rubygems_version: 2.4.5
162
196
  signing_key:
163
197
  specification_version: 4
164
198
  summary: An API server DSL.