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 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