uh-layout 0.4.3 → 0.5.0

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
- SHA1:
3
- metadata.gz: bc665a4b5eaf5f27e1b2a502f86870fdf7cb1663
4
- data.tar.gz: 0bbd6a29f34427d05e932a55961cb6b93f6a4392
2
+ SHA256:
3
+ metadata.gz: ef2b61c35eeedd55a1603fac03070bedc0bac689b86eb82d92fbcacac621bfde
4
+ data.tar.gz: 02f86bd7bba57f9c92e9a76b6da891ba3afe5eaa2f89b309ef29797cd045fbfb
5
5
  SHA512:
6
- metadata.gz: 60f86b427c2c914f345629ef341cbac5471613a52988c96ce22db5176c832620b1f85745ca21ca3d933540e5a8df8569f3674b080969a039c36a614c3ce68edf
7
- data.tar.gz: 2073cd03b104efb678d2264b4fb5762527d5e47c0652b15321f912aa3eb34fb284b67bb240e0102ca0657bf54775964c89254448d2d3702a651e314cb983618c
6
+ metadata.gz: c360f3459be21bcc90c725546fc0da75dd51307a52088dc206a8254de71cb6275d339853605e9cc7b15aaed0325fb5a5934f5d96f50606dbdc0fa8ec6ad9e4f6
7
+ data.tar.gz: 5283d46abdffe520c3dff3c0295c26dcbb1a2234c2c0e7707a10e848a64adc5127bb73450c3ad28c3b845c4f1ebf91566fd910886eb2c8419772347ca0888dc8
data/README ADDED
@@ -0,0 +1,4 @@
1
+ uh-layout
2
+ =========
3
+
4
+ Tiling and stacking layout for `uh-wm' ruby gem.
@@ -15,9 +15,9 @@ require 'uh/layout/view'
15
15
 
16
16
  module Uh
17
17
  class Layout
18
- Error = Class.new(StandardError)
19
- RuntimeError = Class.new(RuntimeError)
20
- ArgumentError = Class.new(Error)
18
+ Error = Class.new StandardError
19
+ RuntimeError = Class.new RuntimeError
20
+ ArgumentError = Class.new Error
21
21
 
22
22
  COLORS = {
23
23
  fg: 'rgb:d0/d0/d0'.freeze,
@@ -44,7 +44,7 @@ module Uh
44
44
  @colors = @colors.merge options[:colors] if options.key? :colors
45
45
  end
46
46
 
47
- def register(display)
47
+ def register display
48
48
  Registrant.register self, display
49
49
  end
50
50
 
@@ -56,7 +56,7 @@ module Uh
56
56
  current_column and current_column.current_client
57
57
  end
58
58
 
59
- def include?(client)
59
+ def include? client
60
60
  screens.any? { |screen| screen.include? client }
61
61
  end
62
62
 
@@ -69,7 +69,7 @@ module Uh
69
69
  (current_column or current_view).geo.dup
70
70
  end
71
71
 
72
- def <<(client)
72
+ def << client
73
73
  current_view.current_column_or_create << client
74
74
  current_column.current_client = client
75
75
  current_column.arrange_clients
@@ -80,7 +80,7 @@ module Uh
80
80
  end
81
81
  alias push <<
82
82
 
83
- def remove(client)
83
+ def remove client
84
84
  screen, view, column = find_client client
85
85
  column.remove client
86
86
  view.arrange_columns
@@ -89,29 +89,29 @@ module Uh
89
89
  update_widgets
90
90
  end
91
91
 
92
- def update(client = nil)
92
+ def update client = nil
93
93
  return if client && client.hidden?
94
94
  update_widgets
95
95
  end
96
96
 
97
- def expose(window)
97
+ def expose window
98
98
  update_widgets
99
99
  end
100
100
 
101
- def handle_screen_sel(direction)
101
+ def handle_screen_sel direction
102
102
  screens.sel direction
103
103
  current_client.focus if current_client
104
104
  update_widgets
105
105
  end
106
106
 
107
- def handle_screen_set(direction)
107
+ def handle_screen_set direction
108
108
  return unless current_client
109
109
  remove client = current_client
110
110
  screens.sel direction
111
111
  push client
112
112
  end
113
113
 
114
- def handle_view_sel(view_id)
114
+ def handle_view_sel view_id
115
115
  view_id = view_id.to_s
116
116
  return unless current_view.id != view_id
117
117
  @history.record_view current_view
@@ -122,7 +122,7 @@ module Uh
122
122
  update_widgets
123
123
  end
124
124
 
125
- def handle_view_set(view_id)
125
+ def handle_view_set view_id
126
126
  return unless current_client && current_view.id != view_id
127
127
  previous_view_id = current_view.id
128
128
  remove client = current_client
@@ -131,7 +131,7 @@ module Uh
131
131
  handle_view_sel previous_view_id
132
132
  end
133
133
 
134
- def handle_column_sel(direction)
134
+ def handle_column_sel direction
135
135
  return unless current_view.columns.any?
136
136
  current_view.columns.sel direction
137
137
  current_client.focus
@@ -145,7 +145,7 @@ module Uh
145
145
  current_column.show_hide_clients
146
146
  end
147
147
 
148
- def handle_client_sel(direction)
148
+ def handle_client_sel direction
149
149
  return unless current_client
150
150
  current_column.clients.sel direction
151
151
  current_column.show_hide_clients
@@ -153,13 +153,13 @@ module Uh
153
153
  update_widgets
154
154
  end
155
155
 
156
- def handle_client_swap(direction)
156
+ def handle_client_swap direction
157
157
  return unless current_client && current_column.clients.size >= 2
158
158
  current_column.client_swap direction
159
159
  update_widgets
160
160
  end
161
161
 
162
- def handle_client_column_set(direction, mover: client_mover_for_current_view)
162
+ def handle_client_column_set direction, mover: client_mover_for_current_view
163
163
  return unless current_client
164
164
  mover.move_current direction
165
165
  current_view.arrange_columns
@@ -171,10 +171,9 @@ module Uh
171
171
  handle_view_sel @history.last_view.id
172
172
  end
173
173
 
174
+ private
174
175
 
175
- private
176
-
177
- def find_client(client)
176
+ def find_client client
178
177
  screens.each do |screen|
179
178
  screen.views.each do |view|
180
179
  view.each_column do |column|
@@ -186,7 +185,7 @@ module Uh
186
185
  end
187
186
  end
188
187
 
189
- def find_view_or_create(view_id)
188
+ def find_view_or_create view_id
190
189
  current_screen.views.find do
191
190
  |e| e.id == view_id
192
191
  end or View.new(view_id, current_screen.geo).tap do |view|
@@ -4,7 +4,7 @@ module Uh
4
4
  class FixedWidth
5
5
  DEFAULT_WIDTH = 484
6
6
 
7
- def initialize(entries, geo, width: DEFAULT_WIDTH)
7
+ def initialize entries, geo, width: DEFAULT_WIDTH
8
8
  @entries = entries
9
9
  @geo = geo
10
10
  @width = width
@@ -2,7 +2,7 @@ module Uh
2
2
  class Layout
3
3
  module Arrangers
4
4
  class Stack
5
- def initialize(entries, geo)
5
+ def initialize entries, geo
6
6
  @entries = entries
7
7
  @geo = geo
8
8
  end
@@ -2,7 +2,7 @@ module Uh
2
2
  class Layout
3
3
  module Arrangers
4
4
  class VertTile
5
- def initialize(entries, geo)
5
+ def initialize entries, geo
6
6
  @entries = entries
7
7
  @geo = geo
8
8
  end
@@ -13,7 +13,7 @@ module Uh
13
13
  attr_reader :screen
14
14
  attr_writer :active, :status
15
15
 
16
- def initialize(display, screen, colors)
16
+ def initialize display, screen, colors
17
17
  @display = display
18
18
  @screen = screen
19
19
  @geo = build_geo @screen.geo
@@ -27,7 +27,7 @@ module Uh
27
27
  !!@active
28
28
  end
29
29
 
30
- def on_update(&block)
30
+ def on_update &block
31
31
  @on_update = block
32
32
  end
33
33
 
@@ -58,15 +58,14 @@ module Uh
58
58
  self
59
59
  end
60
60
 
61
-
62
- private
61
+ private
63
62
 
64
63
  def blit
65
64
  @pixmap.copy @window
66
65
  self
67
66
  end
68
67
 
69
- def build_geo(layout_geo)
68
+ def build_geo layout_geo
70
69
  bar_height = text_line_height * 2 + BORDER_HEIGHT + BORDER_PADDING_Y
71
70
 
72
71
  Uh::Geo.new(
@@ -85,15 +84,15 @@ module Uh
85
84
  @display.font.height + TEXT_PADDING_Y * 2
86
85
  end
87
86
 
88
- def text_width(text, padding_x: TEXT_PADDING_X)
87
+ def text_width text, padding_x: TEXT_PADDING_X
89
88
  text.length * @display.font.width + padding_x * 2
90
89
  end
91
90
 
92
- def column_offset_x(column)
91
+ def column_offset_x column
93
92
  column.x - x
94
93
  end
95
94
 
96
- def column_text(column)
95
+ def column_text column
97
96
  text = '%d/%d %s (%s)' % [
98
97
  column.clients.index(column.current_client),
99
98
  column.clients.size,
@@ -109,14 +108,14 @@ module Uh
109
108
  @pixmap.draw_rect 0, 0, width, BORDER_HEIGHT
110
109
  end
111
110
 
112
- def draw_columns(y_offset, columns, current_column)
111
+ def draw_columns y_offset, columns, current_column
113
112
  columns.each do |column|
114
113
  draw_column y_offset, column, column == current_column
115
114
  end
116
115
  end
117
116
 
118
- def draw_column(y_offset, column, current)
119
- x_offset = column_offset_x(column)
117
+ def draw_column y_offset, column, current
118
+ x_offset = column_offset_x column
120
119
  if current && active?
121
120
  @pixmap.gc_color @colors[:sel]
122
121
  @pixmap.draw_rect x_offset, y_offset, column.width, text_line_height
@@ -126,8 +125,8 @@ module Uh
126
125
  bg: current ? @colors[:hi] : @colors[:bg]
127
126
  end
128
127
 
129
- def draw_views(y_offset, views, current_view)
130
- views.sort_by(&:id).inject(0) do |x_offset, view|
128
+ def draw_views y_offset, views, current_view
129
+ views.sort_by(&:id).inject 0 do |x_offset, view|
131
130
  color = if view == current_view
132
131
  active_color
133
132
  elsif view.clients.any?
@@ -143,11 +142,11 @@ module Uh
143
142
  end
144
143
  end
145
144
 
146
- def draw_status(y_offset, status)
145
+ def draw_status y_offset, status
147
146
  draw_text status, width - text_width(status), y_offset
148
147
  end
149
148
 
150
- def draw_text(text, x, y, bg: nil, padding_x: TEXT_PADDING_X)
149
+ def draw_text text, x, y, bg: nil, padding_x: TEXT_PADDING_X
151
150
  text = text.to_s
152
151
  text_width = text_width text, padding_x: padding_x
153
152
  text_y = y + @display.font.ascent + TEXT_PADDING_Y
@@ -1,12 +1,12 @@
1
1
  module Uh
2
2
  class Layout
3
3
  class ClientColumnMover
4
- def initialize(columns, columns_max_count)
4
+ def initialize columns, columns_max_count
5
5
  @columns = columns
6
6
  @columns_max_count = columns_max_count
7
7
  end
8
8
 
9
- def move_current(direction)
9
+ def move_current direction
10
10
  @columns.current.remove client = @columns.current.current_client
11
11
  dest_column = get_or_create_column direction
12
12
  dest_column << client
@@ -14,7 +14,7 @@ module Uh
14
14
  @columns.current = dest_column
15
15
  end
16
16
 
17
- def get_or_create_column(direction)
17
+ def get_or_create_column direction
18
18
  if candidate = @columns.get(direction)
19
19
  candidate
20
20
  elsif @columns_max_count
@@ -22,8 +22,8 @@ module Uh
22
22
  else
23
23
  Column.new(Geo.new).tap do |o|
24
24
  case direction
25
- when :pred then @columns.unshift o
26
- when :succ then @columns << o
25
+ when :pred then @columns.unshift o
26
+ when :succ then @columns << o
27
27
  end
28
28
  end
29
29
  end
@@ -16,7 +16,7 @@ module Uh
16
16
 
17
17
  attr_reader :geo, :clients, :mode
18
18
 
19
- def initialize(geo, mode: :stack)
19
+ def initialize geo, mode: :stack
20
20
  @geo = geo.dup
21
21
  @clients = Container.new
22
22
  @mode = mode
@@ -26,7 +26,7 @@ module Uh
26
26
  "COL geo: #{@geo}"
27
27
  end
28
28
 
29
- def <<(client)
29
+ def << client
30
30
  client.geo = @geo.dup
31
31
  if @clients.current
32
32
  @clients.insert_after_current client
@@ -44,7 +44,7 @@ module Uh
44
44
  MODES[@mode].new @clients, @geo
45
45
  end
46
46
 
47
- def client_swap(direction)
47
+ def client_swap direction
48
48
  @clients.set direction
49
49
  if @mode == :tile
50
50
  arrange_clients
@@ -57,7 +57,7 @@ module Uh
57
57
  clients.each &:moveresize
58
58
  end
59
59
 
60
- def show_hide_clients(arranger: self.arranger)
60
+ def show_hide_clients arranger: self.arranger
61
61
  arranger.each_visible { |client| client.show if client.hidden? }
62
62
  arranger.each_hidden { |client| client.hide unless client.hidden? }
63
63
  end
@@ -7,7 +7,7 @@ module Uh
7
7
  def_delegators :@entries, :<<, :[], :each, :empty?, :fetch, :first,
8
8
  :index, :last, :size, :unshift
9
9
 
10
- def initialize(entries = [])
10
+ def initialize entries = []
11
11
  @entries = entries
12
12
  @current_index = 0
13
13
  end
@@ -18,28 +18,23 @@ module Uh
18
18
  @entries[@current_index]
19
19
  end
20
20
 
21
- def current=(entry)
21
+ def current= entry
22
22
  fail ArgumentError, 'unknown entry' unless include? entry
23
23
  @current_index = @entries.index entry
24
24
  end
25
25
 
26
- def insert_after_current(entry)
26
+ def insert_after_current entry
27
27
  fail RuntimeError, 'no current entry' unless current
28
28
  @entries.insert @current_index + 1, entry
29
29
  end
30
30
 
31
- def remove(entry)
32
- fail ArgumentError, 'unknown entry' unless include? entry
33
- @entries.delete_at @entries.index entry
34
- @current_index -= 1 unless @current_index == 0
31
+ def remove *entries
32
+ entries.each { |e| remove_entry e }
33
+ @entries.each { |e| remove_entry e if yield e } if block_given?
35
34
  self
36
35
  end
37
36
 
38
- def remove_if
39
- @entries.each { |e| remove e if yield e }
40
- end
41
-
42
- def get(direction, cycle: false)
37
+ def get direction, cycle: false
43
38
  index = @current_index.send direction
44
39
  if cycle
45
40
  @entries[index % @entries.size]
@@ -48,12 +43,12 @@ module Uh
48
43
  end
49
44
  end
50
45
 
51
- def sel(direction)
46
+ def sel direction
52
47
  @current_index = @current_index.send(direction) % @entries.size
53
48
  end
54
49
 
55
- def set(direction)
56
- raise RuntimeError unless @entries.size >= 2
50
+ def set direction
51
+ fail RuntimeError unless @entries.size >= 2
57
52
  new_index = @current_index.send direction
58
53
  if new_index.between? 0, @entries.size - 1
59
54
  swap @current_index, new_index
@@ -64,17 +59,24 @@ module Uh
64
59
  end
65
60
  end
66
61
 
67
- def swap(a, b)
62
+ def swap a, b
68
63
  @entries[a], @entries[b] = @entries[b], @entries[a]
69
64
  end
70
65
 
66
+ private
71
67
 
72
- private
68
+ def remove_entry entry
69
+ fail ArgumentError, 'unknown entry' unless include? entry
70
+ @entries.delete_at (index = @entries.index(entry))
71
+ if @current_index != 0 && @current_index > index
72
+ @current_index -= 1
73
+ end
74
+ end
73
75
 
74
- def rotate(direction)
75
- case direction
76
- when :pred then @entries = @entries.push @entries.shift
77
- when :succ then @entries = @entries.unshift @entries.pop
76
+ def rotate direction
77
+ @entries = @entries.rotate case direction
78
+ when :pred then 1
79
+ when :succ then -1
78
80
  end
79
81
  end
80
82
  end
@@ -1,22 +1,22 @@
1
1
  module Uh
2
2
  class Layout
3
3
  class Dumper
4
- def initialize(layout)
4
+ def initialize layout
5
5
  @layout = layout
6
6
  end
7
7
 
8
8
  def to_s
9
- @layout.screens.inject('') do |m, screen|
10
- m << "%s%s\n" % [@layout.current_screen?(screen) ? '*' : ' ', screen]
9
+ @layout.screens.inject '' do |m, screen|
10
+ m << "%s%s\n" % [@layout.current_screen?(screen) ? ?* : ' ', screen]
11
11
  screen.views.each do |view|
12
- m << " %s%s\n" % [screen.current_view?(view) ? '*' : ' ', view]
12
+ m << " %s%s\n" % [screen.current_view?(view) ? ?* : ' ', view]
13
13
  view.columns.each do |column|
14
14
  m << " %s%s\n" % [
15
- view.current_column?(column) ? '*' : ' ', column
15
+ view.current_column?(column) ? ?* : ' ', column
16
16
  ]
17
17
  column.clients.each do |client|
18
18
  m << " %s%s\n" % [
19
- column.current_client?(client) ? '*' : ' ',
19
+ column.current_client?(client) ? ?* : ' ',
20
20
  client
21
21
  ]
22
22
  end
@@ -5,12 +5,12 @@ module Uh
5
5
 
6
6
  attr_reader :views, :views_size_max
7
7
 
8
- def initialize(views = [], views_size_max: VIEWS_SIZE_MAX)
8
+ def initialize views = [], views_size_max: VIEWS_SIZE_MAX
9
9
  @views = views
10
10
  @views_size_max = views_size_max
11
11
  end
12
12
 
13
- def record_view(view)
13
+ def record_view view
14
14
  @views << view
15
15
  if @views.size > @views_size_max
16
16
  @views = @views.drop @views.size - @views_size_max
@@ -2,7 +2,7 @@ module Uh
2
2
  class Layout
3
3
  module Registrant
4
4
  class << self
5
- def register(layout, display)
5
+ def register layout, display
6
6
  display.screens.each do |screen|
7
7
  layout.screens << scr = Screen.new(screen.id, screen.geo)
8
8
  bar = Bar.new(display, scr, layout.colors).tap do |b|
@@ -9,22 +9,22 @@ module Uh
9
9
 
10
10
  attr_reader :id, :views, :geo
11
11
 
12
- def initialize(id, geo)
12
+ def initialize id, geo
13
13
  @id = id
14
14
  @geo = geo.dup
15
- @views = Container.new([View.new('1', @geo)])
15
+ @views = Container.new [View.new(?1, @geo)]
16
16
  end
17
17
 
18
18
  def to_s
19
19
  "SCREEN ##{@id}, geo: #{@geo}"
20
20
  end
21
21
 
22
- def height=(value)
22
+ def height= value
23
23
  @geo.height = value
24
24
  @views.each { |view| view.height = value }
25
25
  end
26
26
 
27
- def include?(client)
27
+ def include? client
28
28
  @views.any? { |view| view.include? client }
29
29
  end
30
30
  end
@@ -1,5 +1,5 @@
1
1
  module Uh
2
2
  class Layout
3
- VERSION = '0.4.3'.freeze
3
+ VERSION = '0.5.0'.freeze
4
4
  end
5
5
  end
@@ -13,7 +13,7 @@ module Uh
13
13
 
14
14
  attr_reader :id, :geo, :columns
15
15
 
16
- def initialize(id, geo)
16
+ def initialize id, geo
17
17
  unless id.kind_of? String
18
18
  fail ArgumentError, "expect `id' to be a String, #{id.class} given"
19
19
  end
@@ -30,7 +30,7 @@ module Uh
30
30
  @columns.inject([]) { |m, column| m + column.clients }
31
31
  end
32
32
 
33
- def include?(client)
33
+ def include? client
34
34
  @columns.any? { |column| column.include? client }
35
35
  end
36
36
 
@@ -41,11 +41,11 @@ module Uh
41
41
  end
42
42
 
43
43
  def arranger
44
- Arrangers::FixedWidth.new(@columns, @geo)
44
+ Arrangers::FixedWidth.new @columns, @geo
45
45
  end
46
46
 
47
47
  def arrange_columns
48
- @columns.remove_if &:empty?
48
+ @columns.remove &:empty?
49
49
  arranger.arrange
50
50
  @columns.each &:arrange_clients
51
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uh-layout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thibault Jouan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-31 00:00:00.000000000 Z
11
+ date: 2017-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uh
@@ -24,34 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: uh-wm
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.0.9
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.0.9
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - "~>"
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '10.4'
33
+ version: '0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - "~>"
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '10.4'
40
+ version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -71,9 +57,9 @@ email: tj@a13.fr
71
57
  executables: []
72
58
  extensions: []
73
59
  extra_rdoc_files:
74
- - README.md
60
+ - README
75
61
  files:
76
- - README.md
62
+ - README
77
63
  - lib/uh/layout.rb
78
64
  - lib/uh/layout/arrangers/fixed_width.rb
79
65
  - lib/uh/layout/arrangers/stack.rb
@@ -108,9 +94,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
94
  version: '0'
109
95
  requirements: []
110
96
  rubyforge_project:
111
- rubygems_version: 2.4.5
97
+ rubygems_version: 2.7.3
112
98
  signing_key:
113
99
  specification_version: 4
114
100
  summary: simple tiling and stacking layout for uh-wm
115
101
  test_files: []
116
- has_rdoc:
data/README.md DELETED
@@ -1,18 +0,0 @@
1
- uh-layout
2
- =========
3
-
4
- [![Version ][badge-version-img]][badge-version-uri]
5
- [![Build status ][badge-build-img]][badge-build-uri]
6
- [![Code Climate ][badge-cclimate-img]][badge-cclimate-uri]
7
-
8
-
9
- Tiling and stacking layout for `uh-wm` ruby gem.
10
-
11
-
12
-
13
- [badge-version-img]: https://img.shields.io/gem/v/uh-layout.svg?style=flat-square
14
- [badge-version-uri]: https://rubygems.org/gems/uh-layout
15
- [badge-build-img]: https://img.shields.io/travis/tjouan/uh-layout/master.svg?style=flat-square
16
- [badge-build-uri]: https://travis-ci.org/tjouan/uh-layout
17
- [badge-cclimate-img]: https://img.shields.io/codeclimate/github/tjouan/uh-layout.svg?style=flat-square
18
- [badge-cclimate-uri]: https://codeclimate.com/github/tjouan/uh-layout