Class: LabClient::Generator::Wizard
- Inherits:
-
Object
- Object
- LabClient::Generator::Wizard
- Includes:
- Names
- 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 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}" 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.
7 8 9 |
# File 'lib/labclient/generator/wizard.rb', line 7 def client @client end |
#count ⇒ Object
Returns the value of attribute count.
8 9 10 |
# File 'lib/labclient/generator/wizard.rb', line 8 def count @count end |
#domain ⇒ Object
Returns the value of attribute domain.
8 9 10 |
# File 'lib/labclient/generator/wizard.rb', line 8 def domain @domain end |
#password ⇒ Object
Returns the value of attribute password.
8 9 10 |
# File 'lib/labclient/generator/wizard.rb', line 8 def password @password end |
#random ⇒ Object
Returns the value of attribute random.
8 9 10 |
# File 'lib/labclient/generator/wizard.rb', line 8 def random @random end |
#skip_confirmation ⇒ Object
Returns the value of attribute skip_confirmation.
8 9 10 |
# File 'lib/labclient/generator/wizard.rb', line 8 def skip_confirmation @skip_confirmation end |
#templates ⇒ Object
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_count ⇒ Object
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_membership ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/labclient/generator/wizard.rb', line 82 def generate_group_membership puts 'Adding Group members' ## 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. next # :nocov: end end end |
#generate_groups ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/labclient/generator/wizard.rb', line 73 def generate_groups puts 'Generating 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
115 116 117 118 119 120 121 |
# File 'lib/labclient/generator/wizard.rb', line 115 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
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/labclient/generator/wizard.rb', line 99 def generate_projects(group) puts 'Generating Projects' # 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_users ⇒ Object
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' @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, skip_confirmation: skip_confirmation ) end end |
#inspect ⇒ Object
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
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/labclient/generator/wizard.rb', line 124 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_all ⇒ Object
18 19 20 |
# File 'lib/labclient/generator/wizard.rb', line 18 def templates_all LabClient::Generator::TemplateHelper.descendants end |
#templates_default ⇒ Object
14 15 16 |
# File 'lib/labclient/generator/wizard.rb', line 14 def templates_default %i[pages pipeline_trigger environments] end |