nailed 0.0.7 → 0.0.8
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/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
|