social_profile 0.2.2 → 0.3.0
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.
- checksums.yaml +4 -4
- data/lib/social_profile/people/facebook.rb +33 -5
- data/lib/social_profile/people/instagram.rb +21 -0
- data/lib/social_profile/people/vkontakte.rb +21 -0
- data/lib/social_profile/person.rb +1 -0
- data/lib/social_profile/version.rb +1 -1
- data/lib/social_profile.rb +1 -0
- data/social_profile.gemspec +2 -1
- data/spec/mock_json/facebook/mutual_friends.json +1008 -0
- data/spec/mock_json/instagram/last_posts.json +367 -0
- data/spec/mock_json/vkontakte/mutual_friends.json +3828 -0
- data/spec/mock_json/vkontakte/post.json +74 -0
- data/spec/people/facebook_spec.rb +13 -4
- data/spec/people/instagram_spec.rb +27 -0
- data/spec/people/vkontakte_spec.rb +15 -0
- metadata +46 -20
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fdac7e14e4ac53d6ed004757214c21d530ee41c8
         | 
| 4 | 
            +
              data.tar.gz: bf33b21598dc7bf2a1615c5ee1c3385842a406f0
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9647a224c9e7d0de76ffad852de0143a0bdee4fc66b11f0df6c51df645fb270673044f15e5a7a49c39d190490eb95216321727be8cb9dd33c61b990d479f4009
         | 
| 7 | 
            +
              data.tar.gz: 5095bf772342c7f5a6f5807edab3e58bb979d83140ccff35657d17e2762ab56f2eb49da8e93aab9ecba2a9d6887499af0974e395499870216ef4c4b03ae9d15f
         | 
| @@ -11,6 +11,13 @@ module SocialProfile | |
| 11 11 | 
             
                    "created_time",
         | 
| 12 12 | 
             
                    "shares"
         | 
| 13 13 | 
             
                  ]
         | 
| 14 | 
            +
                  POST_FIELDS = [
         | 
| 15 | 
            +
                    "comments.fields(created_time).limit(1).summary(true)", 
         | 
| 16 | 
            +
                    "likes.limit(1).fields(id).summary(true)",
         | 
| 17 | 
            +
                    "created_time",
         | 
| 18 | 
            +
                    "shares"
         | 
| 19 | 
            +
                  ]
         | 
| 20 | 
            +
                  MUTUAL_FRIENDS = "SELECT uid, mutual_friend_count FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1=me()) ORDER BY mutual_friend_count"
         | 
| 14 21 |  | 
| 15 22 | 
             
                  # Find album by id
         | 
| 16 23 | 
             
                  def fetch_album(album_id)
         | 
| @@ -31,7 +38,7 @@ module SocialProfile | |
| 31 38 | 
             
                  # Get followers count
         | 
| 32 39 | 
             
                  #
         | 
| 33 40 | 
             
                  def followers_count
         | 
| 34 | 
            -
                    @followers_count ||= followers(:limit => 1). | 
| 41 | 
            +
                    @followers_count ||= followers(:limit => 1).size
         | 
| 35 42 | 
             
                  end
         | 
| 36 43 |  | 
| 37 44 | 
             
                  def fetch_friends_count
         | 
| @@ -74,18 +81,18 @@ module SocialProfile | |
| 74 81 | 
             
                    iteration = 0
         | 
| 75 82 |  | 
| 76 83 | 
             
                    posts = collection = last_posts(limit, options)
         | 
| 77 | 
            -
                    return [] if posts.blank?
         | 
| 84 | 
            +
                    return [] if posts.blank? || posts.last.created_time.nil?
         | 
| 78 85 |  | 
| 79 86 | 
             
                    last_created_time = posts.last.created_time
         | 
| 80 87 |  | 
| 81 | 
            -
                    while last_created_time > date &&  | 
| 88 | 
            +
                    while !last_created_time.blank? && last_created_time > date && iteration < max_iteration
         | 
| 82 89 | 
             
                      iteration += 1
         | 
| 83 90 | 
             
                      collection = collection.next
         | 
| 84 91 | 
             
                      posts += collection
         | 
| 85 92 | 
             
                      last_created_time = posts.last.created_time
         | 
| 86 93 | 
             
                    end
         | 
| 87 94 |  | 
| 88 | 
            -
                    posts.select { |p| p.created_time > date }
         | 
| 95 | 
            +
                    posts.select { |p| p.created_time && p.created_time > date }
         | 
| 89 96 | 
             
                  end
         | 
| 90 97 |  | 
| 91 98 | 
             
                  # Get all friends list
         | 
| @@ -98,6 +105,9 @@ module SocialProfile | |
| 98 105 | 
             
                  # Get all followers list
         | 
| 99 106 | 
             
                  #
         | 
| 100 107 | 
             
                  def followers(options={})
         | 
| 108 | 
            +
                    # Not avaiable since 30.04.2015
         | 
| 109 | 
            +
                    return []
         | 
| 110 | 
            +
             | 
| 101 111 | 
             
                    limit = options[:limit] || 5000
         | 
| 102 112 | 
             
                    fetch_all = options[:fetch_all] || false
         | 
| 103 113 | 
             
                    iteration = 0
         | 
| @@ -116,6 +126,24 @@ module SocialProfile | |
| 116 126 | 
             
                    _followers
         | 
| 117 127 | 
             
                  end
         | 
| 118 128 |  | 
| 129 | 
            +
                  # Get post from feed with comments, shares and likes counters
         | 
