glottis 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 7a42b6e38fd2d75e8acbdc2dcf338453c34b69c7
4
- data.tar.gz: 189a29629e5104997a16071815febe031ee1e794
2
+ SHA256:
3
+ metadata.gz: c4738a04eaf3d36ff79c3b8b18e9408d825729e40a2314f76049aeb848e9fb23
4
+ data.tar.gz: 3bc4629dfdb5dbc0b9d55b78369fb4f5be2dc9032a0ac1b5b2f922fdff4b7a6d
5
5
  SHA512:
6
- metadata.gz: 1cffde427455b740691132995a39ac6c1071a23f19bcef3744971958d414967c13ea4c9f28dabd521eef21dda5c074951dd311ee109ac81c6c4420514e1c253d
7
- data.tar.gz: 22dd5726fef0948fd4c114dddaa52c02a01699bbbcbe155e15622fc0c7f2b59474ae2bbf2689cbc133fdba2590c0e2ff97bc7ec602d468d67749bf9dc15a5eab
6
+ metadata.gz: 8b36bbc01a00d869a1bd91f58ccc31348332244896e6bca5b6c2c2ba96ce8c1cdb8a16254a50fe4a4c005cc6b3d79a97f789bae8b4c01d6e084aa497f9bb4081
7
+ data.tar.gz: 74dcce5991937a677eddbe3ebd51de4f792cd0c47ecff50f4d606288fe12c880ef36b9e9c280de8c7f269bf1e82a50248b0d894e38c34b2be2924ad4de3b6070
data/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semmle.com/semver/1.0.0/).
7
+
8
+ ## [0.3.0] - 2026-07-24
9
+
10
+ ### Changed
11
+ - Bumped required Ruby version to `>= 3.0.0`.
12
+ - Removed `rb-readline` dependency in favor of Ruby standard library `reline`/`readline`.
13
+ - Updated `slop` runtime dependency to `~> 4.10`.
14
+ - Modernized gemspec metadata and file list configuration.
15
+ - Updated RuboCop configuration for Ruby 3.0+ compatibility (`Layout/LineLength`).
16
+ - Migrated CI from Travis CI to GitHub Actions (`.github/workflows/ci.yml`).
17
+
18
+ ### Added
19
+ - Comprehensive RSpec test suite covering core client and handlers.
data/README.md CHANGED
@@ -2,26 +2,47 @@
2
2
 
