plansheet 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +26 -0
- data/Gemfile.lock +1 -1
- data/lib/plansheet/project.rb +80 -45
- data/lib/plansheet/version.rb +1 -1
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 98932ed8f5a5d06da4b2f6135d1321e5376a1af2f837d4a65b9f806c7f06b8d9
         | 
| 4 | 
            +
              data.tar.gz: 0ef6f026f7bcbc4712d008ca2843a0b5a9d1715038b2fc91534a8c9951697ec6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 95217512c48168c26ef2c5f937dd8b94530bccea1149c2e90df1db039243b9ffb4582efe26ea14ae6393845daa4d8f5a4fec36cff82231d7b6ab6fc6a1255ff6
         | 
| 7 | 
            +
              data.tar.gz: '095dcda8264517252297a7aba139f8c51bddfbe04880acb9a16d2eb3f4a479003e1ee453902acf65fde2ad89720b522b6d6bd118e3f1f3202f2aab9f9ec50d04'
         | 
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/.rubocop_todo.yml
    ADDED
    
    | @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            # This configuration was generated by
         | 
| 2 | 
            +
            # `rubocop --auto-gen-config`
         | 
| 3 | 
            +
            # on 2022-06-02 13:34:43 UTC using RuboCop version 1.29.1.
         | 
| 4 | 
            +
            # The point is for the user to remove these configuration records
         | 
| 5 | 
            +
            # one by one as the offenses are removed from the code base.
         | 
| 6 | 
            +
            # Note that changes in the inspected code, or installation of new
         | 
| 7 | 
            +
            # versions of RuboCop, may require this file to be generated again.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # Offense count: 1
         | 
| 10 | 
            +
            # Configuration parameters: IgnoredMethods.
         | 
| 11 | 
            +
            Metrics/CyclomaticComplexity:
         | 
| 12 | 
            +
              Max: 8
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            # Offense count: 1
         | 
| 15 | 
            +
            # Configuration parameters: IgnoredMethods.
         | 
| 16 | 
            +
            Metrics/PerceivedComplexity:
         | 
| 17 | 
            +
              Max: 10
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            # Offense count: 2
         | 
| 20 | 
            +
            # Configuration parameters: AllowedConstants.
         | 
| 21 | 
            +
            Style/Documentation:
         | 
| 22 | 
            +
              Exclude:
         | 
| 23 | 
            +
                - 'spec/**/*'
         | 
| 24 | 
            +
                - 'test/**/*'
         | 
| 25 | 
            +
                - 'lib/plansheet.rb'
         | 
| 26 | 
            +
                - 'lib/plansheet/project.rb'
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/lib/plansheet/project.rb
    CHANGED
    
    | @@ -18,11 +18,6 @@ module Plansheet | |
| 18 18 | 
             
                "medium" => 2,
         | 
| 19 19 | 
             
                "low" => 3
         | 
| 20 20 | 
             
              }.freeze
         | 
| 21 | 
            -
              PROJECT_PRIORITY_REV = {
         | 
| 22 | 
            -
                1 => "high",
         | 
| 23 | 
            -
                2 => "medium",
         | 
| 24 | 
            -
                3 => "low"
         | 
| 25 | 
            -
              }.freeze
         | 
| 26 21 |  | 
| 27 22 | 
             
              # Once there's some stability in plansheet and dc-kwalify, will pre-load this
         | 
| 28 23 | 
             
              # to save the later YAML.load
         | 
| @@ -36,6 +31,13 @@ module Plansheet | |
| 36 31 | 
             
                        desc: Project name
         | 
| 37 32 | 
             
                        type: str
         | 
| 38 33 | 
             
                        required: yes
         | 
| 34 | 
            +
                      "priority":
         | 
| 35 | 
            +
                        desc: Project priority
         | 
| 36 | 
            +
                        type: str
         | 
| 37 | 
            +
                        enum:
         | 
| 38 | 
            +
                          - high
         | 
| 39 | 
            +
                          - medium
         | 
| 40 | 
            +
                          - low
         | 
| 39 41 | 
             
                      "status":
         | 
| 40 42 | 
             
                        desc: The current status of the project
         | 
| 41 43 | 
             
                        type: str
         | 
| @@ -49,15 +51,22 @@ module Plansheet | |
| 49 51 | 
             
                                    # want to keep around for reference, etc
         | 
| 50 52 | 
             
                          - done # project is finished, but want to keep around
         | 
| 51 53 | 
             
                                 # for reference, etc.
         | 
| 52 | 
            -
                      "priority":
         | 
| 53 | 
            -
                        desc: Project priority
         | 
| 54 | 
            -
                        type: str
         | 
| 55 | 
            -
                        enum:
         | 
| 56 | 
            -
                          - high
         | 
| 57 | 
            -
                          - low
         | 
| 58 54 | 
             
                      "location":
         | 
| 59 55 | 
             
                        desc: Location
         | 
| 60 56 | 
             
                        type: str
         | 
