omniboard 1.1.1 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2e2d60b99706bc348ecdf70a1e4f1851346f0316
4
- data.tar.gz: a38acea769d7d5cfb9baa852816970dd1f462096
2
+ SHA256:
3
+ metadata.gz: 15db7647454acd44ef5c675928f18dcea5172075745470acf7e5388059310c98
4
+ data.tar.gz: f1de449bc7bb14adc915796f1106a450bc6a8375d805dbaecede74bb2552d184
5
5
  SHA512:
6
- metadata.gz: 1e0fadb02d7333a293538b4f342cf9a7da530d75052f55524ab642b8e1eaeef01575aa0ee8e112b0c32dd9b781e975667d27c1bba24c9c2f8183444097581ae9
7
- data.tar.gz: c84e7be8a6a55cf2e0e4f5ffff26f0655959e5400e0fc2767c2f3da7198b6fc2c7de0f7f09ccc95dd20ba34ff30fee897ec5ad55f2989b872d5cf05050a3af85
6
+ metadata.gz: 88ee622465d0e65f071b4aa5f079b4dc771d1802b1428dfe006fa2c5d7d77d28c5470ac96fc06a2b178217bb45f5dfa053b806b1d45125c032b14c8ac2baa876
7
+ data.tar.gz: 232967a418d4aa6a1736edc4b712c6eadc75794838830b47eeec95fd87ce12a59a7476433b2241f913d0c0072df6be65947edaba10eb87f07b0baf1523cc1d54
@@ -0,0 +1,131 @@
1
+ # Change Log
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
+ and this project adheres to [Semantic Versioning](http://semver.org/).
6
+
7
+ # [1.2.4] - 2019-04-04
8
+
9
+ ### Changed
10
+
11
+ * Updated gem dependencies from "trollop" to "optimist"
12
+
13
+ # [1.2.3] - 2017-12-18
14
+
15
+ ### Changed
16
+
17
+ * Updated Readme to discuss common issues with custom columns.
18
+
19
+ # [1.2.2] - 2017-12-10
20
+
21
+ ### Changed
22
+
23
+ * Updated `rubyfocus` version dependency.
24
+
25
+ # [1.2.1] - 2017-01-07
26
+
27
+ ### Changed
28
+ * Projects which are deferred will no longer show up in the active column
29
+
30
+ ### Fixed
31
+ * Omniboard will no longer choke on unnamed projects
32
+
33
+ # [1.2.0] - 2016-11-15
34
+
35
+ ### Added
36
+ * You can now specify the `colour` of a column: all projects within that column will be coloured appropriately, regardless of what group they're in.
37
+
38
+ ### Changed
39
+ * Projects with nil names are now represented as empty strings when using `ProjectWrapper#to_s`.
40
+ * Updated README to reflect `colour` property.
41
+
42
+ # [1.1.2] - 2016-10-10
43
+
44
+ ### Changed
45
+ * HISTORY is now CHANGELOG. Formatting based on Keep a Changelog.
46
+ * Edited README so examples on colouring groups are better.
47
+ * Non-group rendering in `column.erb` is slightly prettier.
48
+
49
+ ### Fixed
50
+ * Default config docs now work properly without giving you errors.
51
+ * Will no longer try to load non-html files in the columns directory.
52
+ * Updated dependency version for RubyFocus.
53
+
54
+ ## [1.1.1] - 2016-09-09
55
+
56
+ ### Added
57
+ * `Omniboard::Column.reset_columns` allows you to wipe the global register of columns. Useful for unit testing.
58
+ * `Omniboard::Column.reset_config` now takes the option `:all` to wipe all configuration fields.
59
+
60
+ ### Fixed
61
+ * The `config.rb` template file will now let you have projects that are not contained within folders.
62
+
63
+ ## [1.1.0] - 2016-08-29
64
+
65
+ ### Added
66
+ * You can now add custom CSS to your board. Any CSS in the file `custom.css` (inside your config file) will be included in the output HTML file. See the readme for more information.
67
+
68
+ ## [1.0.1] - 2016-08-01
69
+
70
+ ### Fixed
71
+ * Fixing CDATA tags within javascript - allows me to parse as XHTML while keeping JS all good.
72
+ * Improved display of column header numbers.
73
+
74
+ ## [1.0.0] - 2016-07-08
75
+
76
+ ### Added
77
+ * `Omniboard::document=` is available if you just want to set Omniboard's document variable by yourself without all that hassle of loading from file.
78
+ * If your document has no fetcher, it's always considered to be at head.
79
+ * Substantial changes to how groups work. You may now return any object from a `group_by` method, and use that object to sort your groups before displaying names. See the Readme for more information on how to use the updated groups.
80
+ * You can now custom colour your groups! See the Readme for more information.
81
+ * The column's `icon` methods may now return an array of `[icon, alt]`, for supplying popup information on icons.
82
+ * You can add a "refresh" link to the top of the page using the `refresh_link` property inside `config`.
83
+ * Setting `hide_dimmed` on a column will automatically hide dimmed projects on page load
84
+ * Set project counts using the `display_project_counts` property on columns. Can be set to `all`, `active`, or `marked`.
85
+
86
+ ## [0.4.0] - 2016-06-27
87
+
88
+ ### Added
89
+ * Added some shiny CSS for the project details - notes and remaining tasks lists should be a bit sexier
90
+
91
+
92
+ ### Changed
93
+ * Project notes will now show basic styling (italics, bold, underline; better paragraphs).
94
+ * Projects now show due and deferral dates (when appropriate) in the project overlay
95
+
96
+ ## [0.3.3] - 2016-05-23
97
+
98
+ ### Added
99
+ * Omniboard works out when your document is out of date, or even when it's become detached from the head of your omnifocus database, and lets you know.
100
+
101
+ ### Fixed
102
+ * `Group` now has a default `light_colour` method - no more errors if you don't group your projects!
103
+
104
+
105
+ ## [0.3.1] - 2016-02-13
106
+
107
+ ### Fixed
108
+ * Remove console.log() debugging in js functions
109
+ * Previous change to hide/show code resulted in a non-functioning info overlay. Now fixed.
110
+
111
+ ## [0.3.0] - 2016-02-12
112
+
113
+ ### Added
114
+ * You can now set a block property to `nil` to avoid running any block (including any defaults).
115
+
116
+ ## [0.2.1] - 2016-02-09
117
+
118
+ ### Fixed
119
+ * Added `trollop` to list of runtime dependencies
120
+
121
+ ## [0.2.0] - 2016-02-08
122
+
123
+ ### Changed
124
+ * Project groups will hide themselves if every child project has been hidden.
125
+
126
+ ### Added
127
+ * Added `Column#filter_button`, which allows you to add a button filtering out dimmed tasks.
128
+
129
+ ## [0.1.0] - 2016-02-04
130
+
131
+ Hello, world!
data/README.md CHANGED
@@ -16,7 +16,7 @@ Omniboard comes as a gem, although it's not currently hosted on rubygems or the
16
16
  git clone https://github.com/jyruzicka/omniboard.git
17
17
  cd omniboard
18
18
  gem build omniboard.gemspec
19
- gem install omniboard-1.1.1.gem
19
+ gem install omniboard-1.2.3.gem
20
20
  ```
21
21
 
22
22
  Alternatively, add it to your `Gemfile`:
@@ -33,6 +33,13 @@ Once installed, use the built-in binary:
33
33
  omniboard
34
34
  ```
35
35
 
36
+ or try the following to see the kanban in your web browser:
37
+
38
+ ```
39
+ omniboard -o kanban.html
40
+ open kanban.html
41
+ ```
42
+
36
43
  To see the possible flags, run:
37
44
 
38
45
  ```
@@ -81,6 +88,7 @@ end
81
88
  * **hide_dimmed**: When set to true, dimmed projects will be automatically hidden on page load. By default, set to false.
82
89
  * **display_project_counts**: Set this to `:all`, `:active`, or `:marked`. Will display the total number of projects in a column: the value you give it will determine if it counts all projects (`:all`), projects which are not dimmed (`:active`), or only marked projected (`:marked`).
83
90
  * **project_limit**: If you're display project counts and you have more projects than this number, the project count will show up highlighted red. Useful if you're trying to keep down your total number of active projects!
91
+ * **colour**: If specified, all projects in this column will be coloured appropriately. Use it to keep your completed column greyed out, or your high-priority column bright red.
84
92
 
85
93
  The following column properties take blocks of ruby code. You can alter these inside the column block in the following manner:
86
94
 
@@ -139,11 +147,37 @@ By default, each group is given an arbitrary colour. Sometimes you might want to
139
147
 
140
148
  ```ruby
141
149
  Omniboard::Column.config do
142
- colour_group(50){ |i| i == 0 }
150
+ group_by{ |p| p.container || "" }
151
+
152
+ colour_group(50){ |identifier| identifier.respond_to?(:name) && identifier.name == "Home Projects" }
153
+ end
154
+ ```
155
+
156
+ The `colour_group` method takes two arguments: first, a numerical value which represents the *hue* you want the group to be, and a block which takes the group identifier and returns `true` or `false`. In the above example, we're using the containing folder as the group identifier. If the containing folder's name is "Home Projects", we set the group's colour to `50`.
157
+
158
+ #### A note on groups and identifiers
159
+
160
+ You may find that upon creating a new column, with a new grouping block, you get an error that looks something like this:
161
+
162
+ ```ruby
163
+ .omniboard/columns/config.rb:16:in block (2 levels) in <top (required)>': undefined method 'ancestry' for (1/1):Rational (NoMethodError)
164
+ from /usr/local/lib/ruby/gems/2.4.0/gems/omniboard-1.2.1/lib/omniboard/column.rb:163:in 'sort'
165
+ from /usr/local/lib/ruby/gems/2.4.0/gems/omniboard-1.2.1/lib/omniboard/column.rb:163:in 'groups'
166
+ ...
167
+ ```
168
+
169
+ This is probably due to differing group identifiers. For example, the "Due Soon" column above uses integers as group identifiers (`1`, `2`, etc.), while your default columns use `Rubyfocus::Folder`s:
170
+
171
+ ```ruby
172
+ Omniboard::Column.config do
173
+ group_by{ |p| p.container || "" }
174
+ ...
143
175
  end
144
176
  ```
145
177
 
146
- The `colour_group` method takes two arguments: first, a numerical value which represents the *hue* you want the group to be, and a block which is evaluated by passing the group's identifier and receiving `true` or `false`. So in this example, if the identifier is equal to 0, the group's colour is set to 50.
178
+ Since the default group is a `Rubyfocus::Folder`, the default sorting and group naming methods assume they're being passed one (or more) `Rubyfocus::Folder`. If they get passed an integer (or a string, or a boolean, or anything else), they'll throw an error.
179
+
180
+ The moral of the story: if you're making a new column, with a new `group_by` method, you probably need to provide a `sort_groups` and `group_name` method as well.
147
181
 
148
182
  ### Global configuration
149
183
 
@@ -3,7 +3,7 @@
3
3
  require "omniboard"
4
4
 
5
5
  # Command line options
6
- require "trollop"
6
+ require "optimist"
7
7
 
8
8
  opts = Trollop::options do
9
9
  opt :configure, "Location of configuration files. (Default: #{File.join(ENV["HOME"], ".omniboard")})", type: String
@@ -11,7 +11,6 @@ opts = Trollop::options do
11
11
  opt :reset, "Wipe cache and start again from the source."
12
12
  end
13
13
 
14
-
15
14
  # Set configuration location
16
15
  Omniboard::config_location = opts[:configure] if opts[:configure]
17
16
 
@@ -52,6 +52,9 @@ class Omniboard::Column
52
52
  # How many projects to show per line? Defaults to 1.
53
53
  property :columns
54
54
 
55
+ # Column-wide colour setting. Overrides group colours
56
+ property :colour
57
+
55
58
  # Intializer. Provide name and block for instance evaluation (optional)
56
59
  def initialize(name, &blck)
57
60
  # Set defaults
@@ -1,6 +1,6 @@
1
1
  Omniboard::Column.new "Active" do
2
2
  order 1
3
- conditions{ |p| p.active? }
3
+ conditions{ |p| p.active? && !p.deferred? }
4
4
 
5
5
  width 2
6
6
  columns 4
@@ -3,9 +3,38 @@ Omniboard::Column.config do
3
3
  # Group projects by their containing folders
4
4
  group_by{ |p| p.container || "" }
5
5
 
6
- # Sort by rank, with top level projects at the top
7
- sort_groups{ |c| c.nil? ? 0 : c.rank }
6
+ # This somewhat-complex code sorts projects by their order within OmniFocus
7
+ # Want to help? Find a more elegant way to write this :P
8
+ sort_groups do |a,b|
9
+ if a == ""
10
+ -1
11
+ elsif b == ""
12
+ 1
13
+ else
14
+ # Compare from outside in
15
+ a_ancestry = [a] + a.ancestry
16
+ b_ancestry = [b] + b.ancestry
17
+
18
+ a_cursor = a_ancestry.size - 1
19
+ b_cursor = b_ancestry.size - 1
20
+
21
+ sort_value = 0
22
+ until a_cursor < 0 || b_cursor < 0 || sort_value != 0
23
+ sort_value = (a_ancestry[a_cursor].rank <=> b_ancestry[b_cursor].rank)
24
+ if sort_value == 0
25
+ a_cursor -= 1
26
+ b_cursor -= 1
27
+ end
28
+ end
29
+
30
+ if sort_value != 0
31
+ sort_value
32
+ else
33
+ a_ancestry.size <=> b_ancestry.size
34
+ end
35
+ end
36
+ end
8
37
 
9
38
  # Name based on ancestry
10
- group_name{ |c| c.nil? ? "Top level" : c.ancestry.map(&:name).reverse.join("→")}
39
+ group_name{ |c| (c == "") ? "Top level" : ([c] + c.ancestry.map(&:name)).reverse.join("→") }
11
40
  end
@@ -65,7 +65,7 @@ module Omniboard
65
65
  # Fetch all columns!
66
66
  def columns
67
67
  @columns ||= begin
68
- Dir[File.join(columns_location, "*")].each{ |f| require(f) } if File.exists?(columns_location)
68
+ Dir[File.join(columns_location, "*.rb")].each{ |f| require(f) } if File.exists?(columns_location)
69
69
  Omniboard::Column.columns
70
70
  end
71
71
  end
@@ -27,7 +27,13 @@ class Omniboard::ProjectWrapper
27
27
  #---------------------------------------
28
28
  # Colour methods
29
29
  def colour
30
- (@group || Omniboard::Group).colour
30
+ if @column && @column.colour
31
+ @column.colour
32
+ elsif @group
33
+ @group.colour
34
+ else
35
+ Omniboard::Group.colour
36
+ end
31
37
  end
32
38
 
33
39
  def light_colour
@@ -108,7 +114,7 @@ class Omniboard::ProjectWrapper
108
114
  end
109
115
 
110
116
  def to_s
111
- self.project.to_s
117
+ self.project.to_s || ""
112
118
  end
113
119
 
114
120
  private
@@ -13,7 +13,6 @@ class Omniboard::Renderer
13
13
  end
14
14
 
15
15
 
16
-
17
16
  def to_s
18
17
  preamble + @columns.map{ |c| render_column(c) }.join("\n") + postamble
19
18
  end
@@ -18,8 +18,10 @@
18
18
  </div>
19
19
  <% end %>
20
20
  <% else %>
21
- <% column.projects.each do |p| %>
22
- <%= render_project(p) %>
23
- <% end %>
21
+ <div class="project-group">
22
+ <% column.projects.each do |p| %>
23
+ <%= render_project(p) %>
24
+ <% end %>
25
+ </div>
24
26
  <% end %>
25
27
  </div>
@@ -1,4 +1,4 @@
1
- <div class="<%= project.css_classes.join(" ") %>" data-name="<%=project.name.sanitize%>" data-id="<%=project.id%>" data-note="<%=project.formatted_note.html_escape%>" data-colour="<%=project.colour%>" data-light-colour="<%=project.light_colour%>" data-tasks="<%=project.task_list.html_escape%>" data-deferred="<%=project.deferred_date%>" data-due="<%=project.due_date%>">
1
+ <div class="<%= project.css_classes.join(" ") %>" data-name="<%=(project.name||"").sanitize%>" data-id="<%=project.id%>" data-note="<%=project.formatted_note.html_escape%>" data-colour="<%=project.colour%>" data-light-colour="<%=project.light_colour%>" data-tasks="<%=project.task_list.html_escape%>" data-deferred="<%=project.deferred_date%>" data-due="<%=project.due_date%>">
2
2
  <h4><%=project.name%></h4>
3
3
  <div class="tasks"><%=project.num_tasks%> task<%=project.num_tasks == 1 ? "" : "s"%> remaining</div>
4
4
  <% if project.all_tasks_deferred? %>
@@ -5,11 +5,11 @@ Gem::Specification.new do |s|
5
5
  s.version = File.read("version.txt")
6
6
  s.license = "MIT"
7
7
 
8
- s.summary = "Gem summary here."
9
- s.description = "Gem description here."
8
+ s.summary = "Display Omnifocus libraries as kanban boards, with ruby."
9
+ s.description = "A pure-ruby library (and binary) to read and parse Omnifocus task lists as kanban boards."
10
10
 
11
11
  s.author = "Jan-Yves Ruzicka"
12
- s.email = "janyves.ruzicka@gmail.com"
12
+ s.email = "jan@1klb.com"
13
13
  s.homepage = "https://github.com/jyruzicka/omniboard"
14
14
 
15
15
  s.files = File.read("Manifest").split("\n").select{ |l| !l.start_with?("#") && l != ""}
@@ -18,6 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.executables << "omniboard"
19
19
  s.extra_rdoc_files = ["README.md"]
20
20
 
21
- s.add_runtime_dependency "rubyfocus", "~> 0.5.5"
22
- s.add_runtime_dependency "trollop", "~> 2.1"
21
+ s.add_runtime_dependency "rubyfocus", "~> 0.5", ">= 0.5.13"
22
+ s.add_runtime_dependency "optimist", "~> 3.0"
23
23
  end
@@ -1 +1 @@
1
- 1.1.1
1
+ 1.2.4
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan-Yves Ruzicka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-08 00:00:00.000000000 Z
11
+ date: 2019-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyfocus
@@ -16,37 +16,44 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.5
19
+ version: '0.5'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.5.13
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 0.5.5
29
+ version: '0.5'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.5.13
27
33
  - !ruby/object:Gem::Dependency
28
- name: trollop
34
+ name: optimist
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '2.1'
39
+ version: '3.0'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '2.1'
41
- description: Gem description here.
42
- email: janyves.ruzicka@gmail.com
46
+ version: '3.0'
47
+ description: A pure-ruby library (and binary) to read and parse Omnifocus task lists
48
+ as kanban boards.
49
+ email: jan@1klb.com
43
50
  executables:
44
51
  - omniboard
45
52
  extensions: []
46
53
  extra_rdoc_files:
47
54
  - README.md
48
55
  files:
49
- - HISTORY.md
56
+ - CHANGELOG.md
50
57
  - README.md
51
58
  - Rakefile
52
59
  - bin/omniboard
@@ -92,9 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
99
  version: '0'
93
100
  requirements: []
94
101
  rubyforge_project:
95
- rubygems_version: 2.4.5.1
102
+ rubygems_version: 2.7.3
96
103
  signing_key:
97
104
  specification_version: 4
98
- summary: Gem summary here.
105
+ summary: Display Omnifocus libraries as kanban boards, with ruby.
99
106
  test_files: []
100
- has_rdoc:
data/HISTORY.md DELETED
@@ -1,71 +0,0 @@
1
- # 1.1.1 // 2016-09-09
2
-
3
- Fixed an issue with core column classes. Plus some handy debugging stuff!
4
-
5
- * [New] `Omniboard::Column.reset_columns` allows you to wipe the global register of columns. Useful for unit testing.
6
- * [New] `Omniboard::Column.reset_config` now takes the option `:all` to wipe all configuration fields.
7
- * [Fix] The `config.rb` template file will now let you have projects that are not contained within folders.
8
-
9
- # 1.1.0 // 2016-08-29
10
-
11
- Add custom CSS to your omniboard.
12
-
13
- * [New] You can now add custom CSS to your board. Any CSS in the file `custom.css` (inside your config file) will be included in the output HTML file. See the readme for more information.
14
-
15
- # 1.0.1 // 2016-08-01
16
-
17
- * [Fix] Fixing CDATA tags within javascript - allows me to parse as XHTML while keeping JS all good.
18
- * [Fix] Improved display of column header numbers.
19
-
20
- # 1.0.0 // 2016-07-08
21
-
22
- Hopefully integrating all the little changes, bugfixes, and modifications that I've wanted to do for a while.
23
-
24
- * [New] `Omniboard::document=` is available if you just want to set Omniboard's document variable by yourself without all that hassle of loading from file.
25
- * [New] If your document has no fetcher, it's always considered to be at head.
26
- * [New] Substantial changes to how groups work. You may now return any object from a `group_by` method, and use that object to sort your groups before displaying names. See the Readme for more information on how to use the updated groups.
27
- * [New] You can now custom colour your groups! See the Readme for more information.
28
- * [New] The column's `icon` methods may now return an array of `[icon, alt]`, for supplying popup information on icons.
29
- * [New] You can add a "refresh" link to the top of the page using the `refresh_link` property inside `config`.
30
- * [New] Setting `hide_dimmed` on a column will automatically hide dimmed projects on page load
31
- * [New] Set project counts using the `display_project_counts` property on columns. Can be set to `all`, `active`, or `marked`.
32
-
33
- # 0.4.0 // 2016-06-27
34
-
35
- Updates galore! Well, some updates, anyway. While there are some larger underlying problems with the codebase, I've just been focussing on the notes of each project.
36
-
37
- * [New] Project notes will now show basic styling (italics, bold, underline; better paragraphs).
38
- * [New] Added some shiny CSS for the project details - notes and remaining tasks lists should be a bit sexier
39
- * [New] Projects now show due and deferral dates (when appropriate) in the project overlay
40
-
41
- # 0.3.3 // 2016-05-23
42
-
43
- Wow, it's been some time, hasn't it? Let's add updates to this.
44
-
45
- * [New] Omniboard works out when your document is out of date, or even when it's become detached from the head of your omnifocus database, and lets you know.
46
- * [Fix] `Group` now has a default `light_colour` method - no more errors if you don't group your projects!
47
-
48
-
49
- # 0.3.1 // 2016-02-13
50
-
51
- * [Fix] Remove console.log() debugging in js functions
52
- * [Fix] Previous change to hide/show code resulted in a non-functioning info overlay. Now fixed.
53
-
54
- # 0.3.0 // 2016-02-12
55
-
56
- * [New] You can now set a block property to `nil` to avoid running any block (including any defaults).
57
-
58
- # 0.2.1 // 2016-02-09
59
-
60
- * [Fix] Added `trollop` to list of runtime dependencies
61
-
62
- # 0.2.0 // 2016-02-08
63
-
64
- A number of updates around the board
65
-
66
- * [New] Project groups will hide themselves if every child project has been hidden.
67
- * [New] Added `Column#filter_button`, which allows you to add a button filtering out dimmed tasks.
68
-
69
- # 0.1.0 // 2016-02-04
70
-
71
- Hello, world!