ticketmaster-rally 0.1.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.
- data/.document +5 -0
 - data/.rspec +1 -0
 - data/Gemfile +20 -0
 - data/Gemfile.lock +77 -0
 - data/LICENSE.txt +20 -0
 - data/README.md +65 -0
 - data/Rakefile +43 -0
 - data/VERSION +1 -0
 - data/lib/provider/comment.rb +118 -0
 - data/lib/provider/project.rb +86 -0
 - data/lib/provider/rally.rb +47 -0
 - data/lib/provider/ticket.rb +170 -0
 - data/lib/ticketmaster-rally.rb +15 -0
 - data/log/.keep +0 -0
 - data/spec/comments_spec.rb +46 -0
 - data/spec/fixtures/tickets.xml +0 -0
 - data/spec/projects_spec.rb +54 -0
 - data/spec/spec_helper.rb +14 -0
 - data/spec/ticketmaster-rally_spec.rb +27 -0
 - data/spec/tickets_spec.rb +114 -0
 - data/ticketmaster-rally.gemspec +92 -0
 - metadata +234 -0
 
    
        data/.document
    ADDED
    
    
    
        data/.rspec
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --color
         
     | 
    
        data/Gemfile
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            source "http://rubygems.org"
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Add dependencies required to use your gem here.
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Example:
         
     | 
| 
      
 4 
     | 
    
         
            +
            #   gem "activesupport", ">= 2.3.5"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # Add dependencies to develop your gem here.
         
     | 
| 
      
 7 
     | 
    
         
            +
            # Include everything needed to run rake, tests, features, etc.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            gem "ticketmaster", "0.6.6"
         
     | 
| 
      
 10 
     | 
    
         
            +
            gem "rally_rest_api", "~> 1.0.3"
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            group :development do
         
     | 
| 
      
 13 
     | 
    
         
            +
              gem "rspec", "~> 2.3.0"
         
     | 
| 
      
 14 
     | 
    
         
            +
              gem "yard", "~> 0.7.0"
         
     | 
| 
      
 15 
     | 
    
         
            +
              gem "bundler", "~> 1.0.0"
         
     | 
| 
      
 16 
     | 
    
         
            +
              gem "jeweler", "~> 1.5.2"
         
     | 
| 
      
 17 
     | 
    
         
            +
              gem "rcov", ">= 0"
         
     | 
| 
      
 18 
     | 
    
         
            +
              gem 'ruby-debug', :platform => [:ruby_18]
         
     | 
| 
      
 19 
     | 
    
         
            +
              gem 'ruby-debug19', :platform => [:ruby_19]
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
    
        data/Gemfile.lock
    ADDED
    
    | 
         @@ -0,0 +1,77 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            GEM
         
     | 
| 
      
 2 
     | 
    
         
            +
              remote: http://rubygems.org/
         
     | 
| 
      
 3 
     | 
    
         
            +
              specs:
         
     | 
| 
      
 4 
     | 
    
         
            +
                activemodel (3.0.9)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  activesupport (= 3.0.9)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  builder (~> 2.1.2)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  i18n (~> 0.5.0)
         
     | 
| 
      
 8 
     | 
    
         
            +
                activeresource (3.0.9)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  activemodel (= 3.0.9)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  activesupport (= 3.0.9)
         
     | 
| 
      
 11 
     | 
    
         
            +
                activesupport (3.0.9)
         
     | 
| 
      
 12 
     | 
    
         
            +
                archive-tar-minitar (0.5.2)
         
     | 
| 
      
 13 
     | 
    
         
            +
                builder (2.1.2)
         
     | 
| 
      
 14 
     | 
    
         
            +
                columnize (0.3.4)
         
     | 
| 
      
 15 
     | 
    
         
            +
                diff-lcs (1.1.2)
         
     | 
| 
      
 16 
     | 
    
         
            +
                git (1.2.5)
         
     | 
| 
      
 17 
     | 
    
         
            +
                hashie (1.0.0)
         
     | 
| 
      
 18 
     | 
    
         
            +
                i18n (0.5.0)
         
     | 
| 
      
 19 
     | 
    
         
            +
                jeweler (1.5.2)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  bundler (~> 1.0.0)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  git (>= 1.2.5)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  rake
         
     | 
| 
      
 23 
     | 
    
         
            +
                linecache (0.46)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  rbx-require-relative (> 0.0.4)
         
     | 
| 
      
 25 
     | 
    
         
            +
                linecache19 (0.5.12)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  ruby_core_source (>= 0.1.4)
         
     | 
| 
      
 27 
     | 
    
         
            +
                rake (0.9.2)
         
     | 
| 
      
 28 
     | 
    
         
            +
                rally_rest_api (1.0.3)
         
     | 
| 
      
 29 
     | 
    
         
            +
                rbx-require-relative (0.0.5)
         
     | 
| 
      
 30 
     | 
    
         
            +
                rcov (0.9.9)
         
     | 
| 
      
 31 
     | 
    
         
            +
                rspec (2.3.0)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  rspec-core (~> 2.3.0)
         
     | 
| 
      
 33 
     | 
    
         
            +
                  rspec-expectations (~> 2.3.0)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  rspec-mocks (~> 2.3.0)
         
     | 
| 
      
 35 
     | 
    
         
            +
                rspec-core (2.3.1)
         
     | 
| 
      
 36 
     | 
    
         
            +
                rspec-expectations (2.3.0)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  diff-lcs (~> 1.1.2)
         
     | 
| 
      
 38 
     | 
    
         
            +
                rspec-mocks (2.3.0)
         
     | 
| 
      
 39 
     | 
    
         
            +
                ruby-debug (0.10.4)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  columnize (>= 0.1)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  ruby-debug-base (~> 0.10.4.0)
         
     | 
| 
      
 42 
     | 
    
         
            +
                ruby-debug-base (0.10.4)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  linecache (>= 0.3)
         
     | 
| 
      
 44 
     | 
    
         
            +
                ruby-debug-base19 (0.11.25)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  columnize (>= 0.3.1)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  linecache19 (>= 0.5.11)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  ruby_core_source (>= 0.1.4)
         
     | 
| 
      
 48 
     | 
    
         
            +
                ruby-debug19 (0.11.6)
         
     | 
| 
      
 49 
     | 
    
         
            +
                  columnize (>= 0.3.1)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  linecache19 (>= 0.5.11)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  ruby-debug-base19 (>= 0.11.19)
         
     | 
| 
      
 52 
     | 
    
         
            +
                ruby_core_source (0.1.5)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  archive-tar-minitar (>= 0.5.2)
         
     | 
| 
      
 54 
     | 
    
         
            +
                ticketmaster (0.6.6)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  activeresource
         
     | 
| 
      
 56 
     | 
    
         
            +
                  activeresource (>= 2.3.2)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  activesupport
         
     | 
| 
      
 58 
     | 
    
         
            +
                  activesupport (>= 2.3.2)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  hashie (= 1.0.0)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  hashie
         
     | 
| 
      
 61 
     | 
    
         
            +
                  jeweler
         
     | 
| 
      
 62 
     | 
    
         
            +
                yard (0.7.2)
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            PLATFORMS
         
     | 
| 
      
 65 
     | 
    
         
            +
              ruby
         
     | 
| 
      
 66 
     | 
    
         
            +
              x86-mingw32
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            DEPENDENCIES
         
     | 
| 
      
 69 
     | 
    
         
            +
              bundler (~> 1.0.0)
         
     | 
| 
      
 70 
     | 
    
         
            +
              jeweler (~> 1.5.2)
         
     | 
| 
      
 71 
     | 
    
         
            +
              rally_rest_api (~> 1.0.3)
         
     | 
| 
      
 72 
     | 
    
         
            +
              rcov
         
     | 
| 
      
 73 
     | 
    
         
            +
              rspec (~> 2.3.0)
         
     | 
| 
      
 74 
     | 
    
         
            +
              ruby-debug
         
     | 
| 
      
 75 
     | 
    
         
            +
              ruby-debug19
         
     | 
| 
      
 76 
     | 
    
         
            +
              ticketmaster (= 0.6.6)
         
     | 
| 
      
 77 
     | 
    
         
            +
              yard (~> 0.7.0)
         
     | 
    
        data/LICENSE.txt
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            Copyright (c) 2011 Simeon F. Willbanks, Rob Kaufman
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining
         
     | 
| 
      
 4 
     | 
    
         
            +
            a copy of this software and associated documentation files (the
         
     | 
| 
      
 5 
     | 
    
         
            +
            "Software"), to deal in the Software without restriction, including
         
     | 
| 
      
 6 
     | 
    
         
            +
            without limitation the rights to use, copy, modify, merge, publish,
         
     | 
| 
      
 7 
     | 
    
         
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         
     | 
| 
      
 8 
     | 
    
         
            +
            permit persons to whom the Software is furnished to do so, subject to
         
     | 
| 
      
 9 
     | 
    
         
            +
            the following conditions:
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be
         
     | 
| 
      
 12 
     | 
    
         
            +
            included in all copies or substantial portions of the Software.
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         
     | 
| 
      
 15 
     | 
    
         
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         
     | 
| 
      
 16 
     | 
    
         
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         
     | 
| 
      
 17 
     | 
    
         
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         
     | 
| 
      
 18 
     | 
    
         
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         
     | 
| 
      
 19 
     | 
    
         
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         
     | 
