httpattack-lib 0.0.1 → 0.1.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.
data/README CHANGED
@@ -1 +1,18 @@
1
1
  The game library for HTTP Attack.
2
+
3
+ Item Protocol
4
+ -------------
5
+ Initializer must take two parameters, a username and an optional hash of settings.
6
+
7
+ SomeItem.new('luser', :set_this => 'to_this')
8
+
9
+ The Item must override the following methods:
10
+
11
+ stat
12
+ ------
13
+ This method should return an Integer (or maybe a Float), which will be used to
14
+ determine the Item strength.
15
+
16
+ def stat
17
+ stats['user']['followers_count'].to_i
18
+ end
data/Rakefile CHANGED
@@ -45,7 +45,6 @@ namespace :gem do
45
45
  Rake::Task['gem:clean'].invoke
46
46
  Rake::Task['gem:build'].invoke
47
47
  gem = FileList["#{APP_DIR}/#{GEMNAME}-*.gem"].first
48
- sudo = RUBY_PLATFORM !~ /win32/ ? "sudo" : ""
49
- sh "#{sudo} gem uninstall #{GEMNAME} ; #{sudo} gem install #{gem}"
48
+ sh "gem uninstall #{GEMNAME} ; gem install #{gem}"
50
49
  end
51
50
  end
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift File.dirname(__FILE__)
2
2
 
3
- require 'httpattack/weapons'
3
+ require 'httpattack/items'
4
4
 
5
5
  module HTTPAttack
6
- VERSION = '0.0.1'
6
+ VERSION = '0.1.0'
7
7
  end
@@ -0,0 +1,25 @@
1
+ require 'httpattack/items/base'
2
+ require 'httpattack/items/github'
3
+ require 'httpattack/items/twitter'
4
+
5
+ module HTTPAttack
6
+ module Items
7
+
8
+ # A list of registered Item types (the actual classes).
9
+ TYPES = [ Github, Twitter ]
10
+
11
+ class InvalidStat < Exception; end
12
+ class MustOverrideMethod < Exception; end
13
+
14
+ # Items enumerator. Just a wrapper to the TYPES array #each method.
15
+ def self.each(&block)
16
+ TYPES.send(:each, &block) if TYPES.respond_to?(:each)
17
+ end
18
+
19
+ # Items enumerator. Just a wrapper to the TYPES array #map method.
20
+ def self.map(&block)
21
+ TYPES.send(:map, &block) if TYPES.respond_to?(:map)
22
+ end
23
+
24
+ end # Items
25
+ end # HTTPAttack
@@ -2,20 +2,20 @@ require 'json'
2
2
  require 'open-uri'
3
3
 
4
4
  module HTTPAttack
5
- module Weapons
5
+ module Items
6
6
 
7
7
  class Base
8
- attr_reader :stat, :stats
8
+ attr_reader :stats
9
9
 
10
- # This is the strength of the weapon and must be
10
+ # This is the strength of the Item and must be
11
11
  # overridden in a subclass. It should return
12
- # an integer (or float).
13
- def attack
12
+ # an Integer (or Float).
13
+ def stat
14
14
  raise MustOverrideMethod
15
15
  end
16
16
 
17
17
  # This is the URL where the JSON will come from.
18
- # Must be overridden in a subclassed weapon.
18
+ # Must be overridden in a subclassed Item.
19
19
  def stats_url
20
20
  raise MustOverrideMethod
21
21
  end
@@ -40,5 +40,5 @@ module HTTPAttack
40
40
 
41
41
  end # Base
42
42
 
43
- end # Weapons
43
+ end # Items
44
44
  end # HTTPAttack
@@ -1,19 +1,19 @@
1
1
  module HTTPAttack
2
- module Weapons
2
+ module Items
3
3
 
4
- class Github < HTTPAttack::Weapons::Base
4
+ class Github < HTTPAttack::Items::Base
5
5
  STATS = ['followers_count', 'following_count']
6
6
 
7
7
  def initialize(username, options = {})
8
- options[:stat] ||= 'followers_count'
9
- raise Weapons::InvalidStat unless STATS.include?(options[:stat])
8
+ options[:remote_stat] ||= 'followers_count'
9
+ raise Items::InvalidStat unless STATS.include?(options[:remote_stat])
10
10
  @username = username
11
- @stat = options[:stat]
11
+ @remote_stat = options[:remote_stat]
12
12
  end
13
13
 
14
- def attack
14
+ def stat
15
15
  self.reload_stats! unless stats
16
- stats['user'][@stat].to_i
16
+ stats['user'][@remote_stat].to_i
17
17
  end
18
18
 
19
19
  def stats_url
