fragrant 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/LICENSE +22 -0
  2. data/README.md +6 -0
  3. data/bin/fragrant +14 -0
  4. data/lib/fragrant/address_manager.rb +80 -0
  5. data/lib/fragrant/vagrantfile_generator.rb +64 -0
  6. data/lib/fragrant.rb +323 -0
  7. data/spec/fragrant/environments_spec.rb +18 -0
  8. data/spec/fragrant/vagrantfile_generator_spec.rb +40 -0
  9. data/spec/fragrant/vms_spec.rb +26 -0
  10. data/spec/spec_helper.rb +15 -0
  11. data/vendor/grape/LICENSE +20 -0
  12. data/vendor/grape/lib/grape/api.rb +420 -0
  13. data/vendor/grape/lib/grape/cookies.rb +41 -0
  14. data/vendor/grape/lib/grape/endpoint.rb +377 -0
  15. data/vendor/grape/lib/grape/entity.rb +378 -0
  16. data/vendor/grape/lib/grape/exceptions/base.rb +17 -0
  17. data/vendor/grape/lib/grape/exceptions/validation_error.rb +10 -0
  18. data/vendor/grape/lib/grape/middleware/auth/basic.rb +30 -0
  19. data/vendor/grape/lib/grape/middleware/auth/digest.rb +30 -0
  20. data/vendor/grape/lib/grape/middleware/auth/oauth2.rb +72 -0
  21. data/vendor/grape/lib/grape/middleware/base.rb +154 -0
  22. data/vendor/grape/lib/grape/middleware/error.rb +87 -0
  23. data/vendor/grape/lib/grape/middleware/filter.rb +17 -0
  24. data/vendor/grape/lib/grape/middleware/formatter.rb +81 -0
  25. data/vendor/grape/lib/grape/middleware/prefixer.rb +21 -0
  26. data/vendor/grape/lib/grape/middleware/versioner/header.rb +59 -0
  27. data/vendor/grape/lib/grape/middleware/versioner/param.rb +44 -0
  28. data/vendor/grape/lib/grape/middleware/versioner/path.rb +42 -0
  29. data/vendor/grape/lib/grape/middleware/versioner.rb +29 -0
  30. data/vendor/grape/lib/grape/route.rb +23 -0
  31. data/vendor/grape/lib/grape/util/deep_merge.rb +23 -0
  32. data/vendor/grape/lib/grape/util/hash_stack.rb +100 -0
  33. data/vendor/grape/lib/grape/validations/coerce.rb +61 -0
  34. data/vendor/grape/lib/grape/validations/presence.rb +11 -0
  35. data/vendor/grape/lib/grape/validations/regexp.rb +13 -0
  36. data/vendor/grape/lib/grape/validations.rb +192 -0
  37. data/vendor/grape/lib/grape/version.rb +3 -0
  38. data/vendor/grape/lib/grape.rb +44 -0
  39. metadata +216 -0