| 57 | 
            +
                      "notes":
         | 
| 58 | 
            +
                        desc: Free-form notes string
         | 
| 59 | 
            +
                        type: str
         | 
| 60 | 
            +
                      "externals":
         | 
| 61 | 
            +
                        desc: List of external commitments, ie who else cares about project completion?
         | 
| 62 | 
            +
                        type: seq
         | 
| 63 | 
            +
                        sequence:
         | 
| 64 | 
            +
                          - type: str
         | 
| 65 | 
            +
                      "urls":
         | 
| 66 | 
            +
                        desc: List of URLs that may be pertinent
         | 
| 67 | 
            +
                        type: seq
         | 
| 68 | 
            +
                        sequence:
         | 
| 69 | 
            +
                          - type: str
         | 
| 61 70 | 
             
                      "tasks":
         | 
| 62 71 | 
             
                        desc: List of tasks to do
         | 
| 63 72 | 
             
                        type: seq
         | 
| @@ -68,25 +77,44 @@ module Plansheet | |
| 68 77 | 
             
                        type: seq
         | 
| 69 78 | 
             
                        sequence:
         | 
| 70 79 | 
             
                          - type: str
         | 
| 71 | 
            -
                      "notes":
         | 
| 72 | 
            -
                        desc: Free-form notes string
         | 
| 73 | 
            -
                        type: str
         | 
| 74 80 | 
             
              YAML
         | 
| 75 81 | 
             
              PROJECT_SCHEMA = YAML.safe_load(PROJECT_YAML_SCHEMA)
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              # The use of instance_variable_set/get probably seems a bit weird, but the
         | 
| 84 | 
            +
              # intent is to avoid object allocation on non-existent project properties, as
         | 
| 85 | 
            +
              # well as avoiding a bunch of copy-paste boilerplate when adding a new
         | 
| 86 | 
            +
              # property. I suspect I'm guilty of premature optimization here, but it's
         | 
| 87 | 
            +
              # easier to do this at the start than untangle that later (ie easier to
         | 
| 88 | 
            +
              # unwrap the loops if it's not needed.
         | 
| 76 89 | 
             
              class Project
         | 
| 77 90 | 
             
                include Comparable
         | 
| 78 | 
            -
             | 
| 91 | 
            +
             | 
| 92 | 
            +
                # NOTE: The order of these affects presentation!
         | 
| 93 | 
            +
                STRING_PROPERTIES = %w[priority status location notes].freeze
         | 
| 94 | 
            +
                ARRAY_PROPERTIES = %w[externals urls tasks done].freeze
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                ALL_PROPERTIES = STRING_PROPERTIES + ARRAY_PROPERTIES
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                attr_reader :name, *ALL_PROPERTIES
         | 
| 79 99 |  | 
| 80 100 | 
             
                def initialize(options)
         | 
| 81 101 | 
             
                  @name = options["project"]
         | 
| 82 102 |  | 
| 83 | 
            -
                   | 
| 84 | 
            -
             | 
| 103 | 
            +
                  ALL_PROPERTIES.each do |o|
         | 
| 104 | 
            +
                    instance_variable_set("@#{o}", options[o]) if options[o]
         | 
| 105 | 
            +
                  end
         | 
| 85 106 |  | 
| 86 | 
            -
                   | 
| 87 | 
            -
                   | 
| 88 | 
            -
                   | 
| 89 | 
            -
                   | 
| 107 | 
            +
                  # The "priority" concept feels flawed - it requires *me* to figure out
         | 
| 108 | 
            +
                  # the priority, as opposed to the program understanding the project in
         | 
| 109 | 
            +
                  # relation to other tasks. If I truly understood the priority of all the
         | 
| 110 | 
            +
                  # projects, I wouldn't need a todo list program. The point is to remove
         | 
| 111 | 
            +
                  # the need for willpower/executive function/coffee. The long-term value
         | 
| 112 | 
            +
                  # of this field will diminish as I add more project properties that can
         | 
| 113 | 
            +
                  # automatically hone in on the most important items based on due
         | 
| 114 | 
            +
                  # date/external commits/penalties for project failure, etc
         | 
| 115 | 
            +
                  #
         | 
| 116 | 
            +
                  # Assume all projects are low priority unless stated otherwise.
         | 
| 117 | 
            +
                  @priority ||= "low"
         | 
| 90 118 | 
             
                end
         | 
| 91 119 |  | 
| 92 120 | 
             
                def <=>(other)
         | 
| @@ -94,20 +122,15 @@ module Plansheet | |
| 94 122 | 
             
                    # TODO: if planning status, then sort based on tasks? category? alphabetically?
         | 
| 95 123 | 
             
                    PROJECT_STATUS_PRIORITY[status] <=> PROJECT_STATUS_PRIORITY[other.status]
         | 
| 96 124 | 
             
                  else
         | 
| 97 | 
            -
                    @priority <=> other.priority
         | 