@@ -22,5 +22,5 @@ module HTTPAttack
22
22
 
23
23
  end # Github
24
24
 
25
- end # Weapons
25
+ end # Items
26
26
  end # HTTPAttack
@@ -1,19 +1,19 @@
1
1
  module HTTPAttack
2
- module Weapons
2
+ module Items
3
3
 
4
- class Twitter < HTTPAttack::Weapons::Base
4
+ class Twitter < HTTPAttack::Items::Base
5
5
  STATS = ['followers_count', 'friends_count']
6
6
 
7
7
  def initialize(username, options = {})
8
- options[:stat] ||= 'followers_count'
9
- raise Weapons::InvalidStat unless STATS.include?(options[:stat])
8
+ options[:remote_stat] ||= 'followers_count'
9
+ raise Items::InvalidStat unless STATS.include?(options[:remote_stat])
10
10
  @username = username
11
- @stat = options[:stat]
11
+ @remote_stat = options[:remote_stat]
12
12
  end
13
13
 
14
- def attack
14
+ def stat
15
15
  self.reload_stats! unless stats
16
- stats[@stat].to_i
16
+ stats[@remote_stat].to_i
17
17
  end
18
18
 
19
19
  def stats_url
@@ -22,6 +22,6 @@ module HTTPAttack
22
22
 
23
23
  end # Twitter
24
24
 
25
- end # Weapons
25
+ end # Items
26
26
  end # HTTPAttack
27
27
 
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
2
 
3
- include HTTPAttack::Weapons
3
+ include HTTPAttack::Items
4
4
  describe Base do
5
5
  before(:each) do
6
6
  @remote_api = 'http://localhost:3000/users.json'
@@ -8,43 +8,43 @@ describe Base do
8
8
  end
9
9
 
10
10
  it 'should fetch some JSON from the URL' do
11
- @weapon = Base.new
12
- data = @weapon.reload_stats(@remote_api)
11
+ @item = Base.new
12
+ data = @item.reload_stats(@remote_api)
13
13
  data.should_not be_nil
14
14
  data.should be_kind_of(Hash)
15
15
  end
16
16
 
17
17
  it 'should fetch some JSON from the file path' do
18
- @weapon = Base.new
19
- data = @weapon.reload_stats(@local_file)
18
+ @item = Base.new
19
+ data = @item.reload_stats(@local_file)
20
20
  data.should_not be_nil
21
21
  data.should be_kind_of(Hash)
22
22
  end
23
23
 
24
24
  it 'should return an error hash' do
25
- @weapon = Base.new
26
- data = @weapon.reload_stats('invalid path')
25
+ @item = Base.new
26
+ data = @item.reload_stats('invalid path')
27
27
  data.should have_key('error')
28
28
  data['error'].should_not be_nil
29
29
  end
30
30
 
31
31
  it 'should force a subclass to override stats_url' do
32
- @weapon = Base.new
32
+ @item = Base.new
33
33
  lambda do
34
- @weapon.stats_url
35
- end.should raise_error(HTTPAttack::Weapons::MustOverrideMethod)
34
+ @item.stats_url
35
+ end.should raise_error(HTTPAttack::Items::MustOverrideMethod)
36
36
  end
37
37
 
38
38
  it 'should load the stats with #fetch_json!' do
39
- @weapon = Base.new
40
- @weapon.reload_stats!(@local_file)
41
- @weapon.stats.should_not be_nil
39
+ @item = Base.new
40
+ @item.reload_stats!(@local_file)
41
+ @item.stats.should_not be_nil
42
42
  end
43
43
 
44
- it 'should force a subclass to override attack' do
45
- @weapon = Base.new
44
+ it 'should force a subclass to override stat' do
45
+ @item = Base.new
46
46
  lambda do
47
- @weapon.attack
48
- end.should raise_error(HTTPAttack::Weapons::MustOverrideMethod)
47
+ @item.stat
48
+ end.should raise_error(HTTPAttack::Items::MustOverrideMethod)
49
49
  end
50
50
  end
