hammer_cli 0.13.1 → 0.14.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 +4 -4
- data/doc/release_notes.md +5 -2
- data/lib/hammer_cli/options/normalizers.rb +2 -2
- data/lib/hammer_cli/output/adapter/abstract.rb +15 -3
- data/lib/hammer_cli/output/adapter/base.rb +2 -8
- data/lib/hammer_cli/output/adapter/csv.rb +1 -0
- data/lib/hammer_cli/output/adapter/table.rb +2 -1
- data/lib/hammer_cli/output/adapter/tree_structure.rb +3 -9
- data/lib/hammer_cli/output/fields.rb +12 -6
- data/lib/hammer_cli/output/output.rb +6 -0
- data/lib/hammer_cli/testing/command_assertions.rb +7 -0
- data/lib/hammer_cli/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli.mo +0 -0
- data/test/unit/output/adapter/abstract_test.rb +2 -2
- data/test/unit/output/adapter/base_test.rb +21 -0
- data/test/unit/output/adapter/csv_test.rb +16 -0
- data/test/unit/output/adapter/json_test.rb +18 -0
- data/test/unit/output/adapter/table_test.rb +31 -1
- data/test/unit/output/adapter/yaml_test.rb +18 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb545eaee547129bde4d51c6ff709f7af30c61bd
|
4
|
+
data.tar.gz: 23f8915e5e2c306a2e194ebd7d42162d2f183b95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c9f22f4c7b10e0282f96be42317f0ac2514dba8ad4c2881d46eedeb6ceb01361ba6139c57b51ab382ac255d6a5bc527bde0880ee06d332dc938b7f08317ce4d
|
7
|
+
data.tar.gz: cba3583a4dff8bf01a9bf1835eb9393ea99eae965e3156a9bb14dafbb8412e49bd59f2b13b717a24453080ff3faeb2c8151f79a4c91e14f1124e9a0b92c1601d
|
data/doc/release_notes.md
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
Release notes
|
2
2
|
=============
|
3
|
-
### 0.
|
4
|
-
*
|
3
|
+
### 0.14.0 (2018-08-27)
|
4
|
+
* Restore help building ([PR #280](https://github.com/theforeman/hammer-cli/pull/280)) ([#24488](http://projects.theforeman.org/issues/24488))
|
5
|
+
* Shouldn't translate the bool values in description ([#21381](http://projects.theforeman.org/issues/21381))
|
6
|
+
* Allow hiding fields which are missing from api output ([#20607](http://projects.theforeman.org/issues/20607))
|
7
|
+
* Add not found error type ([PR #274](https://github.com/theforeman/hammer-cli/pull/274)) ([#20538](http://projects.theforeman.org/issues/20538))
|
5
8
|
|
6
9
|
### 0.13.0 (2018-05-09)
|
7
10
|
* Hammer CSV output saved as a file ([PR #254](https://github.com/theforeman/hammer-cli/pull/254)) ([#11586](http://projects.theforeman.org/issues/11586))
|
@@ -115,7 +115,7 @@ module HammerCLI
|
|
115
115
|
class Bool < AbstractNormalizer
|
116
116
|
|
117
117
|
def description
|
118
|
-
_(
|
118
|
+
_('One of %s.') % ['true/false', 'yes/no', '1/0'].join(', ')
|
119
119
|
end
|
120
120
|
|
121
121
|
def format(bool)
|
@@ -125,7 +125,7 @@ module HammerCLI
|
|
125
125
|
elsif bool.downcase.match(/^(false|f|no|n|0)$/i)
|
126
126
|
return false
|
127
127
|
else
|
128
|
-
raise ArgumentError, _(
|
128
|
+
raise ArgumentError, _('Value must be one of %s.') % ['true/false', 'yes/no', '1/0'].join(', ')
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -50,12 +50,13 @@ module HammerCLI::Output::Adapter
|
|
50
50
|
path = field.path
|
51
51
|
|
52
52
|
path.inject(record) do |record, path_key|
|
53
|
-
|
53
|
+
return nil unless record && record.is_a?(Hash)
|
54
|
+
if record.key?(path_key.to_sym)
|
54
55
|
record[path_key.to_sym]
|
55
|
-
elsif record
|
56
|
+
elsif record.key?(path_key.to_s)
|
56
57
|
record[path_key.to_s]
|
57
58
|
else
|
58
|
-
|
59
|
+
HammerCLI::Output::DataMissing.new
|
59
60
|
end
|
60
61
|
end
|
61
62
|
end
|
@@ -69,6 +70,17 @@ module HammerCLI::Output::Adapter
|
|
69
70
|
$stdout
|
70
71
|
end
|
71
72
|
|
73
|
+
def displayable_fields(fields, record, compact_only: false)
|
74
|
+
fields.select do |field|
|
75
|
+
field_data = data_for_field(field, record)
|
76
|
+
if compact_only && !field_data.is_a?(HammerCLI::Output::DataMissing)
|
77
|
+
true
|
78
|
+
else
|
79
|
+
field.display?(field_data)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
72
84
|
private
|
73
85
|
|
74
86
|
def filter_formatters(formatters_map)
|
@@ -27,17 +27,11 @@ module HammerCLI::Output::Adapter
|
|
27
27
|
HammerCLI::Output::FieldFilter.new(filtered)
|
28
28
|
end
|
29
29
|
|
30
|
-
def filter_fields(fields, data)
|
31
|
-
field_filter.filter(fields).reject do |field|
|
32
|
-
field_data = data_for_field(field, data)
|
33
|
-
not field.display?(field_data)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
30
|
def render_fields(fields, data)
|
38
31
|
output = ""
|
39
32
|
|
40
|
-
fields =
|
33
|
+
fields = field_filter.filter(fields)
|
34
|
+
fields = displayable_fields(fields, data)
|
41
35
|
|
42
36
|
label_width = label_width(fields)
|
43
37
|
|
@@ -157,6 +157,7 @@ module HammerCLI::Output::Adapter
|
|
157
157
|
end
|
158
158
|
|
159
159
|
def print_collection(fields, collection)
|
160
|
+
fields = displayable_fields(fields, collection.first, compact_only: true)
|
160
161
|
rows = row_data(fields, collection)
|
161
162
|
# get headers using columns heuristic
|
162
163
|
headers = rows.map{ |r| Cell.headers(r, @context) }.max_by{ |headers| headers.size }
|
@@ -22,6 +22,7 @@ module HammerCLI::Output::Adapter
|
|
22
22
|
|
23
23
|
def print_collection(all_fields, collection)
|
24
24
|
fields = field_filter.filter(all_fields)
|
25
|
+
fields = displayable_fields(fields, collection.first, compact_only: true)
|
25
26
|
|
26
27
|
formatted_collection = format_values(fields, collection)
|
27
28
|
# calculate hash of column widths (label -> width)
|
@@ -52,7 +53,7 @@ module HammerCLI::Output::Adapter
|
|
52
53
|
# and there is no --no-headers option
|
53
54
|
output_stream.puts line unless formatted_collection.empty? || @context[:no_headers]
|
54
55
|
|
55
|
-
if collection.meta.pagination_set? && collection.count < collection.meta.subtotal
|
56
|
+
if collection.respond_to?(:meta) && collection.meta.pagination_set? && collection.count < collection.meta.subtotal
|
56
57
|
pages = (collection.meta.subtotal.to_f/collection.meta.per_page).ceil
|
57
58
|
puts _("Page %{page} of %{total} (use --page and --per-page for navigation).") % {:page => collection.meta.page, :total => pages}
|
58
59
|
end
|
@@ -13,22 +13,16 @@ module HammerCLI::Output::Adapter
|
|
13
13
|
end
|
14
14
|
|
15
15
|
protected
|
16
|
+
|
16
17
|
def field_filter
|
17
18
|
filtered = []
|
18
19
|
filtered << Fields::Id unless @context[:show_ids]
|
19
20
|
HammerCLI::Output::FieldFilter.new(filtered)
|
20
21
|
end
|
21
22
|
|
22
|
-
def filter_fields(fields, data)
|
23
|
-
field_filter.filter(fields).reject do |field|
|
24
|
-
field_data = data_for_field(field, data)
|
25
|
-
not field.display?(field_data)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
23
|
def render_fields(fields, data)
|
30
|
-
fields =
|
31
|
-
|
24
|
+
fields = field_filter.filter(fields)
|
25
|
+
fields = displayable_fields(fields, data)
|
32
26
|
fields.reduce({}) do |hash, field|
|
33
27
|
field_data = data_for_field(field, data)
|
34
28
|
next unless field.display?(field_data)
|
@@ -9,6 +9,7 @@ module Fields
|
|
9
9
|
|
10
10
|
def initialize(options={})
|
11
11
|
@hide_blank = options[:hide_blank].nil? ? false : options[:hide_blank]
|
12
|
+
@hide_missing = options[:hide_missing].nil? ? true : options[:hide_missing]
|
12
13
|
@path = options[:path] || []
|
13
14
|
@label = options[:label]
|
14
15
|
@options = options
|
@@ -18,11 +19,15 @@ module Fields
|
|
18
19
|
@hide_blank
|
19
20
|
end
|
20
21
|
|
22
|
+
def hide_missing?
|
23
|
+
@hide_missing
|
24
|
+
end
|
25
|
+
|
21
26
|
def display?(value)
|
22
|
-
if
|
23
|
-
|
27
|
+
if value.is_a?(HammerCLI::Output::DataMissing)
|
28
|
+
!hide_missing?
|
24
29
|
elsif value.nil?
|
25
|
-
|
30
|
+
!hide_blank?
|
26
31
|
else
|
27
32
|
true
|
28
33
|
end
|
@@ -55,10 +60,10 @@ module Fields
|
|
55
60
|
end
|
56
61
|
|
57
62
|
def display?(value)
|
58
|
-
if
|
59
|
-
|
63
|
+
if value.is_a?(HammerCLI::Output::DataMissing)
|
64
|
+
!hide_missing?
|
60
65
|
elsif value.nil? || value.empty?
|
61
|
-
|
66
|
+
!hide_blank?
|
62
67
|
else
|
63
68
|
true
|
64
69
|
end
|
@@ -83,6 +88,7 @@ module Fields
|
|
83
88
|
class Label < ContainerField
|
84
89
|
|
85
90
|
def display?(value)
|
91
|
+
return false if value.is_a?(HammerCLI::Output::DataMissing) && hide_missing?
|
86
92
|
return true if not hide_blank?
|
87
93
|
|
88
94
|
!(value.nil? || value.empty?) && fields.any? do |f|
|
@@ -108,6 +108,13 @@ module HammerCLI
|
|
108
108
|
expected_result
|
109
109
|
end
|
110
110
|
|
111
|
+
def not_found_error_result(command, message, heading=nil)
|
112
|
+
expected_result = CommandExpectation.new
|
113
|
+
expected_result.expected_err = common_error(command, message, heading)
|
114
|
+
expected_result.expected_exit_code = HammerCLI::EX_NOT_FOUND
|
115
|
+
expected_result
|
116
|
+
end
|
117
|
+
|
111
118
|
def success_result(message)
|
112
119
|
CommandExpectation.new(message)
|
113
120
|
end
|
data/lib/hammer_cli/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -110,9 +110,9 @@ describe HammerCLI::Output::Adapter::Abstract do
|
|
110
110
|
assert_nil adapter.send(:data_for_field, field, record)
|
111
111
|
end
|
112
112
|
|
113
|
-
it "returns
|
113
|
+
it "returns DataMissing instance, if the data does not exist for the field" do
|
114
114
|
record = { :field2 => :value2 }
|
115
|
-
|
115
|
+
assert_instance_of HammerCLI::Output::DataMissing, adapter.send(:data_for_field, field, record)
|
116
116
|
end
|
117
117
|
|
118
118
|
it "returns the value, if data exists for the field" do
|
@@ -26,6 +26,8 @@ describe HammerCLI::Output::Adapter::Base do
|
|
26
26
|
let(:params_collection) { Fields::Collection.new(:path => [:params], :label => "Parameters") }
|
27
27
|
let(:param) { Fields::KeyValue.new(:path => nil, :label => nil) }
|
28
28
|
let(:blank) { Fields::Field.new(:path => [:blank], :label => "Blank", :hide_blank => true) }
|
29
|
+
let(:login) { Fields::Field.new(:path => [:login], :label => "Login") }
|
30
|
+
let(:missing) { Fields::Field.new(:path => [:login], :label => "Missing", :hide_missing => false) }
|
29
31
|
|
30
32
|
let(:data) { HammerCLI::Output::RecordCollection.new [{
|
31
33
|
:id => 112,
|
@@ -164,6 +166,25 @@ describe HammerCLI::Output::Adapter::Base do
|
|
164
166
|
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
165
167
|
end
|
166
168
|
|
169
|
+
it "does not print fields which data are missing from api by default" do
|
170
|
+
fields = [name, login]
|
171
|
+
expected_output = [
|
172
|
+
"Name: John",
|
173
|
+
"\n"
|
174
|
+
].join("\n")
|
175
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
176
|
+
end
|
177
|
+
|
178
|
+
it "prints fields which data are missing from api when field has hide_missing flag set to false" do
|
179
|
+
fields = [name, missing]
|
180
|
+
expected_output = [
|
181
|
+
"Name: John",
|
182
|
+
"Missing:",
|
183
|
+
"\n"
|
184
|
+
].join("\n")
|
185
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
186
|
+
end
|
187
|
+
|
167
188
|
it "should print key -> value" do
|
168
189
|
params_collection.output_definition.append [param]
|
169
190
|
fields = [params_collection]
|
@@ -12,6 +12,8 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
12
12
|
|
13
13
|
let(:field_name) { Fields::Field.new(:path => [:name], :label => "Name") }
|
14
14
|
let(:field_started_at) { Fields::Field.new(:path => [:started_at], :label => "Started At") }
|
15
|
+
let(:field_login) { Fields::Field.new(:path => [:login], :label => "Login") }
|
16
|
+
let(:field_missing) { Fields::Field.new(:path => [:missing], :label => "Missing", :hide_missing => false) }
|
15
17
|
let(:fields) {
|
16
18
|
[field_name, field_started_at]
|
17
19
|
}
|
@@ -32,6 +34,20 @@ describe HammerCLI::Output::Adapter::CSValues do
|
|
32
34
|
err.must_match //
|
33
35
|
end
|
34
36
|
|
37
|
+
it "does not print fields which data are missing from api by default" do
|
38
|
+
fields << field_login
|
39
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
40
|
+
out.wont_match /.*Login.*/
|
41
|
+
err.must_match //
|
42
|
+
end
|
43
|
+
|
44
|
+
it "prints fields which data are missing from api when field has hide_missing flag set to false" do
|
45
|
+
fields << field_missing
|
46
|
+
out, err = capture_io { adapter.print_collection(fields, data) }
|
47
|
+
out.must_match /.*Missing.*/
|
48
|
+
err.must_match //
|
49
|
+
end
|
50
|
+
|
35
51
|
context "handle ids" do
|
36
52
|
let(:field_id) { Fields::Id.new(:path => [:some_id], :label => "Id") }
|
37
53
|
let(:fields) {
|
@@ -58,6 +58,8 @@ describe HammerCLI::Output::Adapter::Json do
|
|
58
58
|
let(:params_collection) { Fields::Collection.new(:path => [:params], :label => "Parameters") }
|
59
59
|
let(:param) { Fields::KeyValue.new(:path => nil, :label => nil) }
|
60
60
|
let(:blank) { Fields::Field.new(:path => [:blank], :label => "Blank", :hide_blank => true) }
|
61
|
+
let(:login) { Fields::Field.new(:path => [:login], :label => "Login") }
|
62
|
+
let(:missing) { Fields::Field.new(:path => [:missing], :label => "Missing", :hide_missing => false) }
|
61
63
|
|
62
64
|
let(:data) { HammerCLI::Output::RecordCollection.new [{
|
63
65
|
:id => 112,
|
@@ -206,6 +208,22 @@ describe HammerCLI::Output::Adapter::Json do
|
|
206
208
|
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
207
209
|
end
|
208
210
|
|
211
|
+
it "does not print fields which data are missing from api by default" do
|
212
|
+
fields = [surname, login]
|
213
|
+
hash = [{ 'Surname' => 'Doe' }]
|
214
|
+
expected_output = JSON.pretty_generate(hash) + "\n"
|
215
|
+
|
216
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
217
|
+
end
|
218
|
+
|
219
|
+
it "prints fields which data are missing from api when field has hide_missing flag set to false" do
|
220
|
+
fields = [surname, missing]
|
221
|
+
hash = [{ 'Surname' => 'Doe', 'Missing' => '' }]
|
222
|
+
expected_output = JSON.pretty_generate(hash) + "\n"
|
223
|
+
|
224
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
225
|
+
end
|
226
|
+
|
209
227
|
it "should print key -> value" do
|
210
228
|
params_collection.output_definition.append [param]
|
211
229
|
fields = [params_collection]
|
@@ -14,6 +14,8 @@ describe HammerCLI::Output::Adapter::Table do
|
|
14
14
|
let(:field_firstname) { Fields::Field.new(:path => [:firstname], :label => "Firstname") }
|
15
15
|
let(:field_lastname) { Fields::Field.new(:path => [:lastname], :label => "Lastname") }
|
16
16
|
let(:field_long) { Fields::Field.new(:path => [:long], :label => "Full") }
|
17
|
+
let(:field_login) { Fields::Field.new(:path => [:login], :label => "Login") }
|
18
|
+
let(:field_missing) { Fields::Field.new(:path => [:missing], :label => "Missing", :hide_missing => false) }
|
17
19
|
|
18
20
|
let(:fields) {
|
19
21
|
[field_name]
|
@@ -45,6 +47,34 @@ describe HammerCLI::Output::Adapter::Table do
|
|
45
47
|
proc { adapter.print_collection(fields, data) }.must_output(/.*John Doe.*/, "")
|
46
48
|
end
|
47
49
|
|
50
|
+
it "does not print fields which data are missing from api by default" do
|
51
|
+
fields << field_login
|
52
|
+
expected_output = [
|
53
|
+
'--------',
|
54
|
+
'NAME ',
|
55
|
+
'--------',
|
56
|
+
'John Doe',
|
57
|
+
'--------',
|
58
|
+
''
|
59
|
+
].join("\n")
|
60
|
+
|
61
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "prints fields which data are missing from api when field has hide_missing flag set to false" do
|
65
|
+
fields << field_missing
|
66
|
+
expected_output = [
|
67
|
+
'---------|--------',
|
68
|
+
'NAME | MISSING',
|
69
|
+
'---------|--------',
|
70
|
+
'John Doe | ',
|
71
|
+
'---------|--------',
|
72
|
+
''
|
73
|
+
].join("\n")
|
74
|
+
|
75
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
76
|
+
end
|
77
|
+
|
48
78
|
context "pagination" do
|
49
79
|
it "should print pagination info if data are not complete" do
|
50
80
|
data = HammerCLI::Output::RecordCollection.new([record], { :total => 2, :page => 1, :per_page => 1, :subtotal => 2 })
|
@@ -58,7 +88,7 @@ describe HammerCLI::Output::Adapter::Table do
|
|
58
88
|
end
|
59
89
|
|
60
90
|
context "handle ids" do
|
61
|
-
let(:field_id) { Fields::Id.new(:path => [:some_id], :label => "Id") }
|
91
|
+
let(:field_id) { Fields::Id.new(:path => [:some_id], :label => "Id", :hide_missing => false) }
|
62
92
|
let(:fields) {
|
63
93
|
[field_name, field_id]
|
64
94
|
}
|
@@ -56,6 +56,8 @@ describe HammerCLI::Output::Adapter::Yaml do
|
|
56
56
|
let(:params_collection) { Fields::Collection.new(:path => [:params], :label => "Parameters") }
|
57
57
|
let(:param) { Fields::KeyValue.new(:path => nil, :label => nil) }
|
58
58
|
let(:blank) { Fields::Field.new(:path => [:blank], :label => "Blank", :hide_blank => true) }
|
59
|
+
let(:login) { Fields::Field.new(:path => [:login], :label => "Login") }
|
60
|
+
let(:missing) { Fields::Field.new(:path => [:missing], :label => "Missing", :hide_missing => false) }
|
59
61
|
|
60
62
|
let(:data) { HammerCLI::Output::RecordCollection.new [{
|
61
63
|
:id => 112,
|
@@ -203,6 +205,22 @@ describe HammerCLI::Output::Adapter::Yaml do
|
|
203
205
|
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
204
206
|
end
|
205
207
|
|
208
|
+
it "does not print fields which data are missing from api by default" do
|
209
|
+
fields = [surname, login]
|
210
|
+
hash = [{ 'Surname' => 'Doe' }]
|
211
|
+
expected_output = YAML.dump(hash)
|
212
|
+
|
213
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
214
|
+
end
|
215
|
+
|
216
|
+
it "prints fields which data are missing from api when field has hide_missing flag set to false" do
|
217
|
+
fields = [surname, missing]
|
218
|
+
hash = [{ 'Surname' => 'Doe', 'Missing' => HammerCLI::Output::DataMissing.new }]
|
219
|
+
expected_output = YAML.dump(hash)
|
220
|
+
|
221
|
+
proc { adapter.print_collection(fields, data) }.must_output(expected_output)
|
222
|
+
end
|
223
|
+
|
206
224
|
it "should print key -> value" do
|
207
225
|
params_collection.output_definition.append [param]
|
208
226
|
fields = [params_collection]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hammer_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Bačovský
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-08-
|
12
|
+
date: 2018-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: clamp
|