liquidplanner 0.0.2 → 0.0.3
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/HISTORY +9 -1
- data/examples/README +17 -4
- data/examples/create_task.rb +7 -2
- data/examples/post-commit.rb +102 -0
- data/examples/svn-post-commit.sh +11 -0
- data/lib/liquidplanner.rb +8 -7
- data/lib/liquidplanner/debug.rb +1 -1
- data/lib/liquidplanner/liquidplanner_resource.rb +5 -1
- data/lib/liquidplanner/resources/client.rb +1 -2
- data/lib/liquidplanner/resources/container.rb +2 -1
- data/lib/liquidplanner/resources/document.rb +0 -4
- data/lib/liquidplanner/resources/folder.rb +0 -1
- data/lib/liquidplanner/resources/leaf.rb +9 -5
- data/lib/liquidplanner/resources/member.rb +3 -0
- data/lib/liquidplanner/resources/movable.rb +13 -0
- data/lib/liquidplanner/resources/move_or_package.rb +23 -0
- data/lib/liquidplanner/resources/{tasklist.rb → package.rb} +2 -2
- data/lib/liquidplanner/resources/packageable.rb +13 -0
- data/lib/liquidplanner/resources/project.rb +1 -2
- data/lib/liquidplanner/resources/root.rb +6 -0
- data/lib/liquidplanner/resources/{item.rb → treeitem.rb} +18 -6
- data/lib/liquidplanner/resources/workspace.rb +27 -5
- metadata +14 -11
- data/lib/liquidplanner/resources/order.rb +0 -13
- data/lib/liquidplanner/resources/priority.rb +0 -13
- data/lib/liquidplanner/resources/relative_resource.rb +0 -12
    
        data/HISTORY
    CHANGED
    
    
    
        data/examples/README
    CHANGED
    
    | @@ -1,14 +1,27 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            Command Line Examples:
         | 
| 2 | 
            +
            ======================
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            Files: create_task.rb, list_tasks.rb, track_time.rb
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            All of these examples expect you to pass in your account name and workspace id, 
         | 
| 2 7 | 
             
            for instance:
         | 
| 3 8 |  | 
| 4 | 
            -
             | 
| 9 | 
            +
                ruby examples/list_tasks.rb alice@example.com 7
         | 
| 5 10 |  | 
| 6 11 | 
             
            If you set the VERBOSE environment variable, the examples will print out their
         | 
| 7 12 | 
             
            http requests to the console:
         | 
| 8 13 |  | 
| 9 | 
            -
             | 
| 14 | 
            +
                ruby examples/list_tasks.rb alice@example.com 7 --verbose
         | 
| 10 15 |  | 
| 11 16 | 
             
            These examples all use highline library for prompting the user.  Install the 
         | 
| 12 17 | 
             
            gem with:
         | 
| 13 18 |  | 
| 14 | 
            -
             | 
| 19 | 
            +
                sudo gem install highline
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            Source Control Management Examples:
         | 
| 22 | 
            +
            ===================================
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            Files: post-commit.rb, svn-post-commit.sh
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            This is a working example of integrating LiquidPlanner with SVN. See 
         | 
| 27 | 
            +
            post-commit.rb for more information.
         | 
    
        data/examples/create_task.rb
    CHANGED
    
    | @@ -13,6 +13,11 @@ email, password, space_id = get_credentials! | |
| 13 13 | 
             
            lp = LiquidPlanner::Base.new(:email=>email, :password=>password)
         | 
| 14 14 | 
             
            workspace = lp.workspaces(space_id)
         | 
| 15 15 |  | 
| 16 | 
            +
            unless parent = workspace.packages(:first) || workspace.projects(:first)
         | 
| 17 | 
            +
              say "There are no packages or projects in this workspace; cannot add a task."
         | 
| 18 | 
            +
              exit
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 16 21 | 
             
            # Ask for a task's name and estimate
         | 
| 17 22 | 
             
            say "Add a new task to '#{workspace.name}'"
         | 
| 18 23 | 
             
            name  = ask("New task name")
         | 
| @@ -21,8 +26,8 @@ high  = ask("Max effort", Float){|q| q.above = low} | |
| 21 26 |  | 
| 22 27 | 
             
            # Submit the task and estimate
         | 
| 23 28 | 
             
            say "Submitting: '#{name}' [#{low} - #{high}] to LiquidPlanner"
         | 
