httpattack-lib 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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