| 125 | 
            +
                    PROJECT_PRIORITY[@priority] <=> PROJECT_PRIORITY[other.priority]
         | 
| 98 126 | 
             
                  end
         | 
| 99 127 | 
             
                end
         | 
| 100 128 |  | 
| 101 | 
            -
                # TODO: clean up priority handling
         | 
| 102 | 
            -
                def priority_string
         | 
| 103 | 
            -
                  PROJECT_PRIORITY_REV[@priority]
         | 
| 104 | 
            -
                end
         | 
| 105 | 
            -
             | 
| 106 129 | 
             
                def status
         | 
| 107 130 | 
             
                  return @status if @status
         | 
| 108 131 |  | 
| 109 | 
            -
                  if @tasks | 
| 110 | 
            -
                    if @done | 
| 132 | 
            +
                  if @tasks&.count&.positive?
         | 
| 133 | 
            +
                    if @done&.count&.positive?
         | 
| 111 134 | 
             
                      "wip"
         | 
| 112 135 | 
             
                    else
         | 
| 113 136 | 
             
                      "planning"
         | 
| @@ -120,29 +143,41 @@ module Plansheet | |
| 120 143 | 
             
                def to_s
         | 
| 121 144 | 
             
                  str = String.new
         | 
| 122 145 | 
             
                  str << "# #{@name}\n"
         | 
| 123 | 
            -
                   | 
| 124 | 
            -
             | 
| 125 | 
            -
                  str << "notes: #{notes}\n" unless @notes.nil?
         | 
| 126 | 
            -
                  str << "location: #{location}\n" unless @location.nil?
         | 
| 127 | 
            -
                  str << "tasks:\n" unless @tasks.empty?
         | 
| 128 | 
            -
                  @tasks.each do |t|
         | 
| 129 | 
            -
                    str << "- #{t}\n"
         | 
| 146 | 
            +
                  STRING_PROPERTIES.each do |o|
         | 
| 147 | 
            +
                    str << stringify_string_property(o)
         | 
| 130 148 | 
             
                  end
         | 
| 131 | 
            -
                   | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 149 | 
            +
                  ARRAY_PROPERTIES.each do |o|
         | 
| 150 | 
            +
                    str << stringify_array_property(o)
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
                  str
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                def stringify_string_property(prop)
         | 
| 156 | 
            +
                  if instance_variable_defined? "@#{prop}"
         | 
| 157 | 
            +
                    "#{prop}: #{instance_variable_get("@#{prop}")}\n"
         | 
| 158 | 
            +
                  else
         | 
| 159 | 
            +
                    ""
         | 
| 160 | 
            +
                  end
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                def stringify_array_property(prop)
         | 
| 164 | 
            +
                  str = String.new
         | 
| 165 | 
            +
                  if instance_variable_defined? "@#{prop}"
         | 
| 166 | 
            +
                    str << "#{prop}:\n"
         | 
| 167 | 
            +
                    instance_variable_get("@#{prop}").each do |t|
         | 
| 168 | 
            +
                      str << "- #{t}\n"
         | 
| 169 | 
            +
                    end
         | 
| 134 170 | 
             
                  end
         | 
| 135 171 | 
             
                  str
         | 
| 136 172 | 
             
                end
         | 
| 137 173 |  | 
| 138 174 | 
             
                def to_h
         | 
| 139 175 | 
             
                  h = { "project" => @name }
         | 
| 140 | 
            -
                   | 
| 141 | 
            -
             | 
| 142 | 
            -
                   | 
| 143 | 
            -
                  h[" | 
| 144 | 
            -
                  h[" | 
| 145 | 
            -
                  h["done"] = @done unless @done.empty?
         | 
| 176 | 
            +
                  ALL_PROPERTIES.each do |prop|
         | 
| 177 | 
            +
                    h[prop] = instance_variable_get("@#{prop}") if instance_variable_defined?("@#{prop}")
         | 
| 178 | 
            +
                  end
         | 
| 179 | 
            +
                  h.delete "priority" if h.key?("priority") && h["priority"] == "low"
         | 
| 180 | 
            +
                  h.delete "status" if h.key?("status") && h["status"] == "idea"
         | 
| 146 181 | 
             
                  h
         | 
| 147 182 | 
             
                end
         | 
| 148 183 | 
             
              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.7.0
         | 
| 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- | 
| 11 | 
            +
            date: 2022-06-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: dc-kwalify
         | 
| @@ -33,6 +33,7 @@ extensions: [] | |
| 33 33 | 
             
            extra_rdoc_files: []
         | 
| 34 34 | 
             
            files:
         | 
| 35 35 | 
             
            - ".rubocop.yml"
         | 
| 36 | 
            +
            - ".rubocop_todo.yml"
         | 
| 36 37 | 
             
            - CODE_OF_CONDUCT.md
         | 
| 37 38 | 
             
            - Gemfile
         | 
| 38 39 | 
             
            - Gemfile.lock
         |