aboutsummaryrefslogtreecommitdiff
path: root/flakes/taskwarrior-web
diff options
context:
space:
mode:
Diffstat (limited to 'flakes/taskwarrior-web')
-rw-r--r--flakes/taskwarrior-web/Gemfile.lock139
-rw-r--r--flakes/taskwarrior-web/default.nix25
-rw-r--r--flakes/taskwarrior-web/fixes.patch113
-rw-r--r--flakes/taskwarrior-web/flake.lock62
-rw-r--r--flakes/taskwarrior-web/flake.nix33
-rw-r--r--flakes/taskwarrior-web/gemset.nix567
-rw-r--r--flakes/taskwarrior-web/thin.patch23
7 files changed, 962 insertions, 0 deletions
diff --git a/flakes/taskwarrior-web/Gemfile.lock b/flakes/taskwarrior-web/Gemfile.lock
new file mode 100644
index 0000000..1b2f5ba
--- /dev/null
+++ b/flakes/taskwarrior-web/Gemfile.lock
@@ -0,0 +1,139 @@
1PATH
2 remote: .
3 specs:
4 taskwarrior-web (1.1.12)
5 activesupport (~> 3)
6 json (~> 1.8)
7 parseconfig
8 rack-flash3
9 rinku
10 sinatra
11 sinatra-simple-navigation
12 vegas
13 versionomy
14
15GEM
16 remote: http://rubygems.org/
17 specs:
18 activesupport (3.2.22.5)
19 i18n (~> 0.6, >= 0.6.4)
20 multi_json (~> 1.0)
21 blockenspiel (0.5.0)
22 coderay (1.1.2)
23 concurrent-ruby (1.1.4)
24 daemons (1.3.1)
25 diff-lcs (1.3)
26 docile (1.3.1)
27 eventmachine (1.2.7)
28 ffi (1.10.0)
29 formatador (0.2.5)
30 growl (1.0.3)
31 guard (2.15.0)
32 formatador (>= 0.2.4)
33 listen (>= 2.7, < 4.0)
34 lumberjack (>= 1.0.12, < 2.0)
35 nenv (~> 0.1)
36 notiffany (~> 0.0)
37 pry (>= 0.9.12)
38 shellany (~> 0.0)
39 thor (>= 0.18.1)
40 guard-bundler (2.2.1)
41 bundler (>= 1.3.0, < 3)
42 guard (~> 2.2)
43 guard-compat (~> 1.1)
44 guard-compat (1.2.1)
45 guard-rspec (4.7.3)
46 guard (~> 2.1)
47 guard-compat (~> 1.1)
48 rspec (>= 2.99.0, < 4.0)
49 i18n (0.9.5)
50 concurrent-ruby (~> 1.0)
51 json (1.8.6)
52 listen (3.1.5)
53 rb-fsevent (~> 0.9, >= 0.9.4)
54 rb-inotify (~> 0.9, >= 0.9.7)
55 ruby_dep (~> 1.2)
56 lumberjack (1.0.13)
57 method_source (0.9.2)
58 mini_portile2 (2.4.0)
59 multi_json (1.13.1)
60 mustermann (1.0.3)
61 nenv (0.3.0)
62 nokogiri (1.10.1)
63 mini_portile2 (~> 2.4.0)
64 notiffany (0.1.1)
65 nenv (~> 0.1)
66 shellany (~> 0.0)
67 parseconfig (1.0.8)
68 pry (0.12.2)
69 coderay (~> 1.1.0)
70 method_source (~> 0.9.0)
71 rack (2.0.6)
72 rack-flash3 (1.0.5)
73 rack
74 rack-protection (2.0.5)
75 rack
76 rack-test (1.1.0)
77 rack (>= 1.0, < 3)
78 rake (10.5.0)
79 rb-fsevent (0.10.3)
80 rb-inotify (0.10.0)
81 ffi (~> 1.0)
82 rinku (2.0.5)
83 rspec (2.99.0)
84 rspec-core (~> 2.99.0)
85 rspec-expectations (~> 2.99.0)
86 rspec-mocks (~> 2.99.0)
87 rspec-core (2.99.2)
88 rspec-expectations (2.99.2)
89 diff-lcs (>= 1.1.3, < 2.0)
90 rspec-html-matchers (0.5.0)
91 nokogiri (~> 1)
92 rspec (~> 2, >= 2.11.0)
93 rspec-mocks (2.99.4)
94 ruby_dep (1.5.0)
95 shellany (0.0.1)
96 simple-navigation (4.0.5)
97 activesupport (>= 2.3.2)
98 simplecov (0.16.1)
99 docile (~> 1.1)
100 json (>= 1.8, < 3)
101 simplecov-html (~> 0.10.0)
102 simplecov-html (0.10.2)
103 sinatra (2.0.5)
104 mustermann (~> 1.0)
105 rack (~> 2.0)
106 rack-protection (= 2.0.5)
107 tilt (~> 2.0)
108 sinatra-simple-navigation (4.1.0)
109 simple-navigation (~> 4.0)
110 sinatra (>= 1.0, < 3.0)
111 thin (1.7.2)
112 daemons (~> 1.0, >= 1.0.9)
113 eventmachine (~> 1.0, >= 1.0.4)
114 rack (>= 1, < 3)
115 thor (0.20.3)
116 tilt (2.0.9)
117 vegas (0.1.11)
118 rack (>= 1.0.0)
119 versionomy (0.5.0)
120 blockenspiel (~> 0.5)
121
122PLATFORMS
123 ruby
124
125DEPENDENCIES
126 growl
127 guard-bundler
128 guard-rspec
129 rack-test
130 rake (< 11)
131 rb-fsevent
132 rspec (~> 2)
133 rspec-html-matchers
134 simplecov
135 taskwarrior-web!
136 thin
137
138BUNDLED WITH
139 1.16.2
diff --git a/flakes/taskwarrior-web/default.nix b/flakes/taskwarrior-web/default.nix
new file mode 100644
index 0000000..7678b3c
--- /dev/null
+++ b/flakes/taskwarrior-web/default.nix
@@ -0,0 +1,25 @@
1{ ruby_2_6, bundlerEnv, src, stdenv }:
2let
3 gems = bundlerEnv {
4 name = "taskwarrior-web-env";
5 ruby = ruby_2_6;
6 pname = "taskwarrior-web";
7 gemset = ./gemset.nix;
8 gemdir = package.out;
9 groups = [ "default" "local" "development" ];
10 };
11 package = stdenv.mkDerivation {
12 pname = "taskwarrior-web";
13 version = src.shortRev;
14 inherit src;
15 phases = [ "unpackPhase" "patchPhase" "installPhase" ];
16 patches = [ ./fixes.patch ./thin.patch ];
17 installPhase = ''
18 cp -a . $out
19 cp ${./Gemfile.lock} $out/Gemfile.lock
20 '';
21 passthru = {
22 inherit gems;
23 };
24 };
25in package
diff --git a/flakes/taskwarrior-web/fixes.patch b/flakes/taskwarrior-web/fixes.patch
new file mode 100644
index 0000000..c4cea34
--- /dev/null
+++ b/flakes/taskwarrior-web/fixes.patch
@@ -0,0 +1,113 @@
1diff --git a/lib/taskwarrior-web/helpers.rb b/lib/taskwarrior-web/helpers.rb
2index 212aed7..94c57df 100644
3--- a/lib/taskwarrior-web/helpers.rb
4+++ b/lib/taskwarrior-web/helpers.rb
5@@ -1,6 +1,8 @@
6 require 'active_support/core_ext/date/calculations'
7
8 module TaskwarriorWeb::App::Helpers
9+ include ERB::Util
10+
11 def format_date(timestamp)
12 format = TaskwarriorWeb::Config.dateformat || '%-m/%-d/%Y'
13 Time.parse(timestamp).localtime.strftime(format)
14diff --git a/lib/taskwarrior-web/model/task.rb b/lib/taskwarrior-web/model/task.rb
15index 212aed7..94c57df 100644
16--- a/lib/taskwarrior-web/model/task.rb
17+++ b/lib/taskwarrior-web/model/task.rb
18@@ -15,8 +15,14 @@
19
20 def initialize(attributes = {})
21 attributes.each do |attr, value|
22+ if attr == "uuid"
23+ next
24+ end
25 send("#{attr}=", value) if respond_to?(attr.to_sym)
26 end
27+ if attributes.has_key? "uuid"
28+ send("uuid=", attributes["uuid"])
29+ end
30
31 @_errors = []
32 @tags = [] if @tags.nil?
33diff --git a/lib/taskwarrior-web/services/builder/base.rb b/lib/taskwarrior-web/services/builder/base.rb
34index 58d246e..8f716ac 100644
35--- a/lib/taskwarrior-web/services/builder/base.rb
36+++ b/lib/taskwarrior-web/services/builder/base.rb
37@@ -10,7 +10,7 @@ module TaskwarriorWeb::CommandBuilder::Base
38 :complete => ':id done',
39 :annotate => ':id annotate',
40 :denotate => ':id denotate',
41- :projects => '_projects',
42+ :projects => '_unique project',
43 :tags => '_tags',
44 :sync => 'sync'
45 }
46@@ -21,7 +21,7 @@
47 substitute_parts if @command_string =~ /:id/
48 end
49 parse_params
50- @built = "#{@command_string}#{@params}"
51+ @built = "#{@params}#{@command_string}"
52 end
53
54 def task_command
55@@ -43,23 +43,23 @@
56
57 def parse_params
58 string = ''
59- string << %( #{@params.delete(:description).shellescape}) if @params.has_key?(:description)
60+ string << %(#{@params.delete(:description).shellescape} ) if @params.has_key?(:description)
61
62 if tags = @params.delete(:tags)
63 tag_indicator = TaskwarriorWeb::Config.property('tag.indicator') || '+'
64- tags.each { |tag| string << %( #{tag_indicator}#{tag.to_s.shellescape}) }
65+ tags.each { |tag| string << %(#{tag_indicator}#{tag.to_s.shellescape} ) }
66 end
67
68 if tags = @params.delete(:remove_tags)
69- tags.each { |tag| string << %( -#{tag.to_s.shellescape}) }
70+ tags.each { |tag| string << %(-#{tag.to_s.shellescape} ) }
71 end
72
73 @params.each do |attr, value|
74 if @command != :update or attr != :uuid
75 if value.respond_to? :each
76- value.each { |val| string << %( #{attr.to_s}:\\"#{val.to_s.shellescape}\\") }
77+ value.each { |val| string << %(#{attr.to_s}:\\"#{val.to_s.shellescape}\\" ) }
78 else
79- string << %( #{attr.to_s}:\\"#{value.to_s.shellescape}\\")
80+ string << %(#{attr.to_s}:\\"#{value.to_s.shellescape}\\" )
81 end
82 end
83 end
84diff --git a/lib/taskwarrior-web/views/tasks/_form.erb b/lib/taskwarrior-web/views/tasks/_form.erb
85index 789e7a1..fa08698 100644
86--- a/lib/taskwarrior-web/views/tasks/_form.erb
87+++ b/lib/taskwarrior-web/views/tasks/_form.erb
88@@ -1,14 +1,14 @@
89 <div class="control-group">
90 <label for="task-description" class="control-label">Description</label>
91 <div class="controls">
92- <input type="text" required="required" id="task-description" name="task[description]" value="<%= @task.description unless @task.nil? %>" />
93+ <input type="text" required="required" id="task-description" name="task[description]" value="<%=h @task.description unless @task.nil? %>" />
94 </div>
95 </div>
96
97 <div class="control-group">
98 <label for="task-project" class="control-label">Project</label>
99 <div class="controls">
100- <input type="text" id="task-project" name="task[project]" value="<%= @task.project unless @task.nil? %>" autocomplete="off" />
101+ <input type="text" id="task-project" name="task[project]" value="<%=h @task.project unless @task.nil? %>" autocomplete="off" />
102 </div>
103 </div>
104
105@@ -45,7 +45,7 @@
106 <div class="control-group">
107 <label for="task-tags" class="control-label">Tags</label>
108 <div class="controls">
109- <input type="text" id="task-tags" name="task[tags]" value="<%= @task.tags.join(', ') unless @task.nil? %>" autocomplete="off" />
110+ <input type="text" id="task-tags" name="task[tags]" value="<%=h @task.tags.join(', ') unless @task.nil? %>" autocomplete="off" />
111 <span class="help-block">Enter tags separated by commas or spaces (e.g. <em>each, word will,be a tag</em>)</span>
112 </div>
113 </div>
diff --git a/flakes/taskwarrior-web/flake.lock b/flakes/taskwarrior-web/flake.lock
new file mode 100644
index 0000000..ce87931
--- /dev/null
+++ b/flakes/taskwarrior-web/flake.lock
@@ -0,0 +1,62 @@
1{
2 "nodes": {
3 "flake-utils": {
4 "locked": {
5 "lastModified": 1648297722,
6 "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=",
7 "owner": "numtide",
8 "repo": "flake-utils",
9 "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade",
10 "type": "github"
11 },
12 "original": {
13 "owner": "numtide",
14 "repo": "flake-utils",
15 "type": "github"
16 }
17 },
18 "nixpkgs": {
19 "flake": false,
20 "locked": {
21 "lastModified": 1596265691,
22 "narHash": "sha256-9ofCzFqttTsGrvTaS4RrDSTNQO9PFOz5uyn8V+2eA5M=",
23 "owner": "NixOS",
24 "repo": "nixpkgs",
25 "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
26 "type": "github"
27 },
28 "original": {
29 "owner": "NixOS",
30 "repo": "nixpkgs",
31 "rev": "840c782d507d60aaa49aa9e3f6d0b0e780912742",
32 "type": "github"
33 }
34 },
35 "root": {
36 "inputs": {
37 "flake-utils": "flake-utils",
38 "nixpkgs": "nixpkgs",
39 "taskwarrior-web": "taskwarrior-web"
40 }
41 },
42 "taskwarrior-web": {
43 "flake": false,
44 "locked": {
45 "lastModified": 1546434241,
46 "narHash": "sha256-BLPBglkV1HCJECSIdyMEergChiV+rwNOClYJnzlZGQk=",
47 "owner": "theunraveler",
48 "repo": "taskwarrior-web",
49 "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8",
50 "type": "github"
51 },
52 "original": {
53 "owner": "theunraveler",
54 "repo": "taskwarrior-web",
55 "rev": "a79cfe2b42791b62364118e58b21b892fff6ded8",
56 "type": "github"
57 }
58 }
59 },
60 "root": "root",
61 "version": 7
62}
diff --git a/flakes/taskwarrior-web/flake.nix b/flakes/taskwarrior-web/flake.nix
new file mode 100644
index 0000000..b08290a
--- /dev/null
+++ b/flakes/taskwarrior-web/flake.nix
@@ -0,0 +1,33 @@
1{
2 description = "A web interface for the Taskwarrior todo application. Because being a neckbeard is only fun sometimes.";
3 inputs.flake-utils.url = "github:numtide/flake-utils";
4 inputs.nixpkgs = {
5 url = "github:NixOS/nixpkgs/840c782d507d60aaa49aa9e3f6d0b0e780912742";
6 flake = false;
7 };
8 inputs.taskwarrior-web = {
9 url = "github:theunraveler/taskwarrior-web/a79cfe2b42791b62364118e58b21b892fff6ded8";
10 flake = false;
11 };
12
13 outputs = { self, nixpkgs, taskwarrior-web, flake-utils }: flake-utils.lib.eachSystem ["x86_64-linux"] (system:
14 let
15 pkgs = import nixpkgs { inherit system; overlays = []; };
16 inherit (pkgs) callPackage;
17 in rec {
18 packages.taskwarrior-web = callPackage ./. { src = taskwarrior-web; };
19 defaultPackage = packages.taskwarrior-web;
20 legacyPackages.taskwarrior-web = packages.taskwarrior-web;
21 checks = {
22 build = defaultPackage;
23 };
24 }
25 ) // rec {
26 overlays = {
27 taskwarrior-web = final: prev: {
28 taskwarrior-web = self.defaultPackage."${final.system}";
29 };
30 };
31 overlay = overlays.taskwarrior-web;
32 };
33}
diff --git a/flakes/taskwarrior-web/gemset.nix b/flakes/taskwarrior-web/gemset.nix
new file mode 100644
index 0000000..35d13c6
--- /dev/null
+++ b/flakes/taskwarrior-web/gemset.nix
@@ -0,0 +1,567 @@
1{
2 activesupport = {
3 dependencies = ["i18n" "multi_json"];
4 groups = ["default"];
5 platforms = [];
6 source = {
7 remotes = ["http://rubygems.org"];
8 sha256 = "0fyxqkkws4px4lzkbcqzp0bwai7nn7jk4p0bgfy0dny9cwm0qc9r";
9 type = "gem";
10 };
11 version = "3.2.22.5";
12 };
13 blockenspiel = {
14 groups = ["default"];
15 platforms = [];
16 source = {
17 remotes = ["http://rubygems.org"];
18 sha256 = "1h701s45n5qprvcpc7fnr45n88p56x07pznkxqnhz1dbdbhb7xx8";
19 type = "gem";
20 };
21 version = "0.5.0";
22 };
23 coderay = {
24 groups = ["default" "local"];
25 platforms = [];
26 source = {
27 remotes = ["http://rubygems.org"];
28 sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
29 type = "gem";
30 };
31 version = "1.1.2";
32 };
33 concurrent-ruby = {
34 groups = ["default"];
35 platforms = [];
36 source = {
37 remotes = ["http://rubygems.org"];
38 sha256 = "1ixcx9pfissxrga53jbdpza85qd5f6b5nq1sfqa9rnfq82qnlbp1";
39 type = "gem";
40 };
41 version = "1.1.4";
42 };
43 daemons = {
44 groups = ["default"];
45 platforms = [];
46 source = {
47 remotes = ["http://rubygems.org"];
48 sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
49 type = "gem";
50 };
51 version = "1.3.1";
52 };
53 diff-lcs = {
54 groups = ["default" "development" "local"];
55 platforms = [];
56 source = {
57 remotes = ["http://rubygems.org"];
58 sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
59 type = "gem";
60 };
61 version = "1.3";
62 };
63 docile = {
64 groups = ["default" "local"];
65 platforms = [];
66 source = {
67 remotes = ["http://rubygems.org"];
68 sha256 = "04d2izkna3ahfn6fwq4xrcafa715d3bbqczxm16fq40fqy87xn17";
69 type = "gem";
70 };
71 version = "1.3.1";
72 };
73 eventmachine = {
74 groups = ["default"];
75 platforms = [];
76 source = {
77 remotes = ["http://rubygems.org"];
78 sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
79 type = "gem";
80 };
81 version = "1.2.7";
82 };
83 ffi = {
84 groups = ["default" "local"];
85 platforms = [];
86 source = {
87 remotes = ["http://rubygems.org"];
88 sha256 = "0j8pzj8raxbir5w5k6s7a042sb5k02pg0f8s4na1r5lan901j00p";
89 type = "gem";
90 };
91 version = "1.10.0";
92 };
93 formatador = {
94 groups = ["default" "local"];
95 platforms = [];
96 source = {
97 remotes = ["http://rubygems.org"];
98 sha256 = "1gc26phrwlmlqrmz4bagq1wd5b7g64avpx0ghxr9xdxcvmlii0l0";
99 type = "gem";
100 };
101 version = "0.2.5";
102 };
103 growl = {
104 groups = ["local"];
105 platforms = [];
106 source = {
107 remotes = ["http://rubygems.org"];
108 sha256 = "0s0y7maljnalpbv2q1j5j5hvb4wcc31y9af0n7x1q2l0fzxgc9n9";
109 type = "gem";
110 };
111 version = "1.0.3";
112 };
113 guard = {
114 dependencies = ["formatador" "listen" "lumberjack" "nenv" "notiffany" "pry" "shellany" "thor"];
115 groups = ["default" "local"];
116 platforms = [];
117 source = {
118 remotes = ["http://rubygems.org"];
119 sha256 = "0h84ja6qvii3hx86w9l4vjpbgl4m8ma8fbawwp7s8l791cgkdcmk";
120 type = "gem";
121 };
122 version = "2.15.0";
123 };
124 guard-bundler = {
125 dependencies = ["guard" "guard-compat"];
126 groups = ["local"];
127 platforms = [];
128 source = {
129 remotes = ["http://rubygems.org"];
130 sha256 = "0lji8f8w7y4prmpr2lqmlljvkqgkgnlsiwqgwvq7b1y3sxlsvy62";
131 type = "gem";
132 };
133 version = "2.2.1";
134 };
135 guard-compat = {
136 groups = ["default" "local"];
137 platforms = [];
138 source = {
139 remotes = ["http://rubygems.org"];
140 sha256 = "1zj6sr1k8w59mmi27rsii0v8xyy2rnsi09nqvwpgj1q10yq1mlis";
141 type = "gem";
142 };
143 version = "1.2.1";
144 };
145 guard-rspec = {
146 dependencies = ["guard" "guard-compat" "rspec"];
147 groups = ["local"];
148 platforms = [];
149 source = {
150 remotes = ["http://rubygems.org"];
151 sha256 = "1jkm5xp90gm4c5s51pmf92i9hc10gslwwic6mvk72g0yplya0yx4";
152 type = "gem";
153 };
154 version = "4.7.3";
155 };
156 i18n = {
157 dependencies = ["concurrent-ruby"];
158 groups = ["default"];
159 platforms = [];
160 source = {
161 remotes = ["http://rubygems.org"];
162 sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
163 type = "gem";
164 };
165 version = "0.9.5";
166 };
167 json = {
168 groups = ["default" "local"];
169 platforms = [];
170 source = {
171 remotes = ["http://rubygems.org"];
172 sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
173 type = "gem";
174 };
175 version = "1.8.6";
176 };
177 listen = {
178 dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
179 groups = ["default" "local"];
180 platforms = [];
181 source = {
182 remotes = ["http://rubygems.org"];
183 sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
184 type = "gem";
185 };
186 version = "3.1.5";
187 };
188 lumberjack = {
189 groups = ["default" "local"];
190 platforms = [];
191 source = {
192 remotes = ["http://rubygems.org"];
193 sha256 = "06im7gcg42x77yhz2w5da2ly9xz0n0c36y5ks7xs53v0l9g0vf5n";
194 type = "gem";
195 };
196 version = "1.0.13";
197 };
198 method_source = {
199 groups = ["default" "local"];
200 platforms = [];
201 source = {
202 remotes = ["http://rubygems.org"];
203 sha256 = "1pviwzvdqd90gn6y7illcdd9adapw8fczml933p5vl739dkvl3lq";
204 type = "gem";
205 };
206 version = "0.9.2";
207 };
208 mini_portile2 = {
209 groups = ["default" "development"];
210 platforms = [];
211 source = {
212 remotes = ["http://rubygems.org"];
213 sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
214 type = "gem";
215 };
216 version = "2.4.0";
217 };
218 multi_json = {
219 groups = ["default"];
220 platforms = [];
221 source = {
222 remotes = ["http://rubygems.org"];
223 sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
224 type = "gem";
225 };
226 version = "1.13.1";
227 };
228 mustermann = {
229 groups = ["default"];
230 platforms = [];
231 source = {
232 remotes = ["http://rubygems.org"];
233 sha256 = "0lycgkmnyy0bf29nnd2zql5a6pcf8sp69g9v4xw0gcfcxgpwp7i1";
234 type = "gem";
235 };
236 version = "1.0.3";
237 };
238 nenv = {
239 groups = ["default" "local"];
240 platforms = [];
241 source = {
242 remotes = ["http://rubygems.org"];
243 sha256 = "0r97jzknll9bhd8yyg2bngnnkj8rjhal667n7d32h8h7ny7nvpnr";
244 type = "gem";
245 };
246 version = "0.3.0";
247 };
248 nokogiri = {
249 dependencies = ["mini_portile2"];
250 groups = ["default" "development"];
251 platforms = [];
252 source = {
253 remotes = ["http://rubygems.org"];
254 sha256 = "09zll7c6j7xr6wyvh5mm5ncj6pkryp70ybcsxdbw1nyphx5dh184";
255 type = "gem";
256 };
257 version = "1.10.1";
258 };
259 notiffany = {
260 dependencies = ["nenv" "shellany"];
261 groups = ["default" "local"];
262 platforms = [];
263 source = {
264 remotes = ["http://rubygems.org"];
265 sha256 = "0x838fa5il0dd9zbm3lxkpbfxcf5fxv9556mayc2mxsdl5ghv8nx";
266 type = "gem";
267 };
268 version = "0.1.1";
269 };
270 parseconfig = {
271 groups = ["default"];
272 platforms = [];
273 source = {
274 remotes = ["http://rubygems.org"];
275 sha256 = "0br2g9k6zc4ygah52aa8cwvpnnkszia29bnvnr8bhpk3rdzi2vmq";
276 type = "gem";
277 };
278 version = "1.0.8";
279 };
280 pry = {
281 dependencies = ["coderay" "method_source"];
282 groups = ["default" "local"];
283 platforms = [];
284 source = {
285 remotes = ["http://rubygems.org"];
286 sha256 = "00rm71x0r1jdycwbs83lf9l6p494m99asakbvqxh8rz7zwnlzg69";
287 type = "gem";
288 };
289 version = "0.12.2";
290 };
291 rack = {
292 groups = ["default" "development"];
293 platforms = [];
294 source = {
295 remotes = ["http://rubygems.org"];
296 sha256 = "1pcgv8dv4vkaczzlix8q3j68capwhk420cddzijwqgi2qb4lm1zm";
297 type = "gem";
298 };
299 version = "2.0.6";
300 };
301 rack-flash3 = {
302 dependencies = ["rack"];
303 groups = ["default"];
304 platforms = [];
305 source = {
306 remotes = ["http://rubygems.org"];
307 sha256 = "0rim9afrns6s8zc4apiymncysyvijpdg18k57kdpz66p55jf4mqz";
308 type = "gem";
309 };
310 version = "1.0.5";
311 };
312 rack-protection = {
313 dependencies = ["rack"];
314 groups = ["default"];
315 platforms = [];
316 source = {
317 remotes = ["http://rubygems.org"];
318 sha256 = "15167q25rmxipqwi6hjqj3i1byi9iwl3xq9b7mdar7qiz39pmjsk";
319 type = "gem";
320 };
321 version = "2.0.5";
322 };
323 rack-test = {
324 dependencies = ["rack"];
325 groups = ["development"];
326 platforms = [];
327 source = {
328 remotes = ["http://rubygems.org"];
329 sha256 = "0rh8h376mx71ci5yklnpqqn118z3bl67nnv5k801qaqn1zs62h8m";
330 type = "gem";
331 };
332 version = "1.1.0";
333 };
334 rake = {
335 groups = ["development"];
336 platforms = [];
337 source = {
338 remotes = ["http://rubygems.org"];
339 sha256 = "0jcabbgnjc788chx31sihc5pgbqnlc1c75wakmqlbjdm8jns2m9b";
340 type = "gem";
341 };
342 version = "10.5.0";
343 };
344 rb-fsevent = {
345 groups = ["local"];
346 platforms = [];
347 source = {
348 remotes = ["http://rubygems.org"];
349 sha256 = "1lm1k7wpz69jx7jrc92w3ggczkjyjbfziq5mg62vjnxmzs383xx8";
350 type = "gem";
351 };
352 version = "0.10.3";
353 };
354 rb-inotify = {
355 dependencies = ["ffi"];
356 groups = ["default" "local"];
357 platforms = [];
358 source = {
359 remotes = ["http://rubygems.org"];
360 sha256 = "1fs7hxm9g6ywv2yih83b879klhc4fs8i0p9166z795qmd77dk0a4";
361 type = "gem";
362 };
363 version = "0.10.0";
364 };
365 rinku = {
366 groups = ["default"];
367 platforms = [];
368 source = {
369 remotes = ["http://rubygems.org"];
370 sha256 = "1smkk299v18brk98gqbdnqrfwm3143kikl30scidqb5j3pzlbz91";
371 type = "gem";
372 };
373 version = "2.0.5";
374 };
375 rspec = {
376 dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
377 groups = ["development" "local"];
378 platforms = [];
379 source = {
380 remotes = ["http://rubygems.org"];
381 sha256 = "14q3hxvngk4ks8h41yw50d5fqbf2dhzwi9rz5ccxvh5a53ak2as3";
382 type = "gem";
383 };
384 version = "2.99.0";
385 };
386 rspec-core = {
387 groups = ["default" "development" "local"];
388 platforms = [];
389 source = {
390 remotes = ["http://rubygems.org"];
391 sha256 = "1wwz21lcz2lwd2jcp2pvq7n1677v23acf7wxsyszp8msb47mw38i";
392 type = "gem";
393 };
394 version = "2.99.2";
395 };
396 rspec-expectations = {
397 dependencies = ["diff-lcs"];
398 groups = ["default" "development" "local"];
399 platforms = [];
400 source = {
401 remotes = ["http://rubygems.org"];
402 sha256 = "11a5pph3anp4xr591dnlcy8xfkdf54qi2lvg4ykpqhxk37si1py3";
403 type = "gem";
404 };
405 version = "2.99.2";
406 };
407 rspec-html-matchers = {
408 dependencies = ["nokogiri" "rspec"];
409 groups = ["development"];
410 platforms = [];
411 source = {
412 remotes = ["http://rubygems.org"];
413 sha256 = "148grzvk0cvh24avhl0shjzz7ldhj138svf48pc5h1fdsb0pnqcv";
414 type = "gem";
415 };
416 version = "0.5.0";
417 };
418 rspec-mocks = {
419 groups = ["default" "development" "local"];
420 platforms = [];
421 source = {
422 remotes = ["http://rubygems.org"];
423 sha256 = "0bzhqahbiswq41nqi6y2dka1k42n0hl14jb6bldb206zp4hikz8r";
424 type = "gem";
425 };
426 version = "2.99.4";
427 };
428 ruby_dep = {
429 groups = ["default" "local"];
430 platforms = [];
431 source = {
432 remotes = ["http://rubygems.org"];
433 sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
434 type = "gem";
435 };
436 version = "1.5.0";
437 };
438 shellany = {
439 groups = ["default" "local"];
440 platforms = [];
441 source = {
442 remotes = ["http://rubygems.org"];
443 sha256 = "1ryyzrj1kxmnpdzhlv4ys3dnl2r5r3d2rs2jwzbnd1v96a8pl4hf";
444 type = "gem";
445 };
446 version = "0.0.1";
447 };
448 simple-navigation = {
449 dependencies = ["activesupport"];
450 groups = ["default"];
451 platforms = [];
452 source = {
453 remotes = ["http://rubygems.org"];
454 sha256 = "08a2s18an3br3xj5j86r33q0hrkai0y157xg67h1khdskb08yylk";
455 type = "gem";
456 };
457 version = "4.0.5";
458 };
459 simplecov = {
460 dependencies = ["docile" "json" "simplecov-html"];
461 groups = ["local"];
462 platforms = [];
463 source = {
464 remotes = ["http://rubygems.org"];
465 sha256 = "1sfyfgf7zrp2n42v7rswkqgk3bbwk1bnsphm24y7laxv3f8z0947";
466 type = "gem";
467 };
468 version = "0.16.1";
469 };
470 simplecov-html = {
471 groups = ["default" "local"];
472 platforms = [];
473 source = {
474 remotes = ["http://rubygems.org"];
475 sha256 = "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn";
476 type = "gem";
477 };
478 version = "0.10.2";
479 };
480 sinatra = {
481 dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
482 groups = ["default"];
483 platforms = [];
484 source = {
485 remotes = ["http://rubygems.org"];
486 sha256 = "1gasgn5f15myv08k10i16p326pchxjsy37pgqfw0xm66kcc5d7ry";
487 type = "gem";
488 };
489 version = "2.0.5";
490 };
491 sinatra-simple-navigation = {
492 dependencies = ["simple-navigation" "sinatra"];
493 groups = ["default"];
494 platforms = [];
495 source = {
496 remotes = ["http://rubygems.org"];
497 sha256 = "1gishxd23qw6bwsk7fkagkfc7ihqyvvvb98j9bmwc6wwpsfs4prs";
498 type = "gem";
499 };
500 version = "4.1.0";
501 };
502 taskwarrior-web = {
503 dependencies = ["activesupport" "json" "parseconfig" "rack-flash3" "rinku" "sinatra" "sinatra-simple-navigation" "vegas" "versionomy"];
504 groups = ["default"];
505 platforms = [];
506 bundledByPath = true;
507 path = ./.;
508 source = {
509 path = ./.;
510 type = "path";
511 };
512 version = "1.1.12";
513 };
514 thin = {
515 dependencies = ["daemons" "eventmachine" "rack"];
516 groups = ["default"];
517 platforms = [];
518 source = {
519 remotes = ["http://rubygems.org"];
520 sha256 = "0nagbf9pwy1vg09k6j4xqhbjjzrg5dwzvkn4ffvlj76fsn6vv61f";
521 type = "gem";
522 };
523 version = "1.7.2";
524 };
525 thor = {
526 groups = ["default" "local"];
527 platforms = [];
528 source = {
529 remotes = ["http://rubygems.org"];
530 sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
531 type = "gem";
532 };
533 version = "0.20.3";
534 };
535 tilt = {
536 groups = ["default"];
537 platforms = [];
538 source = {
539 remotes = ["http://rubygems.org"];
540 sha256 = "0ca4k0clwf0rkvy7726x4nxpjxkpv67w043i39saxgldxd97zmwz";
541 type = "gem";
542 };
543 version = "2.0.9";
544 };
545 vegas = {
546 dependencies = ["rack"];
547 groups = ["default"];
548 platforms = [];
549 source = {
550 remotes = ["http://rubygems.org"];
551 sha256 = "0kzv0v1zb8vvm188q4pqwahb6468bmiamn6wpsbiq6r5i69s1bs5";
552 type = "gem";
553 };
554 version = "0.1.11";
555 };
556 versionomy = {
557 dependencies = ["blockenspiel"];
558 groups = ["default"];
559 platforms = [];
560 source = {
561 remotes = ["http://rubygems.org"];
562 sha256 = "0i0l4pzrl1vyp4lpg2cxhgkk56spki3lld943d6h7168fj8qyv33";
563 type = "gem";
564 };
565 version = "0.5.0";
566 };
567}
diff --git a/flakes/taskwarrior-web/thin.patch b/flakes/taskwarrior-web/thin.patch
new file mode 100644
index 0000000..a7df3e3
--- /dev/null
+++ b/flakes/taskwarrior-web/thin.patch
@@ -0,0 +1,23 @@
1diff --git a/Gemfile b/Gemfile
2index 8544e15..9c4279c 100644
3--- a/Gemfile
4+++ b/Gemfile
5@@ -3,6 +3,8 @@ source "http://rubygems.org"
6 # Specify your gem's dependencies in taskwarrior-web.gemspec
7 gemspec
8
9+gem 'thin'
10+
11 group :local do
12 gem 'rb-fsevent', :require => false
13 gem 'growl', :require => false
14diff --git a/config.ru b/config.ru
15index c3050c6..52387d8 100644
16--- a/config.ru
17+++ b/config.ru
18@@ -1,5 +1,4 @@
19 require File.join(File.dirname(__FILE__), 'lib', 'taskwarrior-web')
20
21-disable :run
22 TaskwarriorWeb::App.set({ :environment => :production })
23 run TaskwarriorWeb::App