Class: Doing::WWID

Inherits:
Object show all
Includes:
Color
Defined in:
lib/doing/wwid/wwid.rb,
lib/doing/wwid/tags.rb,
lib/doing/wwid/guess.rb,
lib/doing/wwid/editor.rb,
lib/doing/wwid/filter.rb,
lib/doing/wwid/modify.rb,
lib/doing/wwid/timers.rb,
lib/doing/wwid/display.rb,
lib/doing/wwid/wwidutil.rb,
lib/doing/wwid/filetools.rb,
lib/doing/wwid/interactive.rb

Overview

Main "What Was I Doing" methods

Constant Summary

Constants included from Color

Color::ATTRIBUTES, Color::ATTRIBUTE_NAMES, Color::ESCAPE_REGEX

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Color

attributes, coloring?, #rgb, #support?, template, uncolor, #uncolor

Constructor Details

#initialize ⇒ WWID

Initializes the object.

Instance Attribute Details

#additional_configs ⇒ Object (readonly)

Local configuration files detected at initialization

#config ⇒ Object

For backwards compatibility where @wwid.config was accessed instead of Doing.config.settings

#config_file ⇒ Object

The location of the main config file

#content ⇒ Object (readonly)

The Items object into which all entries are read

#current_section ⇒ Object (readonly)

The Currently section defined in configuration

#default_option ⇒ Object

[Boolean] the default option to provide in Y/N dialogs

#doing_file ⇒ Object (readonly)

The location of the Doing file defined in configuration

#initial_content ⇒ Object (readonly)

A frozen copy of the content object before any modification

Instance Method Details

#act_on(items, opt) ⇒ Object

Perform actions on a set of entries. If no valid action is included in the opt hash and the terminal is a TTY, a menu will be presented

Parameters:

  • items (Array) —

    Array of Items to affect

  • opt (Hash) —

    Options and actions to perform

Options Hash (opt):

  • :editor (Boolean)
  • :delete (Boolean)
  • :tag (String)
  • :flag (Boolean)
  • :finish (Boolean)
  • :cancel (Boolean)
  • :archive (Boolean)
  • :output (String)
  • :save_to (String)
  • :again (Boolean)
  • :resume (Boolean)

#add_item(title, section = nil, opt) ⇒ Object

Adds an entry

Parameters:

  • title (String) —

    The entry title

  • section (String) (defaults to: nil) —

    The section to add to

  • opt (Hash) —

    Additional Options

Options Hash (opt):

  • :date (Date) —

    item start date

  • :note (Note) —

    item note (will be converted if value is String)

  • :back (Date) —

    backdate

  • :timed (Boolean) —

    new item is timed entry, marks previous entry as @done

  • :done (Date) —

    If set, adds a @done tag to new entry

#add_with_editor(**options) ⇒ Object

Raises:

  • (MissingEditor)

#all_tags(items, opt: {}, counts: false) ⇒ Hash, Array

List all tags that exist on given items

Parameters:

  • items (Array) —

    array of Item

  • opt (Hash) (defaults to: {}) —

    additional options

  • counts (Boolean) (defaults to: false) —

    Include tag counts in results

Returns:

  • (Hash) —

    if counts is true, returns a hash with { tag: count }.

  • (Array) —

    If counts is false, returns a simple array of tags.

#archive(section = Doing.setting('current_section'), options) ⇒ Object

Move entries from a section to Archive or other specified section

Parameters:

  • section (String) (defaults to: Doing.setting('current_section')) —

    The source section

  • options (Hash) —

    Options

#autotag(string) ⇒ Object

Uses 'autotag' configuration to turn keywords into tags for time tracking. Does not repeat tags in a title, and only converts the first instance of an untagged keyword

Parameters:

  • string (String) —

    The text to tag

#changes ⇒ Hash

Return a hash of changes between initial file read and current Items object

Returns:

  • (Hash) —

    Hash containing added and removed keys with arrays of Item

#choose_section(include_all: false) ⇒ String

Generate a menu of sections and allow user selection

Returns:

  • (String) —

    The selected section name

#choose_section_tag ⇒ String

Generate a menu of sections and tags and allow user selection

Returns:

  • (String) —

    The selected section or tag name

#choose_tag(section = 'All', items: nil, include_all: false) ⇒ String

Generate a menu of tags and allow user selection

Returns:

  • (String) —

    The selected tag name

#choose_view ⇒ String

Generate a menu of views and allow user selection

Returns:

  • (String) —

    The selected view name

#configure(filename = nil) ⇒ Object

Load configuration files and updated the @settings attribute with a Doing::Configuration object

Parameters:

  • filename (String) (defaults to: nil) —

    (optional) path to alternative config file

#create(filename = nil) ⇒ Object

Create a new doing file

#dedup(items, no_overlap: false) ⇒ Object