3
3
  A CLI for the [valyx](https://github.com/maxdeliso/valyx) message passing server.
4
4
 
5
+ [![CI](https://github.com/maxdeliso/glottis/actions/workflows/ci.yml/badge.svg)](https://github.com/maxdeliso/glottis/actions/workflows/ci.yml)
6
+ [![Gem Version](https://badge.fury.io/rb/glottis.svg)](https://badge.fury.io/rb/glottis)
7
+
8
+ ## Requirements
9
+
10
+ - Ruby >= 3.0.0
11
+
5
12
  ## Installation
6
13
 
14
+ Install the gem by executing:
15
+
7
16
  $ gem install glottis
8
17
 
18
+ Or add it to your application's Gemfile:
19
+
20
+ $ gem 'glottis', '~> 0.3'
21
+
9
22
  ## Usage
10
23
 
11
- $ glottis -h
24
+ Run the `glottis` command-line executable:
25
+
26
+ $ glottis --host localhost --port 8080
27
+
28
+ For help and available command line flags:
29
+
30
+ $ glottis --help
12
31
 
13
32
  ## Development
14
33
 
15
- To check the code:
34
+ To run the test suite and linter:
16
35
 
17
- $ bundle exec rake
36
+ $ bundle exec rake
18
37
 
19
38
  To install this gem onto your local machine:
20
39
 
21
- $ bundle exec rake install
40
+ $ bundle exec rake install
22
41
 
23
42
  ## Contributing
24
43
 
25
44
  Bug reports and pull requests are welcome on GitHub at https://github.com/maxdeliso/glottis.
26
45
 
27
- [![Gem Version](https://badge.fury.io/rb/glottis.svg)](https://badge.fury.io/rb/glottis)
46
+ ## License
47
+
48
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rubocop/rake_task'
5
+ require 'rspec/core/rake_task'
3
6
 
4
7
  RuboCop::RakeTask.new(:rubocop)
8
+ RSpec::Core::RakeTask.new(:spec)
9
+
10
+ task default: %i[rubocop spec]
5
11
 
6
- task default: [:rubocop]
data/exe/glottis CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'slop'
4
5
  require 'glottis'
@@ -20,3 +21,4 @@ end
20
21
  Glottis::Client.new(opts[:host],
21
22
  opts[:port],
22
23
  verbose: opts[:verbose]).run
24
+
data/glottis.gemspec CHANGED
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'glottis/version'
5
6
 
@@ -11,19 +12,27 @@ Gem::Specification.new do |spec|
11
12
  spec.licenses = ['MIT']
12
13
  spec.summary = 'simple http messaging client'
13
14
  spec.homepage = 'https://github.com/maxdeliso/glottis'
15
+ spec.required_ruby_version = '>= 3.0.0'
16
+
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/maxdeliso/glottis'
19
+ spec.metadata['changelog_uri'] = 'https://github.com/maxdeliso/glottis/blob/main/CHANGELOG.md'
20
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/maxdeliso/glottis/issues'
21
+ spec.metadata['rubygems_mfa_required'] = 'true'
14
22
 
15
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
- f.match(%r{^(test|spec|features)/})
17
- end
23
+ spec.files = Dir.glob('{exe,lib}/**/*') + %w[Rakefile README.md CHANGELOG.md glottis.gemspec]
24
+ spec.files = spec.files.select { |f| File.file?(f) }
18
25
 
19
26
  spec.bindir = 'exe'
20
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
28
  spec.require_paths = ['lib']
22
29
 
23
- spec.add_runtime_dependency 'rb-readline', '~> 0.5.3'
24
- spec.add_runtime_dependency 'slop', '~> 4.2'
30
+ spec.add_runtime_dependency 'slop', '~> 4.10'
25
31
 
26
- spec.add_development_dependency 'bundler', '~> 1.10'
27
- spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'rubocop', '~> 0.37.2'
32
+ spec.add_development_dependency 'bundler', '~> 2.0'
33
+ spec.add_development_dependency 'rake', '~> 13.0'
34
+ spec.add_development_dependency 'rspec', '~> 3.0'
35
+ spec.add_development_dependency 'rubocop', '~> 1.0'
29
36
  end
37
+
38
+
@@ -1,4 +1,5 @@
1
- require 'thread'
1
+ # frozen_string_literal: true
2
+
2
3
  require 'logger'
3
4
  require 'glottis/handlers/console_input_handler'
4
5
  require 'glottis/handlers/console_output_handler'
@@ -6,10 +7,10 @@ require 'glottis/handlers/remote_input_handler'
6
7
  require 'glottis/handlers/remote_output_handler'
7
8
 
8
9
  module Glottis
9
- # Client class, used to interact with the host specified.
10
+ # Client class used to interact with the specified host and port.
10
11
  class Client
11
12
  def self.logger
12
- @logger ||= Logger.new(STDOUT)
13
+ @logger ||= Logger.new($stdout)
13
14
  end
14
15
 
15
16
  def initialize(host, port, opts = {})
@@ -17,12 +18,12 @@ module Glottis
17
18
  @port = port
18
19
  @outgoing = Queue.new
19
20
  @incoming = Queue.new
21
+ @handlers = []
20
22
  Client.logger.level = opts[:verbose] ? Logger::DEBUG : Logger::WARN
21
23
  end
22
24
 
23
25
  def run
24
26
  Client.logger.info('starting...')
25
- Thread.abort_on_exception = true
26
27
 
27
28
  @handlers = [
28
29
  Handlers::ConsoleInputHandler.new(@outgoing),
@@ -31,14 +32,25 @@ module Glottis
31
32
  Handlers::RemoteOutputHandler.new(@outgoing, @host, @port)
32
33
  ]
33
34
 
35
+ @handlers.each(&:start)
34
36
  @handlers.each(&:join)
37
+ rescue Glottis::Exceptions::UserExitedException
38
+ Client.logger.info('User exited.')
39
+ rescue Interrupt
40
+ Client.logger.info('Received interrupt signal. Exiting...')
35
41
  rescue Errno::ECONNREFUSED => conn_ref
36
- Client.logger.error("failed to connect: #{conn_ref}")
42
+ Client.logger.error("Failed to connect to host: #{conn_ref.message}")
37
43
  rescue StandardError => ex
38
- Client.logger.warn("shutting down: #{ex}")
44
+ Client.logger.warn("Shutting down due to error: #{ex.message}")
39
45
  ensure
46
+ stop_handlers
47
+ end
48
+
49
+ private
50
+
51
+ def stop_handlers
40
52
  @handlers.each(&:cleanup)
41
- exit(0)
42
- end # run
43
- end # Client
53
+ end
54
+ end
44
55
  end
56
+
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Glottis
2
4
  module Exceptions
3
5
  class GlottisException < StandardError
4
6
  end
5
7
  end
6
8
  end
9
+
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'glottis/exceptions/glottis_exception'
2
4
 
3
5
  module Glottis
@@ -6,3 +8,4 @@ module Glottis
6
8
  end
7
9
  end
8
10
  end
11
+
@@ -1,32 +1,50 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'glottis/exceptions/user_exited_exception'
2
4
  require 'readline'
3
5
 
4
6
  module Glottis
5
7
  module Handlers
6
- # This class holds a reference to the outgoing message queue,
7
- # and posts messages to it from the console as they are entered.
8
- class ConsoleInputHandler < Thread
9
- USER_PROMPT = '> '.freeze
8
+ # Holds a reference to the outgoing message queue and posts console input.
9
+ class ConsoleInputHandler
10
+ USER_PROMPT = '> '
10
11
 
11
12
  def initialize(outgoing)
12
13
  @outgoing = outgoing
13
- super do
14
- loop do
15
- user_input = Readline.readline(USER_PROMPT)
16
- Readline::HISTORY.push(user_input)
14
+ @running = false
15
+ @thread = nil
16
+ end
17
17
 
18
- # if user_input.nil?
19
- # raise Glottis::Exceptions::UserExitedException.new
20
- # end
18
+ def start
19
+ @running = true
20
+ @thread = Thread.new { run_loop }
21
+ self
22
+ end
21
23
 
22
- @outgoing.push(user_input)
23
- end
24
- end
24
+ def join
25
+ @thread&.join
25
26
  end
26
27
 
27
28
  def cleanup
28
- # do nothing
29
+ @running = false
30
+ @thread&.kill if @thread&.alive?
29
31
  end
30
- end # ConsoleInputHandler
31
- end # Handlers
32
- end # Glottis
32
+
33
+ private
34
+
35
+ def run_loop
36
+ while @running
37
+ user_input = Readline.readline(USER_PROMPT, true)
38
+
39
+ raise Glottis::Exceptions::UserExitedException, 'User exited readline stream' if user_input.nil?
40
+
41
+ @outgoing.push(user_input)
42
+ end
43
+ rescue Glottis::Exceptions::UserExitedException => ex
44
+ Client.logger.info("Console input ended: #{ex.message}")
45
+ raise ex
46
+ end
47
+ end
48
+ end
49
+ end
50
+
@@ -1,21 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Glottis
2
4
  module Handlers
3
- # This class holds a reference to the incoming message queue,
4
- # and displays messages in the console as they are received.
5
- class ConsoleOutputHandler < Thread
5
+ # Holds a reference to incoming message queue and prints messages to stdout.
6
+ class ConsoleOutputHandler
6
7
  def initialize(incoming)
7
8
  @incoming = incoming
8
- super do
9
- loop do
10
- new_msg = @incoming.pop
11
- puts "#{new_msg['from']}, #{new_msg['to']}, #{new_msg['msg']}"
12
- end
13
- end
9
+ @running = false
10
+ @thread = nil
11
+ end
12
+
13
+ def start
14
+ @running = true
15
+ @thread = Thread.new { run_loop }
16
+ self
17
+ end
18
+
19
+ def join
20
+ @thread&.join
14
21
  end
15
22
 
16
23
  def cleanup
17
- puts '|'
24
+ @running = false
25
+ @thread&.kill if @thread&.alive?
18
26
  end
19
- end # ConsoleOutputHandler
20
- end # Handlers
21
- end # Glottis
27
+
28
+ private
29
+
30
+ def run_loop
31
+ while @running
32
+ new_msg = @incoming.pop
33
+ break if new_msg.nil? || new_msg == :shutdown
34
+
35
+ puts "#{new_msg['from']}, #{new_msg['to']}, #{new_msg['msg']}"
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
  require 'uri'
3
5
  require 'net/http'
@@ -5,11 +7,11 @@ require 'json'
5
7
 
6
8
  module Glottis
7
9
  module Handlers
8
- # This class manages a TCP connection with a valyx server.
9
- class RemoteInputHandler < Thread
10
- PROTOCOL = 'http'.freeze
11
- STREAM_DELIMITER = "\0".freeze
12
- READ_TIMEOUT = 3600 # this needs to be high
10
+ # Manages stream input from the remote valyx server.
11
+ class RemoteInputHandler
12
+ PROTOCOL = 'http'
13
+ STREAM_DELIMITER = "\0"
14
+ READ_TIMEOUT = 3600
13
15
  REMOTE_PATHS = {
14
16
  get_message_stream: '/api/messages/stream'
15
17
  }.freeze
@@ -18,17 +20,29 @@ module Glottis
18
20
  @incoming = incoming
19
21
  @host = host
20
22
  @port = port
21
-
23
+ @running = false
24
+ @thread = nil
25
+ @buffer = String.new
22
26
  setup_http
27
+ end
23
28
 
24
- super do
29
+ def start
30
+ @running = true
31
+ @thread = Thread.new do
25
32
  @http.start
26
33
  read_loop
27
34
  end
35
+ self
36
+ end
37
+
38
+ def join
39
+ @thread&.join
28
40
  end
29
41
 
30
42
  def cleanup
43
+ @running = false
31
44
  @http.finish if @http.started?
45
+ @thread&.kill if @thread&.alive?
32
46
  end
33
47
 
34
48
  private
@@ -42,12 +56,32 @@ module Glottis
42
56
  def read_loop
43
57
  Client.logger.info('reading stream...')
44
58
  @http.get(REMOTE_PATHS.fetch(:get_message_stream)) do |chunk|
59
+ break unless @running
60
+
45
61
  Client.logger.debug("got chunk of length: #{chunk.length}")
46
- chunk.split(STREAM_DELIMITER).each do |msg_data|
47
- @incoming.push(JSON.parse(msg_data))
48
- end # each
49
- end # get
50
- end # read_loop
51
- end # RemoteInputHandler
52
- end # Handlers
53
- end # Glottis
62
+ process_chunk(chunk)
63
+ end
64
+ rescue StandardError => ex
65
+ Client.logger.error("Error reading message stream: #{ex.message}") if @running
66
+ end
67
+
68
+ def process_chunk(chunk)
69
+ @buffer << chunk
70
+
71
+ while (delimiter_index = @buffer.index(STREAM_DELIMITER))
72
+ msg_raw = @buffer.slice!(0..delimiter_index)
73
+ msg_data = msg_raw.chomp(STREAM_DELIMITER)
74
+ next if msg_data.empty?
75
+
76
+ begin
77
+ parsed_msg = JSON.parse(msg_data)
78
+ @incoming.push(parsed_msg)
79
+ rescue JSON::ParserError => err
80
+ Client.logger.warn("Failed to parse JSON payload: #{err.message}")
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'logger'
2
4
  require 'uri'
3
5
  require 'net/http'
@@ -5,10 +7,10 @@ require 'json'
5
7
 
6
8
  module Glottis
7
9
  module Handlers
8
- # This class manages a TCP connection with a valyx server.
9
- class RemoteOutputHandler < Thread
10
+ # Manages posting outgoing messages to the remote valyx server.
11
+ class RemoteOutputHandler
10
12
  POLL_INTERVAL = 0.1
11
- PROTOCOL = 'http'.freeze
13
+ PROTOCOL = 'http'
12
14
 
13
15
  REMOTE_PATHS = {
14
16
  get_session: '/api/session',
@@ -19,28 +21,39 @@ module Glottis
19
21
  @outgoing = outgoing
20
22
  @host = host
21
23
  @port = port
22
-
24
+ @running = false
25
+ @thread = nil
26
+ @sid = nil
23
27
  setup_http
28
+ end
24
29
 
25
- super do
30
+ def start
31
+ @running = true
32
+ @thread = Thread.new do
26
33
  @http.start
27
34
  request_session
28
35
 
29
- loop do
36
+ while @running
30
37
  send_queued
31
38
  end
32
39
  end
40
+ self
41
+ end
42
+
43
+ def join
44
+ @thread&.join
33
45
  end
34
46
 
35
47
  def cleanup
48
+ @running = false
36
49
  @http.finish if @http.started?
50
+ @thread&.kill if @thread&.alive?
37
51
  end
38
52
 
39
53
  private
40
54
 
41
55
  def setup_http
42
56
  @http = Net::HTTP.new(@host, @port)
43
- # TODO: make these configurable somewhere
44
57
  @http.open_timeout = 1
45
58
  @http.read_timeout = 1
46
59
  end
@@ -49,7 +62,6 @@ module Glottis
49
62
  Client.logger.info('making initial request for session...')
50
63
 
51
64
  session_req = @http.get(REMOTE_PATHS.fetch(:get_session))
52
-
53
65
  response = JSON.parse(session_req.body)
54
66
 
55
67
  if Integer(session_req.code) != 201
@@ -60,20 +72,20 @@ module Glottis
60
72
  Client.logger.info("current session id: #{@sid}")
61
73
  end
62
74
 
63
- # given the result of a .get or .post, converts the response code,
64
- # and executes the (side effecting) block if the response was not
65
- # successful. calls the block with a message describing the error.
66
- def if_not_ok(http_req, ok_code = 200, &_b)
75
+ def if_not_ok(http_req, ok_code = 200)
67
76
  yield http_req.body if Integer(http_req.code) != ok_code
68
77
  end
69
78
 
70
79
  def send_queued
80
+ raw_msg = @outgoing.pop
81
+ return if raw_msg.nil? || raw_msg == :shutdown
82
+
71
83
  Client.logger.info("processing message with #{@outgoing.size} messages outgoing")
72
84
 
73
85
  message_data = {
74
86
  from: @sid,
75
87
  to: '*',
76
- msg: @outgoing.pop
88
+ msg: raw_msg
77
89
  }.to_json
78
90
 
79
91
  post_req = @http.post(REMOTE_PATHS.fetch(:post_message), message_data)
@@ -81,7 +93,8 @@ module Glottis
81
93
  if_not_ok(post_req) do |err|
82
94
  Client.logger.warn("failed to post message: #{message_data} #{err}")
83
95
  end
84
- end # send_queued
85
- end # RemoteOutputHandler
86
- end # Handlers
87
- end # Glottis
96
+ end
97
+ end
98
+ end
99
+ end
100
+
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Glottis
2
- VERSION = '0.1.3'.freeze
4
+ VERSION = '0.3.0'
3
5
  end
data/lib/glottis.rb CHANGED
@@ -1,2 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'glottis/version'
2
4
  require 'glottis/client'
5
+
metadata CHANGED
@@ -1,86 +1,84 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glottis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max DeLiso
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2016-02-16 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: rb-readline
13
+ name: slop
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: 0.5.3
18
+ version: '4.10'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: 0.5.3
25
+ version: '4.10'
27
26
  - !ruby/object:Gem::Dependency
28
- name: slop
27
+ name: bundler
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '4.2'
34
- type: :runtime
32
+ version: '2.0'
33
+ type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '4.2'
39
+ version: '2.0'
41
40
  - !ruby/object:Gem::Dependency
42
- name: bundler
41
+ name: rake
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: '1.10'
46
+ version: '13.0'
48
47
  type: :development
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: '1.10'
53
+ version: '13.0'
55
54
  - !ruby/object:Gem::Dependency
56
- name: rake
55
+ name: rspec
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - "~>"
60
59
  - !ruby/object:Gem::Version
61
- version: '10.0'
60
+ version: '3.0'
62
61
  type: :development
63
62
  prerelease: false
64
63
  version_requirements: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - "~>"
67
66
  - !ruby/object:Gem::Version
68
- version: '10.0'
67
+ version: '3.0'
69
68
  - !ruby/object:Gem::Dependency
70
69
  name: rubocop
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - "~>"
74
73
  - !ruby/object:Gem::Version
75
- version: 0.37.2
74
+ version: '1.0'
76
75
  type: :development
77
76
  prerelease: false
78
77
  version_requirements: !ruby/object:Gem::Requirement
79
78
  requirements:
80
79
  - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: 0.37.2
83
- description:
81
+ version: '1.0'
84
82
  email:
85
83
  - maxdeliso@gmail.com
86
84
  executables:
@@ -88,14 +86,9 @@ executables:
88
86
  extensions: []
89
87
  extra_rdoc_files: []
90
88
  files:
91
- - ".gitignore"
92
- - ".rubocop.yml"
93
- - ".travis.yml"
94
- - Gemfile
89
+ - CHANGELOG.md
95
90
  - README.md
96
91
  - Rakefile
97
- - bin/console
98
- - bin/setup
99
92
  - exe/glottis
100
93
  - glottis.gemspec
101
94
  - lib/glottis.rb
@@ -110,8 +103,12 @@ files:
110
103
  homepage: https://github.com/maxdeliso/glottis
111
104
  licenses:
112
105
  - MIT
113
- metadata: {}
114
- post_install_message:
106
+ metadata:
107
+ homepage_uri: https://github.com/maxdeliso/glottis
108
+ source_code_uri: https://github.com/maxdeliso/glottis
109
+ changelog_uri: https://github.com/maxdeliso/glottis/blob/main/CHANGELOG.md
110
+ bug_tracker_uri: https://github.com/maxdeliso/glottis/issues
111
+ rubygems_mfa_required: 'true'
115
112
  rdoc_options: []
116
113
  require_paths:
117
114
  - lib
@@ -119,16 +116,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
116
  requirements:
120
117
  - - ">="
121
118
  - !ruby/object:Gem::Version
122
- version: '0'
119
+ version: 3.0.0
123
120
  required_rubygems_version: !ruby/object:Gem::Requirement
124
121
  requirements:
125
122
  - - ">="
126
123
  - !ruby/object:Gem::Version
127
124
  version: '0'
128
125
  requirements: []
129
- rubyforge_project:
130
- rubygems_version: 2.4.5.1
131
- signing_key:
126
+ rubygems_version: 3.6.7
132
127
  specification_version: 4
133
128
  summary: simple http messaging client
134
129
  test_files: []
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- *.log
11
- *.gem
data/.rubocop.yml DELETED
@@ -1,5 +0,0 @@
1
- Metrics/LineLength:
2
- Max: 99
3
-
4
- Metrics/MethodLength:
5
- Max: 20
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.5
4
- before_install: gem install bundler -v 1.10.6
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in glottis.gemspec
4
- gemspec
data/bin/console DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'glottis'
5
- require 'irb'
6
-
7
- IRB.start
data/bin/setup DELETED
@@ -1,7 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
- bundle install
6
-
7
- # Do any other automated setup that you need to do here