mage-hand 0.3.0 → 0.3.1

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/Gemfile CHANGED
@@ -16,4 +16,5 @@ group :development do
16
16
  gem "rcov", ">= 0"
17
17
  gem "mocha", ">=0.9.8"
18
18
  gem "redgreen"
19
+ gem "webmock", ">=1.6.2"
19
20
  end
data/Gemfile.lock CHANGED
@@ -2,6 +2,8 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  activesupport (3.0.3)
5
+ addressable (2.2.4)
6
+ crack (0.1.8)
5
7
  git (1.2.5)
6
8
  i18n (0.4.2)
7
9
  jeweler (1.5.1)
@@ -16,6 +18,9 @@ GEM
16
18
  rcov (0.9.9)
17
19
  redgreen (1.2.2)
18
20
  shoulda (2.11.3)
21
+ webmock (1.6.2)
22
+ addressable (>= 2.2.2)
23
+ crack (>= 0.1.7)
19
24
 
20
25
  PLATFORMS
21
26
  ruby
@@ -31,3 +36,4 @@ DEPENDENCIES
31
36
  rcov
32
37
  redgreen
33
38
  shoulda
39
+ webmock (>= 1.6.2)
data/TODO ADDED
@@ -0,0 +1,9 @@
1
+ Campaigns:
2
+ Handle location properly
3
+ Should be able to initialize from a json string or an attribute hash
4
+
5
+ Look at REE singularize of Campaign vs. Campaign(s)
6
+
7
+ Fix instructions
8
+
9
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
data/lib/mage-hand.rb CHANGED
@@ -8,11 +8,20 @@ require 'ob_port/campaign'
8
8
  require 'ob_port/wiki_page'
9
9
 
10
10
  module MageHand
11
+ def self.set_app_keys(app_key, app_secret)
12
+ Client.set_app_keys(app_key, app_secret)
13
+ end
14
+
15
+ def self.get_client(session_request_token=nil, session_access_token_key=nil, session_access_token_secret=nil,
16
+ callback=nil, params=nil)
17
+ Client.get_client(session_request_token, session_access_token_key, session_access_token_secret,
18
+ callback, params)
19
+ end
11
20
 
12
21
  protected
13
22
 
14
23
  def obsidian_portal_login_required