Remove items from an array that already exist in :content based on start and end times

Parameters:

  • items (Array) —

    The items to deduplicate

  • no_overlap (Boolean) (defaults to: false) —

    Remove items with overlapping time spans

#delete_items(items, force: false) ⇒ Object

Delete a set of items from the main index

Parameters:

  • items (Array) —

    The items to delete

  • force (Boolean) (defaults to: false) —

    Force deletion without confirmation

#edit_items(items) ⇒ Object

#edit_last(section: 'All', options: {}) ⇒ Object

Edit the last entry

Parameters:

  • section (String) (defaults to: 'All') —

    The section, default "All"

Raises:

  • (UserCancelled)

#filter_items(items = Items.new, opt: {}) ⇒ Object

Filter items based on search criteria

Parameters:

  • items (Array) (defaults to: Items.new) —

    The items to filter (if empty, filters all items)

  • opt (Hash) (defaults to: {}) —

    The filter parameters

Options Hash (opt:):

  • :section (String) — default: 'all'
  • :unfinished (Boolean) — default: false
  • :tag (Array or String) — default: [] —

    Array or comma-separated string

  • :tag_bool (Symbol) — default: :and —

    :and, :or, :not

  • :search (String) — default: '' —

    string, optional regex with /string/

  • :date_filter (Array) — default: nil —

    [[Time]start, [Time]end]

  • :only_timed (Boolean) — default: false
  • :before (String) — default: nil —

    Date/Time string, unparsed

  • :after (String) — default: nil —

    Date/Time string, unparsed

  • :today (Boolean) — default: false —

    limit to entries from today

  • :yesterday (Boolean) — default: false —

    limit to entries from yesterday

  • :count (Number) — default: 0 —

    max entries to return

  • :age (String) — default: new —

    'old' or 'new'

  • :val (Array) — default: nil —

    Array of tag value queries

#fork_editor(input = '', message: :default) ⇒ Object

Create a process for an editor and wait for the file handle to return

Parameters:

  • input (String) (defaults to: '') —

    Text input for editor

Raises:

  • (MissingEditor)

#format_input(input) ⇒ Array

Takes a multi-line string and formats it as an entry

Parameters:

  • input (String) —

    The string to parse

Returns:

  • (Array) —

    [[String]title, [Note]note]

Raises:

  • (EmptyInput)

#fuzzy_filter_args(query, case_type) ⇒ Object

#fuzzy_filter_items(items, query, case_type: :smart) ⇒ Items

Use fzf to filter an Items object with a search query. Faster than #filter_items when all you need is a text search of the title and note

Parameters:

  • items (Items) —

    an Items object

  • query (String) —

    The search query

  • case_type (Symbol) (defaults to: :smart) —

    The case type (:smart, :sensitive, :ignore)

Returns:

  • (Items) —

    Filtered Items array

#get_diff(filename = nil) ⇒ Object

Get difference between current content and last backup

Parameters:

  • filename (String) (defaults to: nil) —

    The file path

Raises:

  • (DoingRuntimeError)

#get_interval(item, formatted: true, record: true) ⇒ Object

Gets the interval between entry's start date and @done date

Parameters:

  • item (Item) —

    The entry

  • formatted (Boolean) (defaults to: true) —

    Return human readable time (default seconds)

  • record (Boolean) (defaults to: true) —

    Add the interval to the total for each tag

Returns:

  • Interval in seconds, or [d, h, m] array if formatted is true. False if no end date or interval is 0

#get_view(title, fallback: nil) ⇒ Object

Gets a view from configuration

Parameters:

  • title (String) —

    The title of the view to retrieve

#guess_section(frag, guessed: false, suggest: false) ⇒ Object

Attempt to match a string with an existing section

Parameters:

  • frag (String) —

    The user-provided string

  • guessed (Boolean) (defaults to: false) —

    already guessed and failed

#guess_view(frag, guessed: false, suggest: false) ⇒ Object

Attempt to match a string with an existing view

Parameters:

  • frag (String) —

    The user-provided string

  • guessed (Boolean) (defaults to: false) —

    already guessed

#import(paths, opt) ⇒ Object

Imports external entries

Parameters:

  • paths (String) —

    Path to JSON report file

  • opt (Hash) —

    Additional Options

#init_doing_file(path = nil) ⇒ Object

Initializes the doing file.

Parameters:

  • path (String) (defaults to: nil) —

    Override path to a doing file, optional

#interactive(opt) ⇒ Object

Display an interactive menu of entries

Options hash is shared with #filter_items and #act_on

Parameters:

  • opt (Hash) —

    Additional options

Raises:

  • (NoResults)

#last(times: true, section: nil, options: {}) ⇒ Object

Show the last entry

