prmd 0.6.2 → 0.7.0

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 (63) hide show
  1. checksums.yaml +5 -13
  2. data/CONTRIBUTORS.md +8 -0
  3. data/Gemfile.lock +6 -6
  4. data/README.md +57 -8
  5. data/Rakefile +4 -4
  6. data/bin/prmd +3 -117
  7. data/docs/schemata.md +11 -11
  8. data/lib/prmd.rb +7 -18
  9. data/lib/prmd/cli.rb +108 -0
  10. data/lib/prmd/cli/base.rb +151 -0
  11. data/lib/prmd/cli/combine.rb +42 -0
  12. data/lib/prmd/cli/doc.rb +69 -0
  13. data/lib/prmd/cli/generate.rb +44 -0
  14. data/lib/prmd/cli/render.rb +48 -0
  15. data/lib/prmd/cli/verify.rb +49 -0
  16. data/lib/prmd/commands.rb +4 -0
  17. data/lib/prmd/commands/combine.rb +85 -58
  18. data/lib/prmd/commands/init.rb +30 -98
  19. data/lib/prmd/commands/render.rb +30 -17
  20. data/lib/prmd/commands/verify.rb +78 -35
  21. data/lib/prmd/core/combiner.rb +91 -0
  22. data/lib/prmd/core/generator.rb +27 -0
  23. data/lib/prmd/core/renderer.rb +56 -0
  24. data/lib/prmd/core/schema_hash.rb +47 -0
  25. data/lib/prmd/core_ext/optparse.rb +6 -0
  26. data/lib/prmd/hash_helpers.rb +38 -0
  27. data/lib/prmd/load_schema_file.rb +25 -0
  28. data/lib/prmd/rake_tasks/base.rb +33 -0
  29. data/lib/prmd/rake_tasks/combine.rb +50 -0
  30. data/lib/prmd/rake_tasks/doc.rb +73 -0
  31. data/lib/prmd/rake_tasks/verify.rb +60 -0
  32. data/lib/prmd/schema.rb +86 -34
  33. data/lib/prmd/template.rb +65 -8
  34. data/lib/prmd/templates/combine_head.json +6 -0
  35. data/lib/prmd/templates/init_default.json +9 -0
  36. data/lib/prmd/templates/init_resource.json.erb +90 -0
  37. data/lib/prmd/templates/link_schema_properties.md.erb +5 -0
  38. data/lib/prmd/templates/schema.erb +2 -2
  39. data/lib/prmd/templates/schemata.md.erb +37 -0
  40. data/lib/prmd/templates/schemata/helper.erb +29 -15
  41. data/lib/prmd/templates/schemata/link.md.erb +74 -0
  42. data/lib/prmd/templates/schemata/{link_curl_example.erb → link_curl_example.md.erb} +8 -2
  43. data/lib/prmd/url_generator.rb +11 -69
  44. data/lib/prmd/url_generators/generators/default.rb +66 -0
  45. data/lib/prmd/url_generators/generators/json.rb +30 -0
  46. data/lib/prmd/version.rb +10 -1
  47. data/prmd.gemspec +15 -15
  48. data/test/cli/combine_test.rb +23 -0
  49. data/test/cli/doc_test.rb +25 -0
  50. data/test/cli/generate_test.rb +23 -0
  51. data/test/cli/render_test.rb +25 -0
  52. data/test/cli/verify_test.rb +21 -0
  53. data/test/commands/init_test.rb +7 -0
  54. data/test/commands/render_test.rb +93 -0
  55. data/test/commands/verify_test.rb +60 -60
  56. data/test/helpers.rb +61 -6
  57. data/test/schema_test.rb +17 -11
  58. data/test/schemata/input/doc-settings.json +4 -0
  59. metadata +73 -28
  60. data/lib/prmd/commands/expand.rb +0 -108
  61. data/lib/prmd/templates/link_schema_properties.erb +0 -16
  62. data/lib/prmd/templates/schemata.erb +0 -47
  63. data/lib/prmd/templates/schemata/link.erb +0 -61
@@ -1,11 +1,66 @@
1
- require "minitest"
2
- require "minitest/autorun"
3
- require "prmd"
1
+ require 'minitest'
2
+ require 'minitest/autorun'
3
+ require 'prmd'
4
+ require 'prmd/cli/base'
4
5
 
