nailed 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -3
- data/README.rdoc +9 -3
- data/bin/app +25 -14
- data/bin/nailed +1 -1
- data/config/{products.yml → config.yml} +2 -0
- data/lib/nailed.rb +52 -38
- data/log/nailed.log +0 -6
- data/nailed.gemspec +1 -1
- data/views/bugzilla.haml +19 -1
- data/views/github.haml +5 -4
- data/views/index.haml +3 -2
- data/views/layout.haml +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c61db81e9588903795209716ac504caa4fa7df0
|
4
|
+
data.tar.gz: 0125349b98cc888829ec79dc9cf02a1eadcf5efa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa3b37beae82df9904e92b6d41dc81aafe0b14d8931162d0ac222fb820ac4a0c11c486af9eae24967002f0ef374223491eb0900c491ebb01f9a66208f7853d18
|
7
|
+
data.tar.gz: 3313f9300db5e555f6dac533695086e9622137099335d5bf3acd22a1d9dbbb51e0d9dfaa0c183bb35a0ebdfe320f69e0ea01c54fe27d0070206fd3f568e9fdfc
|
data/README.md
CHANGED
@@ -5,10 +5,16 @@
|
|
5
5
|
`Be aware` that the bugzilla layout (metadata) is still SUSE specific, which may not be useful for everybody.
|
6
6
|
e.g. it relies on bugs being tagged as L3. The plan is to make it optional in the future.
|
7
7
|
|
8
|
-
## Installation
|
8
|
+
## Installation using gem
|
9
9
|
`gem install 'nailed'`
|
10
10
|
|
11
|
-
|
11
|
+
## Installation using git
|
12
|
+
You can use nailed directly from a git checkout as well. Make sure to fetch the dependencies and call `nailed` from the `bin` directory.
|
13
|
+
### SUSE
|
14
|
+
```
|
15
|
+
zypper in libxml2-devel sqlite3-devel gcc make ruby-devel
|
16
|
+
bundle install
|
17
|
+
```
|
12
18
|
|
13
19
|
## Usage
|
14
20
|
|
@@ -43,10 +49,12 @@ nailed --migrate
|
|
43
49
|
|
44
50
|
## Configuration
|
45
51
|
|
46
|
-
All configuration is read from `config/
|
52
|
+
All configuration is read from `config/config.yml`
|
47
53
|
|
48
54
|
``` yaml
|
49
55
|
---
|
56
|
+
title: # Give me a name, or (default) call me Dashboard
|
57
|
+
port: # Specify a port where you can reach the webinterface, or (default) 4567
|
50
58
|
bugzilla:
|
51
59
|
url: # Url of your Bugzilla instance
|
52
60
|
products:
|
data/README.rdoc
CHANGED
@@ -6,10 +6,14 @@
|
|
6
6
|
+Be+ +aware+ that the bugzilla layout (metadata) is still SUSE specific, which may not be useful for everybody.
|
7
7
|
e.g. it relies on bugs being tagged as L3. The plan is to make it optional in the future.
|
8
8
|
|
9
|
-
== Installation
|
9
|
+
== Installation using gem
|
10
10
|
gem install 'nailed'
|
11
11
|
|
12
|
-
|
12
|
+
== Installation using git
|
13
|
+
You can use nailed directly from a git checkout as well. Make sure to fetch the dependencies and call `nailed` from the `bin` directory.
|
14
|
+
=== SUSE
|
15
|
+
zypper in libxml2-devel sqlite3-devel gcc make ruby-devel
|
16
|
+
bundle install
|
13
17
|
|
14
18
|
== Usage
|
15
19
|
|
@@ -34,7 +38,7 @@ Alternatively run it directly from the git directory
|
|
34
38
|
login MaximilianMeister
|
35
39
|
password <your OAuth Token>
|
36
40
|
|
37
|
-
* configure your +
|
41
|
+
* configure your +config.yml+
|
38
42
|
* to setup the database run
|
39
43
|
nailed --migrate
|
40
44
|
|
@@ -43,6 +47,8 @@ Alternatively run it directly from the git directory
|
|
43
47
|
All configuration is read from +config/products.yml+
|
44
48
|
|
45
49
|
---
|
50
|
+
title: # Give me a name, or (default) call me Dashboard
|
51
|
+
port: # Specify a port where you can reach the webinterface, or (default) 4567
|
46
52
|
bugzilla:
|
47
53
|
url: # Url of your Bugzilla instance
|
48
54
|
products:
|
data/bin/app
CHANGED
@@ -14,6 +14,7 @@ class App < Sinatra::Base
|
|
14
14
|
set :public_folder, File.join(ROOT_PATH, "public")
|
15
15
|
set :views, File.join(ROOT_PATH, "views")
|
16
16
|
set :bind, '0.0.0.0'
|
17
|
+
set :port, Nailed.get_config["port"] || 4567
|
17
18
|
|
18
19
|
register Sinatra::AssetPack
|
19
20
|
|
@@ -45,12 +46,16 @@ class App < Sinatra::Base
|
|
45
46
|
}
|
46
47
|
|
47
48
|
before do
|
48
|
-
@
|
49
|
+
@title = Nailed.get_config["title"] || "Dashboard"
|
50
|
+
@products = Nailed.get_config["products"].map{|p,v| v["versions"]}.flatten.compact
|
49
51
|
@product_query = @products.join('&product=')
|
50
|
-
@github_repos = Pullrequest.all(:order => [:created_at.desc]).map(&:repository_rname).uniq
|
51
52
|
end
|
52
53
|
|
53
54
|
helpers do
|
55
|
+
def get_github_repos
|
56
|
+
Pullrequest.all(:order => [:created_at.desc]).map(&:repository_rname).uniq
|
57
|
+
end
|
58
|
+
|
54
59
|
def get_trends(action, item)
|
55
60
|
case action
|
56
61
|
when :bug
|
@@ -63,18 +68,12 @@ class App < Sinatra::Base
|
|
63
68
|
trend_clone = trend.clone
|
64
69
|
begin
|
65
70
|
interval = (trend.length/20.0).round
|
66
|
-
last_iter_open = trend.first.open
|
67
71
|
trend.each do |bt|
|
68
72
|
if trend.index(bt) % interval != 0
|
69
73
|
if bt != trend.last
|
70
|
-
|
71
|
-
trend_clone.delete(bt)
|
72
|
-
end
|
74
|
+
trend_clone.delete(bt)
|
73
75
|
end
|
74
|
-
else
|
75
|
-
next
|
76
76
|
end
|
77
|
-
last_iter_open = bt.open
|
78
77
|
end
|
79
78
|
rescue ZeroDivisionError
|
80
79
|
end
|
@@ -84,11 +83,12 @@ class App < Sinatra::Base
|
|
84
83
|
|
85
84
|
# define sinatra routes
|
86
85
|
get '/' do
|
86
|
+
@github_repos = get_github_repos
|
87
87
|
@l3trend = get_trends(:l3, nil)
|
88
88
|
@allpulls = repository(:default).adapter.select("SELECT COUNT(repository_rname) AS open, repository_rname AS label FROM pullrequests GROUP BY repository_rname")
|
89
89
|
|
90
90
|
@bugtop = []
|
91
|
-
Nailed
|
91
|
+
Nailed.get_config["products"].each do |product,values|
|
92
92
|
values["versions"].each do |version|
|
93
93
|
p = Product.get(version)
|
94
94
|
open = Bugreport.count(:product_name => p.name, :is_open => true)
|
@@ -106,16 +106,17 @@ class App < Sinatra::Base
|
|
106
106
|
haml :index
|
107
107
|
end
|
108
108
|
|
109
|
-
Nailed
|
109
|
+
Nailed.get_config["products"].each do |product,values|
|
110
110
|
values["versions"].each do |version|
|
111
111
|
get "/#{version.gsub(/ /,'_')}/bugzilla" do
|
112
|
+
@github_repos = get_github_repos
|
112
113
|
@product = version
|
113
114
|
|
114
115
|
@bugtrend = get_trends(:bug, version)
|
115
|
-
@allbugs = Bugreport.all(:product_name => version).to_json
|
116
116
|
@allopenbugs = (Bugreport.all(:product_name => version, :is_open => true) -
|
117
117
|
Bugreport.all(:product_name => version, :whiteboard.like => "%openL3%", :is_open => true)).sort! {|a,b| Time.parse(b.last_change_time.to_s).to_i <=> Time.parse(a.last_change_time.to_s).to_i}
|
118
118
|
@allopenl3bugs = (Bugreport.all(:product_name => version, :is_open => true, :whiteboard.like => "%openL3%")).sort! {|a,b| Time.parse(b.last_change_time.to_s).to_i <=> Time.parse(a.last_change_time.to_s).to_i}
|
119
|
+
|
119
120
|
@bugprio = []
|
120
121
|
{"P1 - Urgent" => "p1",
|
121
122
|
"P2 - High" => "p2",
|
@@ -126,6 +127,15 @@ class App < Sinatra::Base
|
|
126
127
|
end
|
127
128
|
@bugprio = @bugprio.to_json
|
128
129
|
|
130
|
+
@top5_components = []
|
131
|
+
components = repository(:default).adapter.select("SELECT component AS label, COUNT(component) AS value FROM bugreports WHERE product_name = '#{version}' AND is_open = 't' GROUP BY component ORDER BY COUNT(component) DESC LIMIT 5")
|
132
|
+
components.each do |bar|
|
133
|
+
@top5_components << {label: bar.label, value: bar.value}
|
134
|
+
end
|
135
|
+
@component_labels = @top5_components.map{|a| a.values[0]}
|
136
|
+
@component_values = @top5_components.map{|a| a.values[1]}
|
137
|
+
@top5_components = @top5_components.to_json
|
138
|
+
|
129
139
|
haml :bugzilla
|
130
140
|
end
|
131
141
|
end unless values["versions"].nil?
|
@@ -134,9 +144,10 @@ class App < Sinatra::Base
|
|
134
144
|
github_repos = Pullrequest.all(:order => [:created_at.desc]).map(&:repository_rname).uniq
|
135
145
|
github_repos.each do |repo|
|
136
146
|
get "/github/#{repo}" do
|
147
|
+
@github_repos = get_github_repos
|
137
148
|
@repo = repo
|
138
|
-
|
139
|
-
@github_url_all_pulls = "https://github.com/#{
|
149
|
+
org = Repository.get(repo).organization_oname
|
150
|
+
@github_url_all_pulls = "https://github.com/#{org}/#{repo}/pulls"
|
140
151
|
|
141
152
|
@allpulls = Pullrequest.all(:repository_rname => repo).sort! {|a,b| b.pr_number <=> a.pr_number}
|
142
153
|
@pulltrend = get_trends(:pull, repo)
|
data/bin/nailed
CHANGED
data/lib/nailed.rb
CHANGED
@@ -6,42 +6,44 @@ require File.join(File.expand_path("..", File.dirname(__FILE__)),"db","database
|
|
6
6
|
|
7
7
|
module Nailed
|
8
8
|
LOGGER = Logger.new(File.join(File.expand_path("..", File.dirname(__FILE__)),"log","nailed.log"))
|
9
|
-
CONFIG_FILE = File.join(File.expand_path("..", File.dirname(__FILE__)),"config","products.yml")
|
10
|
-
PRODUCTS = YAML.load_file(CONFIG_FILE)
|
11
9
|
|
12
10
|
class Bugzilla
|
13
11
|
def initialize
|
14
|
-
Bicho.client = Bicho::Client.new(Nailed
|
12
|
+
Bicho.client = Bicho::Client.new(Nailed.get_config["bugzilla"]["url"])
|
15
13
|
end
|
16
14
|
|
17
15
|
def get_bugs
|
18
|
-
Nailed
|
16
|
+
Nailed.get_config["products"].each do |product,values|
|
19
17
|
values["versions"].each do |version|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
18
|
+
begin
|
19
|
+
Bicho::Bug.where(:product => version).each do |bug|
|
20
|
+
attributes = {
|
21
|
+
:bug_id => bug.id,
|
22
|
+
:summary => bug.summary,
|
23
|
+
:status => bug.status,
|
24
|
+
:is_open => bug.is_open,
|
25
|
+
:product_name => bug.product,
|
26
|
+
:component => bug.component,
|
27
|
+
:severity => bug.severity,
|
28
|
+
:priority => bug.priority,
|
29
|
+
:whiteboard => bug.whiteboard,
|
30
|
+
:assigned_to => bug.assigned_to,
|
31
|
+
:creation_time => "#{bug.creation_time.to_date}T#{bug.creation_time.hour}:#{bug.creation_time.min}:#{bug.creation_time.sec}+00:00",
|
32
|
+
:last_change_time => "#{bug.last_change_time.to_date}T#{bug.last_change_time.hour}:#{bug.last_change_time.min}:#{bug.last_change_time.sec}+00:00",
|
33
|
+
:url => bug.url.gsub(/novell.com\//,'suse.com/show_bug.cgi?id=')
|
34
|
+
}
|
35
|
+
|
36
|
+
db_handler = (Bugreport.get(bug.id) || Bugreport.new).update(attributes)
|
37
|
+
end
|
38
|
+
rescue
|
39
|
+
Nailed.log("error","Could not fetch Bugs for #{version}.")
|
38
40
|
end
|
39
41
|
end unless values["versions"].nil?
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
45
|
def write_bug_trends
|
44
|
-
Nailed
|
46
|
+
Nailed.get_config["products"].each do |product,values|
|
45
47
|
values["versions"].each do |version|
|
46
48
|
open = Bugreport.count(:is_open => true, :product_name => version)
|
47
49
|
fixed = Bugreport.count(:status => "VERIFIED", :product_name => version) + \
|
@@ -59,7 +61,12 @@ module Nailed
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def write_l3_trends
|
62
|
-
open =
|
64
|
+
open = 0
|
65
|
+
Nailed.get_config["products"].each do |product,values|
|
66
|
+
values["versions"].each do |version|
|
67
|
+
open += Bugreport.count(:product_name => version, :whiteboard.like => "%openL3%", :is_open => true)
|
68
|
+
end unless values["versions"].nil?
|
69
|
+
end
|
63
70
|
db_handler = L3Trend.first_or_create(
|
64
71
|
:time => Time.new.strftime("%Y-%m-%d %H:%M:%S"),
|
65
72
|
:open => open
|
@@ -73,11 +80,12 @@ module Nailed
|
|
73
80
|
attr_reader :client
|
74
81
|
|
75
82
|
def initialize
|
83
|
+
Octokit.auto_paginate = true
|
76
84
|
@client = Octokit::Client.new(:netrc => true)
|
77
85
|
end
|
78
86
|
|
79
87
|
def get_open_pulls
|
80
|
-
Nailed
|
88
|
+
Nailed.get_config["products"].each do |product,values|
|
81
89
|
organization = values["organization"]
|
82
90
|
repos = values["repos"]
|
83
91
|
repos.each do |repo|
|
@@ -124,48 +132,54 @@ module Nailed
|
|
124
132
|
end
|
125
133
|
end
|
126
134
|
|
135
|
+
extend self
|
127
136
|
# Generic methods
|
128
|
-
def
|
137
|
+
def log(level,msg)
|
129
138
|
if level == "error"
|
130
|
-
|
139
|
+
LOGGER.error(msg)
|
131
140
|
else
|
132
|
-
|
141
|
+
LOGGER.info(msg)
|
133
142
|
end
|
134
143
|
end
|
135
144
|
|
136
|
-
def
|
145
|
+
def get_config
|
146
|
+
conf = File.join(File.expand_path("..", File.dirname(__FILE__)),"config","config.yml")
|
147
|
+
YAML.load_file(conf)
|
148
|
+
end
|
149
|
+
|
150
|
+
def get_org_repos(github_client, org)
|
137
151
|
all_repos = github_client.org_repos(org)
|
138
152
|
all_repos.map(&:name)
|
139
153
|
end
|
140
154
|
|
141
|
-
def
|
142
|
-
|
155
|
+
def fill_db_after_migration(github_client)
|
156
|
+
get_config["products"].each do |product,values|
|
143
157
|
organization = values["organization"]
|
144
158
|
values["versions"].each do |version|
|
145
159
|
db_handler = Product.first_or_create(:name => version)
|
146
|
-
|
160
|
+
save_state(db_handler)
|
147
161
|
end unless values["versions"].nil?
|
148
162
|
unless organization.nil?
|
149
163
|
db_handler = Organization.first_or_create(:oname => organization)
|
150
|
-
|
151
|
-
org_repos_github =
|
164
|
+
save_state(db_handler)
|
165
|
+
org_repos_github = get_org_repos(github_client, organization)
|
152
166
|
org_repos_yml = values["repos"]
|
153
167
|
org_repos_yml.each do |org_repo|
|
154
168
|
if org_repos_github.include?(org_repo)
|
155
169
|
db_handler = Repository.first_or_create(:rname => org_repo, :organization_oname => organization)
|
156
|
-
|
170
|
+
save_state(db_handler)
|
157
171
|
end
|
158
172
|
end
|
159
173
|
end
|
160
174
|
end
|
161
175
|
end
|
162
176
|
|
163
|
-
def
|
164
|
-
repos =
|
177
|
+
def list_org_repos(github_client, org)
|
178
|
+
repos = get_org_repos(github_client, org)
|
165
179
|
repos.each {|r| puts "- #{r}"}
|
166
180
|
end
|
167
181
|
|
168
|
-
def
|
182
|
+
def save_state(db_handler)
|
169
183
|
unless db_handler.save
|
170
184
|
puts("ERROR: see logfile")
|
171
185
|
log("error", db_handler.errors.inspect)
|
data/log/nailed.log
CHANGED
@@ -1,6 +0,0 @@
|
|
1
|
-
I, [2015-01-12T21:09:16.448245 #5708] INFO -- : Database migrated
|
2
|
-
I, [2015-01-12T21:11:16.939299 #7487] INFO -- : Database upgraded
|
3
|
-
I, [2015-01-12T21:14:16.471252 #9406] INFO -- : Database upgraded
|
4
|
-
I, [2015-01-12T21:27:06.617120 #11844] INFO -- : Database migrated
|
5
|
-
I, [2015-01-12T21:31:58.597441 #13739] INFO -- : Database migrated
|
6
|
-
I, [2015-01-12T21:42:10.532078 #16032] INFO -- : Database migrated
|
data/nailed.gemspec
CHANGED
data/views/bugzilla.haml
CHANGED
@@ -11,9 +11,12 @@
|
|
11
11
|
%hr
|
12
12
|
%br
|
13
13
|
.row
|
14
|
-
.large-
|
14
|
+
.large-6.columns
|
15
15
|
%h5 Bug Priorities
|
16
16
|
#bug_prio
|
17
|
+
.large-6.columns
|
18
|
+
%h5 Top 5 Components
|
19
|
+
#top_components
|
17
20
|
.row
|
18
21
|
%hr
|
19
22
|
%br
|
@@ -46,6 +49,7 @@
|
|
46
49
|
data: #{@bugtrend},
|
47
50
|
xkey: 'time',
|
48
51
|
ykeys: ['open', 'fixed'],
|
52
|
+
yLabelFormat: function(y){return y != Math.round(y)?'':y;},
|
49
53
|
labels: ['Open', 'Fixed'],
|
50
54
|
resize: true,
|
51
55
|
fillOpacity: 0.5,
|
@@ -90,6 +94,20 @@
|
|
90
94
|
else
|
91
95
|
window.open("https://bugzilla.suse.com/buglist.cgi?order=Importance&priority="+row.bugprio+"&product=#{@product}&query_format=advanced&resolution=---");
|
92
96
|
});
|
97
|
+
new Morris.Donut({
|
98
|
+
element: 'top_components',
|
99
|
+
data: #{@top5_components},
|
100
|
+
colors: colors,
|
101
|
+
resize: true,
|
102
|
+
formatter: function(y, data){
|
103
|
+
return y;
|
104
|
+
}
|
105
|
+
}).on('click', function(i, row){
|
106
|
+
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
|
107
|
+
jQuery.noop();
|
108
|
+
else
|
109
|
+
window.open("https://bugzilla.suse.com/buglist.cgi?order=Importance&component="+row.label+"&product=#{@product}&query_format=advanced&resolution=---");
|
110
|
+
});
|
93
111
|
$("[last_change_time]").each(function (index, value){
|
94
112
|
var one_week = 604800;
|
95
113
|
var two_weeks = 1209600;
|
data/views/github.haml
CHANGED
@@ -28,6 +28,7 @@
|
|
28
28
|
data: #{@pulltrend},
|
29
29
|
xkey: 'time',
|
30
30
|
ykeys: ['open'],
|
31
|
+
yLabelFormat: function(y){return y != Math.round(y)?'':y;},
|
31
32
|
labels: ['Open'],
|
32
33
|
resize: true,
|
33
34
|
hideHover: true,
|
@@ -51,13 +52,13 @@
|
|
51
52
|
var then = $(this).attr("creation_time");
|
52
53
|
var diff = now - then;
|
53
54
|
if (diff < one_week) {
|
54
|
-
$(value).css("color","#212121").attr('title', '
|
55
|
+
$(value).css("color","#212121").attr('title', 'opened < one week ago');
|
55
56
|
} else if (diff < two_weeks) {
|
56
|
-
$(value).css("color","#E57373").attr('title', '
|
57
|
+
$(value).css("color","#E57373").attr('title', 'opened < two weeks ago');
|
57
58
|
} else if (diff < one_month) {
|
58
|
-
$(value).css("color","#C62828").attr('title', '
|
59
|
+
$(value).css("color","#C62828").attr('title', 'opened < one month ago');
|
59
60
|
} else {
|
60
|
-
$(value).css("color","#D50000").attr('title', '
|
61
|
+
$(value).css("color","#D50000").attr('title', 'opened > one month ago');
|
61
62
|
}
|
62
63
|
});
|
63
64
|
});
|
data/views/index.haml
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
#bug_top
|
8
8
|
.large-6.columns
|
9
9
|
%h1.title{:align => "center"}
|
10
|
-
Pullrequests by
|
10
|
+
Open Pullrequests by Repo
|
11
11
|
#pull_top
|
12
12
|
.large-12.columns
|
13
13
|
%h1.title{:align => "center"}
|
@@ -20,7 +20,7 @@
|
|
20
20
|
:javascript
|
21
21
|
$(document).foundation();
|
22
22
|
$(document).ready(function(){
|
23
|
-
var colors = ['#B39DDB','#9FA8DA','#90CAF9','#81D4FA','#80DEEA','#80CBC4','#A5D6A7','#C5E1A5','#E6EE9C','#FFF59D','#FFE082','#FFCC80','#FFAB91','#BCAAA4'
|
23
|
+
var colors = ['#FFCDD2','#E1BEE7','#D1C4E9','#C5CAE9','#BBDEFB','#B3E5FC','#B2EBF2','#B2DFDB','#C8E6C9','#DCEDC8','#F0F4C3','#FFF9C4','#FFECB3','#FFE0B2','#FFCCBC','#D7CCC8','#F5F5F5','#CFD8DC','#EF9A9A','#CE93D8','#B39DDB','#9FA8DA','#90CAF9','#81D4FA','#80DEEA','#80CBC4','#A5D6A7','#C5E1A5','#E6EE9C','#FFF59D','#FFE082','#FFCC80','#FFAB91','#BCAAA4'].reverse();//sort(function() { return 0.5 - Math.random() });
|
24
24
|
new Morris.Donut({
|
25
25
|
element: 'pull_top',
|
26
26
|
data: #{@pulltop},
|
@@ -51,6 +51,7 @@
|
|
51
51
|
data: #{@l3trend},
|
52
52
|
xkey: 'time',
|
53
53
|
ykeys: ['open'],
|
54
|
+
yLabelFormat: function(y){return y != Math.round(y)?'':y;},
|
54
55
|
labels: ['Open'],
|
55
56
|
resize: true,
|
56
57
|
hideHover: true,
|
data/views/layout.haml
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
!= css :morris, :media => 'screen'
|
6
6
|
%meta{:charset => "utf-8"}
|
7
7
|
%meta{:name => "viewport", :content => "width=device-width, initial-scale=1.0"}
|
8
|
-
%title
|
8
|
+
%title #{@title}
|
9
9
|
%link{:href => "/images/favicon.ico", :rel => "shortcut icon"}
|
10
10
|
%body
|
11
11
|
.off-canvas-wrap{:data => {'offcanvas' => true}}
|
@@ -17,7 +17,7 @@
|
|
17
17
|
%span
|
18
18
|
%section.middle.tab-bar-section
|
19
19
|
%h1.title
|
20
|
-
%a{:href => '/',:style => "color:white"}
|
20
|
+
%a{:href => '/',:style => "color:white"} #{@title}
|
21
21
|
|
22
22
|
%aside.left-off-canvas-menu
|
23
23
|
%ul.off-canvas-list
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nailed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maximilian Meister
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -149,7 +149,7 @@ files:
|
|
149
149
|
- README.rdoc
|
150
150
|
- bin/app
|
151
151
|
- bin/nailed
|
152
|
-
- config/
|
152
|
+
- config/config.yml
|
153
153
|
- config/products.yml.example
|
154
154
|
- db/database.rb
|
155
155
|
- lib/nailed.rb
|
@@ -210,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
210
|
version: '0'
|
211
211
|
requirements: []
|
212
212
|
rubyforge_project:
|
213
|
-
rubygems_version: 2.
|
213
|
+
rubygems_version: 2.2.2
|
214
214
|
signing_key:
|
215
215
|
specification_version: 4
|
216
216
|
summary: Nailed CLI and WebUI
|