| 24 | 
            -
            task = workspace.create_task(:name=>name)
         | 
| 29 | 
            +
            task = workspace.create_task(:name=>name, :parent_id => parent.id)
         | 
| 25 30 | 
             
            task.create_estimate(:low=>low, :high=>high)
         | 
| 26 31 |  | 
| 27 32 | 
             
            # All done
         | 
| 28 | 
            -
            say "Added task"
         | 
| 33 | 
            +
            say "Added task"
         | 
| @@ -0,0 +1,102 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # This script is intended as a commit (or check-in, push, etc.) message
         | 
| 4 | 
            +
            # processor with your SCM (Subversion, git, etc.) of choice. It scans the
         | 
| 5 | 
            +
            # message for link(s) to tasks in LiquidPlanner, and creates a comment
         | 
| 6 | 
            +
            # on each such task containing the text of the commit message.
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # == Prerequisites
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
            # You'll need a LiquidPlanner account and the liquidplanner gem.
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            # == Usage
         | 
| 13 | 
            +
            #
         | 
| 14 | 
            +
            # The script takes a single command-line parameter, which is the path to a
         | 
| 15 | 
            +
            # YAML config file containing your LiquidPlanner credentials.
         | 
| 16 | 
            +
            #
         | 
| 17 | 
            +
            # So, you might create a post-commit.yml file containing:
         | 
| 18 | 
            +
            #   
         | 
| 19 | 
            +
            #   email:    your_email_address@example.com
         | 
| 20 | 
            +
            #   password: your_liquidplanner_password
         | 
| 21 | 
            +
            #
         | 
| 22 | 
            +
            # Then you pass the commit message to the script on its standard input.
         | 
| 23 | 
            +
            #
         | 
| 24 | 
            +
            # Initially, try placing a test message (containing at least one link to a
         | 
| 25 | 
            +
            # task in your LiquidPlanner workspace) in a file named commit_message.txt.
         | 
| 26 | 
            +
            # Then run a command:
         | 
| 27 | 
            +
            #
         | 
| 28 | 
            +
            #   cat commit_message.txt | ruby ./post-commit.rb post-commit.yml
         | 
| 29 | 
            +
            #
         | 
| 30 | 
            +
            # This should create a comment on the linked task.
         | 
| 31 | 
            +
            #
         | 
| 32 | 
            +
            # == Integrating with your SCM
         | 
| 33 | 
            +
            #
         | 
| 34 | 
            +
            # Now it's just a matter of invoking this script on each commit to your SCM.
         | 
| 35 | 
            +
            #
         | 
| 36 | 
            +
            # Refer to the docs for your system of choice; we've included an example for
         | 
| 37 | 
            +
            # Subversion in svn-post-commit.sh
         | 
| 38 | 
            +
            #
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            require 'rubygems'
         | 
| 41 | 
            +
            require 'liquidplanner'
         | 
| 42 | 
            +
            require 'cgi'
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            class LiquidPlannerCommitMessenger
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              # pattern for identifying task IDs in the message; this matches URLs copied
         | 
| 47 | 
            +
              # from LiquidPlanner, but you could choose to adopt a more compact notation
         | 
| 48 | 
            +
              # and modify this pattern accordingly
         | 
| 49 | 
            +
              #
         | 
