api_sketch 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +7 -2
  4. data/README.md +63 -9
  5. data/api_sketch.gemspec +0 -1
  6. data/examples/api_project/config/initializers/shared_blocks.rb +15 -0
  7. data/examples/api_project/resources/places.rb +138 -0
  8. data/examples/api_project/resources/users/points/stats.rb +30 -0
  9. data/examples/api_project/resources/users/points.rb +32 -0
  10. data/examples/api_project/resources/users.rb +341 -0
  11. data/lib/api_sketch/config.rb +1 -1
  12. data/lib/api_sketch/dsl/attribute_parser.rb +19 -0
  13. data/lib/api_sketch/dsl/attributes.rb +45 -0
  14. data/lib/api_sketch/dsl/base.rb +8 -0
  15. data/lib/api_sketch/dsl/complex_attribute_parser.rb +11 -0
  16. data/lib/api_sketch/dsl/headers.rb +17 -0
  17. data/lib/api_sketch/dsl/parameters.rb +31 -0
  18. data/lib/api_sketch/dsl/responses.rb +22 -0
  19. data/lib/api_sketch/dsl.rb +27 -165
  20. data/lib/api_sketch/examples_server.rb +1 -1
  21. data/lib/api_sketch/generators/base.rb +42 -0
  22. data/lib/api_sketch/{generators.rb → generators/bootstrap.rb} +2 -46
  23. data/lib/api_sketch/model/attribute.rb +42 -0
  24. data/lib/api_sketch/model/base.rb +17 -0
  25. data/lib/api_sketch/model/header.rb +7 -0
  26. data/lib/api_sketch/model/parameters.rb +50 -0
  27. data/lib/api_sketch/model/resource.rb +99 -0
  28. data/lib/api_sketch/model/response.rb +12 -0
  29. data/lib/api_sketch/model/shared_block.rb +17 -0
  30. data/lib/api_sketch/model.rb +0 -242
  31. data/lib/api_sketch/{renderers.rb → response_renderer.rb} +0 -0
  32. data/lib/api_sketch/version.rb +1 -1
  33. data/lib/api_sketch.rb +20 -3
  34. data/spec/lib/api_sketch/dsl/attribute_parser_spec.rb +14 -0
  35. data/spec/lib/api_sketch/dsl/attributes_spec.rb +14 -0
  36. data/spec/lib/api_sketch/dsl/complex_attribute_parser_spec.rb +14 -0
  37. data/spec/lib/api_sketch/dsl/headers_spec.rb +14 -0
  38. data/spec/lib/api_sketch/dsl/parameters_spec.rb +14 -0
  39. data/spec/lib/api_sketch/dsl/responses_spec.rb +14 -0
  40. data/spec/lib/api_sketch/dsl_spec.rb +5 -3
  41. data/spec/lib/api_sketch/model/parameters_spec.rb +28 -0
  42. data/spec/lib/api_sketch/{renderers_spec.rb → response_renderer_spec.rb} +51 -1
  43. data/spec/spec_helper.rb +3 -1
  44. data/spec/support/shared_examples.rb +9 -0
  45. metadata +43 -9
  46. data/.ruby-gemset +0 -1
  47. data/.ruby-version +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c2b16335a821956300f19937d9c5b64d4b2685d
4
- data.tar.gz: 152e15df7c7030de612807127bc4ff3d3dcfa654
3
+ metadata.gz: 90161a84fafcc80e8b44bf641e4c40a865a22eed
4
+ data.tar.gz: 0642fda7b9fb81ab9802f2671d830871497a7e97
5
5
  SHA512:
6
- metadata.gz: c2a10207ada23e6e82545cf29fa8483b179b29b12960ccf1baf41c5a358476fc2a2e185769ddfb48313aaf19fc624f11138d233cd8b146794ecda998e1b776ae
7
- data.tar.gz: 4fa27b22d8c7dbf51ef822378bbba4fc5ed868cb5e3474c341c4a74797e7a64caf120b75951dab3305fdc36714f3bf9c22579833a9a6c1094e0480b30f6c7881
6
+ metadata.gz: 829d920527e420846256e6bf8ff95426da47b7c9c5ba2679a9bec20dc6a85cdf2a91ff30e77220a44bcf9ea40e44d4cf214b70db9e8a09d0cf3643fbb63bc646
7
+ data.tar.gz: 04df4fc5c7fd28268223ea6a6f28f457d9d3d4f62b33ac6509f21ad0c137826d8ce2198ccd4d52088fc2067a177d963072ce16c2f7f490421a9962c125adb031
data/.gitignore CHANGED
@@ -7,6 +7,8 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .ruby-gemset
11
+ .ruby-version
10
12
  *.bundle
11
13
  *.so
12
14
  *.o
