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

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

Constructor Details

#initialize(client) ⇒ Wizard

Returns a new instance of Wizard.



14
15
16
17
18
19
20
21
22
# File 'lib/labclient/generator/wizard.rb', line 14

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
  self.domain = URI.parse(client.settings[:url]).hostname
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

#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



35
36
37
38
39
40
41
42
# File 'lib/labclient/generator/wizard.rb', line 35

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

#generate_group_membershipObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/labclient/generator/wizard.rb', line 67

def generate_group_membership
  ## 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}"
      group.member_add(user, access_level: level)
      # :nocov:
    rescue StandardError => e
      puts e.message
      next
      # :nocov:
    end
  end
end

#generate_groupsObject



59
60
61
62
63
64
65
# File 'lib/labclient/generator/wizard.rb', line 59

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

#generate_issue_data(member) ⇒ Object



98
99
100
101
102
103
104
# File 'lib/labclient/generator/wizard.rb', line 98

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



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

def generate_projects(group)
  # 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}"
    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



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/labclient/generator/wizard.rb', line 44

def generate_users
  @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}"

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

#inspectObject



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

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

#pages(opts = {}) ⇒ Object



30
31
32
# File 'lib/labclient/generator/wizard.rb', line 30

def pages(opts = {})
  Pages.new(client, opts)
end

#run!Object

Execute Generation



107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/labclient/generator/wizard.rb', line 107

def run!
  # Collect Names
  generate_names
  generate_users
  generate_groups
  generate_group_membership

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

  nil
end

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



24
25
26
27
28
# File 'lib/labclient/generator/wizard.rb', line 24

def template(name, opts = {})
  case name
  when :pages then Pages.new(client, opts)
  end
end