File: user_collection.rb

package info (click to toggle)
ruby-aws-sdk 1.52.0-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 6,164 kB
  • ctags: 4,821
  • sloc: ruby: 28,085; makefile: 7
file content (133 lines) | stat: -rw-r--r-- 4,116 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
#     http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.

module AWS
  class IAM

    # A collection that provides access to IAM users belonging to this
    # account.
    #
    #     iam = AWS::IAM.new
    #     users = iam.users
    #
    # ## Creating A User
    #
    # To create an IAM user you need only provide a user name.
    #
    #     user = users.create('username')
    #
    # You can also provide an optional `:path` that can be used to organize
    # users.
    #
    #     user = users.create('johndoe', :path => '/staff/customer_support/')
    #
    # ## Getting a User by Name
    #
    # You can get a referene to a user by using array notation:
    #
    #     user = users['username']
    #
    # ## Enumerating Users
    #
    # A user collection can also be used to enumerate users:
    #
    #     users.each do |user|
    #       puts user.name
    #     end
    #
    # ## Path Prefixes
    #
    # You can also find/enumerate users who's path begins with a given prefix:
    #
    #     users.each(:path_prefix => '/staff/developers/ruby').each do |ruby_dev|
    #       puts "#{ruby_dev.name} is awesome!"
    #     end
    #
    class UserCollection

      include Collection::WithPrefix

      # @param [String] name Name of the user to create.
      # @option options [String] :path ('/') The path for the user name.
      #   For more information about paths, see
      #   [Identifiers for IAM Entities](http://docs.amazonwebservices.com/IAM/latest/UserGuide/index.html?Using_Identifiers.html)
      # @return [User] Returns the newly created user.
      def create name, options = {}
        create_opts = {}
        create_opts[:user_name] = name
        create_opts[:path] = options[:path] if options[:path]
        resp = client.create_user(create_opts)
        User.new_from(:create_user, resp.user,
          resp.user.user_name, :config => config)
      end

      # Returns a reference to the user with the given name:
      #
      #     user = iam.users['username']
      #
      # @param [String] name Name of the user to return a reference for.
      # @return [User] Returns a reference to the named user.
      def [] name
        User.new(name.to_s, :config => config)
      end

      # Yields once for each user.
      #
      # You can limit the number of users yielded using `:limit` and
      # `:path_prefix`.
      #
      # @param [Hash] options
      #
      # @option options [String] :path_prefix ('/') A path prefix that
      #   filters according to the path of the user.
      #
      # @option options [Integer] :limit The maximum number of users to yield.
      #
      # @option options [Integer] :batch_size The maximum number of users
      #   to retrieve with each service request.
      #
      # @yieldparam [User] user
      # @return [nil]
      def each options = {}, &block
        super(options, &block)
      end

      # Returns an enumerable object for this collection.  This can be
      # useful if you want to call an enumerable method that does
      # not accept options (e.g. `collect`, `first`, etc).
      #
      #     users.enumerator(:path_prefix => '/admin').collect(&:name)
      #
      # @param (see #each)
      # @option (see #each)
      # @return [Enumerator]
      def enumerator options = {}
        super(options)
      end

      # @api private
      protected
      def each_item response, &block
        response.users.each do |item|

          user = User.new_from(:list_users, item,
            item.user_name, :config => config)

          yield(user)

        end
      end

    end
  end
end