data/CHANGELOG.md CHANGED
@@ -1,4 +1,9 @@
1
- # 0.1.0 / 2015-05-03
1
+ # 0.1.2 / 2015-05-31
2
+
3
+ - Add `shared_block "shared block name"` (definition keyword) search keyword by it's to blocks. Keyword `use_shared_block "shared block name"` is used to find and use previously definded block. Shared blocks are be placed into special directory 'config/shared' at input folder to be loaded before all examples.
4
+ - Reorganize internal gem structure.
5
+
6
+ # 0.1.1 / 2015-05-03
2
7
 
3
8
  - Bootstrap template: put all generated pages data into `{output_folder}/docs` directory. Left `assets` directory outside since it may clash with generated files/folders names.
4
9
  - Add endpoint search by conjuction of request `path` & `http_method` for API examples server (Works like normal api server now).
@@ -12,4 +17,4 @@
12
17
 
13
18
  # 0.0.1 / 2015-01-24
14
19
 
15
- Initial release
20
+ Initial release
data/README.md CHANGED
@@ -107,12 +107,19 @@ Definitions
107
107
 
108
108
  API definitions files should be placed into directory with structure similar to `definitions` folder in this example. Directory may have only one file or many files and folders with files. Resurce's `namespace` is derived from this hierachical structure.
109
109
 
110
+ `config` folder is loaded before `resources` folder. Some initial data as shared definition blocks may be placed at config folder.
111
+
110
112
  ```
111
113
  definitions
112
- ├── places.rb
113
- ├── users
114
-    └── points.rb
115
- └── users.rb
114
+ ├── config
115
+ │ └── initializers
116
+ └── shared_blocks.rb
117
+
118
+ └── resources
119
+ ├── places.rb
120
+ ├── users
121
+ │   └── points.rb
122
+ └── users.rb
116
123
  ```
117
124
  ##### DSL
118
125
 
@@ -172,9 +179,7 @@ resource "Update user profile" do # Resource name
172
179
  integer "repeat_times" do
173
180
  description "times to repeat hello message"
174
181
  end
175
- end
176
182
 
177
- query :document do
178
183
  integer "page" do
179
184
  description "page number"
180
185
  required false
@@ -369,7 +374,57 @@ resource "Update user profile" do # Resource name
369
374
  end
