activitystreams 0.0.1 → 0.0.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.
Files changed (78) hide show
  1. data/VERSION +1 -1
  2. data/lib/activitystreams.rb +12 -0
  3. data/lib/activitystreams/activity.rb +14 -0
  4. data/lib/activitystreams/base.rb +1 -1
  5. data/lib/activitystreams/ext_properties.rb +26 -0
  6. data/lib/activitystreams/object.rb +25 -2
  7. data/lib/activitystreams/object/article.rb +4 -0
  8. data/lib/activitystreams/object/audio.rb +10 -0
  9. data/lib/activitystreams/object/badge.rb +4 -0
  10. data/lib/activitystreams/object/bookmark.rb +11 -0
  11. data/lib/activitystreams/object/collection.rb +10 -0
  12. data/lib/activitystreams/object/comment.rb +10 -0
  13. data/lib/activitystreams/object/event.rb +15 -0
  14. data/lib/activitystreams/object/file.rb +10 -0
  15. data/lib/activitystreams/object/group.rb +4 -0
  16. data/lib/activitystreams/object/image.rb +10 -0
  17. data/lib/activitystreams/object/note.rb +4 -0
  18. data/lib/activitystreams/object/person.rb +4 -0
  19. data/lib/activitystreams/object/place.rb +25 -0
  20. data/lib/activitystreams/object/product.rb +10 -0
  21. data/lib/activitystreams/object/question.rb +10 -0
  22. data/lib/activitystreams/object/review.rb +16 -0
  23. data/lib/activitystreams/object/service.rb +4 -0
  24. data/lib/activitystreams/object/video.rb +10 -0
  25. data/lib/activitystreams/validator.rb +11 -1
  26. data/lib/activitystreams/verb.rb +17 -3
  27. data/lib/activitystreams/verb/add.rb +4 -0
  28. data/lib/activitystreams/verb/cancel.rb +4 -0
  29. data/lib/activitystreams/verb/checkin.rb +4 -0
  30. data/lib/activitystreams/verb/delete.rb +4 -0
  31. data/lib/activitystreams/verb/favorite.rb +4 -0
  32. data/lib/activitystreams/verb/follow.rb +4 -0
  33. data/lib/activitystreams/verb/give.rb +4 -0
  34. data/lib/activitystreams/verb/ignore.rb +4 -0
  35. data/lib/activitystreams/verb/invite.rb +4 -0
  36. data/lib/activitystreams/verb/join.rb +4 -0
  37. data/lib/activitystreams/verb/leave.rb +4 -0
  38. data/lib/activitystreams/verb/like.rb +4 -0
  39. data/lib/activitystreams/verb/make_friend.rb +4 -0
  40. data/lib/activitystreams/verb/play.rb +4 -0
  41. data/lib/activitystreams/verb/receive.rb +4 -0
  42. data/lib/activitystreams/verb/remove.rb +4 -0
  43. data/lib/activitystreams/verb/remove_friend.rb +4 -0
  44. data/lib/activitystreams/verb/request_friend.rb +4 -0
  45. data/lib/activitystreams/verb/rsvp_maybe.rb +4 -0
  46. data/lib/activitystreams/verb/rsvp_no.rb +4 -0
  47. data/lib/activitystreams/verb/rsvp_yes.rb +4 -0
  48. data/lib/activitystreams/verb/save.rb +4 -0
  49. data/lib/activitystreams/verb/share.rb +4 -0
  50. data/lib/activitystreams/verb/stop_following.rb +4 -0
  51. data/lib/activitystreams/verb/tag.rb +4 -0
  52. data/lib/activitystreams/verb/unfavorite.rb +4 -0
  53. data/lib/activitystreams/verb/unlike.rb +4 -0
  54. data/lib/activitystreams/verb/unsave.rb +4 -0
  55. data/lib/activitystreams/verb/update.rb +4 -0
  56. data/spec/activitystreams/activity_spec.rb +31 -0
  57. data/spec/activitystreams/base_spec.rb +2 -2
  58. data/spec/activitystreams/media_link_spec.rb +2 -2
  59. data/spec/activitystreams/object/article_spec.rb +6 -0
  60. data/spec/activitystreams/object/audio_spec.rb +13 -0
  61. data/spec/activitystreams/object/bookmark_spec.rb +15 -0
  62. data/spec/activitystreams/object/collection_spec.rb +13 -0
  63. data/spec/activitystreams/object/comment_spec.rb +13 -0
  64. data/spec/activitystreams/object/event_spec.rb +17 -0
  65. data/spec/activitystreams/object/file_spec.rb +13 -0
  66. data/spec/activitystreams/object/image_spec.rb +13 -0
  67. data/spec/activitystreams/object/place_spec.rb +52 -0
  68. data/spec/activitystreams/object/product_spec.rb +13 -0
  69. data/spec/activitystreams/object/question_spec.rb +13 -0
  70. data/spec/activitystreams/object/review_spec.rb +32 -0
  71. data/spec/activitystreams/object/video_spec.rb +13 -0
  72. data/spec/activitystreams/object_spec.rb +9 -0
  73. data/spec/activitystreams/verb/add_spec.rb +6 -0
  74. data/spec/activitystreams/verb/make_friend_spec.rb +6 -0
  75. data/spec/activitystreams/verb/rsvp_maybe_spec.rb +6 -0
  76. data/spec/activitystreams/verb_spec.rb +2 -14
  77. data/spec/activitystreams_spec.rb +14 -0
  78. metadata +87 -5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -4,11 +4,23 @@ require 'attr_required'
