moonrope 1.3.3 → 2.0.2

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 (78) hide show
  1. checksums.yaml +5 -5
  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/lib/moonrope.rb +5 -4
  18. data/lib/moonrope/action.rb +170 -40
  19. data/lib/moonrope/authenticator.rb +42 -0
  20. data/lib/moonrope/base.rb +67 -6
  21. data/lib/moonrope/controller.rb +4 -2
  22. data/lib/moonrope/doc_context.rb +94 -0
  23. data/lib/moonrope/doc_server.rb +123 -0
  24. data/lib/moonrope/dsl/action_dsl.rb +159 -9
  25. data/lib/moonrope/dsl/authenticator_dsl.rb +35 -0
  26. data/lib/moonrope/dsl/base_dsl.rb +21 -18
  27. data/lib/moonrope/dsl/controller_dsl.rb +60 -9
  28. data/lib/moonrope/dsl/filterable_dsl.rb +27 -0
  29. data/lib/moonrope/dsl/structure_dsl.rb +28 -2
  30. data/lib/moonrope/errors.rb +13 -0
  31. data/lib/moonrope/eval_environment.rb +82 -3
  32. data/lib/moonrope/eval_helpers.rb +47 -8
  33. data/lib/moonrope/eval_helpers/filter_helper.rb +82 -0
  34. data/lib/moonrope/guard.rb +35 -0
  35. data/lib/moonrope/html_generator.rb +65 -0
  36. data/lib/moonrope/param_set.rb +11 -1
  37. data/lib/moonrope/rack_middleware.rb +66 -37
  38. data/lib/moonrope/railtie.rb +31 -14
  39. data/lib/moonrope/request.rb +43 -15
  40. data/lib/moonrope/structure.rb +100 -18
  41. data/lib/moonrope/structure_attribute.rb +39 -0
  42. data/lib/moonrope/version.rb +1 -1
  43. data/moonrope.gemspec +21 -0
  44. data/spec/spec_helper.rb +32 -0
  45. data/spec/specs/action_spec.rb +455 -0
  46. data/spec/specs/base_spec.rb +29 -0
  47. data/spec/specs/controller_spec.rb +31 -0
  48. data/spec/specs/param_set_spec.rb +31 -0
  49. data/templates/basic/_action_form.erb +77 -0
  50. data/templates/basic/_errors_table.erb +32 -0
  51. data/templates/basic/_structure_attributes_list.erb +55 -0
  52. data/templates/basic/action.erb +168 -0
  53. data/templates/basic/assets/lock.svg +3 -0
  54. data/templates/basic/assets/reset.css +101 -0
  55. data/templates/basic/assets/style.css +348 -0
  56. data/templates/basic/assets/tool.svg +4 -0
  57. data/templates/basic/assets/try.js +157 -0
  58. data/templates/basic/authenticator.erb +52 -0
  59. data/templates/basic/controller.erb +20 -0
  60. data/templates/basic/index.erb +114 -0
  61. data/templates/basic/layout.erb +46 -0
  62. data/templates/basic/structure.erb +23 -0
  63. data/test/test_helper.rb +81 -0
  64. data/test/tests/action_access_test.rb +63 -0
  65. data/test/tests/actions_test.rb +524 -0
  66. data/test/tests/authenticators_test.rb +87 -0
  67. data/test/tests/base_test.rb +35 -0
  68. data/test/tests/controllers_test.rb +49 -0
  69. data/test/tests/eval_environment_test.rb +136 -0
  70. data/test/tests/evel_helpers_test.rb +60 -0
  71. data/test/tests/examples_test.rb +11 -0
  72. data/test/tests/helpers_test.rb +97 -0
  73. data/test/tests/param_set_test.rb +44 -0
  74. data/test/tests/rack_middleware_test.rb +131 -0
  75. data/test/tests/request_test.rb +232 -0
  76. data/test/tests/structures_param_extensions_test.rb +159 -0
  77. data/test/tests/structures_test.rb +398 -0
  78. metadata +71 -56