Parameters:

  • times (Bool) (defaults to: true) —

    Show times

  • section (String) (defaults to: nil) —

    Section to pull from, default Currently

#last_entry(opt) ⇒ Object

Get the last entry

Parameters:

  • opt (Hash) —

    Additional Options

#last_note(section = 'All') ⇒ Object

Return the content of the last note for a given section

Parameters:

  • section (String) (defaults to: 'All') —

    The section to retrieve from, default All

Raises:

  • (NoEntryError)

#list_date(dates, section, times = nil, output = nil, opt) ⇒ Object

Display entries within a date range

Parameters:

  • dates (Array) —

    [start, end]

  • section (String) —

    The section

  • times (Bool) (defaults to: nil) —

    Show times

  • output (String) (defaults to: nil) —

    Output format

  • opt (Hash) —

    Additional Options

#list_section(opt, items: Items.new) ⇒ Object

Display contents of a section based on options

Parameters:

  • opt (Hash) —

    Additional Options

#logger ⇒ Object

Logger

Responds to :debug, :info, :warn, and :error

Each method takes a topic, and a message or block

Example: debug('Hooks', 'Hook 1 triggered')

#recent(count = 10, section = nil, opt) ⇒ Object

Show recent entries

Parameters:

  • count (Integer) (defaults to: 10) —

    The number to show

  • section (String) (defaults to: nil) —

    The section to show from, default Currently

  • opt (Hash) —

    Additional Options

#rename_view_keys(view) ⇒ Object

#repeat_item(item, opt) ⇒ Object

Duplicate an item and add it as a new item

Parameters:

  • item (Item) —

    the item to duplicate

  • opt (Hash) —

    additional options

Options Hash (opt):

  • :editor (Boolean) —

    open new item in editor

  • :date (String) —

    set start date

  • :in (String) —

    add new item to section :in

  • :note (Note) —

    add note to new item

Returns:

  • nothing

#repeat_last(opt) ⇒ Object

Restart the last entry

Parameters:

  • opt (Hash) —

    Additional Options

#reset_item(item, date: nil, finish_date: nil, resume: false) ⇒ Object

Reset start date to current time, optionally remove done tag (resume)

Parameters:

  • item (Item) —

    the item to reset/resume

  • resume (Boolean) (defaults to: false) —

    removing @done tag if true

#rotate(opt) ⇒ Object

Rename doing file with date and start fresh one

#sections ⇒ Array

List sections

Returns:

  • (Array) —

    section titles

#stop_start(target_tag, opt) ⇒ Object

Accepts one tag and the raw text of a new item if the passed tag is on any item, it's replaced with @done. if new_item is not nil, it's tagged with the passed tag and inserted. This is for use where only one instance of a given tag should exist (@meanwhile)

Parameters:

  • target_tag (String) —

    Tag to replace

  • opt (Hash) —

    Additional Options

Options Hash (opt):

  • :section (String) —

    target section

  • :archive (Boolean) —

    archive old item

  • :back (Date) —

    backdate new item

  • :new_item (String) —

    content to use for new item

  • :note (Array) —

    note content for new item

#tag_groups(items, opt: {}) ⇒ Object

#tag_last(opt) ⇒ Object

Tag the last entry or X entries

hooked

Parameters:

  • opt (Hash) —

    Additional Options (see

    filter_items for filtering

    options)

Raises:

  • (NoResults)

See Also:

#tag_times(format: :text, sort_by: :time, sort_order: :asc) ⇒ Object

Get total elapsed time for all tags in selection

Parameters:

  • format (String) (defaults to: :text) —

    return format (html, json, or text)

  • sort_by (Symbol) (defaults to: :time) —

    Sort by :name or :time

  • sort_order (Symbol) (defaults to: :asc) —

    The sort order (:asc or :desc)

#today(times = true, output = nil, opt) ⇒ Object

Show all entries from the current day

Parameters:

  • times (Boolean) (defaults to: true) —

    show times

  • output (String) (defaults to: nil) —

    output format

  • opt (Hash) —

    Options

#verify_duration(date, finish_date, title: nil) ⇒ Object

Interactively verify an item modification if elapsed time is greater than configured threshold

Parameters:

  • date (String) —

    Item date

  • finish_date (String) —

    The finish date

  • title (String) (defaults to: nil) —

    The Item title

#view_to_options(title) ⇒ Object

#views ⇒ Array

List available views

Returns:

#write(file = nil, backup: true) ⇒ Object

Write content to file or STDOUT

Parameters:

  • file (String) (defaults to: nil) —

    The filepath to write to

#yesterday(section, times = nil, output = nil, opt) ⇒ Object

Show entries from the previous day

Parameters:

  • section (String) —

    The section

  • times (Bool) (defaults to: nil) —

    Show times

  • output (String) (defaults to: nil) —

    Output format

  • opt (Hash) —

    Additional Options