mage-hand 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
data/lib/ob_port/base.rb CHANGED
@@ -1,8 +1,19 @@
1
1
  module MageHand
2
2
  class Base
3
- attr_accessor :id
3
+ @@simple_attributes = {}
4
+ @@instance_attributes = {}
4
5
 
5
- def initialize(attributes)
6
+ def self.attr_simple(*method_names)
7
+ @@simple_attributes[self.name] = [] unless @@simple_attributes[self.name]
8
+ method_names.each do |method_name|
9
+ attr_accessor method_name
10
+ @@simple_attributes[self.name] << method_name
11
+ end
12
+ end
13
+
14
+ attr_simple :id
15
+
16
+ def initialize(attributes=nil)
6
17
  update_attributes!(attributes)
7
18
  end
8
19
 
@@ -15,6 +26,9 @@ module MageHand
15
26
  end
16
27
 
17
28
  def inflate
29
+ #if we don't have an id, the opject has not been created on the server yet
30
+ return unless self.id
31
+
18
32
  hash = JSON.parse( MageHand::get_client.access_token.get(individual_url).body)
19
33
  update_attributes!(hash)
20
34
  end
@@ -22,7 +36,42 @@ module MageHand
22
36
  def self.model_name
23
37
  @_model_name ||= ActiveModel::Name.new(self)
24
38
  end
39
+
40
+ def self.simple_attributes
41
+ @@simple_attributes[self.name] || []
42
+ end
43
+
44
+ def simple_attributes
45
+ self.class.simple_attributes
46
+ end
47
+
48
+ def self.instance_attributes
49
+ @@instance_attributes[self.name] || []
50
+ end
51
+
52
+ def instance_attributes
53
+ self.class.instance_attributes
54
+ end
55
+
56
+ def self.attributes
57
+ simple_attributes + instance_attributes
58
+ end
59
+
60
+ def attributes
61
+ self.class.attributes
62
+ end
25
63
 
64
+ def to_json(*a)
65
+ json_hash = {}
66
+ self.simple_attributes.each do |attribute|
67
+ json_hash[attribute.to_s] = self.send(attribute) if self.send(attribute)
68
+ end
69
+ self.instance_attributes.each do |attribute|
70
+ json_hash[attribute.to_s] = self.send(attribute).to_json if self.send(attribute)
71
+ end
72
+ json_hash.to_json(*a)
73
+ end
74
+
26
75
  def self.attr_instance(method_name, options={})
27
76
  self.class_eval do
28
77
  name = method_name.to_s
@@ -38,6 +87,9 @@ module MageHand
38
87
  CODE
39
88
  puts code if ENV['DEBUG']
40
89
  module_eval code
90
+
91
+ @@instance_attributes[self.name] = [] unless @@instance_attributes[self.name]
92
+ @@instance_attributes[self.name] << method_name
41
93
  end
42
94
  end
43
95
 
@@ -3,18 +3,18 @@ module MageHand
3
3
  ROLES = {'game_master' => 'Game Master', 'player' => 'Player'}
4
4
 
5
5
  # public mini-object methods
6
- attr_accessor :name, :campaign_url, :role, :visibility
6
+ attr_simple :name, :campaign_url, :role, :visibility
7
7
 
8
- attr_accessor :slug
8
+ attr_simple :slug
9
9
  attr_instance :game_master, :class_name => 'User'
10
10
  inflate_if_nil :game_master, :slug
11
11
 
12
12
  # Private/Friends
13
- attr_accessor :banner_image_url, :play_status, :looking_for_players, :created_at, :updated_at
13
+ attr_simple :banner_image_url, :play_status, :looking_for_players, :created_at, :updated_at
14
14
  inflate_if_nil :banner_image_url, :play_status, :looking_for_players, :created_at, :updated_at
15
15
 
16
16
  # Player/GM Only
17
- attr_accessor :lat, :lng
17
+ attr_simple :lat, :lng
18
18
  inflate_if_nil :lat, :lng
19
19
 
20
20
  attr_array :players, :class_name => 'User'
data/lib/ob_port/user.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module MageHand
2
2
  class User < Base
3
- attr_accessor :username, :profile_url, :avatar_image_url,
3
+ attr_simple :username, :profile_url, :avatar_image_url,
4
4
  :created_at, :last_seen_at, :utc_offset, :locale, :is_ascendant
5
5
  inflate_if_nil :avatar_image_url, :created_at, :last_seen_at, :utc_offset,
6
6
  :locale, :is_ascendant
@@ -3,19 +3,22 @@ module MageHand
3
3
  ROLES = {'game_master' => 'Game Master', 'player' => 'Player'}
4
4
 
5
5
  # public methods
6
- attr_accessor :slug, :name, :wiki_page_url, :campaign, :created_at, :updated_at
6
+ attr_simple :slug, :name, :wiki_page_url, :created_at, :updated_at
7
7
 
8
8
  # Private/Friends
9
- attr_accessor :type, :is_game_master_only, :body, :body_html, :tags
9
+ attr_simple :type, :is_game_master_only, :body, :body_html, :tags
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_tagline, :post_time
13
+ attr_simple :post_title, :post_tagline, :post_time
14
14
 
15
15
  # GM Only fields
16
- attr_accessor :game_master_info, :game_master_info_markup
16
+ attr_simple :game_master_info, :game_master_info_markup
17
17
  inflate_if_nil :game_master_info, :game_master_info_markup
18
18
 
19
+ attr_instance :campaign
20
+ inflate_if_nil :campaign
21
+
19
22
  def self.load_wiki_pages(campaign_id)
20
23
  wiki_hashes = JSON.parse(
21
24
  MageHand::get_client.access_token.get(collection_url(campaign_id)).body)
@@ -30,6 +33,30 @@ module MageHand
30
33
  type == 'Post'
31
34
  end
32
35
 
36
+ def to_hash
37
+ attribute_hash = {}
38
+ simple_attributes.each do |att|
39
+ attribute_hash[att] = self.send(att) unless self.send(att).nil?
40
+ end
41
+
42
+ attribute_hash
43
+ end
44
+
45
+ def to_json
46
+ to_hash.to_json
47
+ end
48
+
49
+ def save!
50
+ if id # save existing wiki pae
51
+
52
+ else # create new wiki page
53
+ json_body = {'wiki_page' => self.to_hash}.to_json
54
+ @response = MageHand.get_client.access_token.post(self.class.collection_url(self.campaign.id),
55
+ json_body, {'content-type' => 'application/x-www-form-urlencoded'})
56
+ self.update_attributes!(JSON.parse(@response.body))
57
+ end
58
+ end
59
+
33
60
  private
34
61
 
35
62
  def self.collection_url(campaign_id)
data/mage-hand.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mage-hand}
8
- s.version = "0.3.2"
8
+ s.version = "0.4.0"
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-10-24}
12
+ s.date = %q{2011-11-06}
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 = [
@@ -35,9 +35,9 @@ Gem::Specification.new do |s|
35
35
  "lib/ob_port/wiki_page.rb",
36
36
  "mage-hand.gemspec",
37
37
  "test/helper.rb",
38
+ "test/test_base.rb",
38
39
  "test/test_campaign.rb",
39
- "test/test_client.rb",
40
- "test/test_mage-hand.rb"
40
+ "test/test_client.rb"
41
41
  ]
42
42
  s.homepage = %q{http://github.com/shammond42/mage-hand}
43
43
  s.licenses = ["MIT"]
@@ -46,9 +46,9 @@ Gem::Specification.new do |s|
46
46
  s.summary = %q{Ruby wrapper around the Obsidian Portal API}
47
47
  s.test_files = [
48
48
  "test/helper.rb",
49
+ "test/test_base.rb",
49
50
  "test/test_campaign.rb",
50
- "test/test_client.rb",
51
- "test/test_mage-hand.rb"
51
+ "test/test_client.rb"
52
52
  ]
53
53
 
54
54
  if s.respond_to? :specification_version then
data/test/test_base.rb ADDED
@@ -0,0 +1,55 @@
1
+ require 'test/helper'
2
+
3
+ class TestBase < Test::Unit::TestCase
4
+ context 'the Base class' do
5
+ should 'use the attr_simple method to add an attribute' do
6
+ MageHand::Base.attr_simple :test_attribute, :second_attribute
7
+ @instance = MageHand::Base.new
8
+ @instance.test_attribute = 'Hello'
9
+ @instance.second_attribute = 'World'
10
+ assert_equal 'Hello', @instance.test_attribute
11
+ assert_equal 'World', @instance.second_attribute
12
+ end
13
+
14
+ should 'be able to get a list of simple attributes' do
15
+ MageHand::Base.attr_simple :test_attribute, :second_attribute
16
+ @instance = MageHand::Base.new
17
+
18
+ assert MageHand::Base.simple_attributes.include?(:test_attribute)
19
+ assert @instance.simple_attributes.include?(:test_attribute)
20
+
21
+ assert MageHand::Base.simple_attributes.include?(:second_attribute)
22
+ assert @instance.simple_attributes.include?(:second_attribute)
23
+ end
24
+
25
+ should 'be able to add an instance of another class as an attribute' do
26
+ MageHand::Base.attr_instance :test_campaign, :class_name => 'Campaign'
27
+ @instance = MageHand::Base.new
28
+ @instance.test_campaign = {:name => "A Great Time"}
29
+ assert_equal "A Great Time", @instance.test_campaign.name
30
+ end
31
+
32
+ should 'be able to get a list of instance attributes' do
33
+ MageHand::Base.attr_instance :test_campaign, :class_name => 'Campaign'
34
+ @instance = MageHand::Base.new
35
+
36
+ assert MageHand::Base.instance_attributes.include?(:test_campaign)
37
+ assert @instance.instance_attributes.include?(:test_campaign)
38
+ end
39
+
40
+ should 'be able to get a list of all declared attributes' do
41
+ MageHand::Base.attr_instance :test_campaign, :class_name => 'Campaign'
42
+ MageHand::Base.attr_simple :test_attribute
43
+ @instance = MageHand::Base.new
44
+
45
+ assert MageHand::Base.attributes.include?(:test_campaign)
46
+ assert @instance.attributes.include?(:test_campaign)
47
+ assert MageHand::Base.attributes.include?(:test_attribute)
48
+ assert @instance.attributes.include?(:test_attribute)
49
+ end
50
+
51
+ should 'have id as a simple attribute' do
52
+ assert MageHand::Base.simple_attributes.include?(:id)
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -4,10 +4,10 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
8
- - 2
7
+ - 4
8
+ - 0
9
9
  segments_generated: true
10
- version: 0.3.2
10
+ version: 0.4.0
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-10-24 00:00:00 -04:00
18
+ date: 2011-11-06 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -214,9 +214,9 @@ files:
214
214
  - lib/ob_port/wiki_page.rb
215
215
  - mage-hand.gemspec
216
216
  - test/helper.rb
217
+ - test/test_base.rb
217
218
  - test/test_campaign.rb
218
219
  - test/test_client.rb
219
- - test/test_mage-hand.rb
220
220
  has_rdoc: true
221
221
  homepage: http://github.com/shammond42/mage-hand
222
222
  licenses:
@@ -251,6 +251,6 @@ specification_version: 3
251
251
  summary: Ruby wrapper around the Obsidian Portal API
252
252
  test_files:
253
253
  - test/helper.rb
254
+ - test/test_base.rb
254
255
  - test/test_campaign.rb
255
256
  - test/test_client.rb
256
- - test/test_mage-hand.rb
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestMageHand < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end