| 
      
 20 
     | 
    
         
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # ticketmaster-rally
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            This is a provider for [ticketmaster](http://ticketrb.com). It provides interoperability with [Rally](http://www.rallydev.com/) and it's project planning system through the ticketmaster gem.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            # Usage and Examples
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            First we have to instantiate a new ticketmaster instance, your Rally installation should have api access enable:
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  rally = TicketMaster.new(:rally, {:username=> 'foo', 
         
     | 
| 
      
 10 
     | 
    
         
            +
                                                    :password => "bar", 
         
     | 
| 
      
 11 
     | 
    
         
            +
                                                    :url => "https://community.rallydev.com/slm"}) 
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            If you do not pass in the url, username and password, you won't get any information.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ## Finding Projects(Projects)
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                rally = TicketMaster.new(:rally, {:url => 'https://community.rallydev.com/slm', 
         
     | 
| 
      
 18 
     | 
    
         
            +
                                                         :username => 'foo', 
         
     | 
| 
      
 19 
     | 
    
         
            +
                                                         :password => 'bar'})
         
     | 
| 
      
 20 
     | 
    
         
            +
                # Project with ID of 1
         
     | 
| 
      
 21 
     | 
    
         
            +
                project = rally.project(1)
         
     | 
| 
      
 22 
     | 
    
         
            +
                # Projects with IDs of 1 and 2
         
     | 
| 
      
 23 
     | 
    
         
            +
                projects = rally.project([1,2])
         
     | 
| 
      
 24 
     | 
    
         
            +
            	
         
     | 
| 
      
 25 
     | 
    
         
            +
            ## Finding Tickets(Defects,Tasks)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                # Ticket with ID of 1
         
     | 
| 
      
 28 
     | 
    
         
            +
                ticket = project.ticket(1)
         
     | 
| 
      
 29 
     | 
    
         
            +
                # Tickets with ID's of 1 and 2
         
     | 
| 
      
 30 
     | 
    
         
            +
                tickets = project.tickets([1,2])
         
     | 
| 
      
 31 
     | 
    
         
            +
                # All tickets
         
     | 
| 
      
 32 
     | 
    
         
            +
                tickets = project.tickets
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            ## Open Tickets
         
     | 
| 
      
 35 
     | 
    
         
            +
                
         
     | 
| 
      
 36 
     | 
    
         
            +
                # Create a new ticket
         
     | 
| 
      
 37 
     | 
    
         
            +
                ticket = project.ticket!(:title => 'New Ticket', 
         
     | 
| 
      
 38 
     | 
    
         
            +
                                         :description => 'Description')
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            ## Finding comments
         
     | 
| 
      
 41 
     | 
    
         
            +
              
         
     | 
| 
      
 42 
     | 
    
         
            +
                # Finding all comments 
         
     | 
| 
      
 43 
     | 
    
         
            +
                comments = ticket.comments
         
     | 
| 
      
 44 
     | 
    
         
            +
                # Finding a comment with ID 1
         
     | 
| 
      
 45 
     | 
    
         
            +
                comment = ticket.comment(1)
         
     | 
| 
      
 46 
     | 
    
         
            +
              
         
     | 
| 
      
 47 
     | 
    
         
            +
            ## Requirements
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            * rubygems (obviously)
         
     | 
| 
      
 50 
     | 
    
         
            +
            * ticketmaster gem (latest version preferred)
         
     | 
| 
      
 51 
     | 
    
         
            +
            * rally_rest_api
         
     | 
| 
      
 52 
     | 
    
         
            +
            * logger (only if you want Rally REST API to log activity)
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            ## Other Notes
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            Since this and the ticketmaster gem is still primarily a work-in-progress, minor changes may be incompatible with previous versions. Please be careful about using and updating this gem in production.
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            If you see or find any issues, feel free to open up an issue report.
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            ## Copyright
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            Copyright (c) 2011 Simeon F. Willbanks. See LICENSE.txt for
         
     | 
| 
      
 63 
     | 
    
         
            +
            further details.
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
    
        data/Rakefile
    ADDED
    
    | 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'bundler'
         
     | 
| 
      
 3 
     | 
    
         
            +
            begin
         
     | 
| 
      
 4 
     | 
    
         
            +
              Bundler.setup(:default, :development)
         
     | 
| 
      
 5 
     | 
    
         
            +
            rescue Bundler::BundlerError => e
         
     | 
| 
      
 6 
     | 
    
         
            +
              $stderr.puts e.message
         
     | 
| 
      
 7 
     | 
    
         
            +
              $stderr.puts "Run `bundle install` to install missing gems"
         
     | 
| 
      
 8 
     | 
    
         
            +
              exit e.status_code
         
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'rake'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            require 'jeweler'
         
     | 
| 
      
 13 
     | 
    
         
            +
            Jeweler::Tasks.new do |gem|
         
     | 
| 
      
 14 
     | 
    
         
            +
              # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
         
     | 
| 
      
 15 
     | 
    
         
            +
              gem.name = "ticketmaster-rally"
         
     | 
| 
      
 16 
     | 
    
         
            +
              gem.homepage = "http://github.com/simeonwillbanks/ticketmaster-rally"
         
     | 
| 
      
 17 
     | 
    
         
            +
              gem.license = "MIT"
         
     | 
| 
      
 18 
     | 
    
         
            +
              gem.summary = %Q{Ticketmaster provider for Rally's Ruby REST API}
         
     | 
| 
      
 19 
     | 
    
         
            +
              gem.description = %Q{This is a provider for ticketmaster. It provides interoperability with Rally and it's project planning system through the ticketmaster gem}
         
     | 
| 
      
 20 
     | 
    
         
            +
              gem.email = ["sfw@simeonfosterwillbanks.com", "rob@notch8.com", "george.rafael@gmail.com"]
         
     | 
| 
      
 21 
     | 
    
         
            +
              gem.authors = ["Simeon F. Willbanks", "Rob Kaufman", "Rafael George"]
         
     | 
| 
      
 22 
     | 
    
         
            +
              # Include your dependencies below. Runtime dependencies are required when using your gem,
         
     | 
| 
      
 23 
     | 
    
         
            +
              # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
         
     | 
| 
      
 24 
     | 
    
         
            +
              #  gem.add_runtime_dependency 'jabber4r', '> 0.1'
         
     | 
| 
      
 25 
     | 
    
         
            +
              #  gem.add_development_dependency 'rspec', '> 1.2.3'
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
            Jeweler::RubygemsDotOrgTasks.new
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            require 'rspec/core'
         
     | 
| 
      
 30 
     | 
    
         
            +
            require 'rspec/core/rake_task'
         
     | 
| 
      
 31 
     | 
    
         
            +
            RSpec::Core::RakeTask.new(:spec) do |spec|
         
     | 
| 
      
 32 
     | 
    
         
            +
              spec.pattern = FileList['spec/**/*_spec.rb']
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            RSpec::Core::RakeTask.new(:rcov) do |spec|
         
     | 
| 
      
 36 
     | 
    
         
            +
              spec.pattern = 'spec/**/*_spec.rb'
         
     | 
| 
      
 37 
     | 
    
         
            +
              spec.rcov = true
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            task :default => :spec
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            require 'yard'
         
     | 
| 
      
 43 
     | 
    
         
            +
            YARD::Rake::YardocTask.new
         
     | 
    
        data/VERSION
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            0.1.0
         
     | 
| 
         @@ -0,0 +1,118 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module TicketMaster::Provider
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rally
         
     | 
| 
      
 3 
     | 
    
         
            +
                # The comment class for ticketmaster-rally
         
     | 
| 
      
 4 
     | 
    
         
            +
                #
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Remaps 
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                # id => oid
         
     | 
| 
      
 8 
     | 
    
         
            +
                # author => user_name
         
     | 
| 
      
 9 
     | 
    
         
            +
                # body => text
         
     | 
| 
      
 10 
     | 
    
         
            +
                # created_at => creation_date
         
     | 
| 
      
 11 
     | 
    
         
            +
                # updated_at => creation_date    
         
     | 
| 
      
 12 
     | 
    
         
            +
                class Comment < TicketMaster::Provider::Base::Comment
         
     | 
| 
      
 13 
     | 
    
         
            +
                  
         
     | 
| 
      
 14 
     | 
    
         
            +
                  def initialize(*object)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    if object.first
         
     | 
| 
      
 16 
     | 
    
         
            +
                      args = object
         
     | 
| 
      
 17 
     | 
    
         
            +
                      comment = args.shift
         
     | 
| 
      
 18 
     | 
    
         
            +
                      project_id = args.shift
         
     | 
| 
      
 19 
     | 
    
         
            +
                      ticket_id = args.shift
         
     | 
| 
      
 20 
     | 
    
         
            +
                      @system_data = {:client => comment}
         
     | 
| 
      
 21 
     | 
    
         
            +
                      hash = {
         
     | 
| 
      
 22 
     | 
    
         
            +
                        :oid         => comment.oid,
         
     | 
| 
      
 23 
     | 
    
         
            +
                        :project_id  => project_id,
         
     | 
| 
      
 24 
     | 
    
         
            +
                        :ticket_id   => ticket_id,
         
     | 
| 
      
 25 
     | 
    
         
            +
                        :author      => comment.user_name,
         
     | 
| 
      
 26 
     | 
    
         
            +
                        :body        => comment.text,
         
     | 
| 
      
 27 
     | 
    
         
            +
                        :created_at  => comment.creation_date,
         
     | 
| 
      
 28 
     | 
    
         
            +
                        :updated_at  => comment.creation_date,
         
     | 
| 
      
 29 
     | 
    
         
            +
                        :post_number => comment.post_number,
         
     | 
| 
      
 30 
     | 
    
         
            +
                      }
         
     | 
| 
      
 31 
     | 
    
         
            +
                      super(hash)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  def created_at
         
     | 
| 
      
 36 
     | 
    
         
            +
                    Time.parse(self[:created_at])
         
     | 
| 
      
 37 
     | 
    
         
            +
                  end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  def updated_at
         
     | 
| 
      
 40 
     | 
    
         
            +
                    Time.parse(self[:updated_at])
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  # Rally REST API aliases String and Fixnum :to_q :to_s
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # However, it does not alias Bignum
         
     | 
| 
      
 45 
     | 
    
         
            +
                  # If a ID is a Bignum, the API will throw undefined method
         
     | 
| 
      
 46 
     | 
    
         
            +
                  # Because of this, we pass all IDs to API as strings
         
     | 
| 
      
 47 
     | 
    
         
            +
                  # Ticketmaster specs set IDs as integers, so coerce type on get 
         
     | 
| 
      
 48 
     | 
    
         
            +
                  def id
         
     | 
| 
      
 49 
     | 
    
         
            +
                    self[:oid].to_i
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  def id=(id)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    self[:oid] = id.to_s
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end 
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  def self.find_by_id(project_id, ticket_id, id)
         
     | 
| 
      
 57 
     | 
    
         
            +
                    project = self.rally_project(project_id)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    # Rally Ruby REST API expects IDs as strings
         
     | 
| 
      
 59 
     | 
    
         
            +
                    # For id.to_s see note on Project::id
         
     | 
| 
      
 60 
     | 
    
         
            +
                    query_result = TicketMaster::Provider::Rally.rally.find(:conversation_post, :fetch => true, :project => project) { equal :object_i_d, id.to_s }
         
     | 
| 
      
 61 
     | 
    
         
            +
                    self.new query_result.first, project_id
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  # Accepts a project id, ticket id and attributes hash and returns all 
         
     | 
| 
      
 65 
     | 
    
         
            +
                  # comments matching the project, ticket and those attributes in an array
         
     | 
| 
      
 66 
     | 
    
         
            +
                  # Should return all ticket comments if the attributes hash is empty
         
     | 
| 
      
 67 
     | 
    
         
            +
                  def self.find_by_attributes(project_id, ticket_id, attributes = {})
         
     | 
| 
      
 68 
     | 
    
         
            +
                    self.search(project_id, ticket_id, attributes)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end            
         
     | 
| 
      
 70 
     | 
    
         
            +
                  
         
     | 
| 
      
 71 
     | 
    
         
            +
                  # This is a helper method to find
         
     | 
| 
      
 72 
     | 
    
         
            +
                  def self.search(project_id, ticket_id, options = {}, limit = 1000)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    project = self.rally_project(project_id)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    artifact = project.ticket(:id => ticket_id.to_s)
         
     | 
| 
      
 75 
     | 
    
         
            +
                    query_result = TicketMaster::Provider::Rally.rally.find_all(:conversation_post, :project => project) { equal :artifact, artifact }
         
     | 
| 
      
 76 
     | 
    
         
            +
                    comments = query_result.collect do |comment| 
         
     | 
| 
      
 77 
     | 
    
         
            +
                      self.new comment, project_id, ticket_id
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
                    search_by_attribute(comments, options, limit)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
                  
         
     | 
| 
      
 82 
     | 
    
         
            +
                  def self.create(*options)
         
     | 
| 
      
 83 
     | 
    
         
            +
                    options = options.shift
         
     | 
| 
      
 84 
     | 
    
         
            +
                    project = provider_parent(self)::Project.find_by_id(options[:project_id])
         
     | 
| 
      
 85 
     | 
    
         
            +
                    ticket = provider_parent(self)::Ticket.find_by_id(options[:project_id], options[:ticket_id])
         
     | 
| 
      
 86 
     | 
    
         
            +
                    comment = {
         
     | 
| 
      
 87 
     | 
    
         
            +
                      :project => project.system_data[:client],
         
     | 
| 
      
 88 
     | 
    
         
            +
                      :artifact => ticket.system_data[:client],
         
     | 
| 
      
 89 
     | 
    
         
            +
                      :text => options[:body]
         
     | 
| 
      
 90 
     | 
    
         
            +
                    }
         
     | 
| 
      
 91 
     | 
    
         
            +
                    new_comment = TicketMaster::Provider::Rally.rally.create(:conversation_post, comment)
         
     | 
| 
      
 92 
     | 
    
         
            +
                    self.new new_comment
         
     | 
| 
      
 93 
     | 
    
         
            +
                  end
         
     | 
| 
      
 94 
     | 
    
         
            +
                  
         
     | 
| 
      
 95 
     | 
    
         
            +
                  private
         
     | 
| 
      
 96 
     | 
    
         
            +
                  
         
     | 
| 
      
 97 
     | 
    
         
            +
                    def self.rally_project(project_id)
         
     | 
| 
      
 98 
     | 
    
         
            +
                      ticketmaster_project = provider_parent(self)::Project.find_by_id(project_id)
         
     | 
| 
      
 99 
     | 
    
         
            +
                      ticketmaster_project.system_data[:client]
         
     | 
| 
      
 100 
     | 
    
         
            +
                    end
         
     | 
| 
      
 101 
     | 
    
         
            +
                          
         
     | 
| 
      
 102 
     | 
    
         
            +
                    def self.to_rally_object(hash)
         
     | 
| 
      
 103 
     | 
    
         
            +
                      ticket = {
         
     | 
| 
      
 104 
     | 
    
         
            +
                        :name => hash[:title],
         
     | 
| 
      
 105 
     | 
    
         
            +
                        :description => hash[:description],
         
     | 
| 
      
 106 
     | 
    
         
            +
                        :schedule_state => hash[:resolution] ||= "Defined", 
         
     | 
| 
      
 107 
     | 
    
         
            +
                        :state => hash[:status] ||= "Submitted"     
         
     | 
| 
      
 108 
     | 
    
         
            +
                      }
         
     | 
| 
      
 109 
     | 
    
         
            +
                      # Rally optional attributes
         
     | 
| 
      
 110 
     | 
    
         
            +
                      ticket[:submitted_by] = hash[:requestor] if hash[:requestor]
         
     | 
| 
      
 111 
     | 
    
         
            +
                      ticket[:owner] = hash[:assignee] if hash[:assignee]
         
     | 
| 
      
 112 
     | 
    
         
            +
                      ticket[:priority] = hash[:priority] if hash[:priority]
         
     | 
| 
      
 113 
     | 
    
         
            +
                      ticket[:work_product] = hash[:work_product] if hash[:work_product]
         
     | 
| 
      
 114 
     | 
    
         
            +
                      ticket          
         
     | 
| 
      
 115 
     | 
    
         
            +
                    end
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
              end
         
     | 
| 
      
 118 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,86 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module TicketMaster::Provider
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rally
         
     | 
| 
      
 3 
     | 
    
         
            +
                # Project class for ticketmaster-rally
         
     | 
| 
      
 4 
     | 
    
         
            +
                #
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Remaps 
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                # id => oid
         
     | 
| 
      
 8 
     | 
    
         
            +
                # created_at => creation_date
         
     | 
| 
      
 9 
     | 
    
         
            +
                # updated_at => creation_date
         
     | 
| 
      
 10 
     | 
    
         
            +
                class Project < TicketMaster::Provider::Base::Project
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def initialize(*object)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    if object.first
         
     | 
| 
      
 14 
     | 
    
         
            +
                      project = object.first
         
     | 
| 
      
 15 
     | 
    
         
            +
                      # Store Rally Project object in Ticketmaster Project object
         
     | 
| 
      
 16 
     | 
    
         
            +
                      # This allows Ticketmaster to perform updates on Rally Project
         
     | 
| 
      
 17 
     | 
    
         
            +
                      @system_data = {:client => project}
         
     | 
| 
      
 18 
     | 
    
         
            +
                      hash = {:oid => project.oid, 
         
     | 
| 
      
 19 
     | 
    
         
            +
                              :name => project.name, 
         
     | 
| 
      
 20 
     | 
    
         
            +
                              :description => project.description,
         
     | 
| 
      
 21 
     | 
    
         
            +
                              :created_at => project.creation_date, 
         
     | 
| 
      
 22 
     | 
    
         
            +
                              # Rally Project object does not have a modified time
         
     | 
| 
      
 23 
     | 
    
         
            +
                              :updated_at => project.creation_date}           
         
     | 
| 
      
 24 
     | 
    
         
            +
                      super hash
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def created_at
         
     | 
| 
      
 29 
     | 
    
         
            +
                    Time.parse(self[:created_at])
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  def updated_at
         
     | 
| 
      
 33 
     | 
    
         
            +
                    Time.parse(self[:updated_at])
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  # Rally REST API aliases String and Fixnum :to_q :to_s
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # However, it does not alias Bignum
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # If a ID is a Bignum, the API will throw undefined method
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # Because of this, we pass all IDs to API as strings
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # Ticketmaster specs set IDs as integers, so coerce type on get 
         
     | 
| 
      
 41 
     | 
    
         
            +
                  def id
         
     | 
| 
      
 42 
     | 
    
         
            +
                    self[:oid].to_i
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  def id=(id)
         
     | 
| 
      
 46 
     | 
    
         
            +
                    self[:oid] = id.to_s
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end      
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  # Accepts an integer id and returns the single project instance
         
     | 
| 
      
 50 
     | 
    
         
            +
                  def self.find_by_id(id)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    # Rally Ruby REST API expects IDs as strings
         
     | 
| 
      
 52 
     | 
    
         
            +
                    # For id.to_s see note on Project::id
         
     | 
| 
      
 53 
     | 
    
         
            +
                    query_result = TicketMaster::Provider::Rally.rally.find(:project, :fetch => true) { equal :object_i_d, id.to_s }
         
     | 
| 
      
 54 
     | 
    
         
            +
                    self.new query_result.first
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # Accepts an attributes hash and returns all projects matching those attributes in an array
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # Should return all projects if the attributes hash is empty
         
     | 
| 
      
 59 
     | 
    
         
            +
                  def self.find_by_attributes(attributes = {})
         
     | 
| 
      
 60 
     | 
    
         
            +
                    self.search(attributes)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end            
         
     | 
| 
      
 62 
     | 
    
         
            +
                  
         
     | 
| 
      
 63 
     | 
    
         
            +
                  # This is a helper method to find
         
     | 
| 
      
 64 
     | 
    
         
            +
                  def self.search(options = {}, limit = 1000)
         
     | 
| 
      
 65 
     | 
    
         
            +
                    projects = TicketMaster::Provider::Rally.rally.find_all(:project).collect do |project| 
         
     | 
| 
      
 66 
     | 
    
         
            +
                      self.new project
         
     | 
| 
      
 67 
     | 
    
         
            +
                    end
         
     | 
| 
      
 68 
     | 
    
         
            +
                    search_by_attribute(projects, options, limit)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end      
         
     | 
| 
      
 70 
     | 
    
         
            +
                  
         
     | 
| 
      
 71 
     | 
    
         
            +
                  # copy from this.copy(that) copies that into this
         
     | 
| 
      
 72 
     | 
    
         
            +
                  def copy(project)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    project.tickets.each do |ticket|
         
     | 
| 
      
 74 
     | 
    
         
            +
                      copy_ticket = self.ticket!(:title => ticket.title, :description => ticket.description)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      ticket.comments.each do |comment|
         
     | 
| 
      
 76 
     | 
    
         
            +
                        copy_ticket.comment!(:body => comment.body)
         
     | 
| 
      
 77 
     | 
    
         
            +
                        sleep 1
         
     | 
| 
      
 78 
     | 
    
         
            +
                      end
         
     | 
| 
      
 79 
     | 
    
         
            +
                    end
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
            end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module TicketMaster::Provider
         
     | 
| 
      
 2 
     | 
    
         
            +
              # This is the Rally Provider for ticketmaster
         
     | 
| 
      
 3 
     | 
    
         
            +
              module Rally
         
     | 
| 
      
 4 
     | 
    
         
            +
                include TicketMaster::Provider::Base
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                # This is for cases when you want to instantiate using TicketMaster::Provider::Rally.new(auth)
         
     | 
| 
      
 7 
     | 
    
         
            +
                def self.new(auth = {})
         
     | 
| 
      
 8 
     | 
    
         
            +
                  TicketMaster.new(:rally, auth)
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
                
         
     | 
| 
      
 11 
     | 
    
         
            +
                # Providers must define an authorize method. This is used to initialize and set authentication
         
     | 
| 
      
 12 
     | 
    
         
            +
                # parameters to access the API
         
     | 
| 
      
 13 
     | 
    
         
            +
                def authorize(auth = {})
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @authentication ||= TicketMaster::Authenticator.new(auth)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  auth = @authentication
         
     | 
| 
      
 16 
     | 
    
         
            +
                  if ((auth.url.nil? || auth.url.empty?) and (auth.username.nil? || auth.username.empty?) and (auth.password.nil? || auth.password.empty?))
         
     | 
| 
      
 17 
     | 
    
         
            +
                    raise "Please you should provide a Rally url, username and password"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                  TicketMaster::Provider::Rally.rally = RallyRestAPI.new(:username => auth.username, 
         
     | 
| 
      
 20 
     | 
    
         
            +
                                                                         :password => auth.password,
         
     | 
| 
      
 21 
     | 
    
         
            +
                                                                         :base_url => auth.url,
         
     | 
| 
      
 22 
     | 
    
         
            +
                                                                         :logger => RALLY_LOGGER_PATH ? Logger.new(RALLY_LOGGER_PATH) : nil)
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
                
         
     | 
| 
      
 25 
     | 
    
         
            +
                # declare needed overloaded methods here
         
     | 
| 
      
 26 
     | 
    
         
            +
                
         
     | 
| 
      
 27 
     | 
    
         
            +
                def valid?
         
     | 
| 
      
 28 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 29 
     | 
    
         
            +
                    TicketMaster::Provider::Rally.rally.find_all(:project).first
         
     | 
| 
      
 30 
     | 
    
         
            +
                    true
         
     | 
| 
      
 31 
     | 
    
         
            +
                  rescue
         
     | 
| 
      
 32 
     | 
    
         
            +
                    false
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def self.rally=(rally_instance)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @rally = rally_instance
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def self.rally
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @rally
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,170 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module TicketMaster::Provider
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Rally
         
     | 
| 
      
 3 
     | 
    
         
            +
                # Ticket class for ticketmaster-rally
         
     | 
| 
      
 4 
     | 
    
         
            +
                #
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Remaps 
         
     | 
| 
      
 6 
     | 
    
         
            +
                #
         
     | 
| 
      
 7 
     | 
    
         
            +
                # id => oid
         
     | 
| 
      
 8 
     | 
    
         
            +
                # title => name
         
     | 
| 
      
 9 
     | 
    
         
            +
                # requestor => submitted_by
         
     | 
| 
      
 10 
     | 
    
         
            +
                # resolution => schedule_state
         
     | 
| 
      
 11 
     | 
    
         
            +
                # status => state
         
     | 
| 
      
 12 
     | 
    
         
            +
                # created_at => creation_date
         
     | 
| 
      
 13 
     | 
    
         
            +
                # updated_at => last_update_date    
         
     | 
| 
      
 14 
     | 
    
         
            +
                # assignee => owner    
         
     | 
| 
      
 15 
     | 
    
         
            +
                class Ticket < TicketMaster::Provider::Base::Ticket
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  def initialize(*object)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    if object.first
         
     | 
| 
      
 19 
     | 
    
         
            +
                      args = object
         
     | 
| 
      
 20 
     | 
    
         
            +
                      ticket = args.shift
         
     | 
| 
      
 21 
     | 
    
         
            +
                      project_id = args.shift
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @system_data = {:client => ticket}
         
     | 
| 
      
 23 
     | 
    
         
            +
                      hash = {
         
     | 
| 
      
 24 
     | 
    
         
            +
                        :oid => ticket.oid,
         
     | 
| 
      
 25 
     | 
    
         
            +
                        :project_id => project_id,
         
     | 
| 
      
 26 
     | 
    
         
            +
                        # Rally symbol for Tasks and Defects
         
     | 
| 
      
 27 
     | 
    
         
            +
                        # :hierarchical_requirement, :defect or :task (:artifact for all)
         
     | 
| 
      
 28 
     | 
    
         
            +
                        :type_as_symbol => ticket.type_as_symbol,
         
     | 
| 
      
 29 
     | 
    
         
            +
                        :title => ticket.name,
         
     | 
| 
      
 30 
     | 
    
         
            +
                        :description => ticket.description,
         
     | 
| 
      
 31 
     | 
    
         
            +
                        :requestor => ticket.submitted_by,
         
     | 
| 
      
 32 
     | 
    
         
            +
                        :resolution => ticket.schedule_state, 
         
     | 
| 
      
 33 
     | 
    
         
            +
                        :status => ticket.state,
         
     | 
| 
      
 34 
     | 
    
         
            +
                        :created_at => ticket.creation_date,
         
     | 
| 
      
 35 
     | 
    
         
            +
                        :updated_at => ticket.last_update_date
         
     | 
| 
      
 36 
     | 
    
         
            +
                      }
         
     | 
| 
      
 37 
     | 
    
         
            +
                      # Rally optional attributes
         
     | 
| 
      
 38 
     | 
    
         
            +
                      hash[:assignee] = ticket.owner if ticket.owner
         
     | 
| 
      
 39 
     | 
    
         
            +
                      # From Rally Web Services API Documentation v1.21 
         
     | 
| 
      
 40 
     | 
    
         
            +
                      # Allowed values for Defect.Priority:	"", 
         
     | 
| 
      
 41 
     | 
    
         
            +
                      #                                     "Resolve Immediately", 
         
     | 
| 
      
 42 
     | 
    
         
            +
                      #                                     "High Attention", 
         
     | 
| 
      
 43 
     | 
    
         
            +
                      #                                     "Normal", 
         
     | 
| 
      
 44 
     | 
    
         
            +
                      #                                     "Low"
         
     | 
| 
      
 45 
     | 
    
         
            +
                      # When "" Rally Ruby REST API returns <Priority>None</Priority>
         
     | 
| 
      
 46 
     | 
    
         
            +
                      # Unless API returns allowed value, don't set priority
         
     | 
| 
      
 47 
     | 
    
         
            +
                      hash[:priority] = ticket.priority unless ticket.priority == "None"
         
     | 
| 
      
 48 
     | 
    
         
            +
                      super(hash)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  def created_at
         
     | 
| 
      
 53 
     | 
    
         
            +
                    Time.parse(self[:created_at])
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  def updated_at
         
     | 
| 
      
 57 
     | 
    
         
            +
                    Time.parse(self[:updated_at])
         
     | 
| 
      
 58 
     | 
    
         
            +
                  end
         
     | 
| 
      
 59 
     | 
    
         
            +
                  
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # Rally REST API aliases String and Fixnum :to_q :to_s
         
     | 
| 
      
 61 
     | 
    
         
            +
                  # However, it does not alias Bignum
         
     | 
| 
      
 62 
     | 
    
         
            +
                  # If a ID is a Bignum, the API will throw undefined method
         
     | 
| 
      
 63 
     | 
    
         
            +
                  # Because of this, we pass all IDs to API as strings
         
     | 
| 
      
 64 
     | 
    
         
            +
                  # Ticketmaster specs set IDs as integers, so coerce type on get 
         
     | 
| 
      
 65 
     | 
    
         
            +
                  def id
         
     | 
| 
      
 66 
     | 
    
         
            +
                    self[:oid].to_i
         
     | 
| 
      
 67 
     | 
    
         
            +
                  end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  def id=(id)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    self[:oid] = id.to_s
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end 
         
     | 
| 
      
 72 
     | 
    
         
            +
                  
         
     | 
| 
      
 73 
     | 
    
         
            +
                  def updated_at=(last_update_date)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    self[:updated_at] = Time.parse(last_update_date)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
                  
         
     | 
| 
      
 77 
     | 
    
         
            +
                  def self.find_by_id(project_id, id)
         
     | 
| 
      
 78 
     | 
    
         
            +
                    project = self.rally_project(project_id)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    # Rally Ruby REST API expects IDs as strings
         
     | 
| 
      
 80 
     | 
    
         
            +
                    # For id.to_s see note on Project::id
         
     | 
| 
      
 81 
     | 
    
         
            +
                    query_result = TicketMaster::Provider::Rally.rally.find(:artifact, :fetch => true, :project => project) { equal :object_i_d, id.to_s }
         
     | 
| 
      
 82 
     | 
    
         
            +
                    self.new query_result.first, project_id
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  # Accepts a project id and attributes hash and returns all 
         
     | 
| 
      
 86 
     | 
    
         
            +
                  # tickets matching the project and those attributes in an array
         
     | 
| 
      
 87 
     | 
    
         
            +
                  # Should return all project tickets if the attributes hash is empty
         
     | 
| 
      
 88 
     | 
    
         
            +
                  def self.find_by_attributes(project_id, attributes = {})
         
     | 
| 
      
 89 
     | 
    
         
            +
                    self.search(project_id, attributes)
         
     | 
| 
      
 90 
     | 
    
         
            +
                  end            
         
     | 
| 
      
 91 
     | 
    
         
            +
                  
         
     | 
| 
      
 92 
     | 
    
         
            +
                  # This is a helper method to find
         
     | 
| 
      
 93 
     | 
    
         
            +
                  def self.search(project_id, options = {}, limit = 1000)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    project = self.rally_project(project_id)
         
     | 
| 
      
 95 
     | 
    
         
            +
                    search_type = options.delete(:type_as_symbol) || :artifact
         
     | 
| 
      
 96 
     | 
    
         
            +
                    # Convert Ticketmaster hash keys to Rally hash keys for Rally query params
         
     | 
| 
      
 97 
     | 
    
         
            +
                    query_parameters = self.to_rally_query_parameters(options) 
         
     | 
| 
      
 98 
     | 
    
         
            +
                    query_result = TicketMaster::Provider::Rally.rally.find_all(search_type, :project => project){ 
         
     | 
| 
      
 99 
     | 
    
         
            +
                      query_parameters.each do |key, value|
         
     | 
| 
      
 100 
     | 
    
         
            +
                        equal key, value
         
     | 
| 
      
 101 
     | 
    
         
            +
                      end
         
     | 
| 
      
 102 
     | 
    
         
            +
                    }
         
     | 
| 
      
 103 
     | 
    
         
            +
                    tickets = query_result.collect do |ticket| 
         
     | 
| 
      
 104 
     | 
    
         
            +
                      self.new ticket, project_id
         
     | 
| 
      
 105 
     | 
    
         
            +
                    end
         
     | 
| 
      
 106 
     | 
    
         
            +
                    search_by_attribute(tickets, options, limit)
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
                  
         
     | 
| 
      
 109 
     | 
    
         
            +
                  def self.create(*options)
         
     | 
| 
      
 110 
     | 
    
         
            +
                    options = options.shift
         
     | 
| 
      
 111 
     | 
    
         
            +
                    project = self.rally_project(options[:project_id])
         
     | 
| 
      
 112 
     | 
    
         
            +
                    ticket = self.to_rally_object(options)
         
     | 
| 
      
 113 
     | 
    
         
            +
                    ticket[:project] = project
         
     | 
| 
      
 114 
     | 
    
         
            +
                    # Not sure about making the defect the default here, thoughts?
         
     | 
| 
      
 115 
     | 
    
         
            +
                    new_type = options[:type_as_symbol] || :defect
         
     | 
| 
      
 116 
     | 
    
         
            +
                    new_ticket = TicketMaster::Provider::Rally.rally.create(new_type, ticket)
         
     | 
| 
      
 117 
     | 
    
         
            +
                    self.new new_ticket
         
     | 
| 
      
 118 
     | 
    
         
            +
                  end
         
     | 
| 
      
 119 
     | 
    
         
            +
                  
         
     | 
| 
      
 120 
     | 
    
         
            +
                  def save
         
     | 
| 
      
 121 
     | 
    
         
            +
                    if self[:oid].empty?
         
     | 
| 
      
 122 
     | 
    
         
            +
                      @system_data[:client].save!
         
     | 
| 
      
 123 
     | 
    
         
            +
                    else
         
     | 
| 
      
 124 
     | 
    
         
            +
                      ticket = self.class.to_rally_object(self)
         
     | 
| 
      
 125 
     | 
    
         
            +
                      ticket_updated = @system_data[:client].update(ticket)
         
     | 
| 
      
 126 
     | 
    
         
            +
                      # Update Ticketmaster Ticket object updated_at attribute
         
     | 
| 
      
 127 
     | 
    
         
            +
                      self.updated_at = ticket_updated.last_update_date
         
     | 
| 
      
 128 
     | 
    
         
            +
                    end
         
     | 
| 
      
 129 
     | 
    
         
            +
                  end
         
     | 
| 
      
 130 
     | 
    
         
            +
                              
         
     | 
| 
      
 131 
     | 
    
         
            +
                  private
         
     | 
| 
      
 132 
     | 
    
         
            +
                  
         
     | 
| 
      
 133 
     | 
    
         
            +
                    def self.rally_project(project_id)
         
     | 
| 
      
 134 
     | 
    
         
            +
                      ticketmaster_project = provider_parent(self)::Project.find_by_id(project_id)
         
     | 
| 
      
 135 
     | 
    
         
            +
                      ticketmaster_project.system_data[:client]
         
     | 
| 
      
 136 
     | 
    
         
            +
                    end
         
     | 
| 
      
 137 
     | 
    
         
            +
                    
         
     | 
| 
      
 138 
     | 
    
         
            +
                    def self.to_rally_object(hash)
         
     | 
| 
      
 139 
     | 
    
         
            +
                      ticket = {
         
     | 
| 
      
 140 
     | 
    
         
            +
                        :name => hash[:title],
         
     | 
| 
      
 141 
     | 
    
         
            +
                        :description => hash[:description],
         
     | 
| 
      
 142 
     | 
    
         
            +
                        :schedule_state => hash[:resolution] ||= "Defined", 
         
     | 
| 
      
 143 
     | 
    
         
            +
                        :state => hash[:status] ||= "Submitted"     
         
     | 
| 
      
 144 
     | 
    
         
            +
                      }
         
     | 
| 
      
 145 
     | 
    
         
            +
                      # Rally optional attributes
         
     | 
| 
      
 146 
     | 
    
         
            +
                      ticket[:submitted_by] = hash[:requestor] if hash[:requestor]
         
     | 
| 
      
 147 
     | 
    
         
            +
                      ticket[:owner] = hash[:assignee] if hash[:assignee]
         
     | 
| 
      
 148 
     | 
    
         
            +
                      ticket[:priority] = hash[:priority] if hash[:priority]
         
     | 
| 
      
 149 
     | 
    
         
            +
                      ticket[:work_product] = hash[:work_product] if hash[:work_product]
         
     | 
| 
      
 150 
     | 
    
         
            +
                      ticket          
         
     | 
| 
      
 151 
     | 
    
         
            +
                    end
         
     | 
| 
      
 152 
     | 
    
         
            +
                    
         
     | 
| 
      
 153 
     | 
    
         
            +
                    # Transform options hash into query parameters block
         
     | 
| 
      
 154 
     | 
    
         
            +
                    def self.to_rally_query_parameters(hash)
         
     | 
| 
      
 155 
     | 
    
         
            +
                      query_parameters = {}
         
     | 
| 
      
 156 
     | 
    
         
            +
                      query_parameters[:schedule_state] = hash[:resolution] ? hash[:resolution] : "Defined"    
         
     | 
| 
      
 157 
     | 
    
         
            +
                      query_parameters[:state] = hash[:status] ? hash[:status] : "Submitted"    
         
     | 
| 
      
 158 
     | 
    
         
            +
                      query_parameters[:object_i_d] = hash[:id].to_s if hash[:id]
         
     | 
| 
      
 159 
     | 
    
         
            +
                      query_parameters[:name] = hash[:title] if hash[:title]
         
     | 
| 
      
 160 
     | 
    
         
            +
                      query_parameters[:description] = hash[:description] if hash[:description]
         
     | 
| 
      
 161 
     | 
    
         
            +
                      query_parameters[:submitted_by] = hash[:requestor] if hash[:requestor]
         
     | 
| 
      
 162 
     | 
    
         
            +
                      query_parameters[:owner] = hash[:assignee] if hash[:assignee]
         
     | 
| 
      
 163 
     | 
    
         
            +
                      query_parameters[:priority] = hash[:priority] if hash[:priority]
         
     | 
| 
      
 164 
     | 
    
         
            +
                      query_parameters[:work_product] = hash[:work_product] if hash[:work_product]
         
     | 
| 
      
 165 
     | 
    
         
            +
                      query_parameters
         
     | 
| 
      
 166 
     | 
    
         
            +
                    end
         
     | 
| 
      
 167 
     | 
    
         
            +
                    
         
     | 
| 
      
 168 
     | 
    
         
            +
                end
         
     | 
| 
      
 169 
     | 
    
         
            +
              end
         
     | 
| 
      
 170 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rally_rest_api'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'time'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            #RALLY_LOGGER_PATH = nil
         
     | 
| 
      
 6 
     | 
    
         
            +
            # Turn on Rally REST API logging by setting constant to path
         
     | 
| 
      
 7 
     | 
    
         
            +
            RALLY_LOGGER_PATH = File.join(File.dirname(__FILE__), '..', 'log', 'rally.log')
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            if RALLY_LOGGER_PATH && File.exists?(File.dirname(RALLY_LOGGER_PATH))
         
     | 
| 
      
 10 
     | 
    
         
            +
              require 'logger'
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            %w{ rally ticket project comment }.each do |f|
         
     | 
| 
      
 14 
     | 
    
         
            +
              require File.dirname(__FILE__) + '/provider/' + f + '.rb';
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
    
        data/log/.keep
    ADDED
    
    | 
         
            File without changes
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Ticketmaster::Provider::Rally::Comment" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:all) do 
         
     | 
| 
      
 5 
     | 
    
         
            +
                @project_id = 2712835688
         
     | 
| 
      
 6 
     | 
    
         
            +
                @ticket_id = 2780205298
         
     | 
| 
      
 7 
     | 
    
         
            +
                @comment_id = 2988719307
         
     | 
| 
      
 8 
     | 
    
         
            +
                @comment_author = "sfw@simeonfosterwillbanks.com"
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                @ticketmaster = TicketMaster.new(:rally, {:url => 'https://community.rallydev.com/slm', 
         
     | 
| 
      
 13 
     | 
    
         
            +
                                                          :username => 'ticketmaster-rally@simeonfosterwillbanks.com', 
         
     | 
| 
      
 14 
     | 
    
         
            +
                                                          :password => 'Password'})
         
     | 
| 
      
 15 
     | 
    
         
            +
                @project = @ticketmaster.project(@project_id)
         
     | 
| 
      
 16 
     | 
    
         
            +
                @klass = TicketMaster::Provider::Rally::Comment
         
     | 
| 
      
 17 
     | 
    
         
            +
                @ticket = @project.ticket(:id => @ticket_id)
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              it "should be able to load all comments" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                @ticket.comments.should be_an_instance_of(Array)
         
     | 
| 
      
 22 
     | 
    
         
            +
                @ticket.comments.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
              
         
     | 
| 
      
 25 
     | 
    
         
            +
              it "should be able to load all comments based on array of ids" do 
         
     | 
| 
      
 26 
     | 
    
         
            +
                comments = @ticket.comments([@comment_id])
         
     | 
| 
      
 27 
     | 
    
         
            +
                comments.should be_an_instance_of(Array)
         
     | 
| 
      
 28 
     | 
    
         
            +
                comments.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 29 
     | 
    
         
            +
                comments.first.author.should == @comment_author
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              it "should be able to load all comments based on attributes" do 
         
     | 
| 
      
 33 
     | 
    
         
            +
                comments = @ticket.comments(:id => @comment_id)
         
     | 
| 
      
 34 
     | 
    
         
            +
                comments.should be_an_instance_of(Array)
         
     | 
| 
      
 35 
     | 
    
         
            +
                comments.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 36 
     | 
    
         
            +
                comments.first.author.should == @comment_author
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
               
         
     | 
| 
      
 39 
     | 
    
         
            +
              it "should be able to create a new comment" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                # Add discussion for User Story US8: Order picture package
         
     | 
| 
      
 41 
     | 
    
         
            +
                ticket = @project.ticket(:id => 2712836091)
         
     | 
| 
      
 42 
     | 
    
         
            +
                comment = ticket.comment!(:body => 'Pictures will be available for purchase!')
         
     | 
| 
      
 43 
     | 
    
         
            +
                comment.should be_an_instance_of(@klass)
         
     | 
| 
      
 44 
     | 
    
         
            +
              end 
         
     | 
| 
      
 45 
     | 
    
         
            +
               
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -0,0 +1,54 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Ticketmaster::Provider::Rally::Project" do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              before(:all) do 
         
     | 
| 
      
 6 
     | 
    
         
            +
                @project_name = "Sample Project"
         
     | 
| 
      
 7 
     | 
    
         
            +
                @project_id = 2712835688
         
     | 
| 
      
 8 
     | 
    
         
            +
                @project_created_at = "Tue Jan 18 15:40:28 UTC 2011"
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 12 
     | 
    
         
            +
                @ticketmaster = TicketMaster.new(:rally, {:url => 'https://community.rallydev.com/slm', 
         
     | 
| 
      
 13 
     | 
    
         
            +
                                                          :username => 'ticketmaster-rally@simeonfosterwillbanks.com', 
         
     | 
| 
      
 14 
     | 
    
         
            +
                                                          :password => 'Password'})
         
     | 
| 
      
 15 
     | 
    
         
            +
                @klass = TicketMaster::Provider::Rally::Project
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              it "should be able to load all projects" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                @ticketmaster.projects.should be_an_instance_of(Array)
         
     | 
| 
      
 20 
     | 
    
         
            +
                @ticketmaster.projects.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              it "should be able to find a project by id" do
         
     | 
| 
      
 24 
     | 
    
         
            +
                project = @ticketmaster.project(@project_id)
         
     | 
| 
      
 25 
     | 
    
         
            +
                project.should be_an_instance_of(@klass)
         
     | 
| 
      
 26 
     | 
    
         
            +
                project.name.should == @project_name
         
     | 
| 
      
 27 
     | 
    
         
            +
                project.id.should == @project_id
         
     | 
| 
      
 28 
     | 
    
         
            +
                project.created_at.utc.strftime('%a %b %d %H:%M:%S UTC %Y').should == @project_created_at
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              it "should be able to load all projects from an array of ids" do 
         
     | 
| 
      
 32 
     | 
    
         
            +
                projects = @ticketmaster.projects([@project_id])
         
     | 
| 
      
 33 
     | 
    
         
            +
                projects.should be_an_instance_of(Array)
         
     | 
| 
      
 34 
     | 
    
         
            +
                projects.first.should be_an_instance_of(@klass)    
         
     | 
| 
      
 35 
     | 
    
         
            +
                projects.first.name.should == @project_name
         
     | 
| 
      
 36 
     | 
    
         
            +
                projects.first.id.should == @project_id    
         
     | 
| 
      
 37 
     | 
    
         
            +
                projects.first.created_at.utc.strftime('%a %b %d %H:%M:%S UTC %Y').should == @project_created_at
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              it "should be able to load all projects from attributes" do 
         
     | 
| 
      
 41 
     | 
    
         
            +
                projects = @ticketmaster.projects(:name => @project_name)
         
     | 
| 
      
 42 
     | 
    
         
            +
                projects.should be_an_instance_of(Array)
         
     | 
| 
      
 43 
     | 
    
         
            +
                projects.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 44 
     | 
    
         
            +
                projects.first.name.should == @project_name
         
     | 
| 
      
 45 
     | 
    
         
            +
                projects.first.id.should == @project_id    
         
     | 
| 
      
 46 
     | 
    
         
            +
                projects.first.created_at.utc.strftime('%a %b %d %H:%M:%S UTC %Y').should == @project_created_at
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
              
         
     | 
| 
      
 49 
     | 
    
         
            +
              it "should be able to load projects using the find method" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                @ticketmaster.project.should == @klass
         
     | 
| 
      
 51 
     | 
    
         
            +
                @ticketmaster.project.find(@project_id).should be_an_instance_of(@klass)
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         
     | 
| 
      
 2 
     | 
    
         
            +
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'ticketmaster'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'ticketmaster-rally'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'rspec'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            # Requires supporting files with custom matchers and macros, etc,
         
     | 
| 
      
 9 
     | 
    
         
            +
            # in ./support/ and its subdirectories.
         
     | 
| 
      
 10 
     | 
    
         
            +
            Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            RSpec.configure do |config|
         
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Ticketmaster::Provider::Rally" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              
         
     | 
| 
      
 5 
     | 
    
         
            +
              before(:each) do 
         
     | 
| 
      
 6 
     | 
    
         
            +
                @auth = {:url => 'https://community.rallydev.com/slm', 
         
     | 
| 
      
 7 
     | 
    
         
            +
                         :username => 'ticketmaster-rally@simeonfosterwillbanks.com', 
         
     | 
| 
      
 8 
     | 
    
         
            +
                         :password => 'Password'}
         
     | 
| 
      
 9 
     | 
    
         
            +
                @ticketmaster = TicketMaster.new(:rally, @auth)
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              it "should be able to instantiate a new instance directly" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                @ticketmaster = TicketMaster::Provider::Rally.new(@auth)
         
     | 
| 
      
 14 
     | 
    
         
            +
                @ticketmaster.should be_an_instance_of(TicketMaster)
         
     | 
| 
      
 15 
     | 
    
         
            +
                @ticketmaster.should be_a_kind_of(TicketMaster::Provider::Rally)
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              it "should be able to instantiate a new instance from parent" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                @ticketmaster.should be_an_instance_of(TicketMaster)
         
     | 
| 
      
 20 
     | 
    
         
            +
                @ticketmaster.should be_a_kind_of(TicketMaster::Provider::Rally)
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              it "should be a valid instance" do 
         
     | 
| 
      
 24 
     | 
    
         
            +
                @ticketmaster.valid?.should be_true
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,114 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Ticketmaster::Provider::Rally::Ticket" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:all) do 
         
     | 
| 
      
 5 
     | 
    
         
            +
                @project_name = "Sample Project"
         
     | 
| 
      
 6 
     | 
    
         
            +
                @project_id = 2712835688
         
     | 
| 
      
 7 
     | 
    
         
            +
                @ticket_id = 2780205298
         
     | 
| 
      
 8 
     | 
    
         
            +
                @ticket_title = "Safari email alert has wrong subject"
         
     | 
| 
      
 9 
     | 
    
         
            +
                @ticket_description = "The safari email alert message is 'Safari Email.' It should be 'Awesome Safari Email.'"
         
     | 
| 
      
 10 
     | 
    
         
            +
                @ticket_requestor = "sfw@simeonfosterwillbanks.com"
         
     | 
| 
      
 11 
     | 
    
         
            +
                @ticket_resolution = "Defined"
         
     | 
| 
      
 12 
     | 
    
         
            +
                @ticket_status = "Submitted"
         
     | 
| 
      
 13 
     | 
    
         
            +
                @ticket_created_at = "Sat Jan 29 19:35:56 UTC 2011"
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 17 
     | 
    
         
            +
                @ticketmaster = TicketMaster.new(:rally, {:url => 'https://community.rallydev.com/slm', 
         
     | 
| 
      
 18 
     | 
    
         
            +
                                                          :username => 'ticketmaster-rally@simeonfosterwillbanks.com', 
         
     | 
| 
      
 19 
     | 
    
         
            +
                                                          :password => 'Password'})
         
     | 
| 
      
 20 
     | 
    
         
            +
                @project = @ticketmaster.project(@project_id)
         
     | 
| 
      
 21 
     | 
    
         
            +
                @klass = TicketMaster::Provider::Rally::Ticket
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
              
         
     | 
| 
      
 24 
     | 
    
         
            +
              it "should return the ticket class" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                @project.ticket.should == @klass
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              it "should be able to load all tickets" do 
         
     | 
| 
      
 29 
     | 
    
         
            +
                tickets = @project.tickets
         
     | 
| 
      
 30 
     | 
    
         
            +
                tickets.should be_an_instance_of(Array)
         
     | 
| 
      
 31 
     | 
    
         
            +
                tickets.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              it "should be able to load all tickets based on array of id's" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                tickets = @project.tickets([@ticket_id])
         
     | 
| 
      
 36 
     | 
    
         
            +
                tickets.should be_an_instance_of(Array)
         
     | 
| 
      
 37 
     | 
    
         
            +
                tickets.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 38 
     | 
    
         
            +
                tickets.first.description.should == @ticket_description
         
     | 
| 
      
 39 
     | 
    
         
            +
                tickets.first.project_id.should == @project_id
         
     | 
| 
      
 40 
     | 
    
         
            +
                tickets.first.created_at.utc.strftime('%a %b %d %H:%M:%S UTC %Y').should == @ticket_created_at
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              it "should be able to load a single ticket based on attributes"  do
         
     | 
| 
      
 44 
     | 
    
         
            +
                ticket = @project.ticket(:id => @ticket_id)
         
     | 
| 
      
 45 
     | 
    
         
            +
                ticket.should be_an_instance_of(@klass)
         
     | 
| 
      
 46 
     | 
    
         
            +
                ticket.description.should == @ticket_description
         
     | 
| 
      
 47 
     | 
    
         
            +
                ticket.project_id.should == @project_id
         
     | 
| 
      
 48 
     | 
    
         
            +
                ticket.created_at.utc.strftime('%a %b %d %H:%M:%S UTC %Y').should == @ticket_created_at
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
              
         
     | 
| 
      
 51 
     | 
    
         
            +
              it "should be able to load all tickets using attributes" do
         
     | 
| 
      
 52 
     | 
    
         
            +
                tickets = @project.tickets(:status => "Submitted")
         
     | 
| 
      
 53 
     | 
    
         
            +
                tickets.should be_an_instance_of(Array)
         
     | 
| 
      
 54 
     | 
    
         
            +
                tickets.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 55 
     | 
    
         
            +
                tickets.first.description.should == @ticket_description
         
     | 
| 
      
 56 
     | 
    
         
            +
                tickets.first.project_id.should == @project_id
         
     | 
| 
      
 57 
     | 
    
         
            +
                tickets.first.created_at.utc.strftime('%a %b %d %H:%M:%S UTC %Y').should == @ticket_created_at
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              it "should be able to load all tickets of a given type" do
         
     | 
| 
      
 61 
     | 
    
         
            +
                tickets = @project.tickets(:type_as_symbol => :defect)
         
     | 
| 
      
 62 
     | 
    
         
            +
                tickets.should be_an_instance_of(Array)
         
     | 
| 
      
 63 
     | 
    
         
            +
                tickets.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 64 
     | 
    
         
            +
                tickets.first.description.should == @ticket_description
         
     | 
| 
      
 65 
     | 
    
         
            +
                tickets.first.project_id.should == @project_id
         
     | 
| 
      
 66 
     | 
    
         
            +
                tickets.collect do |tick|
         
     | 
| 
      
 67 
     | 
    
         
            +
                  tick.type_as_symbol.should == :defect
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                tickets = @project.tickets(:type_as_symbol => :task)
         
     | 
| 
      
 71 
     | 
    
         
            +
                tickets.should be_an_instance_of(Array)
         
     | 
| 
      
 72 
     | 
    
         
            +
                tickets.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 73 
     | 
    
         
            +
                tickets.first.project_id.should == @project_id
         
     | 
| 
      
 74 
     | 
    
         
            +
                tickets.collect do |tick|
         
     | 
| 
      
 75 
     | 
    
         
            +
                  tick.type_as_symbol.should == :task
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                tickets = @project.tickets(:type_as_symbol => :hierarchical_requirement)
         
     | 
| 
      
 79 
     | 
    
         
            +
                tickets.should be_an_instance_of(Array)
         
     | 
| 
      
 80 
     | 
    
         
            +
                tickets.first.should be_an_instance_of(@klass)
         
     | 
| 
      
 81 
     | 
    
         
            +
                tickets.first.project_id.should == @project_id
         
     | 
| 
      
 82 
     | 
    
         
            +
                tickets.collect do |tick|
         
     | 
| 
      
 83 
     | 
    
         
            +
                  tick.type_as_symbol.should == :hierarchical_requirement
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
              it "should be able to update and save a ticket" do
         
     | 
| 
      
 89 
     | 
    
         
            +
                ticket = @project.ticket(@ticket_id)
         
     | 
| 
      
 90 
     | 
    
         
            +
                ticket.description = "A brand new awesome description"
         
     | 
| 
      
 91 
     | 
    
         
            +
                ticket.status = "Closed"
         
     | 
| 
      
 92 
     | 
    
         
            +
                ticket.save
         
     | 
| 
      
 93 
     | 
    
         
            +
                ticket.description.should == 'A brand new awesome description'
         
     | 
| 
      
 94 
     | 
    
         
            +
                ticket.status.should == "Closed"
         
     | 
| 
      
 95 
     | 
    
         
            +
                ticket.description = @ticket_description
         
     | 
| 
      
 96 
     | 
    
         
            +
                ticket.status = @ticket_status
         
     | 
| 
      
 97 
     | 
    
         
            +
                ticket.save
         
     | 
| 
      
 98 
     | 
    
         
            +
                ticket.description.should == @ticket_description
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
              
         
     | 
| 
      
 101 
     | 
    
         
            +
              it "should be able to create a new ticket" do
         
     | 
| 
      
 102 
     | 
    
         
            +
                ticket = @project.ticket!({:title => 'Testing', :description => "Here we go"})
         
     | 
| 
      
 103 
     | 
    
         
            +
                ticket.should be_an_instance_of(@klass)
         
     | 
| 
      
 104 
     | 
    
         
            +
                ticket.type_as_symbol.should == :defect
         
     | 
| 
      
 105 
     | 
    
         
            +
              end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
              it "should be able to create a new ticket" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                ticket = @project.ticket!({:title => 'TaskTesting', :description => "Here we go tasks", :type_as_symbol => :task, :status => "Defined", :work_product => @project.tickets(:type_as_symbol => :defect).first.oid})
         
     | 
| 
      
 109 
     | 
    
         
            +
                ticket.should be_an_instance_of(@klass)
         
     | 
| 
      
 110 
     | 
    
         
            +
                ticket.type_as_symbol.should == :task
         
     | 
| 
      
 111 
     | 
    
         
            +
              end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,92 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Generated by jeweler
         
     | 
| 
      
 2 
     | 
    
         
            +
            # DO NOT EDIT THIS FILE DIRECTLY
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
         
     | 
| 
      
 4 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 7 
     | 
    
         
            +
              s.name = %q{ticketmaster-rally}
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.1.0"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.authors = ["Simeon F. Willbanks", "Rob Kaufman", "Rafael George"]
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2011-07-12}
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.description = %q{This is a provider for ticketmaster. It provides interoperability with Rally and it's project planning system through the ticketmaster gem}
         
     | 
| 
      
 14 
     | 
    
         
            +
              s.email = ["sfw@simeonfosterwillbanks.com", "rob@notch8.com", "george.rafael@gmail.com"]
         
     | 
| 
      
 15 
     | 
    
         
            +
              s.extra_rdoc_files = [
         
     | 
| 
      
 16 
     | 
    
         
            +
                "LICENSE.txt",
         
     | 
| 
      
 17 
     | 
    
         
            +
                "README.md"
         
     | 
| 
      
 18 
     | 
    
         
            +
              ]
         
     | 
| 
      
 19 
     | 
    
         
            +
              s.files = [
         
     | 
| 
      
 20 
     | 
    
         
            +
                ".document",
         
     | 
| 
      
 21 
     | 
    
         
            +
                ".rspec",
         
     | 
| 
      
 22 
     | 
    
         
            +
                "Gemfile",
         
     | 
| 
      
 23 
     | 
    
         
            +
                "Gemfile.lock",
         
     | 
| 
      
 24 
     | 
    
         
            +
                "LICENSE.txt",
         
     | 
| 
      
 25 
     | 
    
         
            +
                "README.md",
         
     | 
| 
      
 26 
     | 
    
         
            +
                "Rakefile",
         
     | 
| 
      
 27 
     | 
    
         
            +
                "VERSION",
         
     | 
| 
      
 28 
     | 
    
         
            +
                "lib/provider/comment.rb",
         
     | 
| 
      
 29 
     | 
    
         
            +
                "lib/provider/project.rb",
         
     | 
| 
      
 30 
     | 
    
         
            +
                "lib/provider/rally.rb",
         
     | 
| 
      
 31 
     | 
    
         
            +
                "lib/provider/ticket.rb",
         
     | 
| 
      
 32 
     | 
    
         
            +
                "lib/ticketmaster-rally.rb",
         
     | 
| 
      
 33 
     | 
    
         
            +
                "log/.keep",
         
     | 
| 
      
 34 
     | 
    
         
            +
                "spec/comments_spec.rb",
         
     | 
| 
      
 35 
     | 
    
         
            +
                "spec/fixtures/tickets.xml",
         
     | 
| 
      
 36 
     | 
    
         
            +
                "spec/projects_spec.rb",
         
     | 
| 
      
 37 
     | 
    
         
            +
                "spec/spec_helper.rb",
         
     | 
| 
      
 38 
     | 
    
         
            +
                "spec/ticketmaster-rally_spec.rb",
         
     | 
| 
      
 39 
     | 
    
         
            +
                "spec/tickets_spec.rb",
         
     | 
| 
      
 40 
     | 
    
         
            +
                "ticketmaster-rally.gemspec"
         
     | 
| 
      
 41 
     | 
    
         
            +
              ]
         
     | 
| 
      
 42 
     | 
    
         
            +
              s.homepage = %q{http://github.com/simeonwillbanks/ticketmaster-rally}
         
     | 
| 
      
 43 
     | 
    
         
            +
              s.licenses = ["MIT"]
         
     | 
| 
      
 44 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 45 
     | 
    
         
            +
              s.rubygems_version = %q{1.3.7}
         
     | 
| 
      
 46 
     | 
    
         
            +
              s.summary = %q{Ticketmaster provider for Rally's Ruby REST API}
         
     | 
| 
      
 47 
     | 
    
         
            +
              s.test_files = [
         
     | 
| 
      
 48 
     | 
    
         
            +
                "spec/comments_spec.rb",
         
     | 
| 
      
 49 
     | 
    
         
            +
                "spec/projects_spec.rb",
         
     | 
| 
      
 50 
     | 
    
         
            +
                "spec/spec_helper.rb",
         
     | 
| 
      
 51 
     | 
    
         
            +
                "spec/ticketmaster-rally_spec.rb",
         
     | 
| 
      
 52 
     | 
    
         
            +
                "spec/tickets_spec.rb"
         
     | 
| 
      
 53 
     | 
    
         
            +
              ]
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              if s.respond_to? :specification_version then
         
     | 
| 
      
 56 
     | 
    
         
            +
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         
     | 
| 
      
 57 
     | 
    
         
            +
                s.specification_version = 3
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         
     | 
| 
      
 60 
     | 
    
         
            +
                  s.add_runtime_dependency(%q<ticketmaster>, ["= 0.6.6"])
         
     | 
| 
      
 61 
     | 
    
         
            +
                  s.add_runtime_dependency(%q<rally_rest_api>, ["~> 1.0.3"])
         
     | 
| 
      
 62 
     | 
    
         
            +
                  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
         
     | 
| 
      
 63 
     | 
    
         
            +
                  s.add_development_dependency(%q<yard>, ["~> 0.7.0"])
         
     | 
| 
      
 64 
     | 
    
         
            +
                  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
         
     | 
| 
      
 65 
     | 
    
         
            +
                  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
         
     | 
| 
      
 66 
     | 
    
         
            +
                  s.add_development_dependency(%q<rcov>, [">= 0"])
         
     | 
| 
      
 67 
     | 
    
         
            +
                  s.add_development_dependency(%q<ruby-debug>, [">= 0"])
         
     | 
| 
      
 68 
     | 
    
         
            +
                  s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
         
     | 
| 
      
 69 
     | 
    
         
            +
                else
         
     | 
| 
      
 70 
     | 
    
         
            +
                  s.add_dependency(%q<ticketmaster>, ["= 0.6.6"])
         
     | 
| 
      
 71 
     | 
    
         
            +
                  s.add_dependency(%q<rally_rest_api>, ["~> 1.0.3"])
         
     | 
| 
      
 72 
     | 
    
         
            +
                  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
         
     | 
| 
      
 73 
     | 
    
         
            +
                  s.add_dependency(%q<yard>, ["~> 0.7.0"])
         
     | 
| 
      
 74 
     | 
    
         
            +
                  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
         
     | 
| 
      
 75 
     | 
    
         
            +
                  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
         
     | 
| 
      
 76 
     | 
    
         
            +
                  s.add_dependency(%q<rcov>, [">= 0"])
         
     | 
| 
      
 77 
     | 
    
         
            +
                  s.add_dependency(%q<ruby-debug>, [">= 0"])
         
     | 
| 
      
 78 
     | 
    
         
            +
                  s.add_dependency(%q<ruby-debug19>, [">= 0"])
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
              else
         
     | 
| 
      
 81 
     | 
    
         
            +
                s.add_dependency(%q<ticketmaster>, ["= 0.6.6"])
         
     | 
| 
      
 82 
     | 
    
         
            +
                s.add_dependency(%q<rally_rest_api>, ["~> 1.0.3"])
         
     | 
| 
      
 83 
     | 
    
         
            +
                s.add_dependency(%q<rspec>, ["~> 2.3.0"])
         
     | 
| 
      
 84 
     | 
    
         
            +
                s.add_dependency(%q<yard>, ["~> 0.7.0"])
         
     | 
| 
      
 85 
     | 
    
         
            +
                s.add_dependency(%q<bundler>, ["~> 1.0.0"])
         
     | 
| 
      
 86 
     | 
    
         
            +
                s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
         
     | 
| 
      
 87 
     | 
    
         
            +
                s.add_dependency(%q<rcov>, [">= 0"])
         
     | 
| 
      
 88 
     | 
    
         
            +
                s.add_dependency(%q<ruby-debug>, [">= 0"])
         
     | 
| 
      
 89 
     | 
    
         
            +
                s.add_dependency(%q<ruby-debug19>, [">= 0"])
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
            end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,234 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification 
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: ticketmaster-rally
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version 
         
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 27
         
     | 
| 
      
 5 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 6 
     | 
    
         
            +
              segments: 
         
     | 
| 
      
 7 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 8 
     | 
    
         
            +
              - 1
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
      
 11 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
            authors: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Simeon F. Willbanks
         
     | 
| 
      
 14 
     | 
    
         
            +
            - Rob Kaufman
         
     | 
| 
      
 15 
     | 
    
         
            +
            - Rafael George
         
     | 
| 
      
 16 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 17 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 18 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            date: 2011-07-12 00:00:00 -04:00
         
     | 
| 
      
 21 
     | 
    
         
            +
            default_executable: 
         
     | 
| 
      
 22 
     | 
    
         
            +
            dependencies: 
         
     | 
| 
      
 23 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 24 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 25 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 26 
     | 
    
         
            +
              name: ticketmaster
         
     | 
| 
      
 27 
     | 
    
         
            +
              version_requirements: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 28 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 29 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 30 
     | 
    
         
            +
                - - "="
         
     | 
| 
      
 31 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 32 
     | 
    
         
            +
                    hash: 11
         
     | 
| 
      
 33 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 34 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 35 
     | 
    
         
            +
                    - 6
         
     | 
| 
      
 36 
     | 
    
         
            +
                    - 6
         
     | 
| 
      
 37 
     | 
    
         
            +
                    version: 0.6.6
         
     | 
| 
      
 38 
     | 
    
         
            +
              requirement: *id001
         
     | 
| 
      
 39 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 40 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 41 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: rally_rest_api
         
     | 
| 
      
 43 
     | 
    
         
            +
              version_requirements: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 44 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 45 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 46 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 47 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 48 
     | 
    
         
            +
                    hash: 17
         
     | 
| 
      
 49 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 50 
     | 
    
         
            +
                    - 1
         
     | 
| 
      
 51 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 52 
     | 
    
         
            +
                    - 3
         
     | 
| 
      
 53 
     | 
    
         
            +
                    version: 1.0.3
         
     | 
| 
      
 54 
     | 
    
         
            +
              requirement: *id002
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 56 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 57 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 58 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 59 
     | 
    
         
            +
              version_requirements: &id003 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 60 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 61 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 62 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 63 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 64 
     | 
    
         
            +
                    hash: 3
         
     | 
| 
      
 65 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 66 
     | 
    
         
            +
                    - 2
         
     | 
| 
      
 67 
     | 
    
         
            +
                    - 3
         
     | 
| 
      
 68 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 69 
     | 
    
         
            +
                    version: 2.3.0
         
     | 
| 
      
 70 
     | 
    
         
            +
              requirement: *id003
         
     | 
| 
      
 71 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 72 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 73 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 74 
     | 
    
         
            +
              name: yard
         
     | 
| 
      
 75 
     | 
    
         
            +
              version_requirements: &id004 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 76 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 77 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 78 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 79 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 80 
     | 
    
         
            +
                    hash: 3
         
     | 
| 
      
 81 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 82 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 83 
     | 
    
         
            +
                    - 7
         
     | 
| 
      
 84 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 85 
     | 
    
         
            +
                    version: 0.7.0
         
     | 
| 
      
 86 
     | 
    
         
            +
              requirement: *id004
         
     | 
| 
      
 87 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 88 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 89 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 90 
     | 
    
         
            +
              name: bundler
         
     | 
| 
      
 91 
     | 
    
         
            +
              version_requirements: &id005 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 92 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 93 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 94 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 95 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 96 
     | 
    
         
            +
                    hash: 23
         
     | 
| 
      
 97 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 98 
     | 
    
         
            +
                    - 1
         
     | 
| 
      
 99 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 100 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 101 
     | 
    
         
            +
                    version: 1.0.0
         
     | 
| 
      
 102 
     | 
    
         
            +
              requirement: *id005
         
     | 
| 
      
 103 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 104 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 105 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 106 
     | 
    
         
            +
              name: jeweler
         
     | 
| 
      
 107 
     | 
    
         
            +
              version_requirements: &id006 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 108 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 109 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 110 
     | 
    
         
            +
                - - ~>
         
     | 
| 
      
 111 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 112 
     | 
    
         
            +
                    hash: 7
         
     | 
| 
      
 113 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 114 
     | 
    
         
            +
                    - 1
         
     | 
| 
      
 115 
     | 
    
         
            +
                    - 5
         
     | 
| 
      
 116 
     | 
    
         
            +
                    - 2
         
     | 
| 
      
 117 
     | 
    
         
            +
                    version: 1.5.2
         
     | 
| 
      
 118 
     | 
    
         
            +
              requirement: *id006
         
     | 
| 
      
 119 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 120 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 121 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 122 
     | 
    
         
            +
              name: rcov
         
     | 
| 
      
 123 
     | 
    
         
            +
              version_requirements: &id007 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 124 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 125 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 126 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 127 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 128 
     | 
    
         
            +
                    hash: 3
         
     | 
| 
      
 129 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 130 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 131 
     | 
    
         
            +
                    version: "0"
         
     | 
| 
      
 132 
     | 
    
         
            +
              requirement: *id007
         
     | 
| 
      
 133 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 134 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 135 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 136 
     | 
    
         
            +
              name: ruby-debug
         
     | 
| 
      
 137 
     | 
    
         
            +
              version_requirements: &id008 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 138 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 139 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 140 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 141 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 142 
     | 
    
         
            +
                    hash: 3
         
     | 
| 
      
 143 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 144 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 145 
     | 
    
         
            +
                    version: "0"
         
     | 
| 
      
 146 
     | 
    
         
            +
              requirement: *id008
         
     | 
| 
      
 147 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency 
         
     | 
| 
      
 148 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 149 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 150 
     | 
    
         
            +
              name: ruby-debug19
         
     | 
| 
      
 151 
     | 
    
         
            +
              version_requirements: &id009 !ruby/object:Gem::Requirement 
         
     | 
| 
      
 152 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 153 
     | 
    
         
            +
                requirements: 
         
     | 
| 
      
 154 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 155 
     | 
    
         
            +
                  - !ruby/object:Gem::Version 
         
     | 
| 
      
 156 
     | 
    
         
            +
                    hash: 3
         
     | 
| 
      
 157 
     | 
    
         
            +
                    segments: 
         
     | 
| 
      
 158 
     | 
    
         
            +
                    - 0
         
     | 
| 
      
 159 
     | 
    
         
            +
                    version: "0"
         
     | 
| 
      
 160 
     | 
    
         
            +
              requirement: *id009
         
     | 
| 
      
 161 
     | 
    
         
            +
            description: This is a provider for ticketmaster. It provides interoperability with Rally and it's project planning system through the ticketmaster gem
         
     | 
| 
      
 162 
     | 
    
         
            +
            email: 
         
     | 
| 
      
 163 
     | 
    
         
            +
            - sfw@simeonfosterwillbanks.com
         
     | 
| 
      
 164 
     | 
    
         
            +
            - rob@notch8.com
         
     | 
| 
      
 165 
     | 
    
         
            +
            - george.rafael@gmail.com
         
     | 
| 
      
 166 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
            extra_rdoc_files: 
         
     | 
| 
      
 171 
     | 
    
         
            +
            - LICENSE.txt
         
     | 
| 
      
 172 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 173 
     | 
    
         
            +
            files: 
         
     | 
| 
      
 174 
     | 
    
         
            +
            - .document
         
     | 
| 
      
 175 
     | 
    
         
            +
            - .rspec
         
     | 
| 
      
 176 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 177 
     | 
    
         
            +
            - Gemfile.lock
         
     | 
| 
      
 178 
     | 
    
         
            +
            - LICENSE.txt
         
     | 
| 
      
 179 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 180 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 181 
     | 
    
         
            +
            - VERSION
         
     | 
| 
      
 182 
     | 
    
         
            +
            - lib/provider/comment.rb
         
     | 
| 
      
 183 
     | 
    
         
            +
            - lib/provider/project.rb
         
     | 
| 
      
 184 
     | 
    
         
            +
            - lib/provider/rally.rb
         
     | 
| 
      
 185 
     | 
    
         
            +
            - lib/provider/ticket.rb
         
     | 
| 
      
 186 
     | 
    
         
            +
            - lib/ticketmaster-rally.rb
         
     | 
| 
      
 187 
     | 
    
         
            +
            - log/.keep
         
     | 
| 
      
 188 
     | 
    
         
            +
            - spec/comments_spec.rb
         
     | 
| 
      
 189 
     | 
    
         
            +
            - spec/fixtures/tickets.xml
         
     | 
| 
      
 190 
     | 
    
         
            +
            - spec/projects_spec.rb
         
     | 
| 
      
 191 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 192 
     | 
    
         
            +
            - spec/ticketmaster-rally_spec.rb
         
     | 
| 
      
 193 
     | 
    
         
            +
            - spec/tickets_spec.rb
         
     | 
| 
      
 194 
     | 
    
         
            +
            - ticketmaster-rally.gemspec
         
     | 
| 
      
 195 
     | 
    
         
            +
            has_rdoc: true
         
     | 
| 
      
 196 
     | 
    
         
            +
            homepage: http://github.com/simeonwillbanks/ticketmaster-rally
         
     | 
| 
      
 197 
     | 
    
         
            +
            licenses: 
         
     | 
| 
      
 198 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 199 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 200 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
            require_paths: 
         
     | 
| 
      
 203 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 204 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 205 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 206 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 207 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 208 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 209 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 210 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 211 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 212 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 213 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
      
 214 
     | 
    
         
            +
              none: false
         
     | 
| 
      
 215 
     | 
    
         
            +
              requirements: 
         
     | 
| 
      
 216 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 217 
     | 
    
         
            +
                - !ruby/object:Gem::Version 
         
     | 
| 
      
 218 
     | 
    
         
            +
                  hash: 3
         
     | 
| 
      
 219 
     | 
    
         
            +
                  segments: 
         
     | 
| 
      
 220 
     | 
    
         
            +
                  - 0
         
     | 
| 
      
 221 
     | 
    
         
            +
                  version: "0"
         
     | 
| 
      
 222 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 225 
     | 
    
         
            +
            rubygems_version: 1.3.7
         
     | 
| 
      
 226 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 227 
     | 
    
         
            +
            specification_version: 3
         
     | 
| 
      
 228 
     | 
    
         
            +
            summary: Ticketmaster provider for Rally's Ruby REST API
         
     | 
| 
      
 229 
     | 
    
         
            +
            test_files: 
         
     | 
| 
      
 230 
     | 
    
         
            +
            - spec/comments_spec.rb
         
     | 
| 
      
 231 
     | 
    
         
            +
            - spec/projects_spec.rb
         
     | 
| 
      
 232 
     | 
    
         
            +
            - spec/spec_helper.rb
         
     | 
| 
      
 233 
     | 
    
         
            +
            - spec/ticketmaster-rally_spec.rb
         
     | 
| 
      
 234 
     | 
    
         
            +
            - spec/tickets_spec.rb
         
     |