rmuh 0.2.1 → 0.2.2

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
2
  SHA1:
3
- metadata.gz: ee6d35d0861a94192af934236bc6f749b43bf1ae
4
- data.tar.gz: aae69a679fff65aa138f6f9328894f3403d444c0
3
+ metadata.gz: b63c73ace7a1211a2f87a68c08d9eb59214a5735
4
+ data.tar.gz: 6c8be181f4208f9d26c280af1b3247937fafcac8
5
5
  SHA512:
6
- metadata.gz: 55e40a5069510f01a0f6b5957596184ff994b0f33a0b78a9666194f521e7520e7200689bd04d06ccb357f3e627622295be480a6a95e7d7dd0bc213604ceb79a7
7
- data.tar.gz: d3e196a3bd246975d82fea8b7bfe08bff3ab947dd106fb5cf9ae6ba3f6b0a8390c54c68bd12ef318f848a3cff85d03d02250d4aa633f534cd2f728c183b0658f
6
+ metadata.gz: cb90e1fa7a2be37278be469d1fca17011907eec6f3abdb00c738dca5b78f0d8e85871a5da8b7336c3be766e0c8c4671d21f2d0b3b558a007146788845ee7ed7b
7
+ data.tar.gz: 40aacc1f5594affb5790f186a77c4b4f11e6a46df9f5f0ff4853af359b348873f132845d323015aa0f04b0152deb72aa110454aba44c7d11799b81b3ac7baa4e
@@ -5,4 +5,4 @@ rvm:
5
5
  - 1.9.3
6
6
  notifications:
7
7
  email:
8
- - tim+travisci@timheckman.net
8
+ - t+travisci@heckman.io
data/README.md CHANGED
@@ -29,7 +29,7 @@ INSTALLATION
29
29
  This is packaged on the [RubyGems](https://rubygems.org/) site and can be
30
30
  installed via the `gem` command:
31
31
 
32
- ```Ruby
32
+ ```Bash
33
33
  $ gem install rmuh
34
34
  ```
35
35
 
@@ -121,8 +121,8 @@ information directly from the server.
121
121
 
122
122
  Here is a quick overview of how to use this functionality:
123
123
 
124
- ```
125
- require 'rmuh/serverstats/base
124
+ ```Ruby
125
+ require 'rmuh/serverstats/base'
126
126
  UO_IP = '70.42.74.59'
127
127
  s = RMuh::ServerStats::Base.new(host: UO_IP)
128
128
  s.update_cache
@@ -135,14 +135,14 @@ the object.
135
135
 
136
136
  If you want to avoid using the cache:
137
137
 
138
- ```
138
+ ```Ruby
139
139
  s = RMuh::ServerStats::Base.new(host: UO_IP, cache: false)
140
140
  ```
141
141
  If you want to be able to pull each part of the returned data set using
142
142
  dot-notation, you can use the `Advanced` class:
143
143
 
144
- ```
145
- require 'rmuh/serverstats/base
144
+ ```Ruby
145
+ require 'rmuh/serverstats/base'
146
146
  s = RMuh::ServerStats::Advanced.new(host: UO_IP)
147
147
  s.update_cache
148
148
  puts s.players
data/Rakefile CHANGED
@@ -4,12 +4,9 @@ require 'rubocop/rake_task'
4
4
 
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
 
7
- Rubocop::RakeTask.new(:rubocop) do |task|
8
- task.patterns = [
9
- 'lib/**/*.rb', 'spec/*_spec.rb', 'Rakefile', 'rmuh.gemspec', 'Gemfile'
10
- ]
11
- # task.formatters = ['files']
12
- task.fail_on_error = true
7
+ Rubocop::RakeTask.new(:rubocop) do |t|
8
+ t.patterns = %w{ Rakefile Gemfile rmuh.gemspec lib/**/*.rb spec/*_spec.rb }
9
+ t.fail_on_error = true
13
10
  end
14
11
 
15
12
  task default: [:rubocop, :spec]
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: UTF-8 -*-
3
+ #
4
+ # This example file shows you how to do the following:
5
+ # * fetch the size of a log
6
+ # * fetch the first KB of log file
7
+ # * parse the log with the base parser
8
+ # * use awesome_print to print out the returned object
9
+ #
10
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
11
+
12
+ require 'rmuh/rpt/log/fetch'
13
+ require 'rmuh/rpt/log/parsers/base'
14
+ require 'ap'
15
+
16
+ # set a constant for the URL
17
+ URL = 'http://arma2.unitedoperations.net/dump/SRV1/SRV1_LOG.txt'
18
+
19
+ # instantiate a new fetcher object, telling it to get the first
20
+ # 1024 bytes
21
+ f = RMuh::RPT::Log::Fetch.new(URL, byte_start: 0, byte_end: 1024)
22
+
23
+ # logfile will become a StringIO object that is the contents of the log
24
+ logfile = f.log
25
+
26
+ # print the log
27
+ puts "#### The full log\n#{logfile.readlines.join("\n")}\n#### End of log!"
28
+
29
+ # print the size of the log, f.size will return a Fixnum in bytes
30
+ puts "Log size: #{f.size} byte(s)"
31
+
32
+ # instantiate a new base parser, it takes no args
33
+ p = RMuh::RPT::Log::Parsers::Base.new
34
+
35
+ # this becomes an array of hashes, each item in the Array is a metadata
36
+ # Hash for that specific log line
37
+ parsed = p.parse(f.log)
38
+
39
+ puts '#### Metadata Hash'
40
+ ap parsed
41
+ puts '#### End of Hashes'
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: UTF-8 -*-
3
+ #
4
+ # This example shows you how to use the ServerStats class to pull real-time
5
+ # information about the server from the GameSpy protocol
6
+ #
7
+ # This includes map name, mission name, player list, game version, required
8
+ # mods, and a bunch of other information.
9
+ #
10
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
11
+
12
+ require 'rmuh/serverstats/base'
13
+ require 'ap'
14
+
15
+ # specify the UnitedOperations server
16
+ SRV = { host: 'srv1.unitedoperations.net', port: 2_302 }
17
+
18
+ # get an instance of ServerStats and print the stats
19
+ # by default this is a blocking operation. See serverstats_cache.rb for
20
+ # alternative options
21
+ s = RMuh::ServerStats::Base.new(host: SRV[:host], port: SRV[:port])
22
+ ap s.stats
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: UTF-8 -*-
3
+ #
4
+ # This shows you how to use the ServerStats::Advanced class. The only
5
+ # difference between ::Base and ::Advanced is that Advanced gives you stats
6
+ # accessors using dot notation. You can see more about the ::Base class within
7
+ # the basic_serverstats.rb file
8
+ #
9
+ # It also has all the same caching characteristics as the ::Base class and you
10
+ # can learn more about those in the serverstats_cache.rb file.
11
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
12
+
13
+ require 'rmuh/serverstats/advanced'
14
+ require 'ap'
15
+
16
+ # specify the UnitedOperations server
17
+ SRV = { host: 'srv1.unitedoperations.net', port: 2_302 }
18
+
19
+ # build a new instance of ::Advanced
20
+ s = RMuh::ServerStats::Advanced.new(host: SRV[:host], port: SRV[:port])
21
+
22
+ # print the full stats out
23
+ ap s.stats
24
+
25
+ # print only the players Array
26
+ ap s.players
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: UTF-8 -*-
3
+ #
4
+ # By default the ServerStats::Base class caches the information from the
5
+ # server in memory. By default the class is a blocking operation on the first
6
+ # call to '.stats'. That's because if the cache is not populated it will
7
+ # poll the server.
8
+ #
9
+ # You can avoid this being blocking by setting 'auto_cache: false'. This means,
10
+ # however, that you will need to call the '.update_cache' method when you can
11
+ # afford a blocking operation
12
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
13
+
14
+ require 'rmuh/serverstats/base'
15
+ require 'ap'
16
+
17
+ # specify the UnitedOperations server
18
+ SRV = { host: 'srv1.unitedoperations.net', port: 2_302 }
19
+
20
+ s = RMuh::ServerStats::Base.new(
21
+ host: SRV[:host], port: SRV[:port], auto_cache: false
22
+ )
23
+ ap s.stats # this should be nil
24
+
25
+ # update the cache within the object from the server, then print the stats
26
+ s.update_cache
27
+ ap s.stats
28
+
29
+ # You can also turn off the cache completely, which means '.stats' will be a
30
+ # blocking call each time. You do this by passing 'cache: false'
31
+ s = RMuh::ServerStats::Base.new(
32
+ host: SRV[:host], port: SRV[:port], cache: false
33
+ )
34
+
35
+ ap s.stats
@@ -11,8 +11,8 @@ module RMuh
11
11
  #
12
12
  class Advanced < RMuh::ServerStats::Base
13
13
  def method_missing(method, *args, &block)
14
- super unless stats.key?(method)
15
- stats[method]
14
+ super unless stats.key?(method.to_s)
15
+ stats[method.to_s]
16
16
  end
17
17
  end
18
18
  end
@@ -41,6 +41,7 @@ module RMuh
41
41
  fail ArgumentError, ':host is required' unless opts.key?(:host)
42
42
  opts[:port] ||= DEFAULT_PORT
43
43
  opts[:cache] = true unless opts.key?(:cache)
44
+ opts[:auto_cache] = true unless opts.key?(:auto_cache)
44
45
  nil
45
46
  end
46
47
 
@@ -50,6 +51,7 @@ module RMuh
50
51
 
51
52
  def remote_stats
52
53
  if @cache
54
+ update_cache if @serverstats.nil? && @auto_cache
53
55
  @serverstats
54
56
  else
55
57
  sync
@@ -6,7 +6,7 @@
6
6
  module RMuh
7
7
  VERSION_MAJ ||= 0
8
8
  VERSION_MIN ||= 2
9
- VERSION_REV ||= 1
9
+ VERSION_REV ||= 2
10
10
 
11
11
  VERSION ||= "#{VERSION_MAJ}.#{VERSION_MIN}.#{VERSION_REV}"
12
12
  end
@@ -0,0 +1,46 @@
1
+ # -*- coding: UTF-8 -*-
2
+ # These are just specs to make sure the example files run with an exit
3
+ # code of zero.
4
+ #
5
+ require 'rspec'
6
+ require 'open3'
7
+ require 'helpers/spec_helper'
8
+
9
+ DIR = File.expand_path('../../examples', __FILE__)
10
+
11
+ describe 'exampple files' do
12
+
13
+ context "#{File.join(DIR, 'basic_parsing.rb')}" do
14
+ it 'should run and return a zero exit code' do
15
+ _, _, s = Open3.capture3("ruby #{File.join(DIR, 'basic_parsing.rb')}")
16
+ expect(s.success?).to be_true
17
+ end
18
+ end
19
+
20
+ context "#{File.join(DIR, 'basic_serverstats.rb')}" do
21
+ it 'should run and return a zero exit code' do
22
+ _, _, s = Open3.capture3(
23
+ "ruby #{File.join(DIR, 'basic_serverstats.rb')}"
24
+ )
25
+ expect(s.success?).to be_true
26
+ end
27
+ end
28
+
29
+ context "#{File.join(DIR, 'serverstats_advanced.rb')}" do
30
+ it 'should run and return a zero exit code' do
31
+ _, _, s = Open3.capture3(
32
+ "ruby #{File.join(DIR, 'serverstats_advanced.rb')}"
33
+ )
34
+ expect(s.success?).to be_true
35
+ end
36
+ end
37
+
38
+ context "#{File.join(DIR, 'serverstats_cache.rb')}" do
39
+ it 'should run an return a zero exit code' do
40
+ _, _, s = Open3.capture3(
41
+ "ruby #{File.join(DIR, 'serverstats_cache.rb')}"
42
+ )
43
+ expect(s.success?).to be_true
44
+ end
45
+ end
46
+ end
@@ -11,28 +11,30 @@ describe RMuh::RPT::Log::Fetch do
11
11
  end
12
12
  let(:fetch) { RMuh::RPT::Log::Fetch.new(url) }
13
13
  context '#new' do
14
+ subject { fetch }
15
+
14
16
  it 'should return an instance of RMuh::RPT::Log::Fetch' do
15
- fetch.should be_an_instance_of RMuh::RPT::Log::Fetch
17
+ expect(fetch).to be_an_instance_of RMuh::RPT::Log::Fetch
16
18
  end
17
19
 
18
20
  it 'should have a @log_url object which is an instance of String' do
19
- fetch.log_url.should be_an_instance_of String
21
+ expect(fetch.log_url).to be_an_instance_of String
20
22
  end
21
23
 
22
24
  it 'should set the "byte_start" config item if specified' do
23
25
  rlfetch = RMuh::RPT::Log::Fetch.new(url, byte_start: 10)
24
- rlfetch.byte_start.should eql 10
26
+ expect(rlfetch.byte_start).to eql 10
25
27
  end
26
28
 
27
29
  it 'should set the "byte_end" config item if specified' do
28
30
  rlfetch = RMuh::RPT::Log::Fetch.new(url, byte_end: 42)
29
- rlfetch.byte_end.should eql 42
31
+ expect(rlfetch.byte_end).to eql 42
30
32
  end
31
33
  end
32
34
 
33
35
  context '#byte_start' do
34
36
  it 'should allow setting the value to Integer' do
35
- expect { fetch.byte_start = 10 }.not_to raise_error
37
+ expect { fetch.byte_start = 10 }.to_not raise_error
36
38
  end
37
39
 
38
40
  it 'should raise an error if the value is nil' do
@@ -49,17 +51,17 @@ describe RMuh::RPT::Log::Fetch do
49
51
 
50
52
  it 'should update the @cfg.byte_start value' do
51
53
  fetch.byte_start = 10
52
- fetch.byte_start.should eql 10
54
+ expect(fetch.byte_start).to eql 10
53
55
  end
54
56
  end
55
57
 
56
58
  context '#byte_end' do
57
59
  it 'should allow setting the value to Integer' do
58
- expect { fetch.byte_end = 10 }.not_to raise_error
60
+ expect { fetch.byte_end = 10 }.to_not raise_error
59
61
  end
60
62
 
61
63
  it 'should allow setting the value is nil' do
62
- expect { fetch.byte_end = nil }.not_to raise_error
64
+ expect { fetch.byte_end = nil }.to_not raise_error
63
65
  end
64
66
 
65
67
  it 'should raise an error if arg:1 is a String' do
@@ -72,27 +74,27 @@ describe RMuh::RPT::Log::Fetch do
72
74
 
73
75
  it 'should update the @cfg.byte_end value' do
74
76
  fetch.byte_end = 42
75
- fetch.byte_end.should eql 42
77
+ expect(fetch.byte_end).to eql 42
76
78
  end
77
79
  end
78
80
 
79
81
  context '#size' do
80
82
  it 'should return a Integer object' do
81
- fetch.size.should be_an_instance_of Fixnum
83
+ expect(fetch.size).to be_an_instance_of Fixnum
82
84
  end
83
85
 
84
86
  it 'should return the size' do
85
- fetch.size.should eql 10
87
+ expect(fetch.size).to eql 10
86
88
  end
87
89
  end
88
90
 
89
91
  context '#log' do
90
92
  it 'should return a StringIO object' do
91
- fetch.log.should be_an_instance_of StringIO
93
+ expect(fetch.log).to be_an_instance_of StringIO
92
94
  end
93
95
 
94
96
  it 'should return the log' do
95
- fetch.log.read.should eql "RSpec, yo\n"
97
+ expect(fetch.log.read).to eql "RSpec, yo\n"
96
98
  end
97
99
  end
98
100
 
@@ -101,12 +103,12 @@ describe RMuh::RPT::Log::Fetch do
101
103
  let(:dos_newline) { /\r\n$/ }
102
104
 
103
105
  it 'should match the Regexp object' do
104
- expect(dos_newline.match(dos)).not_to be nil
106
+ expect(dos_newline.match(dos)).to_not be nil
105
107
  end
106
108
 
107
109
  it 'should strip out DOS new lines' do
108
110
  match = /\r\n/.match(fetch.send(:dos2unix, dos))
109
- match.should be nil
111
+ expect(match).to be_nil
110
112
  end
111
113
  end
112
114
  end
@@ -12,7 +12,7 @@ describe RMuh::RPT::Log::Parsers::Base do
12
12
 
13
13
  context 'text' do
14
14
  it 'should be a StringIO object' do
15
- text.should be_an_instance_of StringIO
15
+ expect(text).to be_an_instance_of StringIO
16
16
  end
17
17
  end
18
18
 
@@ -24,7 +24,7 @@ describe RMuh::RPT::Log::Parsers::Base do
24
24
  end
25
25
 
26
26
  it 'should return an instance of RMuh::RPT::Log::Parsers::Base' do
27
- base.should be_an_instance_of RMuh::RPT::Log::Parsers::Base
27
+ expect(base).to be_an_instance_of RMuh::RPT::Log::Parsers::Base
28
28
  end
29
29
  end
30
30
 
@@ -37,21 +37,44 @@ describe RMuh::RPT::Log::Parsers::Base do
37
37
  expect { base.parse }.to raise_error ArgumentError
38
38
  end
39
39
 
40
- it 'should only accept a StringIO object' do
41
- expect { base.parse('urmom') }.to raise_error ArgumentError
42
- expect { base.parse(42) }.to raise_error ArgumentError
40
+ it 'should raise an error when passed nil' do
41
+ expect { base.parse(nil) }.to raise_error ArgumentError
42
+ end
43
+
44
+ it 'should raise an error when passed a String' do
45
+ expect { base.parse('') }.to raise_error ArgumentError
46
+ end
47
+
48
+ it 'should raise an error when passed a Fixnum' do
49
+ expect { base.parse(0) }.to raise_error ArgumentError
50
+ end
51
+
52
+ it 'should raise an error when passed a Float' do
53
+ expect { base.parse(0.0) }.to raise_error ArgumentError
54
+ end
55
+
56
+ it 'should raise an error when passed an Array' do
57
+ expect { base.parse([]) }.to raise_error ArgumentError
58
+ end
59
+
60
+ it 'should raise an error when passed a Hash' do
61
+ expect { base.parse({}) }.to raise_error ArgumentError
62
+ end
63
+
64
+ it 'should not raise an error when passed a StringIO object' do
65
+ expect { base.parse(StringIO.new) }.to_not raise_error
43
66
  end
44
67
 
45
68
  it 'should return an Array' do
46
69
  expect(base.parse(text)).to be_an_instance_of Array
47
70
  end
48
71
 
49
- it 'the Array size should be 2' do
72
+ it 'should return an the Array with a size of 2' do
50
73
  expect(base.parse(text).size).to be 2
51
74
  end
52
75
 
53
76
  it 'should be an Array of hashes' do
54
- base.parse(text).each { |p| p.should be_an_instance_of Hash }
77
+ base.parse(text).each { |p| expect(p).to be_an_instance_of Hash }
55
78
  end
56
79
  end
57
80
  end