15
- @mage_client = MageHand::Client.new(session[:request_token], session[:access_token_key],
24
+ @mage_client = Client.get_client(session[:request_token], session[:access_token_key],
16
25
  session[:access_token_secret], request.url, params)
17
26
  store_tokens
18
27
  return true if logged_in?
data/lib/ob_port/base.rb CHANGED
@@ -15,13 +15,31 @@ module MageHand
15
15
  end
16
16
 
17
17
  def inflate
18
- hash = JSON.parse( MageHand::client.access_token.get(individual_url).body)
18
+ hash = JSON.parse( MageHand::get_client.access_token.get(individual_url).body)
19
19
  update_attributes!(hash)
20
20
  end
21
21
 
22
22
  def self.model_name
23
23
  @_model_name ||= ActiveModel::Name.new(self)
24
24
  end
25
+
26
+ def self.attr_instance(method_name, options={})
27
+ self.class_eval do
28
+ name = method_name.to_s
29
+ class_name = options[:class_name] || name.classify
30
+ code = <<-CODE
31
+ def #{name}
32
+ @#{name}
33
+ end
34
+
35
+ def #{name}=(new_#{name})
36
+ @#{name} = #{class_name}.new(new_#{name.singularize})
37
+ end
38
+ CODE
39
+ puts code if ENV['DEBUG']
40
+ module_eval code
41
+ end
42
+ end
25
43
 
26
44
  def self.attr_array(method_name, options={})
27
45
  self.class_eval do
@@ -39,7 +57,7 @@ module MageHand
39
57
  end
40
58
  end
41
59
  CODE
42
- puts code
60
+ puts code if ENV['DEBUG']
43
61
  module_eval code
44
62
  end
45
63
  end
@@ -5,8 +5,9 @@ module MageHand
5
5
  # public mini-object methods
6
6
  attr_accessor :name, :campaign_url, :role, :visibility
7
7
 
8
- attr_accessor :game_master_id, :slug
9
- inflate_if_nil :game_master_id, :slug
8
+ attr_accessor :slug
9
+ attr_instance :game_master, :class_name => 'User'
10
+ inflate_if_nil :game_master, :slug
10
11
 
11
12
  # Private/Friends
12
13
  attr_accessor :banner_image_url, :play_status, :looking_for_players, :created_at, :updated_at
@@ -18,6 +19,16 @@ module MageHand
18
19
 
19
20
  attr_array :players, :class_name => 'User'
20
21
  inflate_if_nil :players
22
+
23
+ def self.find_by_slug(slug)
24
+ hash = JSON.parse( MageHand::get_client.access_token.get("/v1/campaigns/#{slug}.json?use_slug=true").body)
25
+ Campaign.new(hash)
26
+ end
27
+
28
+ def self.find(id)
29
+ hash = JSON.parse( MageHand::get_client.access_token.get("/v1/campaigns/#{id}.json").body)
30
+ Campaign.new(hash)
31
+ end
21
32
 
22
33
  def looking_for_players?
23
34
  looking_for_players
@@ -35,7 +46,7 @@ module MageHand
35
46
  @adventure_logs ||= wiki_pages.select{|page| page.is_post?}
36
47
  end
37
48
 
38
- private
49
+ protected
39
50
 
40
51
  def individual_url
41
52
  "/v1/campaigns/#{self.id}.json"
@@ -1,12 +1,23 @@
1
1
  module MageHand
2
2
  class Client
3
3
  attr_accessor :request_token, :access_token_key, :access_token_secret
4
+ @@client = nil
4
5
 
5
- def self.configure(key, secret)
6
+ def self.set_app_keys(key, secret)
6
7
  @@key = key
7
8
  @@secret = secret
8
9
  end
9
-
10
+
11
+ def self.get_client(session_request_token=nil, session_access_token_key=nil, session_access_token_secret=nil,
12
+ callback=nil, params=nil)
13
+ # If we don't have a client, or we are changing a token, initialize a new client
14
+ if !@@client || session_request_token || session_access_token_key || session_access_token_secret
15
+ @@client = Client.new(session_request_token, session_access_token_key,
16
+ session_access_token_secret, callback, params)
17
+ end
18
+ @@client
19
+ end
20
+
10
21
  def initialize(session_request_token=nil, session_access_token_key=nil, session_access_token_secret=nil,
11
22
  callback=nil, params=nil)
12
23
  @request_token = session_request_token
@@ -47,5 +58,11 @@ module MageHand
47
58
  def campaign(id)
48
59
  MageHand::Campaign.new(JSON.parse(access_token.get("/v1/campaigns/#{id}.json").body))
49
60
  end
61
+
62
+ protected
63
+
64
+ def self.reset_client
65
+ @@client = nil
66
+ end
50
67
  end
51
68
  end
data/lib/ob_port/user.rb CHANGED
@@ -7,7 +7,7 @@ module MageHand
7
7
 
8
8
  alias :is_ascendant? :is_ascendant
9
9
 
10
- attr_array :campaigns
10
+ attr_array :campaigns #, :class_name => 'Campaign'
11
11
  inflate_if_nil :campaigns
12
12
 
13
13
  private
@@ -10,7 +10,7 @@ module MageHand
10
10
  inflate_if_nil :body, :body_html
11
11
 
12
12
  # TODO Move these to the posts subclass when we have it.
13
- attr_accessor :post_title, :post_taglines, :post_time
13
+ attr_accessor :post_title, :post_tagline, :post_time
14
14
 
15
15
  # GM Only fields
16
16
  attr_accessor :game_master_info, :game_master_info_markup
@@ -18,7 +18,7 @@ module MageHand
18
18
 
19
19
  def self.load_wiki_pages(campaign_id)
20
20
  wiki_hashes = JSON.parse(
21
- MageHand::client.access_token.get(collection_url(campaign_id)).body)
21
+ MageHand::get_client.access_token.get(collection_url(campaign_id)).body)
22
22
  wiki_hashes.map {|hash| WikiPage.new(hash)}
23
23
  end
24
24
 
data/mage-hand.gemspec CHANGED
@@ -5,16 +5,17 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mage-hand}
8
- s.version = "0.3.0"
8
+ s.version = "0.3.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Steven Hammond"]
12
- s.date = %q{2011-03-03}
12
+ s.date = %q{2011-06-07}
13
13
  s.description = %q{mage-hand is a ghostly hand that reaches across the internet to access the Obsidian Portal API.}
14
14
  s.email = %q{shammond@northpub.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
- "README.rdoc"
17
+ "README.rdoc",
18
+ "TODO"
18
19
  ]
19
20
  s.files = [
20
21
  ".document",
@@ -23,6 +24,7 @@ Gem::Specification.new do |s|
23
24
  "LICENSE.txt",
24
25
  "README.rdoc",
25
26
  "Rakefile",
27
+ "TODO",
26
28
  "VERSION",
27
29
  "lib/mage-hand.rb",
28
30
  "lib/ob_port/base.rb",
@@ -32,6 +34,7 @@ Gem::Specification.new do |s|
32
34
  "lib/ob_port/wiki_page.rb",
33
35
  "mage-hand.gemspec",
34
36
  "test/helper.rb",
37
+ "test/test_campaign.rb",
35
38
  "test/test_client.rb",
36
39
  "test/test_mage-hand.rb"
37
40
  ]
@@ -42,6 +45,7 @@ Gem::Specification.new do |s|
42
45
  s.summary = %q{Ruby wrapper around the Obsidian Portal API}
43
46
  s.test_files = [
44
47
  "test/helper.rb",
48
+ "test/test_campaign.rb",
45
49
  "test/test_client.rb",
46
50
  "test/test_mage-hand.rb"
47
51
  ]
@@ -61,6 +65,7 @@ Gem::Specification.new do |s|
61
65
  s.add_development_dependency(%q<rcov>, [">= 0"])
62
66
  s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
63
67
  s.add_development_dependency(%q<redgreen>, [">= 0"])
68
+ s.add_development_dependency(%q<webmock>, [">= 1.6.2"])
64
69
  s.add_runtime_dependency(%q<oauth>, [">= 0.4.4"])
65
70
  else
66
71
  s.add_dependency(%q<oauth>, [">= 0.4.4"])
@@ -73,6 +78,7 @@ Gem::Specification.new do |s|
73
78
  s.add_dependency(%q<rcov>, [">= 0"])
74
79
  s.add_dependency(%q<mocha>, [">= 0.9.8"])
75
80
  s.add_dependency(%q<redgreen>, [">= 0"])
81
+ s.add_dependency(%q<webmock>, [">= 1.6.2"])
76
82
  s.add_dependency(%q<oauth>, [">= 0.4.4"])
77
83
  end
78
84
  else
@@ -86,6 +92,7 @@ Gem::Specification.new do |s|
86
92
  s.add_dependency(%q<rcov>, [">= 0"])
87
93
  s.add_dependency(%q<mocha>, [">= 0.9.8"])
88
94
  s.add_dependency(%q<redgreen>, [">= 0"])
95
+ s.add_dependency(%q<webmock>, [">= 1.6.2"])
89
96
  s.add_dependency(%q<oauth>, [">= 0.4.4"])
90
97
  end
91
98
  end
data/test/helper.rb CHANGED
@@ -11,6 +11,7 @@ end
11
11
  require 'test/unit'
12
12
  require 'shoulda'
13
13
  require 'mocha'
14
+ require 'webmock/test_unit'
14
15
 
15
16
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
17
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -0,0 +1,44 @@
1
+ require 'test/helper'
2
+
3
+ class TestCampaign < Test::Unit::TestCase
4
+ context 'an instance of the Campaign class' do
5
+ should 'know its url' do
6
+ id_string = 'asdf12341asdf1234'
7
+ campaign = MageHand::Campaign.new(:id => id_string)
8
+ assert_equal "/v1/campaigns/#{id_string}.json", campaign.send(:individual_url)
9
+ end
10
+ end
11
+
12
+ context 'the Campaign class' do
13
+ setup do
14
+ @mini_fields = {
15
+ :id => 'asdf12341asdf1234',
16
+ :name => 'Fellowship of the Ring',
17
+ :campaign_url => 'http://www.obsidianportal.com/campaigns/fellowship-of-the-ring',
18
+ :visibility => 'public',
19
+ :role => 'player'
20
+ }
21
+ @full_fields = @mini_fields.merge(
22
+ :slug => 'FotR',
23
+ :play_status => 'active',
24
+ :looking_for_players => false
25
+ )
26
+ end
27
+
28
+ should 'be able to initialize from a mini object' do
29
+ campaign = MageHand::Campaign.new(@mini_fields)
30
+ assert_not_nil campaign
31
+ @mini_fields.each do |key, value|
32
+ assert_equal campaign.send(key), value
33
+ end
34
+ end
35
+
36
+ should 'be able to initialize from a complete object' do
37
+ campaign = MageHand::Campaign.new(@full_fields)
38
+ assert_not_nil campaign
39
+ @full_fields.each do |key, value|
40
+ assert_equal campaign.send(key), value
41
+ end
42
+ end
43
+ end
44
+ end
data/test/test_client.rb CHANGED
@@ -3,7 +3,7 @@ require 'helper'
3
3
  class TestClient < Test::Unit::TestCase
4
4
  context "The Obsidian Portal client" do
5
5
  should "configure correctly with a key and secret" do
6
- assert_nothing_raised {MageHand::Client.configure('asdfasdf','asdfasdfasdfasdfasdf')}
6
+ assert_nothing_raised {MageHand::Client.set_app_keys('asdfasdf','asdfasdfasdfasdfasdf')}
7
7
  end
8
8
  end
9
9
 
@@ -19,29 +19,30 @@ class TestClient < Test::Unit::TestCase
19
19
  OAuth::AccessToken.any_instance.stubs(:post).returns(response)
20
20
  OAuth::Consumer.any_instance.stubs(:get_request_token).returns(@request_token)
21
21
 
22
- MageHand::Client.configure('asdfasdf', 'asdfasdfasdfasdfasdf')
22
+ MageHand::Client.send(:reset_client)
23
+ MageHand::Client.set_app_keys('asdfasdf', 'asdfasdfasdfasdfasdf')
23
24
  end
24
25
  should "be configured to use different urls for authentication and api access" do
25
- @client = MageHand::Client.new(nil, nil, nil)
26
+ @client = MageHand::get_client(nil, nil, nil)
26
27
  assert @client.consumer.site =~ /api\.obsidianportal\.com/
27
28
  assert @client.consumer.request_token_url =~ /https:\/\/www\.obsidianportal\.com/
28
29
  assert @client.consumer.authorize_url =~ /https:\/\/www\.obsidianportal\.com/
29
30
  assert @client.consumer.access_token_url =~ /https:\/\/www\.obsidianportal\.com/
30
31
  end
31
32
  should "have a request_token, and not an access token, when authorizing" do
32
- @client = MageHand::Client.new(nil, nil, nil)
33
+ @client = MageHand::get_client(nil, nil, nil)
33
34
  assert_not_nil @client
34
35
  assert_equal @client.request_token, @request_token
35
36
  assert_nil @client.access_token
36
37
  end
37
38
  should "create an access_token when an oauth_verifier and request_token is passed in" do
38
- @client = MageHand::Client.new(@request_token, nil, nil, nil, {:oauth_verifier => 'asdfasdf'})
39
+ @client = MageHand::get_client(@request_token, nil, nil, nil, {:oauth_verifier => 'asdfasdf'})
39
40
  assert_not_nil @client
40
41
  assert_not_nil @client.access_token
41
42
  assert @client.logged_in?
42
43
  end
43
44
  should "be logged in if initialized with an access_key and access_secret" do
44
- @client = MageHand::Client.new(nil, 'asdf', 'asdfasdfasdfasdf')
45
+ @client = MageHand::get_client(nil, 'asdf', 'asdfasdfasdfasdf')
45
46
  assert_not_nil @client
46
47
  assert @client.logged_in?
47
48
  assert_equal @client.access_token.token, 'asdf'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mage-hand
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 0
10
- version: 0.3.0
9
+ - 1
10
+ version: 0.3.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Steven Hammond
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-03 00:00:00 -05:00
18
+ date: 2011-06-07 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -169,6 +169,22 @@ dependencies:
169
169
  - !ruby/object:Gem::Dependency
170
170
  prerelease: false
171
171
  version_requirements: &id011 !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ hash: 11
177
+ segments:
178
+ - 1
179
+ - 6
180
+ - 2
181
+ version: 1.6.2
182
+ name: webmock
183
+ requirement: *id011
184
+ type: :development
185
+ - !ruby/object:Gem::Dependency
186
+ prerelease: false
187
+ version_requirements: &id012 !ruby/object:Gem::Requirement
172
188
  none: false
173
189
  requirements:
174
190
  - - ">="
@@ -180,7 +196,7 @@ dependencies:
180
196
  - 4
181
197
  version: 0.4.4
182
198
  name: oauth
183
- requirement: *id011
199
+ requirement: *id012
184
200
  type: :runtime
185
201
  description: mage-hand is a ghostly hand that reaches across the internet to access the Obsidian Portal API.
186
202
  email: shammond@northpub.com
@@ -191,6 +207,7 @@ extensions: []
191
207
  extra_rdoc_files:
192
208
  - LICENSE.txt
193
209
  - README.rdoc
210
+ - TODO
194
211
  files:
195
212
  - .document
196
213
  - Gemfile
@@ -198,6 +215,7 @@ files:
198
215
  - LICENSE.txt
199
216
  - README.rdoc
200
217
  - Rakefile
218
+ - TODO
201
219
  - VERSION
202
220
  - lib/mage-hand.rb
203
221
  - lib/ob_port/base.rb
@@ -207,6 +225,7 @@ files:
207
225
  - lib/ob_port/wiki_page.rb
208
226
  - mage-hand.gemspec
209
227
  - test/helper.rb
228
+ - test/test_campaign.rb
210
229
  - test/test_client.rb
211
230
  - test/test_mage-hand.rb
212
231
  has_rdoc: true
@@ -245,5 +264,6 @@ specification_version: 3
245
264
  summary: Ruby wrapper around the Obsidian Portal API
246
265
  test_files:
247
266
  - test/helper.rb
267
+ - test/test_campaign.rb
248
268
  - test/test_client.rb
249
269
  - test/test_mage-hand.rb