@@ -0,0 +1,192 @@
1
+ require 'virtus'
2
+
3
+ module Grape
4
+
5
+ module Validations
6
+
7
+ ##
8
+ # All validators must inherit from this class.
9
+ #
10
+ class Validator
11
+ def initialize(attrs, options, required, scope)
12
+ @attrs = Array(attrs)
13
+ @required = required
14
+ @scope = scope
15
+
16
+ if options.is_a?(Hash) && !options.empty?
17
+ raise "unknown options: #{options.keys}"
18
+ end
19
+ end
20
+
21
+ def validate!(params)
22
+ params = @scope.params(params)
23
+
24
+ @attrs.each do |attr_name|
25
+ if @required || params.has_key?(attr_name)
26
+ validate_param!(attr_name, params)
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def self.convert_to_short_name(klass)
34
+ ret = klass.name.gsub(/::/, '/').
35
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
36
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
37
+ tr("-", "_").
38
+ downcase
39
+ File.basename(ret, '_validator')
40
+ end
41
+ end
42
+
43
+ ##
44
+ # Base class for all validators taking only one param.
45
+ class SingleOptionValidator < Validator
46
+ def initialize(attrs, options, required, scope)
47
+ @option = options
48
+ super
49
+ end
50
+
51
+ end
52
+
53
+ # We define Validator::inherited here so SingleOptionValidator
54
+ # will not be considered a validator.
55
+ class Validator
56
+ def self.inherited(klass)
57
+ short_name = convert_to_short_name(klass)
58
+ Validations::register_validator(short_name, klass)
59
+ end
60
+ end
61
+
62
+ class << self
63
+ attr_accessor :validators
64
+ end
65
+
66
+ self.validators = {}
67
+
68
+ def self.register_validator(short_name, klass)
69
+ validators[short_name] = klass
70
+ end
71
+
72
+ class ParamsScope
73
+ attr_accessor :element, :parent
74
+
75
+ def initialize(api, element, parent, &block)
76
+ @element = element
77
+ @parent = parent
78
+ @api = api
79
+ instance_eval(&block)
80
+ end
81
+
82
+ def requires(*attrs)
83
+ validations = {:presence => true}
84
+ if attrs.last.is_a?(Hash)
85
+ validations.merge!(attrs.pop)
86
+ end
87
+
88
+ validates(attrs, validations)
89
+ end
90
+
91
+ def optional(*attrs)
92
+ validations = {}
93
+ if attrs.last.is_a?(Hash)
94
+ validations.merge!(attrs.pop)
95
+ end
96
+
97
+ validates(attrs, validations)
98
+ end
99
+
100
+ def group(element, &block)
101
+ scope = ParamsScope.new(@api, element, self, &block)
102
+ end
103
+
104
+ def params(params)
105
+ params = @parent.params(params) if @parent
106
+ params = params[@element] || {} if @element
107
+ params
108
+ end
109
+
110
+ def full_name(name)
111
+ return "#{@parent.full_name(@element)}[#{name}]" if @parent
112
+ name.to_s
113
+ end
114
+
115
+ private
116
+ def validates(attrs, validations)
117
+ doc_attrs = { :required => validations.keys.include?(:presence) }
118
+
119
+ # special case (type = coerce)
120
+ if validations[:type]
121
+ validations[:coerce] = validations.delete(:type)
122
+ end
123
+
124
+ if coerce_type = validations[:coerce]
125
+ doc_attrs[:type] = coerce_type.to_s
126
+ end
127
+
128
+ if desc = validations.delete(:desc)
129
+ doc_attrs[:desc] = desc
130
+ end
131
+
132
+ full_attrs = attrs.collect{ |name| { :name => name, :full_name => full_name(name)} }
133
+ @api.document_attribute(full_attrs, doc_attrs)
134
+
135
+ # Validate for presence before any other validators
136
+ if validations.has_key?(:presence) && validations[:presence]
137
+ validate('presence', validations[:presence], attrs, doc_attrs)
138
+ end
139
+
140
+ # Before we run the rest of the validators, lets handle
141
+ # whatever coercion so that we are working with correctly
142
+ # type casted values
143
+ if validations.has_key? :coerce
144
+ validate('coerce', validations[:coerce], attrs, doc_attrs)
145
+ validations.delete(:coerce)
146
+ end
147
+
148
+ validations.each do |type, options|
149
+ validate(type, options, attrs, doc_attrs)
150
+ end
151
+ end
152
+
153
+ def validate(type, options, attrs, doc_attrs)
154
+ validator_class = Validations::validators[type.to_s]
155
+ if validator_class
156
+ @api.settings[:validations] << validator_class.new(attrs, options, doc_attrs[:required], self)
157
+ else
158
+ raise "unknown validator: #{type}"
159
+ end
160
+ end
161
+
162
+ end
163
+
164
+ # This module is mixed into the API Class.
165
+ module ClassMethods
166
+ def reset_validations!
167
+ settings[:validations] = []
168
+ end
169
+
170
+ def params(&block)
171
+ ParamsScope.new(self, nil, nil, &block)
172
+ end
173
+
174
+ def document_attribute(names, opts)
175
+ @last_description ||= {}
176
+ @last_description[:params] ||= {}
177
+
178
+ Array(names).each do |name|
179
+ @last_description[:params][name[:name].to_s] ||= {}
180
+ @last_description[:params][name[:name].to_s].merge!(opts).merge!({:full_name => name[:full_name]})
181
+ end
182
+ end
183
+
184
+ end
185
+
186
+ end
187
+ end
188
+
189
+ # Load all defined validations.
190
+ Dir[File.expand_path('../validations/*.rb', __FILE__)].each do |path|
191
+ require(path)
192
+ end
@@ -0,0 +1,3 @@
1
+ module Grape
2
+ VERSION = '0.2.1'
3
+ end
@@ -0,0 +1,44 @@
1
+ require 'rack'
2
+ require 'rack/builder'
3
+
4
+ module Grape
5
+ autoload :API, 'grape/api'
6
+ autoload :Endpoint, 'grape/endpoint'
7
+ autoload :MiddlewareStack, 'grape/middleware_stack'
8
+ autoload :Client, 'grape/client'
9
+ autoload :Route, 'grape/route'
10
+ autoload :Entity, 'grape/entity'
11
+ autoload :Cookies, 'grape/cookies'
12
+ autoload :Validations, 'grape/validations'
13
+
14
+ module Exceptions
15
+ autoload :Base, 'grape/exceptions/base'
16
+ end
17
+ autoload :ValidationError, 'grape/exceptions/validation_error'
18
+
19
+ module Middleware
20
+ autoload :Base, 'grape/middleware/base'
21
+ autoload :Prefixer, 'grape/middleware/prefixer'
22
+ autoload :Versioner, 'grape/middleware/versioner'
23
+ autoload :Formatter, 'grape/middleware/formatter'
24
+ autoload :Error, 'grape/middleware/error'
25
+
26
+ module Auth
27
+ autoload :OAuth2, 'grape/middleware/auth/oauth2'
28
+ autoload :Basic, 'grape/middleware/auth/basic'
29
+ autoload :Digest, 'grape/middleware/auth/digest'
30
+ end
31
+
32
+ module Versioner
33
+ autoload :Path, 'grape/middleware/versioner/path'
34
+ autoload :Header, 'grape/middleware/versioner/header'
35
+ autoload :Param, 'grape/middleware/versioner/param'
36
+ end
37
+ end
38
+
39
+ module Util
40
+ autoload :HashStack, 'grape/util/hash_stack'
41
+ end
42
+ end
43
+
44
+ require 'grape/version'
metadata ADDED
@@ -0,0 +1,216 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fragrant
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matt Whiteley
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: vagrant
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: uuid
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: puma
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: vegas
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: grape
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.2.1
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.2.1
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rack-test
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: Generate and manage Vagrant boxes remotely
143
+ email:
144
+ - mwhiteley@engineyard.com
145
+ executables:
146
+ - fragrant
147
+ extensions: []
148
+ extra_rdoc_files: []
149
+ files:
150
+ - bin/fragrant
151
+ - lib/fragrant/address_manager.rb
152
+ - lib/fragrant/vagrantfile_generator.rb
153
+ - lib/fragrant.rb
154
+ - vendor/grape/lib/grape/api.rb
155
+ - vendor/grape/lib/grape/cookies.rb
156
+ - vendor/grape/lib/grape/endpoint.rb
157
+ - vendor/grape/lib/grape/entity.rb
158
+ - vendor/grape/lib/grape/exceptions/base.rb
159
+ - vendor/grape/lib/grape/exceptions/validation_error.rb
160
+ - vendor/grape/lib/grape/middleware/auth/basic.rb
161
+ - vendor/grape/lib/grape/middleware/auth/digest.rb
162
+ - vendor/grape/lib/grape/middleware/auth/oauth2.rb
163
+ - vendor/grape/lib/grape/middleware/base.rb
164
+ - vendor/grape/lib/grape/middleware/error.rb
165
+ - vendor/grape/lib/grape/middleware/filter.rb
166
+ - vendor/grape/lib/grape/middleware/formatter.rb
167
+ - vendor/grape/lib/grape/middleware/prefixer.rb
168
+ - vendor/grape/lib/grape/middleware/versioner/header.rb
169
+ - vendor/grape/lib/grape/middleware/versioner/param.rb
170
+ - vendor/grape/lib/grape/middleware/versioner/path.rb
171
+ - vendor/grape/lib/grape/middleware/versioner.rb
172
+ - vendor/grape/lib/grape/route.rb
173
+ - vendor/grape/lib/grape/util/deep_merge.rb
174
+ - vendor/grape/lib/grape/util/hash_stack.rb
175
+ - vendor/grape/lib/grape/validations/coerce.rb
176
+ - vendor/grape/lib/grape/validations/presence.rb
177
+ - vendor/grape/lib/grape/validations/regexp.rb
178
+ - vendor/grape/lib/grape/validations.rb
179
+ - vendor/grape/lib/grape/version.rb
180
+ - vendor/grape/lib/grape.rb
181
+ - vendor/grape/LICENSE
182
+ - LICENSE
183
+ - README.md
184
+ - spec/fragrant/environments_spec.rb
185
+ - spec/fragrant/vagrantfile_generator_spec.rb
186
+ - spec/fragrant/vms_spec.rb
187
+ - spec/spec_helper.rb
188
+ homepage: http://github.com/engineyard/fragrant/
189
+ licenses: []
190
+ post_install_message:
191
+ rdoc_options: []
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ! '>='
198
+ - !ruby/object:Gem::Version
199
+ version: 1.8.7
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ requirements: []
207
+ rubyforge_project:
208
+ rubygems_version: 1.8.23
209
+ signing_key:
210
+ specification_version: 3
211
+ summary: An HTTP API for Vagrant
212
+ test_files:
213
+ - spec/fragrant/environments_spec.rb
214
+ - spec/fragrant/vagrantfile_generator_spec.rb
215
+ - spec/fragrant/vms_spec.rb
216
+ - spec/spec_helper.rb