370
375
  ```
371
376
 
372
- For more detailed DSL features examples check DSL test files at spec folder.
377
+ For more detailed DSL features examples check DSL test files at `spec` and `examples` folders.
378
+
379
+ #####DSL: Shared exmples
380
+
381
+ This feature is designed to reduce definition duplications.
382
+ Here is shared block definition example. It's defintion should be placed into `config` directory.
383
+
384
+ ```ruby
385
+ shared_block "place fields" do
386
+ integer "id" do
387
+ description "Place database ID"
388
+ end
389
+
390
+ string "name" do
391
+ description "Place name"
392
+ example { ["Cafe", "Market", "Restaurant", "Parking", "Park", "Palace", "Stadium"].sample }
393
+ end
394
+
395
+ float "area" do
396
+ description "Place area in square meters"
397
+ example { rand(100) + rand.round(2) }
398
+ end
399
+ end
400
+ ```
401
+
402
+ Shared block usage example. Keyword `use_shared_block` is available at `headers`, `parameters`, `attributes` and `responses` definitions.
403
+
404
+ ```ruby
405
+ resource "Get places list" do
406
+ action "index"
407
+ path "/api/places.json"
408
+ http_method "GET"
409
+ format "json"
410
+
411
+ responses do
412
+ context "Success" do
413
+ http_status :ok
414
+
415
+ parameters do
416
+ body :array do
417
+ document do
418
+ content do
419
+ use_shared_block "place fields"
420
+ end
421
+ end
422
+ end
423
+ end
424
+ end
425
+ end
426
+ end
427
+ ```
373
428
 
374
429
  TODO
375
430
  ----
@@ -384,7 +439,6 @@ TODO
384
439
  - Add realtime viewable page with log for this api examples server application to let client side developers see what data they have sent and how server received it
385
440
  - Add more validations to models.
386
441
  - Add more specs and tests.
387
- - Add `shared_block "shared block name"` (definition keyword) search keyword by it's to blocks. Maybe `uses_shared_block "shared block name"`. Maybe shared blocks should be placed into special directory at definitions to be loaded before all examples
388
442
  - Add more complex example values autogeneration for API examples server. Derive values from key names. For example string "email" should have some email value as response example.
389
443
  - rDoc documentation for code.
390
444
 
@@ -408,4 +462,4 @@ Inspirations
408
462
  License
409
463
  -------
410
464
 
411
- ApiSketch is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
465
+ ApiSketch is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
data/api_sketch.gemspec CHANGED
@@ -12,7 +12,6 @@ Gem::Specification.new do |spec|
12
12
  spec.homepage = "https://github.com/suhovius/api_sketch"
13
13
 
14
14
  spec.license = "MIT"
15
- spec.post_install_message = "Thanks for installing!"
16
15
 
17
16
  spec.files = `git ls-files -z`.split("\x0")
18
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -0,0 +1,15 @@
1
+ shared_block "place fields" do
2
+ integer "id" do
3
+ description "Place database ID"
4
+ end
5
+
6
+ string "name" do
7
+ description "Place name"
8
+ example { ["Cafe", "Market", "Restaurant", "Parking", "Park", "Palace", "Stadium"].sample }
9
+ end
10
+
11
+ float "area" do
12
+ description "Place area in square meters"
13
+ example { rand(100) + rand.round(2) }
14
+ end
15
+ end
@@ -0,0 +1,138 @@
1
+ resource "Get place details" do
2
+ action "show"
3
+ description "Place details"
4
+ path "/api/places/:place_id.json"
5
+ http_method "GET"
6
+ format "json"
7
+
8
+ parameters do
9
+ query :array do
10
+ string do
11
+ description "place name"
12
+ end
13
+
14
+ integer do
15
+ description "search radius"
16
+ end
17
+ end
18
+ end
19
+
20
+ responses do
21
+ context "Success" do
22
+ http_status :ok # 200
23
+
24
+ parameters do
25
+ body :document do
26
+ use_shared_block "place fields"
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ resource "Create place" do
35
+ action "create"
36
+ path "/api/places.json"
37
+ http_method "POST"
38
+ format "json"
39
+
40
+ parameters do
41
+ body :document do
42
+ string "name" do
43
+ description "Place name"
44
+ example { ["Cafe", "Market", "Restaurant", "Parking", "Park", "Palace", "Stadium"].sample }
45
+ end
46
+
47
+ float "area" do
48
+ description "Place area in square meters"
49
+ example { rand(100) + rand.round(2) }
50
+ end
51
+ end
52
+ end
53
+
54
+ responses do
55
+ context "Success" do
56
+ http_status :ok # 200
57
+
58
+ parameters do
59
+ body :document do
60
+ use_shared_block "place fields"
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ end
67
+
68
+
69
+ resource "Update place" do
70
+ action "update"
71
+ path "/api/places/:place_id.json"
72
+ http_method "PUT"
73
+ format "json"
74
+
75
+ parameters do
76
+ body :document do
77
+ string "name" do
78
+ description "Place name"
79
+ example { ["Cafe", "Market", "Restaurant", "Parking", "Park", "Palace", "Stadium"].sample }
80
+ end
81
+
82
+ float "area" do
83
+ description "Place area in square meters"
84
+ example { rand(100) + rand.round(2) }
85
+ end
86
+ end
87
+ end
88
+
89
+ responses do
90
+ context "Success" do
91
+ http_status :ok # 200
92
+
93
+ parameters do
94
+ body :document do
95
+ use_shared_block "place fields"
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ end
102
+
103
+ resource "Get places list" do
104
+ action "index"
105
+ path "/api/places.json"
106
+ http_method "GET"
107
+ format "json"
108
+
109
+ parameters do
110
+ query :document do
111
+ integer "page" do
112
+ description "Pagination page"
113
+ default 1
114
+ end
115
+
116
+ integer "per_page" do
117
+ description "Pagination place per page"
118
+ default 25
119
+ end
120
+ end
121
+ end
122
+
123
+ responses do
124
+ context "Success" do
125
+ http_status :ok # 200
126
+
127
+ parameters do
128
+ body :array do
129
+ document do
130
+ content do
131
+ use_shared_block "place fields"
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,30 @@
1
+ resource "Get user points stats" do
2
+ action "index"
3
+ description "User points stats"
4
+ path "/api/users/username/points/stats.json"
5
+ http_method "GET"
6
+ format "json"
7
+
8
+ responses do
9
+ context "Success" do
10
+ http_status :ok # 200
11
+
12
+ parameters do
13
+ body :document do
14
+ document "stats" do
15
+ content do
16
+ string "total" do
17
+ description "total amount"
18
+ example { rand(100) }
19
+ end
20
+ string "rank" do
21
+ description "user's rank"
22
+ example { ["Junior", "Middle", "Senior"].sample }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ resource "Get user points" do
2
+ action "index"
3
+ description "User points"
4
+ path "/api/users/username/points.json"
5
+ http_method "GET"
6
+ format "json"
7
+
8
+ responses do
9
+ context "Success" do
10
+ http_status :ok # 200
11
+
12
+ parameters do
13
+ body :array do
14
+ document do
15
+ content do
16
+ integer "items" do
17
+ description "user's items"
18
+ example { rand(1000) }
19
+ end
20
+
21
+ integer "rank" do
22
+ description "user's rank"
23
+ example { ["Test User", "Real User"].sample }
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ end