RailsMug 0.0.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/.gitignore +17 -0
 - data/Gemfile +4 -0
 - data/LICENSE +22 -0
 - data/README.md +34 -0
 - data/RailsMug.gemspec +20 -0
 - data/Rakefile +5 -0
 - data/lib/RailsMug.rb +12 -0
 - data/lib/RailsMug/albums.rb +106 -0
 - data/lib/RailsMug/api_methods.rb +18 -0
 - data/lib/RailsMug/exceptions.rb +27 -0
 - data/lib/RailsMug/images.rb +41 -0
 - data/lib/RailsMug/model/album.rb +103 -0
 - data/lib/RailsMug/model/image.rb +183 -0
 - data/lib/RailsMug/record.rb +12 -0
 - data/lib/RailsMug/session.rb +43 -0
 - data/lib/RailsMug/version.rb +3 -0
 - data/spec/RailsMug_helper.rb +7 -0
 - data/spec/RailsMug_spec.rb +24 -0
 - data/spec/images_spec.rb +17 -0
 - data/spec/spec_helper.rb +11 -0
 - metadata +103 -0
 
    
        data/.gitignore
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2013 David Slone
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            MIT License
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 6 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 7 
     | 
    
         
            +
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 8 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 9 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 10 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 11 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 14 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 17 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 18 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 19 
     | 
    
         
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 20 
     | 
    
         
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 21 
     | 
    
         
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 22 
     | 
    
         
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # RailsMug
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            TODO: Write a gem description
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## Installation
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Add this line to your application's Gemfile:
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                gem 'RailsMug'
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            And then execute:
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                $ bundle
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            Or install it yourself as:
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                $ gem install RailsMug
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            Get all albums
         
     | 
| 
      
 22 
     | 
    
         
            +
            ```
         
     | 
| 
      
 23 
     | 
    
         
            +
            session = RailsMug::Session.new('APIKEY','APISECRET','TOKENKEY','TOKENSECRET')
         
     | 
| 
      
 24 
     | 
    
         
            +
            rails_mug = RailsMug::Albums.new(session)
         
     | 
| 
      
 25 
     | 
    
         
            +
            albums = rails_mug.get_albums
         
     | 
| 
      
 26 
     | 
    
         
            +
            ```
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            ## Contributing
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            1. Fork it
         
     | 
| 
      
 31 
     | 
    
         
            +
            2. Create your feature branch (`git checkout -b my-new-feature`)
         
     | 
| 
      
 32 
     | 
    
         
            +
            3. Commit your changes (`git commit -am 'Added some feature'`)
         
     | 
| 
      
 33 
     | 
    
         
            +
            4. Push to the branch (`git push origin my-new-feature`)
         
     | 
