diff --git a/lib/twitter/action_factory.rb b/lib/twitter/action_factory.rb index cd4dca378..5494e6264 100644 --- a/lib/twitter/action_factory.rb +++ b/lib/twitter/action_factory.rb @@ -1,9 +1,12 @@ require 'twitter/favorite' require 'twitter/follow' +require 'twitter/list_member_added' require 'twitter/mention' require 'twitter/reply' require 'twitter/retweet' +require 'active_support/core_ext/string/inflections' + module Twitter class ActionFactory @@ -11,11 +14,11 @@ class ActionFactory # # @param attrs [Hash] # @raise [ArgumentError] Error raised when supplied argument is missing an 'action' key. - # @return [Twitter::Favorite, Twitter::Follow, Twitter::Mention, Twitter::Reply, Twitter::Retweet] + # @return [Twitter::Favorite, Twitter::Follow, Twitter::ListMemberAdded, Twitter::Mention, Twitter::Reply, Twitter::Retweet] def self.new(action={}) type = action.delete('action') if type - Twitter.const_get(type.capitalize.to_sym).new(action) + Twitter.const_get(type.camelize.to_sym).new(action) else raise ArgumentError, "argument must have an 'action' key" end diff --git a/lib/twitter/list_member_added.rb b/lib/twitter/list_member_added.rb new file mode 100644 index 000000000..db4a493d8 --- /dev/null +++ b/lib/twitter/list_member_added.rb @@ -0,0 +1,36 @@ +require 'twitter/action' +require 'twitter/list' +require 'twitter/user' + +module Twitter + class ListMemberAdded < Twitter::Action + lazy_attr_reader :target_objects + + # A collection of users who added to the list + # + # @return [Array] + def sources + @sources = Array(@attrs['sources']).map do |user| + Twitter::User.new(user) + end + end + + # A collection of lists that were added to + # + # @return [Array] + def target_objects + @target_objects = Array(@attrs['target_objects']).map do |list| + Twitter::List.new(list) + end + end + + # A collection of users who were added to the list + # + # @return [Array] + def targets + @targets = Array(@attrs['targets']).map do |user| + Twitter::User.new(user) + end + end + end +end diff --git a/spec/twitter/action_factory_spec.rb b/spec/twitter/action_factory_spec.rb index 7f4ff19cb..024b17ac8 100644 --- a/spec/twitter/action_factory_spec.rb +++ b/spec/twitter/action_factory_spec.rb @@ -11,6 +11,10 @@ action = Twitter::ActionFactory.new('action' => 'follow') action.should be_a Twitter::Follow end + it "should generate a ListMemberAdded" do + action = Twitter::ActionFactory.new('action' => 'list_member_added') + action.should be_a Twitter::ListMemberAdded + end it "should generate a Mention" do action = Twitter::ActionFactory.new('action' => 'mention') action.should be_a Twitter::Mention