@@ -0,0 +1,398 @@
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
+
164
+ # a full user hash with named extensions
165
+ hash = base.structure(:user).hash(user, :full => true, :expansions => [:animals])
166
+ # arrays
167
+ assert_equal Array, hash[:animals].class
168
+ assert_equal 'Fido', hash[:animals][0][:name]
169
+ assert_equal 'Boris', hash[:animals][1][:name]
170
+ assert_equal 'Black', hash[:animals][1][:hair_color]
171
+ end
172
+
173
+ def test_ifs
174
+ base = Moonrope::Base.new do
175
+ structure :animal do
176
+ condition Proc.new { true } do
177
+ basic :id1, :example => 1, :type => Integer, :source_attribute => :id
178
+ end
179
+
180
+ condition Proc.new { false } do
181
+ basic :id2, :example => 2, :type => Integer, :source_attribute => :id
182
+ end
183
+ end
184
+ end
185
+
186
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
187
+ hash = base.structure(:animal).hash(animal)
188
+ assert_equal 1, hash[:id1]
189
+ assert_equal nil, hash[:id2]
190
+ end
191
+
192
+ def test_ifs_with_expansion
193
+ base = Moonrope::Base.new do
194
+ structure :animal do
195
+ condition Proc.new { true } do
196
+ expansion :example do
197
+ {:hello => 'world'}
198
+ end
199
+ end
200
+
201
+ condition Proc.new { false } do
202
+ expansion :example2 do
203
+ {:hello => 'land'}
204
+ end
205
+ end
206
+ end
207
+ end
208
+
209
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
210
+ hash = base.structure(:animal).hash(animal, :expansions => true)
211
+ assert_equal true, hash.keys.include?(:example)
212
+ assert_equal false, hash.keys.include?(:example2)
213
+ end
214
+
215
+ def test_condition_with_description
216
+ base = Moonrope::Base.new do
217
+ structure :animal do
218
+ condition Proc.new { false }, "An example description" do
219
+ basic :id
220
+ expansion :example do
221
+ {:hello => 'land'}
222
+ end
223
+ end
224
+ end
225
+ end
226
+
227
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
228
+ hash = base.structure(:animal).hash(animal, :expansions => true)
229
+ assert_equal false, hash.keys.include?(:example)
230
+ assert_equal false, hash.keys.include?(:id)
231
+ end
232
+
233
+ def test_condition_with_access_rule
234
+ base = Moonrope::Base.new do
235
+ authenticator :default do
236
+ lookup { true }
237
+ rule(:default, "NotPermitted") { true }
238
+ rule(:false_rule, "MustNotBeFalse") { false }
239
+ end
240
+ structure :animal do
241
+ condition :default => :false_rule do
242
+ basic :id
243
+ end
244
+
245
+ condition :default => :default do
246
+ basic :name
247
+ end
248
+ end
249
+ end
250
+
251
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
252
+ hash = base.structure(:animal).hash(animal, :expansions => true)
253
+ assert_equal false, hash.keys.include?(:id)
254
+ assert_equal true, hash.keys.include?(:name)
255
+ end
256
+
257
+ def test_condition_with_access_rule_and_default_authenticator
258
+ base = Moonrope::Base.new do
259
+ authenticator :default do
260
+ lookup { true }
261
+ rule(:default, "NotPermitted") { true }
262
+ rule(:false_rule, "MustNotBeFalse") { false }
263
+ end
264
+ structure :animal do
265
+ condition :false_rule do
266
+ basic :id
267
+ end
268
+
269
+ condition :default do
270
+ basic :name
271
+ end
272
+ end
273
+ end
274
+
275
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
276
+ hash = base.structure(:animal).hash(animal, :expansions => true)
277
+ assert_equal false, hash.keys.include?(:id)
278
+ assert_equal true, hash.keys.include?(:name)
279
+ end
280
+
281
+
282
+ def test_scopes
283
+ base = Moonrope::Base.new do
284
+ structure :animal do
285
+ group :group1 do
286
+ basic :id
287
+ basic :name
288
+ group :group2 do
289
+ basic :id_g2, :source_attribute => :id
290
+ basic :name2, :source_attribute => :name
291
+ group :group3 do
292
+ basic :id_g3, :source_attribute => :id
293
+ basic :name3, :source_attribute => :name
294
+ end
295
+ end
296
+ end
297
+
298
+ condition Proc.new { false } do
299
+ basic :id2, :name => :id
300
+ end
301
+ end
302
+ end
303
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
304
+ hash = base.structure(:animal).hash(animal, :full => true)
305
+
306
+ assert_equal 1, hash[:group1][:id]
307
+ assert_equal 1, hash[:group1][:group2][:id_g2]
308
+ assert_equal 1, hash[:group1][:group2][:group3][:id_g3]
309
+
310
+ assert_equal 'Fido', hash[:group1][:name]
311
+ assert_equal 'Fido', hash[:group1][:group2][:name2]
312
+ assert_equal 'Fido', hash[:group1][:group2][:group3][:name3]
313
+
314
+ # id2 shouldn't exist because it's if block returns false
315
+ assert_equal false, hash.keys.include?(:id2)
316
+ end
317
+
318
+ def test_passing_values_from_the_definition
319
+ base = Moonrope::Base.new do
320
+ structure :animal do
321
+ basic :example, :value => 1234
322
+ basic :example_with_block, :value => Proc.new { "#{o.name}!!!" }
323
+ end
324
+ end
325
+
326
+ animal = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger')
327
+ hash = base.structure(:animal).hash(animal)
328
+ assert_equal 1234, hash[:example]
329
+ assert_equal "Fido!!!", hash[:example_with_block]
330
+ end
331
+
332
+ def test_creating_a_structure_with_description
333
+ base = Moonrope::Base.new do
334
+ structure :animal do
335
+ basic :example, "Hello there!", :value => 1234
336
+ basic :example2, :description => "Bananas!"
337
+ end
338
+ end
339
+ assert_equal "Hello there!", base.structure(:animal).attributes[:basic].select { |a| a.name == :example }.first.description
340
+ assert_equal "Bananas!", base.structure(:animal).attributes[:basic].select { |a| a.name == :example2 }.first.description
341
+ end
342
+
343
+ def test_mutating_values
344
+ base = Moonrope::Base.new do
345
+ structure :animal do
346
+ basic :name, :mutation => :downcase
347
+ end
348
+ end
349
+ assert_equal 'fido', base.structure(:animal).hash(Animal.new(:name => 'FIDO'))[:name]
350
+ end
351
+
352
+ def test_auto_mutating_values
353
+ base = Moonrope::Base.new do
354
+ structure :animal do
355
+ basic :name, :type => :unix_timestamp
356
+ end
357
+ end
358
+ assert_equal 1234567890, base.structure(:animal).hash(Animal.new(:name => Time.at(1234567890)))[:name]
359
+ end
360
+
361
+ def test_manually_selecting_attributes
362
+ base = Moonrope::Base.new do
363
+ structure :animal do
364
+ basic :id
365
+ basic :name
366
+ end
367
+ end
368
+ hash = base.structure(:animal).hash(Animal.new(:id => 12345, :name => "Fido"), :attributes => [:id])
369
+ assert_equal 12345, hash[:id]
370
+ assert_equal false, hash.has_key?(:name)
371
+ end
372
+
373
+
374
+ def test_setting_options_for_embedded_expansions
375
+ user = User.new(:id => 1, :username => 'dave')
376
+ animal1 = Animal.new(:id => 1, :name => 'Fido', :color => 'Ginger', :user => user)
377
+ animal2 = Animal.new(:id => 2, :name => 'Jess', :color => 'Black & White', :user => user)
378
+ user.animals << animal1
379
+ user.animals << animal2
380
+
381
+ base = Moonrope::Base.new do
382
+ structure :user do
383
+ basic { {:id => o.id, :username => o.username } }
384
+ expansion :animals, :structure => :animal
385
+ end
386
+
387
+ structure :animal do
388
+ basic :id
389
+ basic :name
390
+ full :color
391
+ end
392
+ end
393
+
394
+ hash = base.structure(:user).hash(user, :expansions => [{:animals => {:full => true}}])
395
+ assert_equal 'Ginger', hash[:animals][0][:color]
396
+ end
397
+
398
+ end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moonrope
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 2.0.2
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-03-04 00:00:00.000000000 Z
11
+ date: 2020-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
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
@@ -56,81 +56,63 @@ dependencies:
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '10.3'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
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
- - - "~>"
59
+ - - ">="
102
60
  - !ruby/object:Gem::Version
