Class: LabClient::Generator::Wizard

Inherits:
Object
  • Object
show all
Includes:
Names, Logger
Defined in:
lib/labclient/generator/wizard.rb

Overview

Helper to Generate Data / Populate GitLab

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Logger

#logger, logger, logger_setup

Methods included from Names

#create_file, #gen_description, #gen_groups, #gen_people, #gen_projects, #generate_names

Constructor Details

#initialize(client) ⇒ Wizard

Returns a new instance of Wizard.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/labclient/generator/wizard.rb', line 23

def initialize(client)
  require 'faker' # Ensure Faker is Available

  @client = client
  self.random = true # Populate Random or use only Templates
  self.count = default_count
  self.password = SecureRandom.uuid
  logger.info('Wizard Default Password', password: password) unless client.quiet?

  self.skip_confirmation = true
  self.domain = URI.parse(client.settings[:url]).hostname

  # Default Templates
  self.templates ||= templates_default
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



8
9
10
# File 'lib/labclient/generator/wizard.rb', line 8

def client
  @client
end

#countObject

Returns the value of attribute count.



9
10
11
# File 'lib/labclient/generator/wizard.rb', line 9

def count
  @count
end

#domainObject

Returns the value of attribute domain.



9
10
11
# File 'lib/labclient/generator/wizard.rb', line 9

def domain
  @domain
end

#passwordObject

Returns the value of attribute password.



9
10
11
# File 'lib/labclient/generator/wizard.rb', line 9

def password
  @password
end

#randomObject

Returns the value of attribute random.



9
10
11
# File 'lib/labclient/generator/wizard.rb', line 9

def random
  @random
end

#skip_confirmationObject

Returns the value of attribute skip_confirmation.



9
10
11
# File 'lib/labclient/generator/wizard.rb', line 9

def skip_confirmation
  @skip_confirmation
end

#templatesObject

Returns the value of attribute templates.



9
10
11
# File 'lib/labclient/generator/wizard.rb', line 9

def templates
  @templates
end

Instance Method Details

#default_countObject

Random Counters



48
49
50
51
52
53
54
55
# File 'lib/labclient/generator/wizard.rb', line 48

def default_count
  {
    users: 20,
    projects: 5,
    groups: 5,
    issues: 2
  }
end

#generate_group_membershipObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/labclient/generator/wizard.rb', line 83

def generate_group_membership
  logger.info 'Adding Group members' unless client.quiet?
  ## Group Access Level
  @groups.each do |group|
    @users.sample(rand(1..@users.count)).each do |user|
      level = group.valid_group_project_levels.sample
      logger.info('Group Add', name: group.name, user: user.name, level: level) unless client.quiet?
      group.member_add(user, access_level: level)
      # :nocov:
    rescue StandardError => e
      logger.fatal e.message unless client.quiet?
      next
      # :nocov:
    end
  end
end

#generate_groupsObject



74
75
76
77
78
79
80
81
# File 'lib/labclient/generator/wizard.rb', line 74

def generate_groups
  logger.info 'Generating Groups' unless client.quiet?
  @groups = @group_names.map do |name|
    path = name.downcase.gsub(/[^0-9A-Za-z]/, '')
    logger.info "Group -- #{name}/#{path}" unless client.quiet?
    client.groups.create(name: name, path: path)
  end
end

#generate_issue_data(member) ⇒ Object



116
117
118
119
120
121
122
# File 'lib/labclient/generator/wizard.rb', line 116

def generate_issue_data(member)
  {
    assignee_id: member.id,
    description: Faker::Hacker.say_something_smart,
    title: Faker::Company.catch_phrase
  }
end

#generate_projects(group) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/labclient/generator/wizard.rb', line 100

def generate_projects(group)
  logger.info 'Generating Projects' unless client.quiet?
  # Collect Group Members
  members = group.members

  # Loop through project names, create project add issues
  @project_names.uniq.map do |project_name|
    logger.info "Project: #{project_name}" unless client.quiet?
    project = group.project_create(name: project_name, description: gen_description)

    rand(count[:issues]).times do
      project.issue_create(generate_issue_data(members.sample))
    end
  end
end

#generate_usersObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/labclient/generator/wizard.rb', line 57

def generate_users
  logger.info 'Generating Users' unless client.quiet?
  @users = @user_names.map do |name|
    username = name.downcase.gsub(/[^0-9A-Za-z]/, '')
    email = "#{username}@#{domain}"
    logger.info('User', name: name, username: username, email: email) unless client.quiet?

    client.users.create(
      name: name,
      email: email,
      password: password,
      username: username,
      skip_confirmation: skip_confirmation
    )
  end
end

#inspectObject



11
12
13
# File 'lib/labclient/generator/wizard.rb', line 11

def inspect
  "#<Wizard count=#{count}, random=#{random}, domain=#{domain}> templates=#{templates}"
end

#run!Object

Execute Generation



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/labclient/generator/wizard.rb', line 125

def run!
  # Collect Names
  generate_names
  generate_users
  generate_groups
  generate_group_membership

  @groups.map do |group|
    generate_projects(group)
  end

  # Run Templates
  templates.each { |template_klass| template(template_klass).run! }

  nil
end

#template(name, opts = {}) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/labclient/generator/wizard.rb', line 39

def template(name, opts = {})
  template_klass = templates_all.find { |x| x.template_name == name.to_sym }

  raise "Invalid Template! Available Templates: #{templates_all.map(&:template_name).join(', ')}" unless template_klass

  template_klass.new(client, opts)
end

#templates_allObject



19
20
21
# File 'lib/labclient/generator/wizard.rb', line 19

def templates_all
  LabClient::Generator::TemplateHelper.descendants
end

#templates_defaultObject



15
16
17
# File 'lib/labclient/generator/wizard.rb', line 15

def templates_default
  %i[pages pipeline_trigger environments]
end