4
4
  require 'attr_optional'
5
5
  require 'addressable/uri'
6
6
 
7
+ module ActivityStreams
8
+ def self.logger
9
+ @@logger
10
+ end
11
+ def self.logger=(logger)
12
+ @@logger = logger
13
+ end
14
+ @@logger = Logger.new(STDERR)
15
+ @@logger.progname = 'ActivityStreams'
16
+ end
17
+
7
18
  require 'activitystreams/validator'
8
19
  require 'activitystreams/exception'
9
20
  require 'activitystreams/base'
10
21
  require 'activitystreams/collection'
11
22
  require 'activitystreams/stream'
23
+ require 'activitystreams/ext_properties'
12
24
  require 'activitystreams/activity'
13
25
  require 'activitystreams/object'
14
26
  require 'activitystreams/verb'
@@ -1,5 +1,7 @@
1
1
  module ActivityStreams
2
2
  class Activity < Base
3
+ include ExtProperties
4
+
3
5
  attr_required :actor, :verb, :published
4
6
  attr_optional(
5
7
  # SHOULD
@@ -34,6 +36,18 @@ module ActivityStreams
34
36
  end
35
37
  validate_attribute! :verb, Verb
36
38
  validate_attribute! :icon, MediaLink
39
+ unless recommended_verb?
40
+ ActivityStreams.logger.warn "\"#{verb.to_s}\" is not recommended. \"#{recommended_verbs.join('", "')}\" are recommended."
41
+ end
42
+ end
43
+
44
+ def recommended_verb?
45
+ recommended_verbs.blank? ||
46
+ recommended_verbs.include?(verb.to_s)
47
+ end
48
+
49
+ def recommended_verbs
50
+ (object.try(:recommended_verbs) || []).collect(&:to_s)
37
51
  end
38
52
  end
39
53
  end
@@ -17,7 +17,7 @@ module ActivityStreams
17
17
  (required_attributes + optional_attributes).inject({}) do |hash, _attr_|
18
18
  _value_ = self.send _attr_
19
19
  hash.merge!(
20
- _attr_ => case _value_
20
+ _attr_.to_s.camelize(:lower).to_sym => case _value_
21
21
  when Symbol, Addressable::URI
22
22
  _value_.to_s
23
23
  when Time
@@ -0,0 +1,26 @@
1
+ module ActivityStreams
2
+ module ExtProperties
3
+ class Mood < Base
4
+ attr_optional :display_name, :image
5
+ end
6
+
7
+ def self.included(klass)
8
+ klass.attr_optional(
9
+ :location,
10
+ :mood,
11
+ :rating,
12
+ :source,
13
+ :tags
14
+ )
15
+ end
16
+
17
+ def validate_attributes!
18
+ super
19
+ validate_attribute! :location, Object::Place
20
+ validate_attribute! :mood, Mood
21
+ validate_attribute! :rating, Object::Review
22
+ validate_attribute! :source, Object
23
+ validate_attribute! :tags, Object, :arrayed!
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,7 @@
1
1
  module ActivityStreams
2
2
  class Object < Base
3
+ include ExtProperties
4
+
3
5
  attr_optional(
4
6
  # SHOULD
5
7
  :id,
@@ -11,16 +13,24 @@ module ActivityStreams
11
13
  :content,
12
14
  :display_name,
13
15
  :image,
14
- :type,
16
+ :object_type,
15
17
  :published,
16
18
  :summary,
17
19
  :updated,
18
20
  :url
19
21
  )
20
22
 
23
+ def initialize(attributes = {})
24
+ _type_ = if self.class.superclass == Object
25
+ self.class.name.demodulize.underscore
26
+ end
27
+ attributes = {:object_type => _type_}.merge(attributes)
28
+ super attributes
29
+ end
30
+
21
31
  def validate_attributes!
22
32
  super
23
- [:id, :type, :url].each do |_attr_|
33
+ [:id, :object_type, :url].each do |_attr_|
24
34
  to_iri _attr_
25
35
  end
26
36
  [:published, :updated].each do |_attr_|
@@ -34,5 +44,18 @@ module ActivityStreams
34
44
  end
35
45
  # TODO: display_name MUST NOT include HTML
36
46
  end
47
+
48
+ def recommended_verbs
49
+ self.class.recommended_verbs
50
+ end
51
+
52
+ def self.recommended_verbs(*verbs)
53
+ @recommended_verbs ||= []
54
+ @recommended_verbs += verbs
55
+ end
37
56
  end
38
57
  end
58
+
59
+ Dir[File.dirname(__FILE__) + '/object/*.rb'].each do |file|
60
+ require file
61
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Object::Article < Object
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::Audio < Object
3
+ attr_optional :embed_code, :stream
4
+
5
+ def validate_attributes!
6
+ super
7
+ validate_attribute! :stream, MediaLink
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Object::Badge < Object
3
+ end
4
+ end
@@ -0,0 +1,11 @@
1
+ module ActivityStreams
2
+ class Object::Bookmark < Object
3
+ attr_optional :target_url
4
+ recommended_verbs :post, :favorite
5
+
6
+ def validate_attributes!
7
+ super
8
+ to_iri :target_url
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::Collection < Object
3
+ attr_optional :object_types
4
+
5
+ def validate_attributes!
6
+ super
7
+ validate_attribute! :object_types, Array
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::Comment < Object
3
+ attr_optional :in_reply_to
4
+
5
+ def validate_attributes!
6
+ super
7
+ validate_attribute! :in_reply_to, Object, :arrayed!
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module ActivityStreams
2
+ class Object::Event < Object
3
+ attr_optional :attending, :maybe_attending, :not_attending, :start_time, :end_time
4
+
5
+ def validate_attributes!
6
+ super
7
+ [:attending, :maybe_attending, :not_attending].each do |_attr_|
8
+ validate_attribute! _attr_, Object::Collection
9
+ end
10
+ [:start_time, :end_time].each do |_attr_|
11
+ to_time _attr_
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::File < Object
3
+ attr_optional :file_url, :mime_type
4
+
5
+ def validate_attributes!
6
+ super
7
+ to_iri :file_url
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Object::Group < Object
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::Image < Object
3
+ attr_optional :full_image
4
+
5
+ def validate_attributes!
6
+ super
7
+ validate_attribute! :full_image, MediaLink
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Object::Note < Object
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Object::Person < Object
3
+ end
4
+ end
@@ -0,0 +1,25 @@
1
+ module ActivityStreams
2
+ class Object::Place < Object
3
+ attr_optional :position, :address
4
+
5
+ class GeoLocation < Base
6
+ attr_required :latitude, :longitude
7
+ attr_optional :altitude
8
+
9
+ def to_s
10
+ "+" + [latitude, longitude, altitude].compact.join('+')
11
+ end
12
+ alias_method :as_json, :to_s
13
+ end
14
+
15
+ class Address < Base
16
+ attr_optional :formatted, :street_address, :locality, :region, :postal_code, :country
17
+ end
18
+
19
+ def validate_attributes!
20
+ super
21
+ validate_attribute! :position, GeoLocation
22
+ validate_attribute! :address, Address
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::Product < Object
3
+ attr_optional :full_image
4
+
5
+ def validate_attributes!
6
+ super
7
+ validate_attribute! :full_image, MediaLink
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::Question < Object
3
+ attr_optional :options
4
+
5
+ def validate_attributes!
6
+ super
7
+ validate_attribute! :options, Object, :arrayed!
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ module ActivityStreams
2
+ class Object::Review < Object
3
+ attr_optional :_rating_
4
+
5
+ def validate_attributes!
6
+ super
7
+ to_float :_rating_, :precision => 1, :range => 1.0..5.0
8
+ end
9
+
10
+ def as_json
11
+ hash = super
12
+ hash[:rating] = hash.delete(:_rating_)
13
+ hash
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Object::Service < Object
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ module ActivityStreams
2
+ class Object::Video < Object
3
+ attr_optional :embed_code, :stream
4
+
5
+ def validate_attributes!
6
+ super
7
+ validate_attribute! :stream, MediaLink
8
+ end
9
+ end
10
+ end
@@ -43,12 +43,22 @@ module ActivityStreams
43
43
  end
44
44
  self.send :"#{attribute}=", _value_
45
45
  rescue ArgumentError, NoMethodError => e
46
- raise InvalidAttribute.new("#{attribute} ")
46
+ raise InvalidAttribute.new("#{attribute} should be a valid date-time")
47
47
  end
48
48
 
49
49
  def to_integer(attribute)
50
50
  _value_ = self.send attribute
51
51
  self.send :"#{attribute}=", _value_.try(:to_i)
52
52
  end
53
+
54
+ def to_float(attribute, options = {})
55
+ _value_ = self.send attribute
56
+ return unless _value_
57
+ _value_ = BigDecimal.new(_value_.to_s).round(options[:precision]) if options[:precision]
58
+ if options[:range] && !options[:range].include?(_value_)
59
+ raise InvalidAttribute.new("#{attribute} should be within #{options[:range]}")
60
+ end
61
+ self.send :"#{attribute}=", _value_.to_f
62
+ end
53
63
  end
54
64
  end
@@ -2,13 +2,27 @@ module ActivityStreams
2
2
  class Verb < Base
3
3
  attr_required :verb
4
4
 
5
- def initialize(attributes = {})
6
- attributes[:verb] ||= :post
5
+ def initialize
6
+ _verb_ = if self.class.superclass == Verb
7
+ self.class.name.demodulize.underscore.dasherize
8
+ else
9
+ 'post'
10
+ end
11
+ super :verb => _verb_
12
+ end
13
+
14
+ def validate_attributes!
7
15
  super
16
+ to_iri :verb
8
17
  end
9
18
 
10
- def as_json(options = {})
19
+ def to_s(options = {})
11
20
  verb.to_s
12
21
  end
22
+ alias_method :as_json, :to_s
13
23
  end
14
24
  end
25
+
26
+ Dir[File.dirname(__FILE__) + '/verb/*.rb'].each do |file|
27
+ require file
28
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Add < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Cancel < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Checkin < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Delete < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Favorite < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Follow < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Give < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Ignore < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Invite < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Join < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Leave < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Like < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::MakeFriend < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Play < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Receive < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Remove < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::RemoveFriend < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::RequestFriend < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::RSVPMaybe < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::RSVPNo < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::RSVPYes < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Save < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Share < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::StopFollowing < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Tag < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Unfavorite < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Unlike < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Unsave < Verb
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module ActivityStreams
2
+ class Verb::Update < Verb
3
+ end
4
+ end
@@ -48,4 +48,35 @@ describe ActivityStreams::Activity do
48
48
  expect { ActivityStreams::Activity.new valid_attributes }.should_not raise_error AttrRequired::AttrMissing
49
49
  end
50
50
  end
51
+
52
+ describe '#recommended_verb?' do
53
+ let(:activity) do
54
+ ActivityStreams::Activity.new valid_attributes.merge(
55
+ :object => object,
56
+ :verb => verb
57
+ )
58
+ end
59
+
60
+ context 'when object is Bookmark' do
61
+ let(:object) { ActivityStreams::Object::Bookmark.new }
62
+
63
+ context 'when recommended verb used' do
64
+ let(:verb) { ActivityStreams::Verb.new }
65
+ it 'should not warn' do
66
+ ActivityStreams.logger.should_not_receive(:warn)
67
+ activity
68
+ end
69
+ end
70
+
71
+ context 'otherwise' do
72
+ let(:verb) { ActivityStreams::Verb::Add.new }
73
+ it 'should warn' do
74
+ ActivityStreams.logger.should_receive(:warn).with(
75
+ "\"#{verb.to_s}\" is not recommended. \"#{object.recommended_verbs.collect(&:to_s).join('", "')}\" are recommended."
76
+ )
77
+ activity
78
+ end
79
+ end
80
+ end
81
+ end
51
82
  end
@@ -30,9 +30,9 @@ describe ActivityStreams::Base do
30
30
  SubClass.new(
31
31
  :required => time,
32
32
  :optional => iri
33
- )
33
+ ).as_json
34
34
  end
35
- its(:as_json) do
35
+ it do
36
36
  should == {
37
37
  :required => time.iso8601,
38
38
  :optional => iri.to_s
@@ -40,8 +40,8 @@ describe ActivityStreams::MediaLink do
40
40
 
41
41
  describe '#as_json' do
42
42
  let(:attributes) { required_attributes.merge(optional_attributes) }
43
- subject { ActivityStreams::MediaLink.new required_attributes.merge(optional_attributes) }
44
- its(:as_json) do
43
+ subject { ActivityStreams::MediaLink.new(required_attributes.merge(optional_attributes)).as_json }
44
+ it do
45
45
  should == {
46
46
  :url => required_attributes[:url],
47
47
  :duration => optional_attributes[:duration].to_i,
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Article do
4
+ its(:object_type) { should == Addressable::URI.parse('article') }
5
+ its(:recommended_verbs) { should == [] }
6
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Audio do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:stream => 'invalid'}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Audio.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Bookmark do
4
+ its(:recommended_verbs) { should == [:post, :favorite] }
5
+
6
+ context 'when invalid attributes given' do
7
+ let(:invalid_attributes) do
8
+ {:target_url => 'http://'}
9
+ end
10
+
11
+ it do
12
+ expect { ActivityStreams::Object::Bookmark.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Collection do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:object_types => 'bookmark,person'}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Collection.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Comment do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:in_reply_to => ['object_a', 'object_b']}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Comment.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Event do
4
+ context 'when invalid attributes given' do
5
+ [:attending, :maybe_attending, :not_attending, :start_time, :end_time].each do |_attr_|
6
+ context "when #{_attr_} is invalid" do
7
+ let(:invalid_attributes) do
8
+ {_attr_ => 'invalid'}
9
+ end
10
+
11
+ it do
12
+ expect { ActivityStreams::Object::Event.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::File do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:file_url => 'http://'}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::File.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Image do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:full_image => 'invalid'}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Image.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Place do
4
+ context 'when invalid attributes given' do
5
+ [:position, :address].each do |_attr_|
6
+ context "when #{_attr_} is invalid" do
7
+ let(:invalid_attributes) do
8
+ {_attr_ => 'invalid'}
9
+ end
10
+
11
+ it do
12
+ expect { ActivityStreams::Object::Place.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ describe ActivityStreams::Object::Place::GeoLocation do
19
+ context 'when missing attributes' do
20
+ it do
21
+ expect { ActivityStreams::Object::Place::GeoLocation.new }.should raise_error AttrRequired::AttrMissing
22
+ end
23
+ end
24
+
25
+ describe '#as_json' do
26
+ let(:latitude) { 35.0 }
27
+ let(:longitude) { 140.0 }
28
+ let(:altitude) { 100 }
29
+ subject { ActivityStreams::Object::Place::GeoLocation.new attributes }
30
+ context 'when altitude given' do
31
+ let(:attributes) do
32
+ {
33
+ :latitude => latitude,
34
+ :longitude => longitude
35
+ }
36
+ end
37
+ its(:as_json) { should == "+#{latitude}+#{longitude}" }
38
+ end
39
+
40
+ context 'otherwise' do
41
+ let(:attributes) do
42
+ {
43
+ :latitude => latitude,
44
+ :longitude => longitude,
45
+ :altitude => altitude
46
+ }
47
+ end
48
+ its(:as_json) { should == "+#{latitude}+#{longitude}+#{altitude}" }
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Product do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:full_image => 'invalid'}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Product.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Question do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:options => ['invalid']}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Question.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Review do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:_rating_ => 0}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Review.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+
14
+ describe '#rating' do
15
+ subject { ActivityStreams::Object::Review.new(:_rating_ => rate) }
16
+ context 'when integer' do
17
+ let(:rate) { 3 }
18
+ its(:_rating_) { should be_a Float }
19
+ end
20
+
21
+ context 'when float' do
22
+ let(:rate) { 1.36 }
23
+ its(:_rating_) { should == rate.round(1) }
24
+ end
25
+ end
26
+
27
+ describe '#as_json' do
28
+ subject { ActivityStreams::Object::Review.new(:_rating_ => 1).as_json }
29
+ its(:keys) { should include :rating }
30
+ its(:keys) { should_not include :_rating_ }
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Object::Video do
4
+ context 'when invalid attributes given' do
5
+ let(:invalid_attributes) do
6
+ {:stream => 'invalid'}
7
+ end
8
+
9
+ it do
10
+ expect { ActivityStreams::Object::Video.new invalid_attributes }.should raise_error ActivityStreams::InvalidAttribute
11
+ end
12
+ end
13
+ end
@@ -44,4 +44,13 @@ describe ActivityStreams::Object do
44
44
  expect { ActivityStreams::Object.new valid_attributes }.should_not raise_error AttrRequired::AttrMissing