103
61
  version: '0'
104
62
  type: :development
105
63
  prerelease: false
106
64
  version_requirements: !ruby/object:Gem::Requirement
107
65
  requirements:
108
- - - "~>"
66
+ - - ">="
109
67
  - !ruby/object:Gem::Version
110
68
  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
120
94
  - lib/moonrope.rb
121
95
  - lib/moonrope/action.rb
122
96
  - lib/moonrope/action_result.rb
97
+ - lib/moonrope/authenticator.rb
123
98
  - lib/moonrope/base.rb
124
99
  - lib/moonrope/before_action.rb
125
100
  - lib/moonrope/controller.rb
101
+ - lib/moonrope/doc_context.rb
102
+ - lib/moonrope/doc_server.rb
126
103
  - lib/moonrope/dsl/action_dsl.rb
104
+ - lib/moonrope/dsl/authenticator_dsl.rb
127
105
  - lib/moonrope/dsl/base_dsl.rb
128
106
  - lib/moonrope/dsl/controller_dsl.rb
107
+ - lib/moonrope/dsl/filterable_dsl.rb
129
108
  - lib/moonrope/dsl/structure_dsl.rb
130
109
  - lib/moonrope/errors.rb
131
110
  - lib/moonrope/eval_environment.rb
132
111
  - lib/moonrope/eval_helpers.rb
