skeleton 0.3.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +140 -65
  4. data/Rakefile +10 -3
  5. data/lib/skeleton.rb +6 -10
  6. data/lib/skeleton/contact.rb +1 -13
  7. data/lib/skeleton/error.rb +4 -0
  8. data/lib/skeleton/graph.rb +56 -0
  9. data/lib/skeleton/header.rb +2 -63
  10. data/lib/skeleton/items.rb +34 -0
  11. data/lib/skeleton/license.rb +1 -12
  12. data/lib/skeleton/model.rb +13 -17
  13. data/lib/skeleton/operation.rb +50 -121
  14. data/lib/skeleton/parameter.rb +31 -88
  15. data/lib/skeleton/parameters.rb +40 -0
  16. data/lib/skeleton/path.rb +42 -80
  17. data/lib/skeleton/presenter.rb +19 -0
  18. data/lib/skeleton/property.rb +6 -0
  19. data/lib/skeleton/response.rb +24 -45
  20. data/lib/skeleton/schema.rb +80 -63
  21. data/lib/skeleton/scope.rb +18 -0
  22. data/lib/skeleton/security_scheme.rb +19 -37
  23. data/lib/skeleton/serializers/options.rb +215 -0
  24. data/lib/skeleton/serializers/swagger.rb +197 -0
  25. data/lib/skeleton/structure.rb +92 -138
  26. data/lib/skeleton/swagger.rb +9 -0
  27. data/lib/skeleton/tag.rb +11 -16
  28. data/lib/skeleton/version.rb +1 -1
  29. data/skeleton.gemspec +2 -0
  30. data/test/fixtures/json-schema-draft-04.json +150 -0
  31. data/test/fixtures/schema.json +1482 -0
  32. data/test/integrations/validate_complex_schema_spec.rb +42 -0
  33. data/test/skeleton/graph_test.rb +22 -0
  34. data/test/skeleton/mapper_test.rb +84 -0
  35. data/test/skeleton/operation_test.rb +11 -0
  36. data/test/skeleton/parameter_test.rb +34 -0
  37. data/test/skeleton/parameters_test.rb +9 -0
  38. data/test/skeleton/path_test.rb +46 -0
  39. data/test/skeleton/property_test.rb +8 -0
  40. data/test/skeleton/serializers/options_test.rb +68 -0
  41. data/test/skeleton/serializers/swagger_test.rb +30 -0
  42. data/test/support/factories/structure_factory.rb +86 -0
  43. data/test/support/fixtures.rb +6 -0
  44. data/test/support/kissmetrics/core_api.rb +542 -0
  45. data/{spec/spec_helper.rb → test/test_helper.rb} +7 -1
  46. metadata +73 -25
  47. data/lib/skeleton/config.rb +0 -37
  48. data/lib/skeleton/documentation.rb +0 -17
  49. data/lib/skeleton/example.rb +0 -31
  50. data/lib/skeleton/headers.rb +0 -50
  51. data/lib/skeleton/helpers/controller_helpers.rb +0 -25
  52. data/lib/skeleton/info.rb +0 -40
  53. data/lib/skeleton/item.rb +0 -99
  54. data/lib/skeleton/responses.rb +0 -59
  55. data/lib/skeleton/scopes.rb +0 -24
  56. data/lib/skeleton/security_definitions.rb +0 -46
  57. data/lib/skeleton/security_requirement.rb +0 -29
  58. data/spec/integrations/use_case_spec.rb +0 -131
  59. data/spec/skeleton/operation_spec.rb +0 -113
  60. data/spec/skeleton/serializers/contact_spec.rb +0 -30
  61. data/spec/skeleton/serializers/documentation_spec.rb +0 -23
  62. data/spec/skeleton/serializers/header_spec.rb +0 -57
@@ -1,10 +1,12 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
-
3
+ require 'pp'
4
4
  require 'minitest/autorun'
5
5
  require 'minitest/spec'
6
6
  require 'minitest/pride'
7
7
 
8
+ require 'webmock/minitest'
9
+
8
10
  module Minitest
9
11
  class Spec
10
12
  class << self
@@ -12,3 +14,7 @@ module Minitest
12
14
  end
13
15
  end
14
16
  end
17
+
18
+ require_relative 'support/fixtures'
19
+ require_relative 'support/kissmetrics/core_api'
20
+ require_relative 'support/factories/structure_factory'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skeleton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Johnston
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-24 00:00:00.000000000 Z
11
+ date: 2015-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: json-schema
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: Construct an api skeleton for options
70
98
  email:
71
99
  - warmwaffles@gmail.com
@@ -82,37 +110,46 @@ files:
82
110
  - Rakefile
83
111
  - lib/skeleton.rb
84
112
  - lib/skeleton/attributes.rb
85
- - lib/skeleton/config.rb
86
113
  - lib/skeleton/contact.rb
87
- - lib/skeleton/documentation.rb
88
- - lib/skeleton/example.rb
114
+ - lib/skeleton/error.rb
115
+ - lib/skeleton/graph.rb
89
116
  - lib/skeleton/header.rb
90
- - lib/skeleton/headers.rb
91
- - lib/skeleton/helpers/controller_helpers.rb
92
- - lib/skeleton/info.rb
93
- - lib/skeleton/item.rb
117
+ - lib/skeleton/items.rb
94
118
  - lib/skeleton/license.rb
95
119
  - lib/skeleton/model.rb
96
120
  - lib/skeleton/operation.rb
97
121
  - lib/skeleton/parameter.rb
122
+ - lib/skeleton/parameters.rb
98
123
  - lib/skeleton/path.rb
124
+ - lib/skeleton/presenter.rb
125
+ - lib/skeleton/property.rb
99
126
  - lib/skeleton/response.rb
100
- - lib/skeleton/responses.rb
101
127
  - lib/skeleton/schema.rb
102
- - lib/skeleton/scopes.rb
103
- - lib/skeleton/security_definitions.rb
104
- - lib/skeleton/security_requirement.rb
128
+ - lib/skeleton/scope.rb
105
129
  - lib/skeleton/security_scheme.rb
130
+ - lib/skeleton/serializers/options.rb
131
+ - lib/skeleton/serializers/swagger.rb
106
132
  - lib/skeleton/structure.rb
133
+ - lib/skeleton/swagger.rb
107
134
  - lib/skeleton/tag.rb
108
135
  - lib/skeleton/version.rb
109
136
  - skeleton.gemspec
110
- - spec/integrations/use_case_spec.rb
111
- - spec/skeleton/operation_spec.rb
112
- - spec/skeleton/serializers/contact_spec.rb
113
- - spec/skeleton/serializers/documentation_spec.rb
114
- - spec/skeleton/serializers/header_spec.rb
115
- - spec/spec_helper.rb
137
+ - test/fixtures/json-schema-draft-04.json
138
+ - test/fixtures/schema.json
139
+ - test/integrations/validate_complex_schema_spec.rb
140
+ - test/skeleton/graph_test.rb
141
+ - test/skeleton/mapper_test.rb
142
+ - test/skeleton/operation_test.rb
143
+ - test/skeleton/parameter_test.rb
144
+ - test/skeleton/parameters_test.rb
145
+ - test/skeleton/path_test.rb
146
+ - test/skeleton/property_test.rb
147
+ - test/skeleton/serializers/options_test.rb
148
+ - test/skeleton/serializers/swagger_test.rb
149
+ - test/support/factories/structure_factory.rb
150
+ - test/support/fixtures.rb
151
+ - test/support/kissmetrics/core_api.rb
152
+ - test/test_helper.rb
116
153
  homepage: https://github.com/warmwaffles/skeleton
117
154
  licenses:
118
155
  - MIT
@@ -138,9 +175,20 @@ signing_key:
138
175
  specification_version: 4
139
176
  summary: Construct an api skeleton for options
140
177
  test_files:
141
- - spec/integrations/use_case_spec.rb
142
- - spec/skeleton/operation_spec.rb
143
- - spec/skeleton/serializers/contact_spec.rb
144
- - spec/skeleton/serializers/documentation_spec.rb
145
- - spec/skeleton/serializers/header_spec.rb
146
- - spec/spec_helper.rb
178
+ - test/fixtures/json-schema-draft-04.json
179
+ - test/fixtures/schema.json
180
+ - test/integrations/validate_complex_schema_spec.rb
181
+ - test/skeleton/graph_test.rb
182
+ - test/skeleton/mapper_test.rb
183
+ - test/skeleton/operation_test.rb
184
+ - test/skeleton/parameter_test.rb
185
+ - test/skeleton/parameters_test.rb
186
+ - test/skeleton/path_test.rb
187
+ - test/skeleton/property_test.rb
188
+ - test/skeleton/serializers/options_test.rb
189
+ - test/skeleton/serializers/swagger_test.rb
190
+ - test/support/factories/structure_factory.rb
191
+ - test/support/fixtures.rb
192
+ - test/support/kissmetrics/core_api.rb
193
+ - test/test_helper.rb
194
+ has_rdoc:
@@ -1,37 +0,0 @@
1
- require 'skeleton/structure'
2
-
3
- module Skeleton
4
- class Config
5
- def structure
6
- @structure ||= Skeleton::Structure.new
7
- end
8
-
9
- def info(&block)
10
- yield(structure.info) if block
11
- end
12
-
13
- def define(&block)
14
- yield(structure) if block
15
- end
16
-
17
- def contact(&block)
18
- yield(structure.info.contact) if block
19
- end
20
-
21
- def license(&block)
22
- yield(structure.info.license) if block
23
- end
24
-
25
- def path(resource, &block)
26
- structure.path(resource, &block)
27
- end
28
-
29
- def parameter(location, name, &block)
30
- structure.parameter(location, name, &block)
31
- end
32
-
33
- def to_swagger_json
34
- structure.to_swagger_json
35
- end
36
- end
37
- end
@@ -1,17 +0,0 @@
1
- require 'skeleton/model'
2
-
3
- module Skeleton
4
- class Documentation < Model
5
-
6
- attr_accessor :description, :url
7
- attr_presence :description, :url
8
-
9
- def to_h
10
- hash = {}
11
- hash[:description] = description if description?
12
- hash[:url] = url if url?
13
- hash
14
- end
15
- alias_method :to_swagger_hash, :to_h
16
- end
17
- end
@@ -1,31 +0,0 @@
1
- module Skeleton
2
- class Example
3
- def initialize
4
- @mimes = {}
5
- end
6
-
7
- def []=(mime_type, value)
8
- @mimes[mime_type] = value
9
- end
10
-
11
- def [](mime_type)
12
- @mimes[mime_type]
13
- end
14
-
15
- def to_h
16
- hash = {}
17
- @mimes.each do |type, value|
18
- hash[type] = value.respond_to?(:to_h) ? value.to_h : value
19
- end
20
- hash
21
- end
22
-
23
- def to_swagger_hash
24
- hash = {}
25
- @mimes.each do |type, value|
26
- hash[type] = value.respond_to?(:to_h) ? value.to_swagger_hash : value
27
- end
28
- hash
29
- end
30
- end
31
- end
@@ -1,50 +0,0 @@
1
- require 'skeleton/model'
2
- require 'skeleton/header'
3
-
4
- module Skeleton
5
- class Headers < Model
6
- def initialize(args={})
7
- @fields = {}
8
- args.each { |k, v| set(k, v)}
9
- end
10
-
11
- def get(name)
12
- @fields[name]
13
- end
14
- alias_method :[], :get
15
-
16
- def set(name, value)
17
- case value
18
- when Hash
19
- @fields[name] = Skeleton::Header.new(value)
20
- else
21
- @fields[name] = value
22
- end
23
- end
24
- alias_method :[]=, :set
25
-
26
- def to_h
27
- hash ={}
28
- @fields.each do |name, value|
29
- if value.respond_to?(:to_h)
30
- hash[name] = value.to_h
31
- else
32
- hash[name] = value
33
- end
34
- end
35
- hash
36
- end
37
-
38
- def to_swagger_hash
39
- hash ={}
40
- @fields.each do |name, value|
41
- if value.respond_to?(:to_swagger_hash)
42
- hash[name] = value.to_swagger_hash
43
- else
44
- hash[name] = value
45
- end
46
- end
47
- hash
48
- end
49
- end
50
- end
@@ -1,25 +0,0 @@
1
- require 'skeleton/structure'
2
-
3
- module Skeleton
4
- module Helpers
5
- module ControllerHelpers
6
- def self.included(base)
7
- base.send(:extend, ClassMethods)
8
- end
9
-
10
- module ClassMethods
11
- def define_api_path(resource, &block)
12
- Skeleton.config.path(resource, &block)
13
- end
14
-
15
- def define_global_parameter(location, name, &block)
16
- Skeleton.config.parameter(location, name, &block)
17
- end
18
- end
19
-
20
- def get_api_path(resource)
21
- Skeleton.config.path(resource)
22
- end
23
- end
24
- end
25
- end
@@ -1,40 +0,0 @@
1
- require 'skeleton/model'
2
- require 'skeleton/license'
3
- require 'skeleton/contact'
4
-
5
- module Skeleton
6
- class Info < Model
7
- attr_accessor :title, :description, :terms_of_service, :license, :version
8
- attr_presence :title, :description, :terms_of_service, :license, :version
9
-
10
- def contact
11
- @contact ||= Skeleton::Contact.new
12
- end
13
-
14
- def license
15
- @license ||= Skeleton::License.new
16
- end
17
-
18
- def to_h
19
- hash = {}
20
- hash[:title] = title if title?
21
- hash[:description] = description if description?
22
- hash[:version] = version if version?
23
- hash[:terms_of_service] = terms_of_service if terms_of_service?
24
- hash[:license] = license.to_h
25
- hash[:contact] = contact.to_h
26
- hash
27
- end
28
-
29
- def to_swagger_hash
30
- hash = {}
31
- hash[:title] = title if title?
32
- hash[:description] = description if description?
33
- hash[:version] = version if version?
34
- hash[:termsOfService] = terms_of_service if terms_of_service?
35
- hash[:license] = license.to_swagger_hash
36
- hash[:contact] = contact.to_swagger_hash
37
- hash
38
- end
39
- end
40
- end
@@ -1,99 +0,0 @@
1
- require 'skeleton/model'
2
-
3
- module Skeleton
4
- class Item < Model
5
- attr_accessor :type, :format, :title, :description, :default, :multiple_of,
6
- :maximum, :exclusive_maximum, :minimum, :exclusive_minimum,
7
- :max_length, :min_length, :pattern, :max_items, :min_items,
8
- :unique_items, :max_properties, :min_properties, :items
9
-
10
- attr_writer :enum
11
- attr_presence :exclusive_maximum, :exclusive_minimum, :unique_items, :items
12
-
13
- def enum
14
- @enum ||= []
15
- end
16
-
17
- def enum?
18
- !enum.empty?
19
- end
20
-
21
- def array?
22
- @type == 'array'
23
- end
24
-
25
- def string?
26
- @type == 'string'
27
- end
28
-
29
- def number?
30
- @type == 'number'
31
- end
32
-
33
- def integer?
34
- @type == 'integer'
35
- end
36
-
37
- def boolean?
38
- @type == 'boolean'
39
- end
40
-
41
- def file?
42
- @type == 'file'
43
- end
44
-
45
- def to_h
46
- hash = {}
47
- hash[:type] = type if type?
48
- hash[:format] = format if format?
49
-
50
- hash[:items] = items.to_hash if items?
51
-
52
- hash[:title] = title if title?
53
- hash[:description] = description if description?
54
- hash[:default] = default if default?
55
- hash[:multiple_of] = multiple_of if multiple_of?
56
- hash[:maximum] = maximum if maximum?
57
- hash[:exclusive_maximum] = exclusive_maximum if exclusive_maximum?
58
- hash[:minimum] = minimum if minimum?
59
- hash[:exclusive_minimum] = exclusive_minimum if exclusive_minimum?
60
- hash[:max_length] = max_length if max_length?
61
- hash[:min_length] = min_length if min_length?
62
- hash[:pattern] = pattern if pattern?
63
- hash[:max_items] = max_items if max_items?
64
- hash[:min_items] = min_items if min_items?
65
- hash[:unique_items] = unique_items if unique_items?
66
- hash[:max_properties] = max_properties if max_properties?
67
- hash[:min_properties] = min_properties if min_properties?
68
- hash[:enum] = enum if enum?
69
- hash
70
- end
71
-
72
- def to_swagger_hash
73
- hash = {}
74
- hash[:type] = type if type?
75
- hash[:format] = format if format?
76
-
77
- hash[:items] = items.to_swagger_hash if items?
78
-
79
- hash[:title] = title if title?
80
- hash[:description] = description if description?
81
- hash[:default] = default if default?
82
- hash[:multipleOf] = multiple_of if multiple_of?
83
- hash[:maximum] = maximum if maximum?
84
- hash[:exclusiveMaximum] = exclusive_maximum if exclusive_maximum?
85
- hash[:minimum] = minimum if minimum?
86
- hash[:exclusiveMinimum] = exclusive_minimum if exclusive_minimum?
87
- hash[:maxLength] = max_length if max_length?
88
- hash[:minLength] = min_length if min_length?
89
- hash[:pattern] = pattern if pattern?
90
- hash[:maxItems] = max_items if max_items?
91
- hash[:minItems] = min_items if min_items?
92
- hash[:uniqueItems] = unique_items if unique_items?
93
- hash[:maxProperties] = max_properties if max_properties?
94
- hash[:minProperties] = min_properties if min_properties?
95
- hash[:enum] = enum if enum?
96
- hash
97
- end
98
- end
99
- end