45
45
  end
46
46
  end
47
+
48
+ describe '#as_json' do
49
+ subject { ActivityStreams::Object.new(:display_name => 'Nov').as_json }
50
+ it do
51
+ should == {
52
+ :displayName => 'Nov'
53
+ }
54
+ end
55
+ end
47
56
  end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Verb::Add do
4
+ its(:verb) { should == Addressable::URI.parse('add') }
5
+ its(:as_json) { should == 'add' }
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Verb::MakeFriend do
4
+ its(:verb) { should == Addressable::URI.parse('make-friend') }
5
+ its(:as_json) { should == 'make-friend' }
6
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams::Verb::RSVPMaybe do
4
+ its(:verb) { should == Addressable::URI.parse('rsvp-maybe') }
5
+ its(:as_json) { should == 'rsvp-maybe' }
6
+ end
@@ -1,18 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ActivityStreams::Verb do
4
- context 'when missing attributes' do
5
- subject { ActivityStreams::Verb.new }
6
- its(:verb) { should == :post }
7
- end
8
-
9
- context 'otherwise' do
10
- subject { ActivityStreams::Verb.new(:verb => :my_verb) }
11
- its(:verb) { should == :my_verb }
12
- end
13
-
14
- describe '#as_json' do
15
- subject { ActivityStreams::Verb.new(:verb => :my_verb) }
16
- its(:as_json) { should == 'my_verb' }
17
- end
4
+ its(:verb) { should == Addressable::URI.parse('post') }
5
+ its(:as_json) { should == 'post' }
18
6
  end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActivityStreams do
