class Nidobata::CLI
Constants
- Client
- CreateMessageMutation
- HTTP
- IDOBATA_URL
- RoomListQuery
- Schema
Public Instance Methods
api_token()
click to toggle source
# File lib/nidobata.rb, line 113 def api_token Netrc.read[IDOBATA_URL.host]&.password end
build_message(original_message, options)
click to toggle source
# File lib/nidobata.rb, line 121 def build_message(original_message, options) return original_message if options.empty? title, pre = options.values_at(:title, :pre) message = pre ? "~~~#{pre}\n#{original_message}\n~~~" : original_message title ? "#{title}\n\n#{message}" : message end
ensure_api_token()
click to toggle source
# File lib/nidobata.rb, line 109 def ensure_api_token abort 'Run nidobata init for setup.' unless api_token end
init()
click to toggle source
# File lib/nidobata.rb, line 40 def init email = ask('Email:') password = ask('Password:', echo: false) puts http = Net::HTTP.new(IDOBATA_URL.host, IDOBATA_URL.port).tap {|h| h.use_ssl = IDOBATA_URL.scheme == 'https' } data = {grant_type: 'password', username: email, password: password} res = http.post('/oauth/token', data.to_json, {'Content-Type' => 'application/json'}) case res when Net::HTTPSuccess token = JSON.parse(res.body)['access_token'] netrc = Netrc.read netrc[IDOBATA_URL.host] = email, token netrc.save when Net::HTTPUnauthorized abort 'Authentication failed. You may have entered wrong Email or Password.' else abort <<~EOS Failed to initialize. Status: #{res.code} Body: #{res.body} EOS end end
post(slug, room_name, message = $stdin.read)
click to toggle source
# File lib/nidobata.rb, line 74 def post(slug, room_name, message = $stdin.read) abort 'Message is required.' unless message ensure_api_token room_id = query(RoomListQuery).data.viewer.rooms.edges.map(&:node).find {|room| room.organization.slug == slug && room.name == room_name }.id payload = { roomId: room_id, source: build_message(message, options), format: options[:pre] ? 'MARKDOWN' : options[:format] ? options[:format] : 'PLAIN' } query CreateMessageMutation, variables: {input: payload} end
query(q, variables: {}, context: {})
click to toggle source
# File lib/nidobata.rb, line 117 def query(q, variables: {}, context: {}) Client.query(q, variables: variables, context: {api_token: api_token}.merge(context)) end
rooms(slug = nil)
click to toggle source
# File lib/nidobata.rb, line 93 def rooms(slug = nil) ensure_api_token rooms = query(RoomListQuery).data.viewer.rooms.edges.map(&:node) rooms.select! {|room| room.organization.slug == slug } if slug rooms.map {|room| "#{room.organization.slug}/#{room.name}" }.sort.each do |name| puts name end end