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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce2404c40672c72f705429cb68a1c19e869373d9
4
- data.tar.gz: 9bf34170e942c1c7eb8e94c5f693dbf1b2726697
3
+ metadata.gz: 2c61db81e9588903795209716ac504caa4fa7df0
4
+ data.tar.gz: 0125349b98cc888829ec79dc9cf02a1eadcf5efa
5
5
  SHA512:
6
- metadata.gz: ab2f21d36218a247cf1faac6a037e0ad493b4761382aea20a8ac760ba27b9253fde6b062f749d07c415142ee98de30ae0e935427cdeadfbecc054c89ec0b66a1
7
- data.tar.gz: adaa596a312b6d07d8c0f18f80d16cefab2b3e0c462f19f5a1b9c554be2ef2fef15e010bdf6976ec5261fb18e6db797ffa6a73a37b38103ee40995c5e410fc50
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
- Alternatively run it directly from the git directory
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/products.yml`
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
- Alternatively run it directly from the git directory
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 +products.yml+
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
- @products = Nailed::PRODUCTS["products"].map{|p,v| v["versions"]}.flatten.compact
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
- if bt.open == last_iter_open
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::PRODUCTS["products"].each do |product,values|
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::PRODUCTS["products"].each do |product,values|
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
- @org = Repository.get(repo).organization_oname
139
- @github_url_all_pulls = "https://github.com/#{@org}/#{@repo}/pulls"
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
@@ -19,7 +19,7 @@ end
19
19
  abort("try nailed -h") if opts.all?{|k,v| v.is_a?(FalseClass)}
20
20
 
21
21
  if opts[:server_given]
22
- if Nailed::PRODUCTS["products"].nil?
22
+ if Nailed.get_config["products"].nil?
23
23
  abort("Add some data, there is nothing to be shown")
24
24
  else
25
25
  begin
@@ -1,4 +1,6 @@
1
1
  ---
2
+ title: # Give me a name, or (default) call me Dashboard
3
+ port: # Specify a port where you can reach the webinterface, or (default) 4567
2
4
  bugzilla:
3
5
  url: # Url of your Bugzilla instance
4
6
  products:
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::PRODUCTS["bugzilla"]["url"])
12
+ Bicho.client = Bicho::Client.new(Nailed.get_config["bugzilla"]["url"])
15
13
  end
16
14
 
17
15
  def get_bugs
18
- Nailed::PRODUCTS["products"].each do |product,values|
16
+ Nailed.get_config["products"].each do |product,values|
19
17
  values["versions"].each do |version|
20
- Bicho::Bug.where(:product => version).each do |bug|
21
- attributes = {
22
- :bug_id => bug.id,
23
- :summary => bug.summary,
24
- :status => bug.status,
25
- :is_open => bug.is_open,
26
- :product_name => bug.product,
27
- :component => bug.component,
28
- :severity => bug.severity,
29
- :priority => bug.priority,
30
- :whiteboard => bug.whiteboard,
31
- :assigned_to => bug.assigned_to,
32
- :creation_time => "#{bug.creation_time.to_date}T#{bug.creation_time.hour}:#{bug.creation_time.min}:#{bug.creation_time.sec}+00:00",
33
- :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",
34
- :url => bug.url.gsub(/novell.com\//,'suse.com/show_bug.cgi?id=')
35
- }
36
-
37
- db_handler = (Bugreport.get(bug.id) || Bugreport.new).update(attributes)
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::PRODUCTS["products"].each do |product,values|
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 = Bugreport.count(:whiteboard.like => "%openL3%", :is_open => true)
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::PRODUCTS["products"].each do |product,values|
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 Nailed.log(level,msg)
137
+ def log(level,msg)
129
138
  if level == "error"
130
- Nailed::LOGGER.error(msg)
139
+ LOGGER.error(msg)
131
140
  else
132
- Nailed::LOGGER.info(msg)
141
+ LOGGER.info(msg)
133
142
  end
134
143
  end
135
144
 
136
- def Nailed.get_org_repos(github_client, org)
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 Nailed.fill_db_after_migration(github_client)
142
- Nailed::PRODUCTS["products"].each do |product,values|
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
- Nailed.save_state(db_handler)
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
- Nailed.save_state(db_handler)
151
- org_repos_github = Nailed.get_org_repos(github_client, organization)
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
- Nailed.save_state(db_handler)
170
+ save_state(db_handler)
157
171
  end
158
172
  end
159
173
  end
160
174
  end
161
175
  end
162
176
 
163
- def Nailed.list_org_repos(github_client, org)
164
- repos = Nailed.get_org_repos(github_client, org)
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 Nailed.save_state(db_handler)
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
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "nailed"
3
- s.version = "0.0.7"
3
+ s.version = "0.0.8"
4
4
  s.date = Time.now.strftime("%Y-%m-%d")
5
5
  s.summary = "Nailed CLI and WebUI"
6
6
  s.description = "Collect and visualize Product related data from Bugzilla and Github"
data/views/bugzilla.haml CHANGED
@@ -11,9 +11,12 @@
11
11
  %hr
12
12
  %br
13
13
  .row
14
- .large-12.columns
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', 'last change < one week');
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', 'last change < two weeks');
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', 'last change < one month');
59
+ $(value).css("color","#C62828").attr('title', 'opened < one month ago');
59
60
  } else {
60
- $(value).css("color","#D50000").attr('title', 'last change > one month');
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 Component
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','#EEEEEE'].reverse();
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 Dashboard
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"} Dashboard
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.7
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-01-12 00:00:00.000000000 Z
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/products.yml
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.4.5
213
+ rubygems_version: 2.2.2
214
214
  signing_key:
215
215
  specification_version: 4
216
216
  summary: Nailed CLI and WebUI