Class: LabClient::Generator::Wizard
- Inherits:
-
Object
- Object
- LabClient::Generator::Wizard
- Defined in:
- lib/labclient/generator/wizard.rb
Overview
Helper to Generate Data / Populate GitLab
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#count ⇒ Object
Returns the value of attribute count.
-
#domain ⇒ Object
Returns the value of attribute domain.
-
#password ⇒ Object
Returns the value of attribute password.
-
#random ⇒ Object
Returns the value of attribute random.
-
#skip_confirmation ⇒ Object
Returns the value of attribute skip_confirmation.
-
#templates ⇒ Object
Returns the value of attribute templates.
Instance Method Summary collapse
-
#default_count ⇒ Object
Random Counters.
- #generate_group_membership ⇒ Object
- #generate_groups ⇒ Object
- #generate_issue_data(member) ⇒ Object
- #generate_projects(group) ⇒ Object
- #generate_users ⇒ Object
-
#initialize(client) ⇒ Wizard
constructor
A new instance of Wizard.
- #inspect ⇒ Object
-
#run! ⇒ Object
Execute Generation.
- #template(name, opts = {}) ⇒ Object
- #templates_all ⇒ Object
- #templates_default ⇒ Object
Methods included from Logger
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
#client ⇒ Object (readonly)
Returns the value of attribute client.
8 9 10 |
# File 'lib/labclient/generator/wizard.rb', line 8 def client @client end |
#count ⇒ Object
Returns the value of attribute count.
9 10 11 |
# File 'lib/labclient/generator/wizard.rb', line 9 def count @count end |
#domain ⇒ Object
Returns the value of attribute domain.
9 10 11 |
# File 'lib/labclient/generator/wizard.rb', line 9 def domain @domain end |
#password ⇒ Object
Returns the value of attribute password.
9 10 11 |
# File 'lib/labclient/generator/wizard.rb', line 9 def password @password end |
#random ⇒ Object
Returns the value of attribute random.
9 10 11 |
# File 'lib/labclient/generator/wizard.rb', line 9 def random @random end |
#skip_confirmation ⇒ Object
Returns the value of attribute skip_confirmation.
9 10 11 |
# File 'lib/labclient/generator/wizard.rb', line 9 def skip_confirmation @skip_confirmation end |
#templates ⇒ Object
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_count ⇒ Object
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_membership ⇒ Object
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. unless client.quiet? next # :nocov: end end end |
#generate_groups ⇒ Object
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_users ⇒ Object
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 |
#inspect ⇒ Object
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_all ⇒ Object
19 20 21 |
# File 'lib/labclient/generator/wizard.rb', line 19 def templates_all LabClient::Generator::TemplateHelper.descendants end |
#templates_default ⇒ Object
15 16 17 |
# File 'lib/labclient/generator/wizard.rb', line 15 def templates_default i[pages pipeline_trigger environments] end |