| 50 | 
            +
              LINK_PATTERN = %r{https://app.liquidplanner.com/space/([0-9]+)/[^\/]+/show\?id=([0-9]+)}
         | 
| 51 | 
            +
             | 
| 52 | 
            +
              def initialize(email, password)
         | 
| 53 | 
            +
                @lp = LiquidPlanner::Base.new(:email => email, :password => password) 
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              # scan the message for one or more links to a LiquidPlanner task; for each
         | 
| 57 | 
            +
              # such link, create a comment on the referenced task containing the text of
         | 
| 58 | 
            +
              # the message
         | 
| 59 | 
            +
              def process_commit_message(message)
         | 
| 60 | 
            +
                comment = convert_message_to_comment(message)
         | 
| 61 | 
            +
                message.scan(LINK_PATTERN) do |space_id, task_id|
         | 
| 62 | 
            +
                  add_comment(space_id, task_id, comment)
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              protected
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              # create a comment on the given task in the given space,
         | 
| 69 | 
            +
              # if they exist
         | 
| 70 | 
            +
              def add_comment(space_id, task_id, comment)
         | 
| 71 | 
            +
                if space = @lp.workspaces(space_id)
         | 
| 72 | 
            +
                  if task = space.tasks(task_id)
         | 
| 73 | 
            +
                    task.create_comment(:comment => comment)
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              # convert the commit message to HTML comment
         | 
| 79 | 
            +
              def convert_message_to_comment(message)
         | 
| 80 | 
            +
                # escape HTML, so that it can be read as comment text rather than
         | 
| 81 | 
            +
                # interpreted as markup
         | 
| 82 | 
            +
                m = CGI::escapeHTML(message)
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                # compress runs of newlines, and convert to br tags
         | 
| 85 | 
            +
                m = m.gsub(/([\r?\n\r?]){3,}/, "\n\n").gsub(/\r?\n\r?/, "<br/>")
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                m
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            if $0 == __FILE__
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              config = YAML.load(File.read(ARGV[0]))
         | 
| 95 | 
            +
              email    = config["email"]
         | 
| 96 | 
            +
              password = config["password"]
         | 
| 97 | 
            +
             | 
| 98 | 
            +
              message = STDIN.read
         | 
| 99 | 
            +
              LiquidPlannerCommitMessenger.new(email, password).process_commit_message(message)
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            end
         | 
| 102 | 
            +
             | 
    
        data/lib/liquidplanner.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__)) unless | |
| 2 2 | 
             
              $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
         | 
| 3 3 |  | 
| 4 4 | 
             
            module LiquidPlanner
         | 
| 5 | 
            -
              VERSION      = "0.0. | 
| 5 | 
            +
              VERSION      = "0.0.3"
         | 
| 6 6 | 
             
              API_BASE_URL = "https://app.liquidplanner.com/api"
         | 
| 7 7 | 
             
            end
         | 
| 8 8 |  | 
| @@ -20,17 +20,18 @@ require "liquidplanner/resources/account" | |
| 20 20 | 
             
            require "liquidplanner/resources/member"
         | 
| 21 21 | 
             
            require "liquidplanner/resources/workspace"
         | 
| 22 22 |  | 
| 23 | 
            -
            require "liquidplanner/resources/ | 
| 24 | 
            -
            require "liquidplanner/resources/ | 
| 25 | 
            -
            require "liquidplanner/resources/ | 
| 23 | 
            +
            require "liquidplanner/resources/move_or_package"
         | 
| 24 | 
            +
            require "liquidplanner/resources/movable"
         | 
| 25 | 
            +
            require "liquidplanner/resources/packageable"
         | 
| 26 26 |  | 
| 27 | 
            -
            require "liquidplanner/resources/ | 
| 27 | 
            +
            require "liquidplanner/resources/treeitem"
         | 
| 28 28 | 
             
            require "liquidplanner/resources/container"
         | 
| 29 29 | 
             
            require "liquidplanner/resources/leaf"
         | 
| 30 | 
            +
            require "liquidplanner/resources/root"
         | 
| 30 31 | 
             
            require "liquidplanner/resources/task"
         | 
| 31 32 | 
             
            require "liquidplanner/resources/event"
         | 
| 32 33 | 
             
            require "liquidplanner/resources/milestone"
         | 
| 33 | 
            -
            require "liquidplanner/resources/ | 
| 34 | 
            +
            require "liquidplanner/resources/package"
         | 
| 34 35 | 
             
            require "liquidplanner/resources/folder"
         | 
| 35 36 | 
             
            require "liquidplanner/resources/project"
         | 
| 36 37 | 
             
            require "liquidplanner/resources/client"
         | 
| @@ -46,4 +47,4 @@ require "liquidplanner/resources/activity" | |
| 46 47 |  | 
| 47 48 | 
             
            require "liquidplanner/ext/hash"
         | 
| 48 49 | 
             
            require "liquidplanner/ext/connection"
         | 
| 49 | 
            -
            require "liquidplanner/ext/exceptions"
         | 
| 50 | 
            +
            require "liquidplanner/ext/exceptions"
         | 
    
        data/lib/liquidplanner/debug.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            module LiquidPlanner
         | 
| 2 2 | 
             
              # Print out all the outgoing requests from the LiquidPlanner API
         | 
| 3 3 | 
             
              def self.watch_requests!(&block)
         | 