@@ -0,0 +1,45 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ include HTTPAttack::Items
3
+
4
+ describe Github do
5
+ before(:each) do
6
+ @username = 'Oshuma'
7
+ @stats_file = File.dirname(__FILE__) + '/responses/github-oshuma.json'
8
+ @stats_url = "http://github.com/api/v2/json/user/show/#{@username}"
9
+
10
+ @item = Github.new(@username)
11
+ @item.reload_stats!(@stats_file)
12
+ end
13
+
14
+ it 'should form the API URL' do
15
+ @item.stats_url.should == @stats_url
16
+ end
17
+
18
+ it 'should load the item stats' do
19
+ stats = @item.reload_stats(@stats_file)
20
+ stats.should_not be_nil
21
+ stats.should be_kind_of(Hash)
22
+ end
23
+
24
+ it 'should default to the followers_count remote_stat' do
25
+ @item.instance_variable_get(:@remote_stat).should == 'followers_count'
26
+ end
27
+
28
+ it 'should have a (followers_count) stat of 15' do
29
+ @item = Github.new(@username, :stat => 'followers_count')
30
+ @item.reload_stats!(@stats_file) # test data
31
+ @item.stat.should == 15
32
+ end
33
+
34
+ it 'should have a (following_count) stat of 37' do
35
+ @item = Github.new(@username, :remote_stat => 'following_count')
36
+ @item.reload_stats!(@stats_file) # test data
37
+ @item.stat.should == 37
38
+ end
39
+
40
+ it 'should raise InvalidStat' do
41
+ lambda do
42
+ Github.new(@username, :remote_stat => 'invalid')
43
+ end.should raise_error(HTTPAttack::Items::InvalidStat)
44
+ end
45
+ end
@@ -0,0 +1,45 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ include HTTPAttack::Items
3
+
4
+ describe Twitter do
5
+ before(:each) do
6
+ @username = 'oshuma_dev'
7
+ @stats_file = File.dirname(__FILE__) + '/responses/twitter-oshuma_dev.json'
8
+ @stats_url = "http://twitter.com/users/show/#{@username}.json"
9
+
10
+ @item = Twitter.new(@username)
11
+ @item.reload_stats!(@stats_file)
12
+ end
13
+
14
+ it 'should form the API URL' do
15
+ @item.stats_url.should == @stats_url
16
+ end
17
+
18
+ it 'should load the item stats' do
19
+ stats = @item.reload_stats(@stats_file)
20
+ stats.should_not be_nil
21
+ stats.should be_kind_of(Hash)
22
+ end
23
+
24
+ it 'should default to the followers_count remote_stat' do
25
+ @item.instance_variable_get(:@remote_stat).should == 'followers_count'
26
+ end
27
+
28
+ it 'should have a (followers_count) stat of 19' do
29
+ @item = Twitter.new(@username, :stat => 'followers_count')
30
+ @item.reload_stats!(@stats_file) # test data
31
+ @item.stat.should == 19
32
+ end
33
+
34
+ it 'should have a (friends_count) stat of 1' do
35
+ @item = Twitter.new(@username, :remote_stat => 'friends_count')
36
+ @item.reload_stats!(@stats_file) # test data
37
+ @item.stat.should == 1
38
+ end
39
+
40
+ it 'should raise InvalidStat' do
41
+ lambda do
42
+ Twitter.new(@username, :remote_stat => 'invalid')
43
+ end.should raise_error(HTTPAttack::Items::InvalidStat)
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ include HTTPAttack
4
+ describe Items do
5
+ it 'should have a TYPES array containing weapon classes' do
6
+ Items::TYPES.should be_kind_of(Array)
7
+ Items::TYPES.each do |type|
8
+ type.class.should == Class
9
+ end
10
+ end
11
+
12
+ it 'should have an each method pointing to TYPES' do
13
+ Items.each do |type|
14
+ type.class.should == Class
15
+ end
16
+ end
17
+
18
+ it 'should have a map method pointing to TYPES' do
19
+ Items.map { |weapon| weapon }.should == Items::TYPES
20
+ end
21
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpattack-lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dale Campbell
@@ -9,11 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-03 00:00:00 -05:00
12
+ date: 2009-09-11 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description:
16
+ description: Contains core functionality of the HTTPAttack web game.
17
17
  email:
18
18
  - oshuma@gmail.com
19
19
  executables: []
@@ -25,17 +25,18 @@ extra_rdoc_files: []
25
25
  files:
26
26
  - README
27
27
  - Rakefile
28
- - lib/httpattack/weapons/base.rb
29
- - lib/httpattack/weapons/github.rb
30
- - lib/httpattack/weapons/twitter.rb
31
- - lib/httpattack/weapons.rb
28
+ - lib/httpattack/items/base.rb
29
+ - lib/httpattack/items/github.rb
30
+ - lib/httpattack/items/twitter.rb
31
+ - lib/httpattack/items.rb
32
32
  - lib/httpattack.rb