| 130 | 
            +
                  #
         | 
| 131 | 
            +
                  def fetch_post(post_uid, options = {})
         | 
| 132 | 
            +
                    fields = options[:fields] || POST_FIELDS
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                    ::FbGraph::Post.fetch(post_uid, :fields => fields.join(","), :access_token => access_token)    
         | 
| 135 | 
            +
                  end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                  # Get friends list with mutual friends counter
         | 
| 138 | 
            +
                  #
         | 
| 139 | 
            +
                  def mutual_friends(options={})
         | 
| 140 | 
            +
                    response = FbGraph::Query.new(MUTUAL_FRIENDS).fetch(:access_token => access_token)
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                    return {} unless response.is_a?(Array)
         | 
| 143 | 
            +
                    
         | 
| 144 | 
            +
                    response.inject({}) {|h, a| h.merge!(a["uid"] => a["mutual_friend_count"]) }
         | 
| 145 | 
            +
                  end
         | 
| 146 | 
            +
             | 
| 119 147 | 
             
                  protected
         | 
| 120 148 |  | 
| 121 149 | 
             
                    def user
         | 
| @@ -123,4 +151,4 @@ module SocialProfile | |
| 123 151 | 
             
                    end
         | 
| 124 152 | 
             
                end
         | 
| 125 153 | 
             
              end
         | 
| 126 | 
            -
            end
         | 
| 154 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require "instagram"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module SocialProfile
         | 
| 4 | 
            +
              module People
         | 
| 5 | 
            +
                class Instagram < Person
         | 
| 6 | 
            +
                  POSTS_COUNT = 100
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def last_posts(options={})
         | 
| 9 | 
            +
                    limit = options[:limit] || POSTS_COUNT
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    client.user_recent_media count: limit
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  protected
         | 
| 15 | 
            +
                  
         | 
| 16 | 
            +
                    def client
         | 
| 17 | 
            +
                      ::Instagram.client(access_token: access_token)
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -167,6 +167,27 @@ module SocialProfile | |
| 167 167 |  | 
| 168 168 | 
             
                    fetch_all_method_items(:fetch_followers, options)
         | 
| 169 169 | 
             
                  end
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                  # Get post by id
         | 
| 172 | 
            +
                  #
         | 
| 173 | 
            +
                  def get_post(post_uid, options={})
         | 
| 174 | 
            +
                    options = {
         | 
| 175 | 
            +
                      :posts => post_uid,
         | 
| 176 | 
            +
                      :extended => 1
         | 
| 177 | 
            +
                    }.merge(options)
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                    user.wall.getById(options)
         | 
| 180 | 
            +
                  end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  # Get mutual friends (options target_uids is required)
         | 
| 183 | 
            +
                  #
         | 
| 184 | 
            +
                  def mutual_friends(options={})
         | 
| 185 | 
            +
                    response = user.friends.getMutual(options)
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    return {} unless response.is_a?(Array)
         | 
| 188 | 
            +
                    
         | 
| 189 | 
            +
                    response.inject({}) {|h, a| h.merge!(a["id"].to_s => a["common_count"]) }
         | 
| 190 | 
            +
                  end
         | 
| 170 191 |  | 
| 171 192 | 
             
                  protected
         | 
| 172 193 |  | 
    
        data/lib/social_profile.rb
    CHANGED
    
    | @@ -18,6 +18,7 @@ module SocialProfile | |
| 18 18 | 
             
                autoload :Facebook, "social_profile/people/facebook"
         | 
| 19 19 | 
             
                autoload :Vkontakte, "social_profile/people/vkontakte"
         | 
| 20 20 | 
             
                autoload :Twitter, "social_profile/people/twitter"
         | 
| 21 | 
            +
                autoload :Instagram, "social_profile/people/instagram"
         | 
| 21 22 | 
             
              end
         | 
| 22 23 |  | 
| 23 24 | 
             
              def self.get(auth_hash, options = {})
         | 
    
        data/social_profile.gemspec
    CHANGED
    
    | @@ -6,7 +6,7 @@ require 'social_profile/version' | |
| 6 6 | 
             
            Gem::Specification.new do |spec|
         | 
| 7 7 | 
             
              spec.name          = "social_profile"
         | 
| 8 8 | 
             
              spec.version       = SocialProfile::VERSION
         | 
| 9 | 
            -
              spec.authors       = ["Igor Galeta"]
         | 
| 9 | 
            +
              spec.authors       = ["Igor Galeta", "Pavel Galeta"]
         | 
| 10 10 | 
             
              spec.email         = ["galeta.igor@gmail.com"]
         | 
| 11 11 | 
             
              spec.description   = %q{Wrapper for Omniauth profile hash, post photo to album}
         | 
| 12 12 | 
             
              spec.summary       = %q{Wrapper for Omniauth profile hash}
         | 
| @@ -24,6 +24,7 @@ Gem::Specification.new do |spec| | |
| 24 24 | 
             
              spec.add_dependency "fb_graph", '~> 2.7.16'
         | 
| 25 25 | 
             
              spec.add_dependency "vkontakte", '~> 0.0.6'
         | 
| 26 26 | 
             
              spec.add_dependency "twitter", '~> 5.11.0'
         | 
| 27 | 
            +
              spec.add_dependency "instagram", '~> 1.1.6'
         | 
| 27 28 | 
             
              spec.add_dependency "httpclient"
         | 
| 28 29 | 
             
              spec.add_dependency "multi_json"
         | 
| 29 30 | 
             
            end
         |