| 4 | 
            -
                ActiveSupport::Notifications.subscribe('active_resource | 
| 4 | 
            +
                ActiveSupport::Notifications.subscribe('request.active_resource') do |name, time, stamp, id, payload|
         | 
| 5 5 | 
             
                  method = payload[:method]
         | 
| 6 6 | 
             
                  request = payload[:request_uri]
         | 
| 7 7 |  | 
| @@ -13,6 +13,10 @@ module LiquidPlanner | |
| 13 13 | 
             
                  @prefix_options.merge!(initial_prefix_options){|k, old_attr,new_attr| old_attr || new_attr }
         | 
| 14 14 | 
             
                  self
         | 
| 15 15 | 
             
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def get_raw(custom_method_name, options = {})
         | 
| 18 | 
            +
                  connection.get_raw(custom_method_element_url(custom_method_name, options), self.class.headers)
         | 
| 19 | 
            +
                end
         | 
| 16 20 |  | 
| 17 21 | 
             
                private
         | 
| 18 22 | 
             
                # Override the default instantiate_record to support polymorphic types
         | 
| @@ -41,7 +45,7 @@ module LiquidPlanner | |
| 41 45 | 
             
                #   workspace.create_task(:name=>'new task').create_estimate(:low_effort=>1, :high_effort=>3)
         | 
| 42 46 | 
             
                def method_missing(name, *args)
         | 
| 43 47 | 
             
                  if name.to_s =~ /^(create|build)_(.+)/
         | 
| 44 | 
            -
                    operation | 
| 48 | 
            +
                    operation   = $1.to_sym
         | 
| 45 49 | 
             
                    resource    = $2
         | 
| 46 50 | 
             
                    attributes  = args.shift || {}
         | 
| 47 51 | 
             
                    klass = LiquidPlanner::Resources.const_get(resource.classify)
         | 
| @@ -1,18 +1,22 @@ | |
| 1 1 | 
             
            #------------------------------------------------------------------------
         | 
| 2 2 | 
             
            # leaves
         | 
| 3 3 | 
             
            #------------------------------------------------------------------------
         | 
| 4 | 
            -
             | 
| 5 4 | 
             
            module LiquidPlanner
         | 
| 6 5 | 
             
              module Resources
         | 
| 7 | 
            -
                class Leaf <  | 
| 8 | 
            -
                  include  | 
| 9 | 
            -
                  include  | 
| 6 | 
            +
                class Leaf < Treeitem
         | 
| 7 | 
            +
                  include Movable
         | 
| 8 | 
            +
                  include Packageable
         | 
| 10 9 |  | 
| 11 10 | 
             
                  TRACK_TIME_KEYS = [ :work, :activity_id, :member_id, :low, :high, :is_done, :done_on, :work_performed_on, :comment ].freeze
         | 
| 12 11 | 
             
                  def track_time( options={} )
         | 
| 13 12 | 
             
                    options.assert_valid_keys( *TRACK_TIME_KEYS )
         | 
| 14 13 | 
             
                    request_body = options.to_json
         | 
| 15 | 
            -
                     | 
| 14 | 
            +
                    # ActiveResource post() by default:
         | 
| 15 | 
            +
                    #   response = post(:track_time, {}, request_body) 
         | 
| 16 | 
            +
                    # will set this route with 'new': /api/workspaces/36/tasks/new/activities.json
         | 
| 17 | 
            +
                    # it's because of how it sets @persisted = true by default, calling custom_method_new_element_url()
         | 
| 18 | 
            +
                    # what we want is: /api/workspaces/36/tasks/:id/activities.json, which is accomplished here:
         | 
| 19 | 
            +
                    response = connection.post(custom_method_element_url(:track_time, options), request_body)
         | 
| 16 20 | 
             
                    load( self.class.format.decode( response.body ) )
         | 
| 17 21 | 
             
                  end
         | 
| 18 22 |  | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module LiquidPlanner
         | 
| 2 | 
            +
              # For resources that can be moved
         | 
| 3 | 
            +
              module Movable
         | 
| 4 | 
            +
                include MoveOrPackage
         | 
| 5 | 
            +
                def move_before(item, is_packaged_other=false)
         | 
| 6 | 
            +
                  move_or_package :move, :before, item, is_packaged_other
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
                def move_after(item, is_packaged_other=false)
         | 
| 10 | 
            +
                  move_or_package :move, :after, item, is_packaged_other
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            module LiquidPlanner
         | 
| 2 | 
            +
              module MoveOrPackage
         | 
| 3 | 
            +
                def move_or_package(motion, relative, other, is_packaged_other=false)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  raise ArgumentError.new("motion must be move or package")   unless [:move, :package].include?(motion)
         | 
| 6 | 
            +
                  raise ArgumentError.new("relative must be before or after") unless [:before, :after].include?(relative)
         | 
| 7 | 
            +
                  action = "#{motion}_#{relative}"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  other_id = other.is_a?(LiquidPlanner::LiquidPlannerResource) ? other.id : other
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  params = {}
         | 
| 12 | 
            +
                  if is_packaged_other && :move == motion
         | 
| 13 | 
            +
                    params[:packaged_other_id] = other_id
         | 
| 14 | 
            +
                  else
         | 
| 15 | 
            +
                    params[:other_id] = other_id
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  response = post(action, params)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  load( self.class.format.decode( response.body ) )
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module LiquidPlanner
         | 
| 2 | 
            +
              # For resources that can be packaged
         | 
| 3 | 
            +
              module Packageable
         | 
| 4 | 
            +
                include MoveOrPackage
         | 
| 5 | 
            +
                def package_before(item)
         | 
| 6 | 
            +
                  move_or_package :package, :before, item
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
                def package_after(item)
         | 
| 10 | 
            +
                  move_or_package :package, :after, item
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -3,16 +3,24 @@ | |
| 3 3 | 
             
            #------------------------------------------------------------------------
         | 
| 4 4 | 
             
            module LiquidPlanner
         | 
| 5 5 | 
             
              module Resources
         | 
| 6 | 
            -
                class  | 
| 6 | 
            +
                class Treeitem < LiquidPlanner::LiquidPlannerResource
         | 
| 7 7 |  | 
| 8 8 | 
             
                  self.prefix = "/api/workspaces/:workspace_id/"
         | 
| 9 9 |  | 
| 10 | 
            -
                  def  | 
| 11 | 
            -
                     | 
| 10 | 
            +
                  def parent
         | 
| 11 | 
            +
                    parent_id && Treeitem.find( :one, :from => "/api/workspaces/#{workspace_id}/treeitems/#{parent_id}" )
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 | 
            -
                  def  | 
| 15 | 
            -
                     | 
| 14 | 
            +
                  def package
         | 
| 15 | 
            +
                    package_id && Package.find( :one, :from => "/api/workspaces/#{workspace_id}/packages/#{package_id}" )
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def project
         | 
| 19 | 
            +
                    project_id && Project.find( :one, :from => "/api/workspaces/#{workspace_id}/projects/#{project_id}" )
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def client
         | 
| 23 | 
            +
                    client_id && Client.find( :one, :from => "/api/workspaces/#{workspace_id}/clients/#{client_id}" )
         | 
| 16 24 | 
             
                  end
         | 
| 17 25 |  | 
| 18 26 | 
             
                  def note
         | 
| @@ -20,7 +28,11 @@ module LiquidPlanner | |
| 20 28 | 
             
                      n.prefix_options = luggage_params
         | 
| 21 29 | 
             
                    end
         | 
| 22 30 | 
             
                  end
         | 
| 23 | 
            -
             | 
| 31 | 
            +
                  
         | 
| 32 | 
            +
                  def activities( scope=:all )
         | 
| 33 | 
            +
                    Activity.find( scope, :params => luggage_params )
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                  
         | 
| 24 36 | 
             
                  def comments( scope=:all )
         | 
| 25 37 | 
             
                    Comment.find( scope, :params => luggage_params )
         | 
| 26 38 | 
             
                  end
         | 
| @@ -6,19 +6,40 @@ module LiquidPlanner | |
| 6 6 | 
             
                    Member.find( scope, :params => { :workspace_id => self.id }.merge(options) )
         | 
| 7 7 | 
             
                  end
         | 
| 8 8 |  | 
| 9 | 
            +
                  def treeitems( scope=:all, options={} )
         | 
| 10 | 
            +
                    Treeitem.find( scope, :params => { :workspace_id => self.id, :flat => true }.merge(options) )
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 9 13 | 
             
                  def tasks( scope=:all, options={} )
         | 
| 10 14 | 
             
                    Task.find( scope, :params => { :workspace_id => self.id }.merge(options) )
         | 
| 11 15 | 
             
                  end
         | 
| 12 16 |  | 
| 13 | 
            -
                  def  | 
| 14 | 
            -
                     | 
| 17 | 
            +
                  def events( scope=:all, options={} )
         | 
| 18 | 
            +
                    Event.find( scope, :params => { :workspace_id => self.id }.merge(options) )
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def milestones( scope=:all, options={} )
         | 
| 22 | 
            +
                    Milestone.find( scope, :params => { :workspace_id => self.id }.merge(options) )
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def clients( scope=:all, options={} )
         | 
| 26 | 
            +
                    Client.find( scope, :params => { :workspace_id => self.id, :flat => true }.merge(options) )
         | 
| 15 27 | 
             
                  end
         | 
| 16 28 |  | 
| 17 | 
            -
                  def  | 
| 18 | 
            -
                     | 
| 29 | 
            +
                  def projects( scope=:all, options={} )
         | 
| 30 | 
            +
                    Project.find( scope, :params => { :workspace_id => self.id, :flat => true }.merge(options) )
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  def packages( scope=:all, options={} )
         | 
| 34 | 
            +
                    Package.find( scope, :params => { :workspace_id => self.id, :flat => true }.merge(options) )
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def folders( scope=:all, options={} )
         | 
| 38 | 
            +
                    Folder.find( scope, :params => { :workspace_id => self.id, :flat => true }.merge(options) )
         | 
| 19 39 | 
             
                  end
         | 
| 20 40 |  | 
| 21 | 
            -
             | 
| 41 | 
            +
                  protected
         | 
| 42 | 
            +
             | 
| 22 43 | 
             
                  # create a new instance of klass (Task, Folder, etc.),
         | 
| 23 44 | 
             
                  # with the workspace_id set as a prefix option
         | 
| 24 45 | 
             
                  #
         | 
| @@ -29,6 +50,7 @@ module LiquidPlanner | |
| 29 50 | 
             
                      item.prefix_options[:workspace_id] = self.id
         | 
| 30 51 | 
             
                    end
         | 
| 31 52 | 
             
                  end
         | 
| 53 | 
            +
             | 
| 32 54 | 
             
                end
         | 
| 33 55 | 
             
              end
         | 
| 34 56 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: liquidplanner
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 25
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 0
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.0. | 
| 9 | 
            +
              - 3
         | 
| 10 | 
            +
              version: 0.0.3
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Brett Bender
         | 
| @@ -16,7 +16,7 @@ autorequire: | |
| 16 16 | 
             
            bindir: bin
         | 
| 17 17 | 
             
            cert_chain: []
         | 
| 18 18 |  | 
| 19 | 
            -
            date:  | 
| 19 | 
            +
            date: 2012-03-14 00:00:00 -07:00
         | 
| 20 20 | 
             
            default_executable: 
         | 
| 21 21 | 
             
            dependencies: 
         | 
| 22 22 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -137,7 +137,9 @@ files: | |
| 137 137 | 
             
            - examples/README
         | 
| 138 138 | 
             
            - examples/create_task.rb
         | 
| 139 139 | 
             
            - examples/list_tasks.rb
         | 
| 140 | 
            +
            - examples/post-commit.rb
         | 
| 140 141 | 
             
            - examples/support/helper.rb
         | 
| 142 | 
            +
            - examples/svn-post-commit.sh
         | 
| 141 143 | 
             
            - examples/track_time.rb
         | 
| 142 144 | 
             
            - lib/liquidplanner.rb
         | 
| 143 145 | 
             
            - lib/liquidplanner/base.rb
         | 
| @@ -155,20 +157,21 @@ files: | |
| 155 157 | 
             
            - lib/liquidplanner/resources/estimate.rb
         | 
| 156 158 | 
             
            - lib/liquidplanner/resources/event.rb
         | 
| 157 159 | 
             
            - lib/liquidplanner/resources/folder.rb
         | 
| 158 | 
            -
            - lib/liquidplanner/resources/item.rb
         | 
| 159 160 | 
             
            - lib/liquidplanner/resources/leaf.rb
         | 
| 160 161 | 
             
            - lib/liquidplanner/resources/link.rb
         | 
| 161 162 | 
             
            - lib/liquidplanner/resources/luggage.rb
         | 
| 162 163 | 
             
            - lib/liquidplanner/resources/member.rb
         | 
| 163 164 | 
             
            - lib/liquidplanner/resources/milestone.rb
         | 
| 165 | 
            +
            - lib/liquidplanner/resources/movable.rb
         | 
| 166 | 
            +
            - lib/liquidplanner/resources/move_or_package.rb
         | 
| 164 167 | 
             
            - lib/liquidplanner/resources/note.rb
         | 
| 165 | 
            -
            - lib/liquidplanner/resources/ | 
| 166 | 
            -
            - lib/liquidplanner/resources/ | 
| 168 | 
            +
            - lib/liquidplanner/resources/package.rb
         | 
| 169 | 
            +
            - lib/liquidplanner/resources/packageable.rb
         | 
| 167 170 | 
             
            - lib/liquidplanner/resources/project.rb
         | 
| 168 | 
            -
            - lib/liquidplanner/resources/ | 
| 171 | 
            +
            - lib/liquidplanner/resources/root.rb
         | 
| 169 172 | 
             
            - lib/liquidplanner/resources/snapshot.rb
         | 
| 170 173 | 
             
            - lib/liquidplanner/resources/task.rb
         | 
| 171 | 
            -
            - lib/liquidplanner/resources/ | 
| 174 | 
            +
            - lib/liquidplanner/resources/treeitem.rb
         | 
| 172 175 | 
             
            - lib/liquidplanner/resources/workspace.rb
         | 
| 173 176 | 
             
            - test/liquidplanner_resource_test.rb
         | 
| 174 177 | 
             
            - test/workspace_test.rb
         | 
| @@ -177,8 +180,8 @@ homepage: http://github.com/liquidplanner/liquidplanner | |
| 177 180 | 
             
            licenses: []
         | 
| 178 181 |  | 
| 179 182 | 
             
            post_install_message: 
         | 
| 180 | 
            -
            rdoc_options: 
         | 
| 181 | 
            -
             | 
| 183 | 
            +
            rdoc_options: []
         | 
| 184 | 
            +
             | 
| 182 185 | 
             
            require_paths: 
         | 
| 183 186 | 
             
            - lib
         | 
| 184 187 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| @@ -1,13 +0,0 @@ | |
| 1 | 
            -
            module LiquidPlanner
         | 
| 2 | 
            -
              # For resources that can be prioritized
         | 
| 3 | 
            -
              module Order
         | 
| 4 | 
            -
                include RelativeResource
         | 
| 5 | 
            -
                def organize_before(item)
         | 
| 6 | 
            -
                  move_relative_to :organize, :before, item
         | 
| 7 | 
            -
                end
         | 
| 8 | 
            -
              
         | 
| 9 | 
            -
                def organize_after(item)
         | 
| 10 | 
            -
                  move_relative_to :organize, :after, item
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
            end
         | 
| @@ -1,13 +0,0 @@ | |
| 1 | 
            -
            module LiquidPlanner
         | 
| 2 | 
            -
              # For resources that can be prioritized
         | 
| 3 | 
            -
              module Priority
         | 
| 4 | 
            -
                include RelativeResource
         | 
| 5 | 
            -
                def prioritize_before(item)
         | 
| 6 | 
            -
                  move_relative_to :prioritize, :before, item
         | 
| 7 | 
            -
                end
         | 
| 8 | 
            -
              
         | 
| 9 | 
            -
                def prioritize_after(item)
         | 
| 10 | 
            -
                  move_relative_to :prioritize, :after, item
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
            end
         | 
| @@ -1,12 +0,0 @@ | |
| 1 | 
            -
            module LiquidPlanner
         | 
| 2 | 
            -
              module RelativeResource
         | 
| 3 | 
            -
                def move_relative_to(tree, relative, other)
         | 
| 4 | 
            -
                  raise ArgumentError.new("tree must be prioritize or organize")  unless [:prioritize, :organize].include?(tree)
         | 
| 5 | 
            -
                  raise ArgumentError.new("relative must be before or after")     unless [:before, :after].include?(relative)
         | 
| 6 | 
            -
                  other_id = other.is_a?(LiquidPlanner::LiquidPlannerResource) ? other.id : other
         | 
| 7 | 
            -
                  
         | 
| 8 | 
            -
                  response = post("#{tree}_#{relative}", :other_id=>other_id)
         | 
| 9 | 
            -
                  load( self.class.format.decode( response.body ) )
         | 
| 10 | 
            -
                end
         | 
| 11 | 
            -
              end
         | 
| 12 | 
            -
            end
         |