33
- - spec/httpattack/weapons/base_spec.rb
34
- - spec/httpattack/weapons/github_spec.rb
35
- - spec/httpattack/weapons/responses/base.json
36
- - spec/httpattack/weapons/responses/github-oshuma.json
37
- - spec/httpattack/weapons/responses/twitter-oshuma_dev.json
38
- - spec/httpattack/weapons/twitter_spec.rb
33
+ - spec/httpattack/items/base_spec.rb
34
+ - spec/httpattack/items/github_spec.rb
35
+ - spec/httpattack/items/responses/base.json
36
+ - spec/httpattack/items/responses/github-oshuma.json
37
+ - spec/httpattack/items/responses/twitter-oshuma_dev.json
38
+ - spec/httpattack/items/twitter_spec.rb
39
+ - spec/httpattack/items_spec.rb
39
40
  - spec/httpattack_spec.rb
40
41
  - spec/spec.opts
41
42
  - spec/spec_helper.rb
@@ -62,10 +63,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
63
  version:
63
64
  requirements: []
64
65
 
65
- rubyforge_project:
66
+ rubyforge_project: httpattack-lib
66
67
  rubygems_version: 1.3.5
67
68
  signing_key:
68
69
  specification_version: 3
69
- summary: The game library for HTTPAttack
70
+ summary: The game library for HTTPAttack.
70
71
  test_files: []
71
72
 
@@ -1,10 +0,0 @@
1
- require 'httpattack/weapons/base'
2
- require 'httpattack/weapons/github'
3
- require 'httpattack/weapons/twitter'
4
-
5
- module HTTPAttack
6
- module Weapons
7
- class InvalidStat < Exception; end
8
- class MustOverrideMethod < Exception; end
9
- end # Weapons
10
- end # HTTPAttack
@@ -1,45 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
- include HTTPAttack::Weapons
3
-
4
- describe Github do
5
- before(:each) do
6
- @username = 'Oshuma'
7
- @stats_file = File.dirname(__FILE__) + '/responses/github-oshuma.json'
8
- @stats_url = "http://github.com/api/v2/json/user/show/#{@username}"
9
-
10
- @weapon = Github.new(@username)
11
- @weapon.reload_stats!(@stats_file)
12
- end
13
-
14
- it 'should form the API URL' do
15
- @weapon.stats_url.should == @stats_url
16
- end
17
-
18
- it 'should load the weapon stats' do
19
- stats = @weapon.reload_stats(@stats_file)
20
- stats.should_not be_nil
21
- stats.should be_kind_of(Hash)
22
- end
23
-
24
- it 'should default to the followers_count stat' do
25
- @weapon.stat.should == 'followers_count'
26
- end
27
-
28
- it 'should have a (followers_count) attack of 15' do
29
- @weapon = Github.new(@username, :stat => 'followers_count')
30
- @weapon.reload_stats!(@stats_file) # test data
31
- @weapon.attack.should == 15
32
- end
33
-
34
- it 'should have a (following_count) attack of 37' do
35
- @weapon = Github.new(@username, :stat => 'following_count')
36
- @weapon.reload_stats!(@stats_file) # test data
37
- @weapon.attack.should == 37
38
- end
39
-
40
- it 'should raise InvalidStat' do
41
- lambda do
42
- Github.new(@username, :stat => 'invalid')
43
- end.should raise_error(HTTPAttack::Weapons::InvalidStat)
44
- end
45
- end
@@ -1,45 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
- include HTTPAttack::Weapons
3
-
4
- describe Twitter do
5
- before(:each) do
6
- @username = 'oshuma_dev'
7
- @stats_file = File.dirname(__FILE__) + '/responses/twitter-oshuma_dev.json'
8
- @stats_url = "http://twitter.com/users/show/#{@username}.json"
9
-
10
- @weapon = Twitter.new(@username)
11
- @weapon.reload_stats!(@stats_file)
12
- end
13
-
14
- it 'should form the API URL' do
15
- @weapon.stats_url.should == @stats_url
16
- end
17
-
18
- it 'should load the weapon stats' do
19
- stats = @weapon.reload_stats(@stats_file)
20
- stats.should_not be_nil
21
- stats.should be_kind_of(Hash)
22
- end
23
-
24
- it 'should default to the followers_count stat' do
25
- @weapon.stat.should == 'followers_count'
26
- end
27
-
28
- it 'should have a (followers_count) attack of 19' do
29
- @weapon = Twitter.new(@username, :stat => 'followers_count')
30
- @weapon.reload_stats!(@stats_file) # test data
31
- @weapon.attack.should == 19
32
- end
33
-
34
- it 'should have a (friends_count) attack of 1' do
35
- @weapon = Twitter.new(@username, :stat => 'friends_count')
36
- @weapon.reload_stats!(@stats_file) # test data
37
- @weapon.attack.should == 1
38
- end
39
-
40
- it 'should raise InvalidStat' do
41
- lambda do
42
- Twitter.new(@username, :stat => 'invalid')
43
- end.should raise_error(HTTPAttack::Weapons::InvalidStat)
44
- end
45
- end