4
+ its(:logger) { should be_a Logger}
5
+
6
+ describe '.logger=' do
7
+ class CustomLogger < Logger; end
8
+
9
+ it 'should set custom logger' do
10
+ ActivityStreams.logger = CustomLogger.new(STDERR)
11
+ ActivityStreams.logger.should be_a CustomLogger
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activitystreams
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - nov matake
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-05 00:00:00 Z
18
+ date: 2011-07-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: json
@@ -157,19 +157,84 @@ files:
157
157
  - lib/activitystreams/base.rb
158
158
  - lib/activitystreams/collection.rb
159
159
  - lib/activitystreams/exception.rb
160
+ - lib/activitystreams/ext_properties.rb
160
161
  - lib/activitystreams/media_link.rb
161
162
  - lib/activitystreams/object.rb
163
+ - lib/activitystreams/object/article.rb
164
+ - lib/activitystreams/object/audio.rb
165
+ - lib/activitystreams/object/badge.rb
166
+ - lib/activitystreams/object/bookmark.rb
167
+ - lib/activitystreams/object/collection.rb
168
+ - lib/activitystreams/object/comment.rb
169
+ - lib/activitystreams/object/event.rb
170
+ - lib/activitystreams/object/file.rb
171
+ - lib/activitystreams/object/group.rb
172
+ - lib/activitystreams/object/image.rb
173
+ - lib/activitystreams/object/note.rb
174
+ - lib/activitystreams/object/person.rb
175
+ - lib/activitystreams/object/place.rb
176
+ - lib/activitystreams/object/product.rb
177
+ - lib/activitystreams/object/question.rb
178
+ - lib/activitystreams/object/review.rb
179
+ - lib/activitystreams/object/service.rb
180
+ - lib/activitystreams/object/video.rb
162
181
  - lib/activitystreams/stream.rb
