class GithubMembers::CLI
Constants
- EXIT_FAILURE
- EXIT_SUCCESS
Attributes
argv[R]
options[R]
Public Class Methods
new(argv)
click to toggle source
# File lib/github_members/cli.rb, line 11 def initialize(argv) @argv = argv end
Public Instance Methods
run()
click to toggle source
# File lib/github_members/cli.rb, line 15 def run begin @options = Options.new(argv) rescue Options::ParseError => e warn e.message return EXIT_FAILURE end case when options.help_shown puts options.help return EXIT_SUCCESS when options.version puts options.version return EXIT_SUCCESS when options.github_org.nil? warn "Error: Organization is missing" warn "" warn options.help return EXIT_FAILURE end org = Organization.new(client.fetch_organization(options.github_org)) yaml_file = options.yaml_file members = begin read_members(yaml_file) rescue RequiredMemberAttributes => e warn e.message return EXIT_FAILURE end client.fetch_members(org.name).each do |new_member| github = new_member.fetch(:github) fullname = new_member.fetch(:fullname) avatar = new_member.fetch(:avatar) if members.key?(github) members[github].tap do |m| m.fullname = fullname m.avatar = avatar m.updated = true end else members[github] = member_class.new( github: github, fullname: fullname, avatar: avatar, updated: true ) end end members.delete_if { |_, m| !m.updated } write_members(members.values, yaml_file) puts "Updated: #{yaml_file}" markdown_file = options.markdown_file MarkdownWriter.new.write(org: org, members: members.values, file: markdown_file) puts "Updated: #{markdown_file}" EXIT_SUCCESS end
Private Instance Methods
client()
click to toggle source
# File lib/github_members/cli.rb, line 83 def client @client ||= Client.new(options) end
member_class()
click to toggle source
# File lib/github_members/cli.rb, line 87 def member_class @member_class ||= Member.new.define_class(*options.fields) end
read_members(file)
click to toggle source
# File lib/github_members/cli.rb, line 91 def read_members(file) return {} unless file.exist? YAML.safe_load(File.read(file)).each_with_object({}) do |member_attrs, hash| member = member_class.new(updated: false) required_attrs = member_attrs.keys.map(&:to_sym) - member.members unless required_attrs.empty? raise RequiredMemberAttributes, "Needed to specify the option: --fields #{required_attrs.join(",")}" end member_attrs.each { |key, value| member[key] = value } hash[member.github] = member end end
write_members(members, file)
click to toggle source
# File lib/github_members/cli.rb, line 107 def write_members(members, file) file.write(members.map(&:to_h).to_yaml) end