Skip to content

Commit 50ccbbd

Browse files
Merge pull request #261 from bdlb77/add_meter_component
Add meter component
2 parents f3f6581 + 32e646a commit 50ccbbd

File tree

5 files changed

+121
-0
lines changed

5 files changed

+121
-0
lines changed

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ gemspec
1313

1414
# To use a debugger
1515
# gem 'byebug', group: [:development, :test]
16+
# gem 'pry-byebug', group: [:development, :test]
1617

1718
gem "trailblazer"
1819
gem "trailblazer-rails"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
%meter{@tag_attributes}
2+
- if block_given?
3+
= yield
4+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module Matestack::Ui::Core::Meter
2+
class Meter < Matestack::Ui::Core::Component::Static
3+
def setup
4+
@tag_attributes.merge!({
5+
value: options[:value],
6+
min: options[:min],
7+
max: options[:max],
8+
low: options[:low],
9+
high: options[:high],
10+
optimum: options[:optimum]
11+
})
12+
end
13+
end
14+
end

docs/components/meter.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# matestack core component: Meter
2+
3+
Show [specs](/spec/usage/components/meter_spec.rb)
4+
5+
Use the Meter component to implement `<meter>` tag.
6+
7+
## Parameters
8+
9+
#### # value (required)
10+
Expects a number thats is the current value of the gauge.
11+
12+
#### # id (optional)
13+
Expects a string with all ids the meter should have.
14+
15+
#### # class (optional)
16+
Expects a string with all classes the meter should have.
17+
18+
#### # min (optional)
19+
Expects a number that defines the minimum value of the range.
20+
21+
#### # max (optional)
22+
Expects a number that defines the maximum value of the range.
23+
24+
#### # low (optional)
25+
Expects a number that defines which value is considered a low value
26+
27+
#### # high (optional)
28+
Expects a number that defines which value is considered a high value
29+
30+
#### # optimum (optional)
31+
Expects a number that defines which value is optimal for the gauge
32+
33+
34+
35+
36+
## Example
37+
38+
```ruby
39+
meter id: 'meter_id', value: 0.6
40+
41+
meter id: 'meter', min: 0, max: 10, value: 6 do
42+
plain '6 out of 10. 60%.'
43+
end
44+
45+
meter id: 'meter', low: 2, high: 8, optimum: 6, min: 0, max: 10, value: 6 do
46+
plain '6 out of 10. 60%.'
47+
end
48+
```
49+
50+
returns
51+
52+
```html
53+
<meter id="meter_id" value="0.6"></meter>
54+
55+
<meter id="meter" max="10" min="0" value="6">6 out of 10. 60%.</meter>
56+
57+
<meter high="8" id="meter" low="2" max="10" min="0" optimum="6" value="6">
58+
6 out of 10. 60%.
59+
</meter>
60+
```

spec/usage/components/meter_spec.rb

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
require_relative '../../support/utils'
2+
include Utils
3+
4+
describe 'Meter Component', type: :feature, js: true do
5+
6+
it 'Renders an meter tag on the page' do
7+
8+
class ExamplePage < Matestack::Ui::Page
9+
def response
10+
components {
11+
#label for: 'meter_id'
12+
meter id: 'meter_id', value: 0.6
13+
14+
#label for: 'meter'
15+
meter id: 'meter', min: 0, max: 10, value: 6 do
16+
plain '6 out of 10. 60%.'
17+
end
18+
19+
meter id: 'meter', low: 2, high: 8, optimum: 6, min: 0, max: 10, value: 6 do
20+
plain '6 out of 10. 60%.'
21+
end
22+
}
23+
end
24+
end
25+
26+
visit '/example'
27+
28+
output_html = page.html
29+
30+
expected_output = <<~HTML
31+
<meter id="meter_id" value="0.6"></meter>
32+
33+
<meter id="meter" max="10" min="0" value="6">6 out of 10. 60%.</meter>
34+
35+
<meter high="8" id="meter" low="2" max="10" min="0" optimum="6" value="6">
36+
6 out of 10. 60%.
37+
</meter>
38+
HTML
39+
40+
expect(stripped(output_html)).to include(stripped(expected_output))
41+
end
42+
end

0 commit comments

Comments
 (0)