163
182
  - lib/activitystreams/validator.rb
164
183
  - lib/activitystreams/verb.rb
184
+ - lib/activitystreams/verb/add.rb
185
+ - lib/activitystreams/verb/cancel.rb
186
+ - lib/activitystreams/verb/checkin.rb
187
+ - lib/activitystreams/verb/delete.rb
188
+ - lib/activitystreams/verb/favorite.rb
189
+ - lib/activitystreams/verb/follow.rb
190
+ - lib/activitystreams/verb/give.rb
191
+ - lib/activitystreams/verb/ignore.rb
192
+ - lib/activitystreams/verb/invite.rb
193
+ - lib/activitystreams/verb/join.rb
194
+ - lib/activitystreams/verb/leave.rb
195
+ - lib/activitystreams/verb/like.rb
196
+ - lib/activitystreams/verb/make_friend.rb
197
+ - lib/activitystreams/verb/play.rb
198
+ - lib/activitystreams/verb/receive.rb
199
+ - lib/activitystreams/verb/remove.rb
200
+ - lib/activitystreams/verb/remove_friend.rb
201
+ - lib/activitystreams/verb/request_friend.rb
202
+ - lib/activitystreams/verb/rsvp_maybe.rb
203
+ - lib/activitystreams/verb/rsvp_no.rb
204
+ - lib/activitystreams/verb/rsvp_yes.rb
205
+ - lib/activitystreams/verb/save.rb
206
+ - lib/activitystreams/verb/share.rb
207
+ - lib/activitystreams/verb/stop_following.rb
208
+ - lib/activitystreams/verb/tag.rb
209
+ - lib/activitystreams/verb/unfavorite.rb
210
+ - lib/activitystreams/verb/unlike.rb
211
+ - lib/activitystreams/verb/unsave.rb
212
+ - lib/activitystreams/verb/update.rb
165
213
  - spec/activitystreams/activity_spec.rb
166
214
  - spec/activitystreams/base_spec.rb
167
215
  - spec/activitystreams/collection_spec.rb
168
216
  - spec/activitystreams/media_link_spec.rb
217
+ - spec/activitystreams/object/article_spec.rb
218
+ - spec/activitystreams/object/audio_spec.rb
219
+ - spec/activitystreams/object/bookmark_spec.rb
220
+ - spec/activitystreams/object/collection_spec.rb
221
+ - spec/activitystreams/object/comment_spec.rb
222
+ - spec/activitystreams/object/event_spec.rb
223
+ - spec/activitystreams/object/file_spec.rb
224
+ - spec/activitystreams/object/image_spec.rb
225
+ - spec/activitystreams/object/place_spec.rb
226
+ - spec/activitystreams/object/product_spec.rb
227
+ - spec/activitystreams/object/question_spec.rb
228
+ - spec/activitystreams/object/review_spec.rb
229
+ - spec/activitystreams/object/video_spec.rb
169
230
  - spec/activitystreams/object_spec.rb
170
231
  - spec/activitystreams/stream_spec.rb
171
232
  - spec/activitystreams/validator_spec.rb
233
+ - spec/activitystreams/verb/add_spec.rb
234
+ - spec/activitystreams/verb/make_friend_spec.rb
235
+ - spec/activitystreams/verb/rsvp_maybe_spec.rb
172
236
  - spec/activitystreams/verb_spec.rb
