Module: Puppet::Network::HTTP::API::V1
- Included in:
- Indirector::REST, Handler
- Defined in:
- lib/puppet/network/http/api/v1.rb
Constant Summary collapse
- METHOD_MAP =
How we map http methods and the indirection name in the URI to an indirection method.
{ "GET" => { :plural => :search, :singular => :find }, "PUT" => { :singular => :save }, "DELETE" => { :singular => :destroy }, "HEAD" => { :singular => :head } }
Instance Method Summary collapse
- #indirection2uri(request) ⇒ Object
- #indirection_method(http_method, indirection) ⇒ Object
- #plurality(indirection) ⇒ Object
- #pluralize(indirection) ⇒ Object
- #uri2indirection(http_method, uri, params) ⇒ Object
Instance Method Details
#indirection2uri(request) ⇒ Object
39 40 41 42 |
# File 'lib/puppet/network/http/api/v1.rb', line 39 def indirection2uri(request) indirection = request.method == :search ? pluralize(request.indirection_name.to_s) : request.indirection_name.to_s "/#{request.environment.to_s}/#{indirection}/#{request.escaped_key}#{request.query_string}" end |
#indirection_method(http_method, indirection) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/puppet/network/http/api/v1.rb', line 44 def indirection_method(http_method, indirection) raise ArgumentError, "No support for http method #{http_method}" unless METHOD_MAP[http_method] unless method = METHOD_MAP[http_method][plurality(indirection)] raise ArgumentError, "No support for plural #{http_method} operations" end method end |
#plurality(indirection) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/puppet/network/http/api/v1.rb', line 58 def plurality(indirection) # NOTE This specific hook for facts is ridiculous, but it's a *many*-line # fix to not need this, and our goal is to move away from the complication # that leads to the fix being too long. return :singular if indirection == "facts" return :singular if indirection == "status" return :plural if indirection == "inventory" result = (indirection =~ /s$|_search$/) ? :plural : :singular indirection.sub!(/s$|_search$|es$/, '') result end |
#pluralize(indirection) ⇒ Object
54 55 56 |
# File 'lib/puppet/network/http/api/v1.rb', line 54 def pluralize(indirection) return(indirection == "status" ? "statuses" : indirection + "s") end |
#uri2indirection(http_method, uri, params) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/puppet/network/http/api/v1.rb', line 22 def uri2indirection(http_method, uri, params) environment, indirection, key = uri.split("/", 4)[1..-1] # the first field is always nil because of the leading slash raise ArgumentError, "The environment must be purely alphanumeric, not '#{environment}'" unless environment =~ /^\w+$/ raise ArgumentError, "The indirection name must be purely alphanumeric, not '#{indirection}'" unless indirection =~ /^\w+$/ method = indirection_method(http_method, indirection) params[:environment] = environment raise ArgumentError, "No request key specified in #{uri}" if key == "" or key.nil? key = URI.unescape(key) Puppet::Indirector::Request.new(indirection, method, key, params) end |