112
+ - lib/moonrope/eval_helpers/filter_helper.rb
113
+ - lib/moonrope/guard.rb
133
114
  - lib/moonrope/helper.rb
115
+ - lib/moonrope/html_generator.rb
134
116
  - lib/moonrope/param_set.rb
135
117
  - lib/moonrope/rack_middleware.rb
136
118
  - lib/moonrope/railtie.rb
@@ -138,6 +120,41 @@ files:
138
120
  - lib/moonrope/structure.rb
139
121
  - lib/moonrope/structure_attribute.rb
140
122
  - lib/moonrope/version.rb
123
+ - moonrope.gemspec
124
+ - spec/spec_helper.rb
125
+ - spec/specs/action_spec.rb
126
+ - spec/specs/base_spec.rb
127
+ - spec/specs/controller_spec.rb
128
+ - spec/specs/param_set_spec.rb
129
+ - templates/basic/_action_form.erb
130
+ - templates/basic/_errors_table.erb
131
+ - templates/basic/_structure_attributes_list.erb
132
+ - templates/basic/action.erb
133
+ - templates/basic/assets/lock.svg
134
+ - templates/basic/assets/reset.css
135
+ - templates/basic/assets/style.css
136
+ - templates/basic/assets/tool.svg
137
+ - templates/basic/assets/try.js
138
+ - templates/basic/authenticator.erb
139
+ - templates/basic/controller.erb
140
+ - templates/basic/index.erb
141
+ - templates/basic/layout.erb
142
+ - templates/basic/structure.erb
143
+ - test/test_helper.rb
144
+ - test/tests/action_access_test.rb
145
+ - test/tests/actions_test.rb
146
+ - test/tests/authenticators_test.rb
147
+ - test/tests/base_test.rb
148
+ - test/tests/controllers_test.rb
149
+ - test/tests/eval_environment_test.rb
150
+ - test/tests/evel_helpers_test.rb
151
+ - test/tests/examples_test.rb
152
+ - test/tests/helpers_test.rb
153
+ - test/tests/param_set_test.rb
154
+ - test/tests/rack_middleware_test.rb
155
+ - test/tests/request_test.rb
156
+ - test/tests/structures_param_extensions_test.rb
157
+ - test/tests/structures_test.rb
141
158
  homepage: http://adamcooke.io
142
159
  licenses:
143
160
  - MIT
@@ -157,10 +174,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
174
  - !ruby/object:Gem::Version
158
175
  version: '0'
159
176
  requirements: []
160
- rubyforge_project:
161
- rubygems_version: 2.2.2
177
+ rubygems_version: 3.0.3
162
178
  signing_key:
163
179
  specification_version: 4
164
180
  summary: An API server DSL.
165
181
  test_files: []
166
- has_rdoc: