Class: LabClient::Generator::Wizard

Inherits:
Object
  • Object
show all
Includes:
Names
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 Names

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

Constructor Details

#initialize(client) ⇒ Wizard

Returns a new instance of Wizard.



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

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
  puts "Default 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.



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

def client
  @client
end

#countObject

Returns the value of attribute count.



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

def count
  @count
end

#domainObject

Returns the value of attribute domain.



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

def domain
  @domain
end

#passwordObject

Returns the value of attribute password.



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

def password
  @password
end

#randomObject

Returns the value of attribute random.



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

def random
  @random
end

#skip_confirmationObject

Returns the value of attribute skip_confirmation.



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

def skip_confirmation
  @skip_confirmation
end

#templatesObject

Returns the value of attribute templates.



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

def templates
  @templates
end

Instance Method Details

#default_countObject

Random Counters



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

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

#generate_group_membershipObject

rubocop:disable Metrics/AbcSize



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
  puts '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
      puts "Group Add: #{group.name}: #{user.name} - #{level}" unless client.quiet?
      group.member_add(user, access_level: level)
      # :nocov:
    rescue StandardError => e
      puts e.message unless client.quiet?
      next
      # :nocov:
    end
  end
end

#generate_groupsObject



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

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

#generate_issue_data(member) ⇒ Object



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

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

rubocop:enable Metrics/AbcSize



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

def generate_projects(group)
  puts '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|
    puts "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



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

def generate_users
  puts 'Generating Users' unless client.quiet?
  @users = @user_names.map do |name|
    username = name.downcase.gsub(/[^0-9A-Za-z]/, '')
    email = "#{username}@#{domain}"
    puts "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



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

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

#run!Object

Execute Generation



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

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



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

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



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

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

#templates_defaultObject



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

def templates_default
  %i[pages pipeline_trigger environments]
end