| 
      
 34 
     | 
    
         
            +
            5. Create new Pull Request
         
     | 
    
        data/RailsMug.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.expand_path('../lib/RailsMug/version', __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            Gem::Specification.new do |gem|
         
     | 
| 
      
 5 
     | 
    
         
            +
              gem.authors       = ["David Slone"]
         
     | 
| 
      
 6 
     | 
    
         
            +
              gem.email         = ["dbslone@gmail.com"]
         
     | 
| 
      
 7 
     | 
    
         
            +
              gem.description   = %q{Retrieve SmugMug photo list}
         
     | 
| 
      
 8 
     | 
    
         
            +
              gem.summary       = %q{This gem allows an authenticated user to retrieve the album and photo list from an album}
         
     | 
| 
      
 9 
     | 
    
         
            +
              gem.homepage      = ""
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              gem.files         = `git ls-files`.split($\)
         
     | 
| 
      
 12 
     | 
    
         
            +
              gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
         
     | 
| 
      
 13 
     | 
    
         
            +
              gem.test_files    = gem.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
      
 14 
     | 
    
         
            +
              gem.name          = "RailsMug"
         
     | 
| 
      
 15 
     | 
    
         
            +
              gem.require_paths = ["lib"]
         
     | 
| 
      
 16 
     | 
    
         
            +
              gem.version       = RailsMug::VERSION
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              gem.add_development_dependency "rspec", "~> 2.6"
         
     | 
| 
      
 19 
     | 
    
         
            +
              gem.add_development_dependency "oauth"
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
    
        data/Rakefile
    ADDED
    
    
    
        data/lib/RailsMug.rb
    ADDED
    
    | 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "RailsMug/version"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "RailsMug/session"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "RailsMug/exceptions"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "RailsMug/albums"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "RailsMug/images"
         
     | 
| 
      
 6 
     | 
    
         
            +
            require "RailsMug/record"
         
     | 
| 
      
 7 
     | 
    
         
            +
            require "RailsMug/model/album"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require "RailsMug/model/image"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 11 
     | 
    
         
            +
              # Your code goes here...
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,106 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 2 
     | 
    
         
            +
            	class Albums
         
     | 
| 
      
 3 
     | 
    
         
            +
            		attr_accessor :albums
         
     | 
| 
      
 4 
     | 
    
         
            +
            		attr_accessor :images
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            		# Initialize Albums
         
     | 
| 
      
 7 
     | 
    
         
            +
            		#
         
     | 
| 
      
 8 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 9 
     | 
    
         
            +
            		# @params {RailsMug::Session}
         
     | 
| 
      
 10 
     | 
    
         
            +
            		def initialize railsmug_session
         
     | 
| 
      
 11 
     | 
    
         
            +
            			raise RailsMug::SessionError, "Invalid Session (session cannot be nil)" if railsmug_session.nil?
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            			self.albums = []
         
     | 
| 
      
 14 
     | 
    
         
            +
            			self.images = []
         
     | 
| 
      
 15 
     | 
    
         
            +
            			@access_token = railsmug_session.accesstoken
         
     | 
| 
      
 16 
     | 
    
         
            +
            		end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            		# Retrieve all albums for the current user
         
     | 
| 
      
 19 
     | 
    
         
            +
            		#
         
     | 
| 
      
 20 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 21 
     | 
    
         
            +
            		def get_albums
         
     | 
| 
      
 22 
     | 
    
         
            +
            			response = @access_token.get('/api/json/1.3.0/?method=smugmug.albums.get')
         
     | 
| 
      
 23 
     | 
    
         
            +
            			json_response = JSON.parse(response.body)
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            			raise RailsMug::AlbumError, "SmugMug Error: #{json_response['code']} - #{json_response['message']}" if json_response['stat'] == "fail"
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            			json_response['Albums'].each do |a|
         
     | 
| 
      
 28 
     | 
    
         
            +
            				sub_category = {}
         
     | 
| 
      
 29 
     | 
    
         
            +
            				sub_category = { :id => a['SubCategory']['id'], :name => a['SubCategory']['Name'] } unless a['SubCategory'].nil?
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            				album_info = get_album_info a['id'], a['Key']
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            				album = RailsMug::Model::Album.new(
         
     | 
| 
      
 34 
     | 
    
         
            +
            					:access_token => @access_token,
         
     | 
| 
      
 35 
     | 
    
         
            +
            					:id => a['id'],
         
     | 
| 
      
 36 
     | 
    
         
            +
            					:title => a['Title'],
         
     | 
| 
      
 37 
     | 
    
         
            +
            					:key => a['Key'],
         
     | 
| 
      
 38 
     | 
    
         
            +
            					:category => { :id => a['Category']['id'], :name => a['Category']['Name']},
         
     | 
| 
      
 39 
     | 
    
         
            +
            					:sub_category => sub_category,
         
     | 
| 
      
 40 
     | 
    
         
            +
            					:backprinting => album_info['Album']['Backprinting'],
         
     | 
| 
      
 41 
     | 
    
         
            +
            					:boutique_packaging => album_info['Album']['BoutiquePackaging'],
         
     | 
| 
      
 42 
     | 
    
         
            +
            					:can_rank => album_info['Album']['CanRank'],
         
     | 
| 
      
 43 
     | 
    
         
            +
            					:clean => album_info['Album']['Clean'],
         
     | 
| 
      
 44 
     | 
    
         
            +
            					:color_correction => album_info['Album']['ColorCorrection'],
         
     | 
| 
      
 45 
     | 
    
         
            +
            					:comments => album_info['Album']['Comments'],
         
     | 
| 
      
 46 
     | 
    
         
            +
            					:description => album_info['Album']['Description'],
         
     | 
| 
      
 47 
     | 
    
         
            +
            					:exif => album_info['Album']['EXIF'],
         
     | 
| 
      
 48 
     | 
    
         
            +
            					:external => album_info['Album']['External'],
         
     | 
| 
      
 49 
     | 
    
         
            +
            					:family_edit => album_info['Album']['FamilyEdit'],
         
     | 
| 
      
 50 
     | 
    
         
            +
            					:filenames => album_info['Album']['Filenames'],
         
     | 
| 
      
 51 
     | 
    
         
            +
            					:friend_edit => album_info['Album']['FriendEdit'],
         
     | 
| 
      
 52 
     | 
    
         
            +
            					:geography => album_info['Album']['Geography'],
         
     | 
| 
      
 53 
     | 
    
         
            +
            					:guest_upload_url => album_info['Album']['GuestUploadURL'],
         
     | 
| 
      
 54 
     | 
    
         
            +
            					:header => album_info['Album']['Header'],
         
     | 
| 
      
 55 
     | 
    
         
            +
            					:hide_owner => album_info['Album']['HideOwner'],
         
     | 
| 
      
 56 
     | 
    
         
            +
            					:hightlight => album_info['Album']['Highlight'],
         
     | 
| 
      
 57 
     | 
    
         
            +
            					:image_count => album_info['Album']['ImageCount'],
         
     | 
| 
      
 58 
     | 
    
         
            +
            					:keywords => album_info['Album']['Keywords'],
         
     | 
| 
      
 59 
     | 
    
         
            +
            					:url => album_info['Album']['URL']
         
     | 
| 
      
 60 
     | 
    
         
            +
            				)
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            				self.albums << album
         
     | 
| 
      
 63 
     | 
    
         
            +
            			end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            			self.albums
         
     | 
| 
      
 66 
     | 
    
         
            +
            		end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            		# Retrieve the information for an album.
         
     | 
| 
      
 69 
     | 
    
         
            +
            		#
         
     | 
| 
      
 70 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 71 
     | 
    
         
            +
            		# @param [Integer] album_id The ID for a specific album.
         
     | 
| 
      
 72 
     | 
    
         
            +
            		# @param [String] album_key The key for a specific album.
         
     | 
| 
      
 73 
     | 
    
         
            +
            		# @param [Hash] opts Extra parameters for retrieving album information
         
     | 
| 
      
 74 
     | 
    
         
            +
            		# @option [String] password The password for an album.
         
     | 
| 
      
 75 
     | 
    
         
            +
            		# @return [Hash] Returns a JSON parsed hash of the response
         
     | 
| 
      
 76 
     | 
    
         
            +
            		def get_album_info album_id, album_key, opts = {}
         
     | 
| 
      
 77 
     | 
    
         
            +
            			response = @access_token.get("/api/json/1.3.0/?method=smugmug.albums.getInfo&AlbumID=#{album_id}&AlbumKey=#{album_key}")
         
     | 
| 
      
 78 
     | 
    
         
            +
            			json_response = JSON.parse(response.body)
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            			raise RailsMug::AlbumError, "SmugMug albums.getInfo Error: #{json_response['code']} - #{json_response['message']}" if json_response['stat'] == "fail"
         
     | 
| 
      
 81 
     | 
    
         
            +
            			
         
     | 
| 
      
 82 
     | 
    
         
            +
            			json_response
         
     | 
| 
      
 83 
     | 
    
         
            +
            		end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            		# Retrieve a list of images for an album
         
     | 
| 
      
 86 
     | 
    
         
            +
            		# 
         
     | 
| 
      
 87 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 88 
     | 
    
         
            +
            		# @param {RailsMug::Model::Album} album The album object to find photos for.
         
     | 
| 
      
 89 
     | 
    
         
            +
            		def get_album_photos &album
         
     | 
| 
      
 90 
     | 
    
         
            +
            			response = @access_token.get("/api/json/1.3.0/?method=smugmug.images.get&AlbumID=#{album.id}&AlbumKey=#{album.key}")
         
     | 
| 
      
 91 
     | 
    
         
            +
            			json_response = JSON.parse(response.body)
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
            			raise RailsMug::AlbumError, "SmugMug images.get Error: #{json_response['code']} - #{json_response['message']}" if json_response['stat'] == "fail"
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            			json_response['Album']['Images'].each do |img|
         
     | 
| 
      
 96 
     | 
    
         
            +
            				img = RailsMug::Model::Image.new(
         
     | 
| 
      
 97 
     | 
    
         
            +
            					:id => img['id'],
         
     | 
| 
      
 98 
     | 
    
         
            +
            					:key => img['Key']
         
     | 
| 
      
 99 
     | 
    
         
            +
            				)
         
     | 
| 
      
 100 
     | 
    
         
            +
            				img.get_photo_info @access_token
         
     | 
| 
      
 101 
     | 
    
         
            +
            				album.add_image img
         
     | 
| 
      
 102 
     | 
    
         
            +
            			end
         
     | 
| 
      
 103 
     | 
    
         
            +
            		end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
            	end
         
     | 
| 
      
 106 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 2 
     | 
    
         
            +
            	API_METHODS = {
         
     | 
| 
      
 3 
     | 
    
         
            +
            		"accounts" => {"browse" => true},
         
     | 
| 
      
 4 
     | 
    
         
            +
            		"albums" => {"applyWatermark" => true, "browse" => true, "changeSettings" => true, "comments" => true, "create" => true, "delete" => true, "get" => true, "getInfo" => true, "getStats" => true, "removeWatermark" => true, "reSort" => true},
         
     | 
| 
      
 5 
     | 
    
         
            +
            		"albumtemplates" => {"changeSettings" => true, "create" => true, "delete" => true, "get" => true}, "auth" => {"checkAccessToken" => true, "getAccessToken" => true, "getRequestToken" => true},
         
     | 
| 
      
 6 
     | 
    
         
            +
            		"categories" => {"create" => true, "delete" => true, "get" => true, "rename" => true}, "communities" => {"get" => true}, "coupons" => {"create" => true, "get" => true, "getInfo" => true, "modify" => true, "restrictions" => true},
         
     | 
| 
      
 7 
     | 
    
         
            +
            		"family" => {"add" => true, "get" => true, "remove" => true, "removeAll" => true}, "fans" => {"get" => true}, "featured" => {"albums" => true}, "friends" => {"add" => true, "get" => true, "remove" => true, "removeAll" => true},
         
     | 
| 
      
 8 
     | 
    
         
            +
            		"images" => {"applyWatermark" => true, "changePosition" => true, "changeSettings" => true, "collect" => true, "comments" => true, "crop" => true, "delete" => true, "get" => true, "getEXIF" => true, "getInfo" => true, "getStats" => true, "getURLs" => true, "removeWatermark" => true, "rotate" => true, "uploadFromURL" => true, "zoomThumbnail" => true},
         
     | 
| 
      
 9 
     | 
    
         
            +
            		"printmarks" => {"create" => true, "delete" => true, "get" => true, "getInfo" => true, "modify" => true},
         
     | 
| 
      
 10 
     | 
    
         
            +
            		"service" => {"ping" => true},
         
     | 
| 
      
 11 
     | 
    
         
            +
            		"sharegroups" => {"albums" => true, "browse" => true, "create" => true, "delete" => true, "get" => true, "getInfo" => true, "modify" => true},
         
     | 
| 
      
 12 
     | 
    
         
            +
            		"styles" => {"getTemplates" => true},
         
     | 
| 
      
 13 
     | 
    
         
            +
            		"subcategories" => {"create" => true, "delete" => true, "get" => true, "getAll" => true, "rename" => true},
         
     | 
| 
      
 14 
     | 
    
         
            +
            		"themes" => {"get" => true},
         
     | 
| 
      
 15 
     | 
    
         
            +
            		"users" => {"getInfo" => true, "getStats" => true, "getTree" => true},
         
     | 
| 
      
 16 
     | 
    
         
            +
            		"watermarks" => {"changeSettings" => true, "create" => true, "delete" => true, "get" => true, "getInfo" => true}
         
     | 
| 
      
 17 
     | 
    
         
            +
            	}
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            	# Generic RailsMug error class for all RailsMug errors
         
     | 
| 
      
 4 
     | 
    
         
            +
            	#
         
     | 
| 
      
 5 
     | 
    
         
            +
            	# @author David Slone
         
     | 
| 
      
 6 
     | 
    
         
            +
            	class RailsMugError < StandardError
         
     | 
| 
      
 7 
     | 
    
         
            +
            	end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            	# RailsMug Session Error
         
     | 
| 
      
 10 
     | 
    
         
            +
            	#
         
     | 
| 
      
 11 
     | 
    
         
            +
            	# @author David Slone
         
     | 
| 
      
 12 
     | 
    
         
            +
            	class SessionError < StandardError
         
     | 
| 
      
 13 
     | 
    
         
            +
            	end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            	# RailsMug Album Error
         
     | 
| 
      
 16 
     | 
    
         
            +
            	#
         
     | 
| 
      
 17 
     | 
    
         
            +
            	# @author David Slone
         
     | 
| 
      
 18 
     | 
    
         
            +
            	class AlbumError < StandardError
         
     | 
| 
      
 19 
     | 
    
         
            +
            	end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            	# RailsMug Images Error
         
     | 
| 
      
 22 
     | 
    
         
            +
            	#
         
     | 
| 
      
 23 
     | 
    
         
            +
            	# @author David Slone
         
     | 
| 
      
 24 
     | 
    
         
            +
            	class ImagesError < StandardError
         
     | 
| 
      
 25 
     | 
    
         
            +
            	end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,41 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 2 
     | 
    
         
            +
            	class Images
         
     | 
| 
      
 3 
     | 
    
         
            +
            		attr_accessor :images
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            		# Initialize Images
         
     | 
| 
      
 6 
     | 
    
         
            +
            		#
         
     | 
| 
      
 7 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 8 
     | 
    
         
            +
            		def initialize railsmug_session
         
     | 
| 
      
 9 
     | 
    
         
            +
            			raise RailsMug::SessionError, "Invalid Session (session cannot be nil)" if railsmug_session.nil?
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            			self.images = []
         
     | 
| 
      
 12 
     | 
    
         
            +
            			@access_token = railsmug_session.accesstoken
         
     | 
| 
      
 13 
     | 
    
         
            +
            		end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            		# Get all images for an Album
         
     | 
| 
      
 16 
     | 
    
         
            +
            		#
         
     | 
| 
      
 17 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 18 
     | 
    
         
            +
            		# @param [Integer] album_id The ID for the album
         
     | 
| 
      
 19 
     | 
    
         
            +
            		# @param [String] album_key The key for the album
         
     | 
| 
      
 20 
     | 
    
         
            +
            		def get_images album_id, album_key, opts = {}
         
     | 
| 
      
 21 
     | 
    
         
            +
            			raise RailsMug::ImagesError, "album_id is required." if album_id.nil?
         
     | 
| 
      
 22 
     | 
    
         
            +
            			raise RailsMug::ImagesError, "album_key is required." if album_key.nil?
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            			response = @access_token.get("/api/json/1.3.0/?method=smugmug.images.get&AlbumID=#{album_id}&AlbumKey=#{album_key}")
         
     | 
| 
      
 25 
     | 
    
         
            +
            			json_response = JSON.parse(response.body)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            			raise RailsMug::ImagesError, "SmugMug images.get Error: #{json_response['code']} - #{json_response['message']}" if json_response['stat'] == "fail"
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            			json_response['Album']['Images'].each do |img|
         
     | 
| 
      
 30 
     | 
    
         
            +
            				img = RailsMug::Model::Image.new(
         
     | 
| 
      
 31 
     | 
    
         
            +
            					:id => img['id'],
         
     | 
| 
      
 32 
     | 
    
         
            +
            					:key => img['Key']
         
     | 
| 
      
 33 
     | 
    
         
            +
            				)
         
     | 
| 
      
 34 
     | 
    
         
            +
            				img.get_photo_info @access_token unless opts[:no_info]
         
     | 
| 
      
 35 
     | 
    
         
            +
            				self.images << img
         
     | 
| 
      
 36 
     | 
    
         
            +
            			end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            			self.images
         
     | 
| 
      
 39 
     | 
    
         
            +
            		end
         
     | 
| 
      
 40 
     | 
    
         
            +
            	end
         
     | 
| 
      
 41 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,103 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 2 
     | 
    
         
            +
            	class Model
         
     | 
| 
      
 3 
     | 
    
         
            +
            		class Album < RailsMug::Record
         
     | 
| 
      
 4 
     | 
    
         
            +
            			# The Id for this album
         
     | 
| 
      
 5 
     | 
    
         
            +
            			attr_reader :id
         
     | 
| 
      
 6 
     | 
    
         
            +
            			# The key for this album
         
     | 
| 
      
 7 
     | 
    
         
            +
            			attr_reader :key
         
     | 
| 
      
 8 
     | 
    
         
            +
            			# The category that this album belongs to
         
     | 
| 
      
 9 
     | 
    
         
            +
            			attr_reader :category
         
     | 
| 
      
 10 
     | 
    
         
            +
            			# The sub category that this album belongs to
         
     | 
| 
      
 11 
     | 
    
         
            +
            			attr_reader :sub_category
         
     | 
| 
      
 12 
     | 
    
         
            +
            			# The title for this album
         
     | 
| 
      
 13 
     | 
    
         
            +
            			attr_reader :title
         
     | 
| 
      
 14 
     | 
    
         
            +
            			# The text to be printed on the back of prints purchased from this album
         
     | 
| 
      
 15 
     | 
    
         
            +
            			attr_reader :backprinting
         
     | 
| 
      
 16 
     | 
    
         
            +
            			# Enable boutique packaging for orders from this album
         
     | 
| 
      
 17 
     | 
    
         
            +
            			attr_reader :boutique_packaging
         
     | 
| 
      
 18 
     | 
    
         
            +
            			# Allow images from this album to be ranked using PhotoRank
         
     | 
| 
      
 19 
     | 
    
         
            +
            			attr_reader :can_rank
         
     | 
| 
      
 20 
     | 
    
         
            +
            			# Hide the Description and LastUpdated for this album on the homepage and category pages
         
     | 
| 
      
 21 
     | 
    
         
            +
            			attr_reader :clean
         
     | 
| 
      
 22 
     | 
    
         
            +
            			# The color correction setting for this album (0 - No, 1 - Yes, 2 - Inherit)
         
     | 
| 
      
 23 
     | 
    
         
            +
            			attr_reader :color_correction
         
     | 
| 
      
 24 
     | 
    
         
            +
            			# Allow visitors to leave comments on this album
         
     | 
| 
      
 25 
     | 
    
         
            +
            			attr_reader :comments
         
     | 
| 
      
 26 
     | 
    
         
            +
            			# The community that this album belongs to.
         
     | 
| 
      
 27 
     | 
    
         
            +
            			attr_reader :community
         
     | 
| 
      
 28 
     | 
    
         
            +
            			# The description for this album
         
     | 
| 
      
 29 
     | 
    
         
            +
            			attr_reader :description
         
     | 
| 
      
 30 
     | 
    
         
            +
            			# Allow EXIF data to be viewed for images from this album
         
     | 
| 
      
 31 
     | 
    
         
            +
            			attr_reader :exif
         
     | 
| 
      
 32 
     | 
    
         
            +
            			# Allow images from this album to be linked externally outside SmugMug
         
     | 
| 
      
 33 
     | 
    
         
            +
            			attr_reader :external
         
     | 
| 
      
 34 
     | 
    
         
            +
            			# Allow family to edit the captions and keywords of the images in this album
         
     | 
| 
      
 35 
     | 
    
         
            +
            			attr_reader :family_edit
         
     | 
| 
      
 36 
     | 
    
         
            +
            			# Show filename for images uploaded with no caption to this album
         
     | 
| 
      
 37 
     | 
    
         
            +
            			attr_reader :filenames
         
     | 
| 
      
 38 
     | 
    
         
            +
            			# Allow friends to edit the captions and keywords of the images in this album
         
     | 
| 
      
 39 
     | 
    
         
            +
            			attr_reader :friend_edit
         
     | 
| 
      
 40 
     | 
    
         
            +
            			# Enable mapping features for this album
         
     | 
| 
      
 41 
     | 
    
         
            +
            			attr_reader :geography
         
     | 
| 
      
 42 
     | 
    
         
            +
            			# The URL to allow guests to upload to this gallery
         
     | 
| 
      
 43 
     | 
    
         
            +
            			attr_reader :guest_upload_url
         
     | 
| 
      
 44 
     | 
    
         
            +
            			# Default this album to the standard SmugMug appearance. (false - Custom, true - SmugMug)
         
     | 
| 
      
 45 
     | 
    
         
            +
            			attr_reader :header
         
     | 
| 
      
 46 
     | 
    
         
            +
            			# Hide the owner of this album.
         
     | 
| 
      
 47 
     | 
    
         
            +
            			attr_reader :hide_owner
         
     | 
| 
      
 48 
     | 
    
         
            +
            			# The highlight image for this album {id, Key, Type}
         
     | 
| 
      
 49 
     | 
    
         
            +
            			attr_reader :highlight
         
     | 
| 
      
 50 
     | 
    
         
            +
            			# The number of images in this album
         
     | 
| 
      
 51 
     | 
    
         
            +
            			attr_reader :image_count
         
     | 
| 
      
 52 
     | 
    
         
            +
            			# The meta keyword string for this album
         
     | 
| 
      
 53 
     | 
    
         
            +
            			attr_reader :keywords
         
     | 
| 
      
 54 
     | 
    
         
            +
            			# The URL for this album
         
     | 
| 
      
 55 
     | 
    
         
            +
            			attr_reader :url
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            			attr_accessor :images
         
     | 
| 
      
 58 
     | 
    
         
            +
            			attr_accessor :access_token
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            			# Display Album in JSON format
         
     | 
| 
      
 61 
     | 
    
         
            +
            			#
         
     | 
| 
      
 62 
     | 
    
         
            +
            			# @author David Slone
         
     | 
| 
      
 63 
     | 
    
         
            +
            			def to_json
         
     | 
| 
      
 64 
     | 
    
         
            +
            				ret = {
         
     | 
| 
      
 65 
     | 
    
         
            +
            					:id => self.id,
         
     | 
| 
      
 66 
     | 
    
         
            +
            					:key => self.key,
         
     | 
| 
      
 67 
     | 
    
         
            +
            					:category => self.category,
         
     | 
| 
      
 68 
     | 
    
         
            +
            					:sub_category => self.sub_category,
         
     | 
| 
      
 69 
     | 
    
         
            +
            					:title => self.title,
         
     | 
| 
      
 70 
     | 
    
         
            +
            					:images => self.images
         
     | 
| 
      
 71 
     | 
    
         
            +
            				}
         
     | 
| 
      
 72 
     | 
    
         
            +
            			end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            			# Retrieve a list of images for an album
         
     | 
| 
      
 75 
     | 
    
         
            +
            			# 
         
     | 
| 
      
 76 
     | 
    
         
            +
            			# @author David Slone
         
     | 
| 
      
 77 
     | 
    
         
            +
            			# @param {RailsMug::Model::Album} album The album object to find photos for.
         
     | 
| 
      
 78 
     | 
    
         
            +
            			def get_photos
         
     | 
| 
      
 79 
     | 
    
         
            +
            				response = self.access_token.get("/api/json/1.3.0/?method=smugmug.images.get&AlbumID=#{self.id}&AlbumKey=#{self.key}")
         
     | 
| 
      
 80 
     | 
    
         
            +
            				json_response = JSON.parse(response.body)
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            				raise RailsMug::AlbumError, "SmugMug images.get Error: #{json_response['code']} - #{json_response['message']}" if json_response['stat'] == "fail"
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            				json_response['Album']['Images'].each do |img|
         
     | 
| 
      
 85 
     | 
    
         
            +
            					img = RailsMug::Model::Image.new(
         
     | 
| 
      
 86 
     | 
    
         
            +
            						:id => img['id'],
         
     | 
| 
      
 87 
     | 
    
         
            +
            						:key => img['Key']
         
     | 
| 
      
 88 
     | 
    
         
            +
            					)
         
     | 
| 
      
 89 
     | 
    
         
            +
            					img.get_photo_info @access_token
         
     | 
| 
      
 90 
     | 
    
         
            +
            					self.add_image img
         
     | 
| 
      
 91 
     | 
    
         
            +
            				end
         
     | 
| 
      
 92 
     | 
    
         
            +
            			end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            			# Add image to album
         
     | 
| 
      
 95 
     | 
    
         
            +
            			#
         
     | 
| 
      
 96 
     | 
    
         
            +
            			# @author David Slone
         
     | 
| 
      
 97 
     | 
    
         
            +
            			def add_image image
         
     | 
| 
      
 98 
     | 
    
         
            +
            				self.images = [] if self.images.nil?
         
     | 
| 
      
 99 
     | 
    
         
            +
            				self.images << image
         
     | 
| 
      
 100 
     | 
    
         
            +
            			end
         
     | 
| 
      
 101 
     | 
    
         
            +
            		end
         
     | 
| 
      
 102 
     | 
    
         
            +
            	end
         
     | 
| 
      
 103 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,183 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 2 
     | 
    
         
            +
            	class Model
         
     | 
| 
      
 3 
     | 
    
         
            +
            		class Image < RailsMug::Record
         
     | 
| 
      
 4 
     | 
    
         
            +
            			# The Id for this image
         
     | 
| 
      
 5 
     | 
    
         
            +
            			attr_reader :id
         
     | 
| 
      
 6 
     | 
    
         
            +
            			# They key for this image
         
     | 
| 
      
 7 
     | 
    
         
            +
            			attr_reader :key
         
     | 
| 
      
 8 
     | 
    
         
            +
            			# The altitude at which this image (or video) was taken.
         
     | 
| 
      
 9 
     | 
    
         
            +
            			attr_accessor :altitude
         
     | 
| 
      
 10 
     | 
    
         
            +
            			# The caption for this image
         
     | 
| 
      
 11 
     | 
    
         
            +
            			attr_accessor :caption
         
     | 
| 
      
 12 
     | 
    
         
            +
            			# The date for this video
         
     | 
| 
      
 13 
     | 
    
         
            +
            			attr_accessor :date
         
     | 
| 
      
 14 
     | 
    
         
            +
            			# The filename for this image
         
     | 
| 
      
 15 
     | 
    
         
            +
            			attr_accessor :filename
         
     | 
| 
      
 16 
     | 
    
         
            +
            			# The original format of this image
         
     | 
| 
      
 17 
     | 
    
         
            +
            			attr_accessor :format
         
     | 
| 
      
 18 
     | 
    
         
            +
            			# The height of the crop
         
     | 
| 
      
 19 
     | 
    
         
            +
            			attr_accessor :height
         
     | 
| 
      
 20 
     | 
    
         
            +
            			# The visibility of this image
         
     | 
| 
      
 21 
     | 
    
         
            +
            			attr_accessor :hidden
         
     | 
| 
      
 22 
     | 
    
         
            +
            			# The keyword string for this image
         
     | 
| 
      
 23 
     | 
    
         
            +
            			attr_accessor :keywords
         
     | 
| 
      
 24 
     | 
    
         
            +
            			# The url for the Large version of this image
         
     | 
| 
      
 25 
     | 
    
         
            +
            			attr_accessor :large_url
         
     | 
| 
      
 26 
     | 
    
         
            +
            			# The date that this image was last updated
         
     | 
| 
      
 27 
     | 
    
         
            +
            			attr_accessor :last_updated
         
     | 
| 
      
 28 
     | 
    
         
            +
            			# The latitude at which this image was taken
         
     | 
| 
      
 29 
     | 
    
         
            +
            			attr_accessor :latitude
         
     | 
| 
      
 30 
     | 
    
         
            +
            			# The lightbox url for this image
         
     | 
| 
      
 31 
     | 
    
         
            +
            			attr_accessor :lightbox_url
         
     | 
| 
      
 32 
     | 
    
         
            +
            			# Longitude at which the image was taken
         
     | 
| 
      
 33 
     | 
    
         
            +
            			attr_accessor :longitude
         
     | 
| 
      
 34 
     | 
    
         
            +
            			# The MD5 sum for this image
         
     | 
| 
      
 35 
     | 
    
         
            +
            			attr_accessor :md5_sum
         
     | 
| 
      
 36 
     | 
    
         
            +
            			# The url for the Medium version of this image
         
     | 
| 
      
 37 
     | 
    
         
            +
            			attr_accessor :medium_url
         
     | 
| 
      
 38 
     | 
    
         
            +
            			# The url for the Original version of this image
         
     | 
| 
      
 39 
     | 
    
         
            +
            			attr_accessor :original_url
         
     | 
| 
      
 40 
     | 
    
         
            +
            			# The position of this image within the album
         
     | 
| 
      
 41 
     | 
    
         
            +
            			attr_accessor :position
         
     | 
| 
      
 42 
     | 
    
         
            +
            			# The current revision of this image
         
     | 
| 
      
 43 
     | 
    
         
            +
            			attr_accessor :serial
         
     | 
| 
      
 44 
     | 
    
         
            +
            			# The size of this image in bytes
         
     | 
| 
      
 45 
     | 
    
         
            +
            			attr_accessor :size
         
     | 
| 
      
 46 
     | 
    
         
            +
            			# The url for the Small version of this image
         
     | 
| 
      
 47 
     | 
    
         
            +
            			attr_accessor :small_url
         
     | 
| 
      
 48 
     | 
    
         
            +
            			# The status for this image
         
     | 
| 
      
 49 
     | 
    
         
            +
            			attr_accessor :status
         
     | 
| 
      
 50 
     | 
    
         
            +
            			# The url for the Thumb version of this image
         
     | 
| 
      
 51 
     | 
    
         
            +
            			attr_accessor :thumb_url
         
     | 
| 
      
 52 
     | 
    
         
            +
            			# The url for the Tiny version of this image
         
     | 
| 
      
 53 
     | 
    
         
            +
            			attr_accessor :tiny_url
         
     | 
| 
      
 54 
     | 
    
         
            +
            			# The width of the crop
         
     | 
| 
      
 55 
     | 
    
         
            +
            			attr_accessor :width
         
     | 
| 
      
 56 
     | 
    
         
            +
            			# The url for the X2Large version of this image
         
     | 
| 
      
 57 
     | 
    
         
            +
            			attr_accessor :x2large_url
         
     | 
| 
      
 58 
     | 
    
         
            +
            			# The url for the X3Large version of this image
         
     | 
| 
      
 59 
     | 
    
         
            +
            			attr_accessor :x3large_url
         
     | 
| 
      
 60 
     | 
    
         
            +
            			# The url for the XLarge version of this image
         
     | 
| 
      
 61 
     | 
    
         
            +
            			attr_accessor :xlarge_url
         
     | 
| 
      
 62 
     | 
    
         
            +
            			# EXIF Data for this image
         
     | 
| 
      
 63 
     | 
    
         
            +
            			attr_accessor :exif
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            			# Retrieve information for an image
         
     | 
| 
      
 66 
     | 
    
         
            +
            			#
         
     | 
| 
      
 67 
     | 
    
         
            +
            			# @author David Slone
         
     | 
| 
      
 68 
     | 
    
         
            +
            			def get_photo_info access_token
         
     | 
| 
      
 69 
     | 
    
         
            +
            				response = access_token.get("/api/json/1.3.0/?method=smugmug.images.getInfo&ImageID=#{self.id}&ImageKey=#{self.key}")
         
     | 
| 
      
 70 
     | 
    
         
            +
            				json_response = JSON.parse(response.body)
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            				raise RailsMug::ImagesError, "SmugMug images.getInfo Error: #{json_response['code']} - #{json_response['message']}" if json_response['stat'] == "fail"
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            				self.altitude = json_response['Image']['Altitude']
         
     | 
| 
      
 75 
     | 
    
         
            +
            				self.caption = json_response['Image']['Caption']
         
     | 
| 
      
 76 
     | 
    
         
            +
            				self.date = json_response['Image']['Date']
         
     | 
| 
      
 77 
     | 
    
         
            +
            				self.filename = json_response['Image']['FileName']
         
     | 
| 
      
 78 
     | 
    
         
            +
            				self.format = json_response['Image']['Format']
         
     | 
| 
      
 79 
     | 
    
         
            +
            				self.height = json_response['Image']['Height']
         
     | 
| 
      
 80 
     | 
    
         
            +
            				self.hidden = json_response['Image']['Hidden']
         
     | 
| 
      
 81 
     | 
    
         
            +
            				self.keywords = json_response['Image']['Keywords']
         
     | 
| 
      
 82 
     | 
    
         
            +
            				self.large_url = json_response['Image']['LargeURL']
         
     | 
| 
      
 83 
     | 
    
         
            +
            				self.last_updated = json_response['Image']['LastUpdated']
         
     | 
| 
      
 84 
     | 
    
         
            +
            				self.latitude = json_response['Image']['Latitude']
         
     | 
| 
      
 85 
     | 
    
         
            +
            				self.md5_sum = json_response['Image']['MD5Sum']
         
     | 
| 
      
 86 
     | 
    
         
            +
            				self.medium_url = json_response['Image']['MediumURL']
         
     | 
| 
      
 87 
     | 
    
         
            +
            				self.original_url = json_response['Image']['OriginalURL']
         
     | 
| 
      
 88 
     | 
    
         
            +
            				self.position = json_response['Image']['Position']
         
     | 
| 
      
 89 
     | 
    
         
            +
            				self.serial = json_response['Image']['Serial']
         
     | 
| 
      
 90 
     | 
    
         
            +
            				self.size = json_response['Image']['Size']
         
     | 
| 
      
 91 
     | 
    
         
            +
            				self.small_url = json_response['Image']['SmallURL']
         
     | 
| 
      
 92 
     | 
    
         
            +
            				self.status = json_response['Image']['Status']
         
     | 
| 
      
 93 
     | 
    
         
            +
            				self.thumb_url = json_response['Image']['ThumbURL']
         
     | 
| 
      
 94 
     | 
    
         
            +
            				self.tiny_url = json_response['Image']['TinyURL']
         
     | 
| 
      
 95 
     | 
    
         
            +
            				self.width = json_response['Image']['Width']
         
     | 
| 
      
 96 
     | 
    
         
            +
            				self.x2large_url = json_response['Image']['X2LargeURL']
         
     | 
| 
      
 97 
     | 
    
         
            +
            				self.x3large_url = json_response['Image']['X3LargeURL']
         
     | 
| 
      
 98 
     | 
    
         
            +
            				self.xlarge_url = json_response['Image']['XLargeURL']
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
            				self.get_exif_data access_token
         
     | 
| 
      
 101 
     | 
    
         
            +
            			end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            			# Retrieve Photo EXIF data
         
     | 
| 
      
 104 
     | 
    
         
            +
            			#
         
     | 
| 
      
 105 
     | 
    
         
            +
            			# @author David Slone
         
     | 
| 
      
 106 
     | 
    
         
            +
            			# @param [Object] access_token
         
     | 
| 
      
 107 
     | 
    
         
            +
            			def get_exif_data access_token
         
     | 
| 
      
 108 
     | 
    
         
            +
            				response = access_token.get("/api/json/1.3.0/?method=smugmug.images.getEXIF&ImageID=#{self.id}&ImageKey=#{self.key}")
         
     | 
| 
      
 109 
     | 
    
         
            +
            				json_response = JSON.parse(response.body)
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
            				raise RailsMug::ImagesError, "SmugMug images.getEXIF Error: #{json_response['code']} - #{json_response['message']}" if json_response['stat'] == "fail"
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            				exif = {}
         
     | 
| 
      
 114 
     | 
    
         
            +
            				exif[:id] = json_response['Image']['id']
         
     | 
| 
      
 115 
     | 
    
         
            +
            				exif[:key] = json_response['Image']['Key']
         
     | 
| 
      
 116 
     | 
    
         
            +
            				exif[:aperture] = json_response['Image']['Aperture']
         
     | 
| 
      
 117 
     | 
    
         
            +
            				exif[:brightness] = json_response['Image']['Brightness']
         
     | 
| 
      
 118 
     | 
    
         
            +
            				exif[:ccd_width] = json_response['Image']['CCDWidth']
         
     | 
| 
      
 119 
     | 
    
         
            +
            				exif[:color_space] = json_response['Image']['ColorSpace']
         
     | 
| 
      
 120 
     | 
    
         
            +
            				exif[:compressed_bits_per_pixel] = json_response['Image']['CompressedBitsPerPixel']
         
     | 
| 
      
 121 
     | 
    
         
            +
            				exif[:contrast] = json_response['Image']['Contrast']
         
     | 
| 
      
 122 
     | 
    
         
            +
            				exif[:date_time] = json_response['Image']['DateTime']
         
     | 
| 
      
 123 
     | 
    
         
            +
            				exif[:date_time_digitized] = json_response['Image']['DateTimeDigitized']
         
     | 
| 
      
 124 
     | 
    
         
            +
            				exif[:date_time_original] = json_response['Image']['DateTimeOriginal']
         
     | 
| 
      
 125 
     | 
    
         
            +
            				exif[:digital_zoom_ratio] = json_response['Image']['DigitalZoomRatio']
         
     | 
| 
      
 126 
     | 
    
         
            +
            				exif[:exposure_bias_value] = json_response['Image']['ExposureBiasValue']
         
     | 
| 
      
 127 
     | 
    
         
            +
            				exif[:exposure_mode] = json_response['Image']['ExposureMode']
         
     | 
| 
      
 128 
     | 
    
         
            +
            				exif[:exposure_program] = json_response['Image']['ExposureProgram']
         
     | 
| 
      
 129 
     | 
    
         
            +
            				exif[:exposure_time] = json_response['Image']['ExposureTime']
         
     | 
| 
      
 130 
     | 
    
         
            +
            				exif[:flash] = json_response['Image']['Flash']
         
     | 
| 
      
 131 
     | 
    
         
            +
            				exif[:focal_length] = json_response['Image']['FocalLength']
         
     | 
| 
      
 132 
     | 
    
         
            +
            				exif[:iso] = json_response['Image']['ISO']
         
     | 
| 
      
 133 
     | 
    
         
            +
            				exif[:light_source] = json_response['Image']['LightSource']
         
     | 
| 
      
 134 
     | 
    
         
            +
            				exif[:make] = json_response['Image']['Make']
         
     | 
| 
      
 135 
     | 
    
         
            +
            				exif[:metering] = json_response['Image']['Metering']
         
     | 
| 
      
 136 
     | 
    
         
            +
            				exif[:model] = json_response['Image']['Model']
         
     | 
| 
      
 137 
     | 
    
         
            +
            				exif[:saturation] = json_response['Image']['Saturation']
         
     | 
| 
      
 138 
     | 
    
         
            +
            				exif[:sensing_method] = json_response['Image']['SensingMethod']
         
     | 
| 
      
 139 
     | 
    
         
            +
            				exif[:sharpness] = json_response['Image']['Sharpness']
         
     | 
| 
      
 140 
     | 
    
         
            +
            				exif[:subject_distance] = json_response['Image']['SubjectDistance']
         
     | 
| 
      
 141 
     | 
    
         
            +
            				exif[:subject_distance_range] = json_response['Image']['SubjectDistanceRange']
         
     | 
| 
      
 142 
     | 
    
         
            +
            				exif[:white_balance] = json_response['Image']['WhiteBalance']
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            				self.exif = exif
         
     | 
| 
      
 145 
     | 
    
         
            +
            			end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
            			# Convert class to JSON object
         
     | 
| 
      
 148 
     | 
    
         
            +
            			#
         
     | 
| 
      
 149 
     | 
    
         
            +
            			# @author David Slone
         
     | 
| 
      
 150 
     | 
    
         
            +
            			def to_json
         
     | 
| 
      
 151 
     | 
    
         
            +
            				ret = {}
         
     | 
| 
      
 152 
     | 
    
         
            +
            				ret[:altitude] = self.altitude
         
     | 
| 
      
 153 
     | 
    
         
            +
            				ret[:caption] = self.caption
         
     | 
| 
      
 154 
     | 
    
         
            +
            				ret[:date] = self.date
         
     | 
| 
      
 155 
     | 
    
         
            +
            				ret[:filename] = self.filename
         
     | 
| 
      
 156 
     | 
    
         
            +
            				ret[:format] = self.format
         
     | 
| 
      
 157 
     | 
    
         
            +
            				ret[:height] = self.height
         
     | 
| 
      
 158 
     | 
    
         
            +
            				ret[:hidden] = self.hidden
         
     | 
| 
      
 159 
     | 
    
         
            +
            				ret[:keywords] = self.keywords
         
     | 
| 
      
 160 
     | 
    
         
            +
            				ret[:large_url] = self.large_url
         
     | 
| 
      
 161 
     | 
    
         
            +
            				ret[:last_updated] = self.last_updated
         
     | 
| 
      
 162 
     | 
    
         
            +
            				ret[:latitude] = self.latitude
         
     | 
| 
      
 163 
     | 
    
         
            +
            				ret[:md5_sum] = self.md5_sum
         
     | 
| 
      
 164 
     | 
    
         
            +
            				ret[:medium_url] = self.medium_url
         
     | 
| 
      
 165 
     | 
    
         
            +
            				ret[:original_url] = self.original_url
         
     | 
| 
      
 166 
     | 
    
         
            +
            				ret[:position] = self.position
         
     | 
| 
      
 167 
     | 
    
         
            +
            				ret[:serial] = self.serial
         
     | 
| 
      
 168 
     | 
    
         
            +
            				ret[:size] = self.size
         
     | 
| 
      
 169 
     | 
    
         
            +
            				ret[:small_url] = self.small_url
         
     | 
| 
      
 170 
     | 
    
         
            +
            				ret[:status] = self.status
         
     | 
| 
      
 171 
     | 
    
         
            +
            				ret[:thumb_url] = self.thumb_url
         
     | 
| 
      
 172 
     | 
    
         
            +
            				ret[:tiny_url] = self.tiny_url
         
     | 
| 
      
 173 
     | 
    
         
            +
            				ret[:width] = self.width
         
     | 
| 
      
 174 
     | 
    
         
            +
            				ret[:x2large_url] = self.x2large_url
         
     | 
| 
      
 175 
     | 
    
         
            +
            				ret[:x3large_url] = self.x3large_url
         
     | 
| 
      
 176 
     | 
    
         
            +
            				ret[:xlarge_url] = self.xlarge_url
         
     | 
| 
      
 177 
     | 
    
         
            +
            				ret[:exif] = self.exif
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
            				ret
         
     | 
| 
      
 180 
     | 
    
         
            +
            			end
         
     | 
| 
      
 181 
     | 
    
         
            +
            		end
         
     | 
| 
      
 182 
     | 
    
         
            +
            	end
         
     | 
| 
      
 183 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'oauth'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module RailsMug
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            	# Class to establish a RailsMug session. Use it like this:
         
     | 
| 
      
 6 
     | 
    
         
            +
            	#
         
     | 
| 
      
 7 
     | 
    
         
            +
            	# 	client = RailsMug::Client.new("API KEY", "API SECRET")
         
     | 
| 
      
 8 
     | 
    
         
            +
            	# @author David Slone
         
     | 
| 
      
 9 
     | 
    
         
            +
            	class Session
         
     | 
| 
      
 10 
     | 
    
         
            +
            		attr :session
         
     | 
| 
      
 11 
     | 
    
         
            +
            		attr :accesstoken
         
     | 
| 
      
 12 
     | 
    
         
            +
            		
         
     | 
| 
      
 13 
     | 
    
         
            +
            		# Initialize the session
         
     | 
| 
      
 14 
     | 
    
         
            +
            		#
         
     | 
| 
      
 15 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 16 
     | 
    
         
            +
            		def initialize(api_key, api_secret, access_token, access_token_secret)
         
     | 
| 
      
 17 
     | 
    
         
            +
            			raise RailsMug::RailsMugError, "Missing parameter(api_key)" if api_key.nil? || api_key.length == 0
         
     | 
| 
      
 18 
     | 
    
         
            +
            			raise RailsMug::RailsMugError, "Missing parameter(api_secret)" if api_secret.nil? || api_secret.length == 0
         
     | 
| 
      
 19 
     | 
    
         
            +
            			raise RailsMug::RailsMugError, "Missing parameter(access_token)" if access_token.nil? || access_token.length == 0
         
     | 
| 
      
 20 
     | 
    
         
            +
            			raise RailsMug::RailsMugError, "Missing parameter(access_token_secret)" if access_token_secret.nil? || access_token_secret.length == 0
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            			@consumer = OAuth::Consumer.new(api_key, api_secret, :site => "https://api.smugmug.com/services", 
         
     | 
| 
      
 23 
     | 
    
         
            +
            				:request_token_path => "/oauth/getRequestToken.mg", :authorize_path => "/oauth/authorize.mg", 
         
     | 
| 
      
 24 
     | 
    
         
            +
            				:access_token_path => "/oauth/getAccessToken.mg")
         
     | 
| 
      
 25 
     | 
    
         
            +
            			@accesstoken = OAuth::AccessToken.new(@consumer, access_token, access_token_secret)
         
     | 
| 
      
 26 
     | 
    
         
            +
            		end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            		# Determine if session is valid
         
     | 
| 
      
 29 
     | 
    
         
            +
            		#
         
     | 
| 
      
 30 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 31 
     | 
    
         
            +
            		# @return [Boolean] Returns if the session is valid or not
         
     | 
| 
      
 32 
     | 
    
         
            +
            		def valid_session?
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            		end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            		# Method Missing
         
     | 
| 
      
 37 
     | 
    
         
            +
            		#
         
     | 
| 
      
 38 
     | 
    
         
            +
            		# @author David Slone
         
     | 
| 
      
 39 
     | 
    
         
            +
            		def method_missing(method_name, *args)
         
     | 
| 
      
 40 
     | 
    
         
            +
            			puts args
         
     | 
| 
      
 41 
     | 
    
         
            +
            		end
         
     | 
| 
      
 42 
     | 
    
         
            +
            	end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe RailsMug do
         
     | 
| 
      
 4 
     | 
    
         
            +
            	session = RailsMug::Session.new('<API KEY>','<API SECRET>','<ACCESS TOKEN>','<ACCESS TOKEN SECRET>')
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            	it "should create oauth session" do
         
     | 
| 
      
 7 
     | 
    
         
            +
            		session.should_not be_nil
         
     | 
| 
      
 8 
     | 
    
         
            +
            	end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            	it "should retrieve album list" do 
         
     | 
| 
      
 11 
     | 
    
         
            +
            		rails_mug = RailsMug::Albums.new(session)
         
     | 
| 
      
 12 
     | 
    
         
            +
            		albums = rails_mug.get_albums
         
     | 
| 
      
 13 
     | 
    
         
            +
            		albums.should_not be_nil
         
     | 
| 
      
 14 
     | 
    
         
            +
            	end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            	it "should get photos for an album" do
         
     | 
| 
      
 17 
     | 
    
         
            +
            		rails_mug = RailsMug::Albums.new(session)
         
     | 
| 
      
 18 
     | 
    
         
            +
            		albums = rails_mug.get_albums
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            		albums.each do |album|
         
     | 
| 
      
 21 
     | 
    
         
            +
            			album.get_photos
         
     | 
| 
      
 22 
     | 
    
         
            +
            		end
         
     | 
| 
      
 23 
     | 
    
         
            +
            	end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/images_spec.rb
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe RailsMug do
         
     | 
| 
      
 4 
     | 
    
         
            +
            	session = RailsMug::Session.new('<API KEY>','<API SECRET>','<ACCESS TOKEN>','<ACCESS TOKEN SECRET>')
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            	it "should get photos without detailed info" do
         
     | 
| 
      
 7 
     | 
    
         
            +
            		rails_mug = RailsMug::Images.new(session)
         
     | 
| 
      
 8 
     | 
    
         
            +
            		images = rails_mug.get_images 28536068, '4b4dGb', :no_info => true
         
     | 
| 
      
 9 
     | 
    
         
            +
            		images.should_not be_nil
         
     | 
| 
      
 10 
     | 
    
         
            +
            	end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            	it "should get photos with detailed info" do
         
     | 
| 
      
 13 
     | 
    
         
            +
            		rails_mug = RailsMug::Images.new(session)
         
     | 
| 
      
 14 
     | 
    
         
            +
            		rails_mug.get_images 28536068, '4b4dGb'
         
     | 
| 
      
 15 
     | 
    
         
            +
            		rails_mug.images.should_not be_nil
         
     | 
| 
      
 16 
     | 
    
         
            +
            	end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,103 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: RailsMug
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
      
 6 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 7 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 8 
     | 
    
         
            +
            - David Slone
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-03-21 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 18 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 19 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 20 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 21 
     | 
    
         
            +
                    version: '2.6'
         
     | 
| 
      
 22 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 23 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 25 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 26 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 27 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 29 
     | 
    
         
            +
                    version: '2.6'
         
     | 
| 
      
 30 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 31 
     | 
    
         
            +
              name: oauth
         
     | 
| 
      
 32 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 33 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 34 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 35 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 36 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 37 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 38 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 39 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 40 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 41 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 42 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 43 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 44 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 45 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 46 
     | 
    
         
            +
            description: Retrieve SmugMug photo list
         
     | 
| 
      
 47 
     | 
    
         
            +
            email:
         
     | 
| 
      
 48 
     | 
    
         
            +
            - dbslone@gmail.com
         
     | 
| 
      
 49 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 50 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 51 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 52 
     | 
    
         
            +
            files:
         
     | 
| 
      
 53 
     | 
    
         
            +
            - .gitignore
         
     | 
| 
      
 54 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 55 
     | 
    
         
            +
            - LICENSE
         
     | 
| 
      
 56 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 57 
     | 
    
         
            +
            - RailsMug.gemspec
         
     | 
| 
      
 58 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/RailsMug.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            - lib/RailsMug/albums.rb
         
     | 
| 
      
 61 
     | 
    
         
            +
            - lib/RailsMug/api_methods.rb
         
     | 
| 
      
 62 
     | 
    
         
            +
            - lib/RailsMug/exceptions.rb
         
     | 
| 
      
 63 
     | 
    
         
            +
            - lib/RailsMug/images.rb
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/RailsMug/model/album.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/RailsMug/model/image.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/RailsMug/record.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            - lib/RailsMug/session.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib/RailsMug/version.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - spec/RailsMug_helper.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            - spec/RailsMug_spec.rb
         
     | 
| 
      
 71 
     | 
    
         
            +
            - spec/images_spec.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            homepage: ''
         
     | 
| 
      
 74 
     | 
    
         
            +
            licenses: []
         
     | 
| 
      
 75 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 76 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 77 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 79 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 80 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 81 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 82 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 83 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 84 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 85 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 86 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 87 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 88 
     | 
    
         
            +
              - - ! '>='
         
     | 
| 
      
 89 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 90 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 91 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 92 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 93 
     | 
    
         
            +
            rubygems_version: 1.8.24
         
     | 
| 
      
 94 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 95 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 96 
     | 
    
         
            +
            summary: This gem allows an authenticated user to retrieve the album and photo list
         
     | 
| 
      
 97 
     | 
    
         
            +
              from an album
         
     | 
| 
      
 98 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 99 
     | 
    
         
            +
            - spec/RailsMug_helper.rb
         
     | 
| 
      
 100 
     | 
    
         
            +
            - spec/RailsMug_spec.rb
         
     | 
| 
      
 101 
     | 
    
         
            +
            - spec/images_spec.rb
         
     | 
| 
      
 102 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 103 
     | 
    
         
            +
            has_rdoc: 
         
     |