5
- def input_schemas_path
6
- @@data_path ||= File.join(File.dirname(__FILE__), 'schemata', 'input')
6
+ module Prmd
7
+ module CLI
8
+ module Base
9
+ # silence noop_execute
10
+ def noop_execute(options = {})
11
+ options
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ module CliBaseTestHelpers
18
+ def argv_for_test_run
19
+ []
20
+ end
21
+
22
+ def options_for_test_run
23
+ { }
24
+ end
25
+
26
+ def validate_parse_options(options)
27
+ #
28
+ end
29
+
30
+ def validate_run_options(options)
31
+ assert_equal options[:noop], true
32
+ validate_parse_options options
33
+ end
34
+
35
+ def command_module
36
+ #
37
+ end
38
+
39
+ def test_make_parser
40
+ parser = command_module.make_parser
41
+ assert_kind_of OptionParser, parser
42
+ end
43
+
44
+ def test_parse_options
45
+ opts = command_module.parse_options(argv_for_test_run, options_for_test_run)
46
+
47
+ validate_parse_options opts
48
+ end
49
+
50
+ def test_run
51
+ opts = command_module.run(argv_for_test_run,
52
+ options_for_test_run.merge(noop: true))
53
+
54
+ validate_run_options opts
55
+ end
56
+ end
57
+
58
+ def input_schemas_path(*args)
59
+ @data_path ||= File.expand_path(File.join(*args),
60
+ File.join(File.dirname(__FILE__),
61
+ 'schemata/input'))
7
62
  end
8
63
 
9
64
  def user_input_schema
10
- @@user_input_schema ||= Prmd.combine(File.join(input_schemas_path, 'user.json'))
65
+ @user_input_schema ||= Prmd.combine(input_schemas_path('user.json'))
11
66
  end
@@ -2,33 +2,39 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helpers'))
2
2
 
3
3
  class SchemaTest < Minitest::Test
4
4
  def test_dereference_with_ref
5
- key, value = user_input_schema.dereference({
5
+ key, value = user_input_schema.dereference(
6
6
  '$ref' => '#/definitions/user/definitions/id'
7
- })
7
+ )
8
8
  assert_equal(key, '#/definitions/user/definitions/id')
9
- assert_equal(value, user_input_schema['definitions']['user']['definitions']['id'])
9
+ user_id = user_input_schema['definitions']['user']['definitions']['id']
10
+ assert_equal(value, user_id)
10
11
  end
11
12
 
12
13
  def test_dereference_without_ref
13
- key, value = user_input_schema.dereference('#/definitions/user/definitions/id')
14
+ key, value = user_input_schema.dereference(
15
+ '#/definitions/user/definitions/id'
16
+ )
14
17
  assert_equal(key, '#/definitions/user/definitions/id')
15
- assert_equal(value, user_input_schema['definitions']['user']['definitions']['id'])
18
+ user_id = user_input_schema['definitions']['user']['definitions']['id']
19
+ assert_equal(value, user_id)
16
20
  end
17
21
 
18
22
  def test_dereference_with_nested_ref
19
- key, value = user_input_schema.dereference({
23
+ key, value = user_input_schema.dereference(
20
24
  '$ref' => '#/definitions/user/definitions/identity'
21
- })
25
+ )
22
26
  assert_equal(key, '#/definitions/user/definitions/id')
23
- assert_equal(value, user_input_schema['definitions']['user']['definitions']['id'])
27
+ user_id = user_input_schema['definitions']['user']['definitions']['id']
28
+ assert_equal(value, user_id)
24
29
  end
25
30
 
26
31
  def test_dereference_with_local_context
27
- key, value = user_input_schema.dereference({
32
+ key, value = user_input_schema.dereference(
28
33
  '$ref' => '#/definitions/user/properties/id',
29
34
  'override' => true
30
- })
35
+ )
31
36
  assert_equal(key, '#/definitions/user/definitions/id')
32
- assert_equal(value, {'override' => true}.merge(user_input_schema['definitions']['user']['definitions']['id']))
37
+ user_id = user_input_schema['definitions']['user']['definitions']['id']
38
+ assert_equal(value, { 'override' => true }.merge(user_id))
33
39
  end
34
40
  end
@@ -0,0 +1,4 @@
1
+ {
2
+ // don't ask, its just for testing
3
+ "content_type": "application/bread"
4
+ }
metadata CHANGED
@@ -1,85 +1,91 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prmd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - geemus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-21 00:00:00.000000000 Z
11
+ date: 2014-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: erubis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.7'
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
26
  version: '2.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json_schema
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.1'
33
+ version: '0.3'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 0.3.1
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - ~>
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '0.3'
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '0.1'
46
+ version: 0.3.1
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: bundler
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ~>
51
+ - - "~>"
46
52
  - !ruby/object:Gem::Version
47
53
  version: '1.3'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ~>
58
+ - - "~>"
53
59
  - !ruby/object:Gem::Version
54
60
  version: '1.3'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rake
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - ~>
65
+ - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '10.2'
67
+ version: '10.3'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - ~>
72
+ - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: '10.2'
74
+ version: '10.3'
69
75
  - !ruby/object:Gem::Dependency
70
76
  name: minitest
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - ~>
79
+ - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: '5.3'
81
+ version: '5.4'
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
- - - ~>
86
+ - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: '5.3'
88
+ version: '5.4'
83
89
  description: scaffold, verify and generate docs from JSON Schema
84
90
  email:
85
91
  - geemus@gmail.com
@@ -88,8 +94,8 @@ executables:
88
94
  extensions: []
89
95
  extra_rdoc_files: []
90
96
  files:
91
- - .gitignore
92
- - .travis.yml
97
+ - ".gitignore"
98
+ - ".travis.yml"
93
99
  - CONTRIBUTING.md
94
100
  - CONTRIBUTORS.md
95
101
  - Gemfile
@@ -100,28 +106,59 @@ files:
100
106
  - bin/prmd
101
107
  - docs/schemata.md
102
108
  - lib/prmd.rb
109
+ - lib/prmd/cli.rb
110
+ - lib/prmd/cli/base.rb
111
+ - lib/prmd/cli/combine.rb
112
+ - lib/prmd/cli/doc.rb
113
+ - lib/prmd/cli/generate.rb
114
+ - lib/prmd/cli/render.rb
115
+ - lib/prmd/cli/verify.rb
116
+ - lib/prmd/commands.rb
103
117
  - lib/prmd/commands/combine.rb
104
- - lib/prmd/commands/expand.rb
105
118
  - lib/prmd/commands/init.rb
106
119
  - lib/prmd/commands/render.rb
107
120
  - lib/prmd/commands/verify.rb
121
+ - lib/prmd/core/combiner.rb
122
+ - lib/prmd/core/generator.rb
123
+ - lib/prmd/core/renderer.rb
124
+ - lib/prmd/core/schema_hash.rb
125
+ - lib/prmd/core_ext/optparse.rb
126
+ - lib/prmd/hash_helpers.rb
127
+ - lib/prmd/load_schema_file.rb
128
+ - lib/prmd/rake_tasks/base.rb
129
+ - lib/prmd/rake_tasks/combine.rb
130
+ - lib/prmd/rake_tasks/doc.rb
131
+ - lib/prmd/rake_tasks/verify.rb
108
132
  - lib/prmd/schema.rb
109
133
  - lib/prmd/template.rb
110
- - lib/prmd/templates/link_schema_properties.erb
134
+ - lib/prmd/templates/combine_head.json
135
+ - lib/prmd/templates/init_default.json
136
+ - lib/prmd/templates/init_resource.json.erb
137
+ - lib/prmd/templates/link_schema_properties.md.erb
111
138
  - lib/prmd/templates/schema.erb
112
- - lib/prmd/templates/schemata.erb
139
+ - lib/prmd/templates/schemata.md.erb
113
140
  - lib/prmd/templates/schemata/helper.erb
114
- - lib/prmd/templates/schemata/link.erb
115
- - lib/prmd/templates/schemata/link_curl_example.erb
141
+ - lib/prmd/templates/schemata/link.md.erb
142
+ - lib/prmd/templates/schemata/link_curl_example.md.erb
116
143
  - lib/prmd/url_generator.rb
144
+ - lib/prmd/url_generators/generators/default.rb
145
+ - lib/prmd/url_generators/generators/json.rb
117
146
  - lib/prmd/version.rb
118
147
  - prmd.gemspec
119
148
  - schemas/hyper-schema.json
120
149
  - schemas/interagent-hyper-schema.json
121
150
  - schemas/schema.json
151
+ - test/cli/combine_test.rb
152
+ - test/cli/doc_test.rb
153
+ - test/cli/generate_test.rb
154
+ - test/cli/render_test.rb
155
+ - test/cli/verify_test.rb
156
+ - test/commands/init_test.rb
157
+ - test/commands/render_test.rb
122
158
  - test/commands/verify_test.rb
123
159
  - test/helpers.rb
124
160
  - test/schema_test.rb
161
+ - test/schemata/input/doc-settings.json
125
162
  - test/schemata/input/meta.json