237
+ - spec/activitystreams_spec.rb
173
238
  - spec/spec_helper.rb
174
239
  homepage: http://github.com/nov/activitystreams
175
240
  licenses: []
@@ -200,7 +265,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
265
  requirements: []
201
266
 
202
267
  rubyforge_project:
203
- rubygems_version: 1.7.2
268
+ rubygems_version: 1.8.5
204
269
  signing_key:
205
270
  specification_version: 3
206
271
  summary: A RubyGem for ActivityStreams Publishers
@@ -209,8 +274,25 @@ test_files:
209
274
  - spec/activitystreams/base_spec.rb
210
275
  - spec/activitystreams/collection_spec.rb
211
276
  - spec/activitystreams/media_link_spec.rb
277
+ - spec/activitystreams/object/article_spec.rb
278
+ - spec/activitystreams/object/audio_spec.rb
279
+ - spec/activitystreams/object/bookmark_spec.rb
280
+ - spec/activitystreams/object/collection_spec.rb
281
+ - spec/activitystreams/object/comment_spec.rb
282
+ - spec/activitystreams/object/event_spec.rb
283
+ - spec/activitystreams/object/file_spec.rb
284
+ - spec/activitystreams/object/image_spec.rb
285
+ - spec/activitystreams/object/place_spec.rb
286
+ - spec/activitystreams/object/product_spec.rb
287
+ - spec/activitystreams/object/question_spec.rb
288
+ - spec/activitystreams/object/review_spec.rb
289
+ - spec/activitystreams/object/video_spec.rb
212
290
  - spec/activitystreams/object_spec.rb
213
291
  - spec/activitystreams/stream_spec.rb
214
292
  - spec/activitystreams/validator_spec.rb
293
+ - spec/activitystreams/verb/add_spec.rb
294
+ - spec/activitystreams/verb/make_friend_spec.rb
295
+ - spec/activitystreams/verb/rsvp_maybe_spec.rb
215
296
  - spec/activitystreams/verb_spec.rb
297
+ - spec/activitystreams_spec.rb
216
298
  - spec/spec_helper.rb