plansheet 0.23.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -1
- data/exe/plansheet +11 -0
- data/lib/plansheet/pool.rb +3 -2
- data/lib/plansheet/project/yaml.rb +21 -4
- data/lib/plansheet/project.rb +20 -2
- data/lib/plansheet/version.rb +1 -1
- metadata +16 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fae1a985802ab6da236f5f3d54224b4468ae5cc5e6beba86510293e7a92fe0a8
         | 
| 4 | 
            +
              data.tar.gz: b2fe70fc1cb48dd794f561ff5037d2311366bb7e64c901cf4f32d33c0592e45b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f68b48246ce4e8b10c66dd805f783fd822886b168aa57bb7db71012934bd2f21f8a76c8f26dab6c8bf4f8156529b897a5d33c02cba2e67d39224579626ee00a0
         | 
| 7 | 
            +
              data.tar.gz: 751a5a7beffa1c35d7723521db61aa0ca26d1fafb6643017bfd2c3a3cb14e63dd5d4f775df34e2a9b644c24a8d582e0cd19d9cfd4a3b009673b9fb6d70faef55
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,8 +1,9 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                plansheet (0. | 
| 4 | 
            +
                plansheet (0.24.1)
         | 
| 5 5 | 
             
                  dc-kwalify (~> 1.0)
         | 
| 6 | 
            +
                  diffy (= 3.4.2)
         | 
| 6 7 | 
             
                  rgl (= 0.5.8)
         | 
| 7 8 |  | 
| 8 9 | 
             
            GEM
         | 
| @@ -11,6 +12,7 @@ GEM | |
| 11 12 | 
             
                ast (2.4.2)
         | 
| 12 13 | 
             
                coderay (1.1.3)
         | 
| 13 14 | 
             
                dc-kwalify (1.0.0)
         | 
| 15 | 
            +
                diffy (3.4.2)
         | 
| 14 16 | 
             
                ffi (1.15.5)
         | 
| 15 17 | 
             
                formatador (1.1.0)
         | 
| 16 18 | 
             
                generator (0.0.1)
         | 
    
        data/exe/plansheet
    CHANGED
    
    | @@ -25,6 +25,10 @@ parser.on( | |
| 25 25 | 
             
              "--stats",
         | 
| 26 26 | 
             
              "Various stats (WIP)"
         | 
| 27 27 | 
             
            )
         | 
| 28 | 
            +
            parser.on(
         | 
| 29 | 
            +
              "--time-roi",
         | 
| 30 | 
            +
              "Show projects with a time return-on-investment"
         | 
| 31 | 
            +
            )
         | 
| 28 32 | 
             
            parser.on(
         | 
| 29 33 | 
             
              "--calendar",
         | 
| 30 34 | 
             
              "List of projects ordered by due date"
         | 
| @@ -54,6 +58,13 @@ elsif options[:stats] | |
| 54 58 | 
             
            elsif options[:sort]
         | 
| 55 59 | 
             
              # Pool sorts projects, this now just matches old behaviour
         | 
| 56 60 | 
             
              pool.write_projects
         | 
| 61 | 
            +
            elsif options[:"time-roi"]
         | 
| 62 | 
            +
              project_arr = pool.projects.select { |x| x.time_roi_payoff != 0 && !x.dropped_or_done? }.sort
         | 
| 63 | 
            +
              project_arr.each do |proj|
         | 
| 64 | 
            +
                puts proj
         | 
| 65 | 
            +
                puts "time ROI payoff: #{proj.time_roi_payoff}"
         | 
| 66 | 
            +
                puts "\n"
         | 
| 67 | 
            +
              end
         | 
| 57 68 | 
             
            elsif options[:calendar]
         | 
| 58 69 | 
             
              # TODO: add a project filter method
         | 
| 59 70 | 
             
              project_arr = pool.projects
         | 
    
        data/lib/plansheet/pool.rb
    CHANGED
    
    | @@ -10,12 +10,14 @@ module Plansheet | |
| 10 10 |  | 
| 11 11 | 
             
                DEFAULT_COMPARISON_ORDER = %w[
         | 
| 12 12 | 
             
                  completeness
         | 
| 13 | 
            +
                  completed_on
         | 
| 13 14 | 
             
                  dependency
         | 
| 14 15 | 
             
                  priority
         | 
| 15 16 | 
             
                  defer
         | 
| 16 17 | 
             
                  due
         | 
| 17 18 | 
             
                  time_roi
         | 
| 18 19 | 
             
                  status
         | 
| 20 | 
            +
                  name
         | 
| 19 21 | 
             
                ].freeze
         | 
| 20 22 |  | 
| 21 23 | 
             
                def initialize(config, debug: false)
         | 
| @@ -89,8 +91,7 @@ module Plansheet | |
| 89 91 | 
             
                  # to keep a list of project files to delete
         | 
| 90 92 | 
             
                  project_namespaces.each do |ns|
         | 
| 91 93 | 
             
                    pyf = ProjectYAMLFile.new "#{@projects_dir}/#{ns}.yml"
         | 
| 92 | 
            -
                    pyf. | 
| 93 | 
            -
                    pyf.write
         | 
| 94 | 
            +
                    pyf.compare_and_write projects_in_namespace(ns)
         | 
| 94 95 | 
             
                  end
         | 
| 95 96 | 
             
                end
         | 
| 96 97 |  | 
| @@ -189,12 +189,29 @@ module Plansheet | |
| 189 189 | 
             
                  @projects.sort!
         | 
| 190 190 | 
             
                end
         | 
| 191 191 |  | 
| 192 | 
            -
                def  | 
| 193 | 
            -
                   | 
| 192 | 
            +
                def compare_and_write(projects)
         | 
| 193 | 
            +
                  updated_projects_string = yaml_dump(projects)
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                  # Compare the existing file to the newly generated one - we only want a
         | 
| 196 | 
            +
                  # write if something has changed
         | 
| 197 | 
            +
                  return if updated_projects_string == yaml_dump(load_file)
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                  puts "#{@path} has changed, writing"
         | 
| 200 | 
            +
                  require "diffy"
         | 
| 201 | 
            +
                  puts Diffy::Diff.new(updated_projects_string, yaml_dump(load_file)).to_s(:color)
         | 
| 202 | 
            +
                  File.write @path, updated_projects_string
         | 
| 194 203 | 
             
                end
         | 
| 195 204 |  | 
| 196 | 
            -
                def yaml_dump
         | 
| 197 | 
            -
                   | 
| 205 | 
            +
                def yaml_dump(projects)
         | 
| 206 | 
            +
                  # binding.irb if projects.nil?
         | 
| 207 | 
            +
                  YAML.dump(projects.map do |x|
         | 
| 208 | 
            +
                    x.to_h.delete_if do |k, v|
         | 
| 209 | 
            +
                      # Remove low-value default noise from projects
         | 
| 210 | 
            +
                      k == "namespace" ||
         | 
| 211 | 
            +
                       (k == "priority" && v == "low") ||
         | 
| 212 | 
            +
                       (k == "status" && v == "idea")
         | 
| 213 | 
            +
                    end
         | 
| 214 | 
            +
                  end)
         | 
| 198 215 | 
             
                end
         | 
| 199 216 | 
             
              end
         | 
| 200 217 | 
             
            end
         | 
    
        data/lib/plansheet/project.rb
    CHANGED
    
    | @@ -121,6 +121,12 @@ module Plansheet | |
| 121 121 | 
             
                  # Add a created_on field if it doesn't exist
         | 
| 122 122 | 
             
                  instance_variable_set("@created_on", Date.today) unless @created_on
         | 
| 123 123 |  | 
| 124 | 
            +
                  # Handle nil-value tasks
         | 
| 125 | 
            +
                  if @tasks
         | 
| 126 | 
            +
                    @tasks.compact!
         | 
| 127 | 
            +
                    remove_instance_variable("@tasks") if @tasks.empty?
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
             | 
| 124 130 | 
             
                  # Generate time estimate from tasks if specified
         | 
| 125 131 | 
             
                  # Stomps time_estimate field
         | 
| 126 132 | 
             
                  if @tasks
         | 
| @@ -176,6 +182,20 @@ module Plansheet | |
| 176 182 | 
             
                  PROJECT_STATUS_PRIORITY[status] <=> PROJECT_STATUS_PRIORITY[other.status]
         | 
| 177 183 | 
             
                end
         | 
| 178 184 |  | 
| 185 | 
            +
                # This seems silly at first glance, but it's to keep projects from flipping
         | 
| 186 | 
            +
                # around on each sort when they are equal in all other respects
         | 
| 187 | 
            +
                def compare_name(other)
         | 
| 188 | 
            +
                  @name <=> other.name
         | 
| 189 | 
            +
                end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                def compare_completed_on(other)
         | 
| 192 | 
            +
                  retval = 0
         | 
| 193 | 
            +
                  retval += 1 if @completed_on
         | 
| 194 | 
            +
                  retval -= 1 if other.completed_on
         | 
| 195 | 
            +
                  retval = (other.completed_on <=> @completed_on) if retval.zero?
         | 
| 196 | 
            +
                  retval
         | 
| 197 | 
            +
                end
         | 
| 198 | 
            +
             | 
| 179 199 | 
             
                def compare_due(other)
         | 
| 180 200 | 
             
                  # -1 is receiving object being older
         | 
| 181 201 |  | 
| @@ -334,8 +354,6 @@ module Plansheet | |
| 334 354 | 
             
                  ALL_PROPERTIES.each do |prop|
         | 
| 335 355 | 
             
                    h[prop] = instance_variable_get("@#{prop}") if instance_variable_defined?("@#{prop}")
         | 
| 336 356 | 
             
                  end
         | 
| 337 | 
            -
                  h.delete "priority" if h.key?("priority") && h["priority"] == "low"
         | 
| 338 | 
            -
                  h.delete "status" if h.key?("status") && h["status"] == "idea"
         | 
| 339 357 | 
             
                  h
         | 
| 340 358 | 
             
                end
         | 
| 341 359 | 
             
              end
         | 
    
        data/lib/plansheet/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: plansheet
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.24.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - David Crosby
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-07- | 
| 11 | 
            +
            date: 2022-07-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: dc-kwalify
         | 
| @@ -24,6 +24,20 @@ dependencies: | |
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: '1.0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: diffy
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - '='
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: 3.4.2
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - '='
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: 3.4.2
         | 
| 27 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 42 | 
             
              name: rgl
         | 
| 29 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         |