126
163
  - test/schemata/input/user.json
127
164
  homepage: https://github.com/heroku/prmd
@@ -134,23 +171,31 @@ require_paths:
134
171
  - lib
135
172
  required_ruby_version: !ruby/object:Gem::Requirement
136
173
  requirements:
137
- - - ! '>='
174
+ - - ">="
138
175
  - !ruby/object:Gem::Version
139
176
  version: '0'
140
177
  required_rubygems_version: !ruby/object:Gem::Requirement
141
178
  requirements:
142
- - - ! '>='
179
+ - - ">="
143
180
  - !ruby/object:Gem::Version
144
181
  version: '0'
145
182
  requirements: []
146
183
  rubyforge_project:
147
- rubygems_version: 2.3.0
184
+ rubygems_version: 2.2.2
148
185
  signing_key:
149
186
  specification_version: 4
150
187
  summary: JSON Schema tooling
151
188
  test_files:
189
+ - test/cli/combine_test.rb
190
+ - test/cli/doc_test.rb
191
+ - test/cli/generate_test.rb
192
+ - test/cli/render_test.rb
193
+ - test/cli/verify_test.rb
194
+ - test/commands/init_test.rb
195
+ - test/commands/render_test.rb
152
196
  - test/commands/verify_test.rb
153
197
  - test/helpers.rb
154
198
  - test/schema_test.rb
199
+ - test/schemata/input/doc-settings.json
155
200
  - test/schemata/input/meta.json
156
201
  - test/schemata/input/user.json
@@ -1,108 +0,0 @@
1
- original = {
2
- 'description' => 'A foo is bar.',
3
- 'id' => 'schema/foo',
4
- 'title' => 'API - Foo',
5
-
6
- 'definitions' => {
7
- 'created-at' => {
8
- 'description' => 'when foo was created',
9
- 'format' => 'date-time'
10
- },
11
- 'email' => {
12
- 'description' => 'email for foo',
13
- 'format' => 'email'
14
- },
15
- 'id' => {
16
- 'description' => 'unique identifier for foo',
17
- 'format' => 'uuid'
18
- },
19
- 'updated-at' => {
20
- 'description' => 'when foo was created',
21
- 'format' => 'date-time',
22
- 'type' => ['null', 'string']
23
- }
24
- }
25
- }
26
- expanded = original.dup
27
-
28
- expanded = {
29
- '$schema' => 'http://json-schema.org/draft-04/hyper-schema',
30
- 'definitions' => {},
31
- 'links' => [],
32
- 'properties' => {},
33
- 'type' => ['object']
34
- }.merge!(expanded)
35
-
36
- if original['definitions']
37
- original['definitions'].each do |key, value|
38
- default = case value['format']
39
- when 'uuid'
40
- {
41
- 'example' => '01234567-89ab-cdef-0123-456789abcdef',
42
- 'type' => ['string']
43
- }
44
- when 'email'
45
- {
46
- 'example' => 'username@example.com',
47
- 'type' => ['string']
48
- }
49
- when 'date-time'
50
- {
51
- 'example' => '2012-01-01T12:00:00Z',
52
- 'type' => ['string']
53
- }
54
- else
55
- {}
56
- end
57
- expanded['definitions'][key] = default.merge!(value)
58
- end
59
- end
60
-
61
- if original['links']
62
- original['links'].each do |key, value|
63
- default = case value['title']
64
- when 'Create'
65
- {
66
- 'method' => 'POST',
67
- 'rel' => 'create'
68
- }
69
- when 'Delete'
70
- {
71
- 'method' => 'DELETE',
72
- 'rel' => 'delete'
73
- }
74
- when 'Info'
75
- {
76
- 'method' => 'GET',
77
- 'rel' => 'self'
78
- }
79
- when 'List'
80
- {
81
- 'method' => 'GET',
82
- 'rel' => 'instances'
83
- }
84
- when 'Update'
85
- {
86
- 'method' => 'PATCH',
87
- 'rel' => 'update'
88
- }
89
- end
90
- expanded = original['links'][key] = default.merge!(value)
91
- end
92
- end
93
-
94
-
95
- #require 'json'
96
- #require 'pp'
97
-
98
- #puts
99
-
100
- #puts original_json = JSON.pretty_generate(original)
101
- #puts original_json.split("\n").length
102
-
103
- #puts
104
-
105
- #puts expanded_json = JSON.pretty_generate(expanded)
106
- #puts expanded_json.split("\n").length
107
-
108
- #puts