nxgreport 0.8.0 → 0.11.2
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/lib/nxgreport.rb +3 -3
- data/lib/nxgreport/nxgcore.rb +217 -0
- data/lib/nxgreport/nxgcss.rb +323 -0
- data/lib/nxgreport/nxghtml.rb +196 -0
- data/lib/nxgreport/nxgjs.rb +233 -0
- data/lib/nxgreport/version.rb +3 -0
- metadata +43 -11
- data/lib/nxgcore.rb +0 -420
- data/lib/nxgcss.rb +0 -335
@@ -0,0 +1,196 @@
|
|
1
|
+
require 'nxgreport/nxgcss.rb'
|
2
|
+
require 'nxgreport/nxgjs.rb'
|
3
|
+
|
4
|
+
module NxgHTML
|
5
|
+
|
6
|
+
include NxgCss
|
7
|
+
include NxgJavascript
|
8
|
+
|
9
|
+
def html(data_provider)
|
10
|
+
@data_provider = data_provider
|
11
|
+
"<html lang=\"en\">
|
12
|
+
#{head()}
|
13
|
+
#{body()}
|
14
|
+
#{js(@data_provider)}
|
15
|
+
</html>"
|
16
|
+
end
|
17
|
+
|
18
|
+
def head()
|
19
|
+
"<head>
|
20
|
+
<meta charset=\"UTF-8\" />
|
21
|
+
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />
|
22
|
+
<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js\"></script>
|
23
|
+
<script> #{js_detect_system_dark_mode()}</script>
|
24
|
+
<title>Home | #{@data_provider[:title]}</title>
|
25
|
+
#{google_fonts_link()}
|
26
|
+
#{icons_link()}
|
27
|
+
#{css(@data_provider)}
|
28
|
+
</head>"
|
29
|
+
end
|
30
|
+
|
31
|
+
def google_fonts_link()
|
32
|
+
"<link
|
33
|
+
href=\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800&display=swap\"
|
34
|
+
rel=\"stylesheet\"
|
35
|
+
/>"
|
36
|
+
end
|
37
|
+
|
38
|
+
def icons_link()
|
39
|
+
"<link
|
40
|
+
href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"
|
41
|
+
rel=\"stylesheet\"
|
42
|
+
/>"
|
43
|
+
end
|
44
|
+
|
45
|
+
def body()
|
46
|
+
"<body id=\"app\" onload=\"onRefresh()\">
|
47
|
+
<div id=\"sidebar\" onclick=\"closeDetails(event)\">
|
48
|
+
<div id=\"sidebar-div\">
|
49
|
+
<div id=\"sidebar-title-wrap\">
|
50
|
+
<h1 id=\"sidebar-title\">Title</h1>
|
51
|
+
<i class=\"material-icons\" id=\"sidebar-status\">check_circle</i>
|
52
|
+
</div>
|
53
|
+
<div id=\"sidebar-catergories\">
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
<div id=\"sidebar-overlay\" onclick=\"closeDetails(event)\">
|
58
|
+
<div id=\"sidebar-overlay-grid\"></div>
|
59
|
+
</div>
|
60
|
+
<div id=\"body-wrap\">
|
61
|
+
#{header()}
|
62
|
+
#{config()}
|
63
|
+
#{features()}
|
64
|
+
#{footer()}
|
65
|
+
</div>
|
66
|
+
</body>"
|
67
|
+
end
|
68
|
+
|
69
|
+
def header()
|
70
|
+
"<div id=\"header\">
|
71
|
+
<h1 id=\"app-title\">#{@data_provider[:title]}</h1>
|
72
|
+
<div id=\"theme-wrap\">
|
73
|
+
<button id=\"theme-switch\" onclick=\"switchTheme()\">
|
74
|
+
<i class=\"material-icons\" id=\"theme-icon\">wb_sunny</i>
|
75
|
+
</button>
|
76
|
+
</div>
|
77
|
+
</div>"
|
78
|
+
end
|
79
|
+
|
80
|
+
def features()
|
81
|
+
"<div class=\"features-grid\"></div>"
|
82
|
+
end
|
83
|
+
|
84
|
+
def footer()
|
85
|
+
"<div id=\"footer\">
|
86
|
+
<p>
|
87
|
+
Developed by
|
88
|
+
<span>
|
89
|
+
<a
|
90
|
+
href=\"https://www.linkedin.com/in/balabharathijayaraman\"
|
91
|
+
rel=\"noopener\"
|
92
|
+
target=\"_blank\"
|
93
|
+
>Balabharathi Jayaraman</a
|
94
|
+
>
|
95
|
+
</span>
|
96
|
+
</p>
|
97
|
+
</div>"
|
98
|
+
end
|
99
|
+
|
100
|
+
def config()
|
101
|
+
return if @data_provider.length == 0
|
102
|
+
|
103
|
+
return "<div class=\"params-container\">
|
104
|
+
#{release_name()}
|
105
|
+
#{execution_date()}
|
106
|
+
#{device()}
|
107
|
+
#{os()}
|
108
|
+
#{app_version()}
|
109
|
+
#{environment()}
|
110
|
+
#{passed_tests()}
|
111
|
+
#{failed_tests()}
|
112
|
+
#{percentage_pass()}
|
113
|
+
#{execution_time()}
|
114
|
+
#{filter()}
|
115
|
+
</div>"
|
116
|
+
end
|
117
|
+
|
118
|
+
def execution_time()
|
119
|
+
return if !@data_provider.key?(:environment)
|
120
|
+
|
121
|
+
return config_item("Total execution time", @data_provider[:execution_time],'access_time')
|
122
|
+
end
|
123
|
+
|
124
|
+
def filter()
|
125
|
+
"<div class=\"param-wrap\" onclick=\"setFilter()\" id=\"filter\" title=\"Filter tests\">
|
126
|
+
<i class=\"pi material-icons\">filter_list</i>
|
127
|
+
<h5 id=\"pt\">Failed</h5>
|
128
|
+
</div>"
|
129
|
+
end
|
130
|
+
|
131
|
+
def passed_tests()
|
132
|
+
"<div class=\"param-wrap\" title=\"Passed tests\">
|
133
|
+
<i class=\"pi green-font material-icons\">check_circle</i>
|
134
|
+
<h5 id=\"pt\">#{@data_provider[:pass] == 0 ? "None" : @data_provider[:pass]}</h5>
|
135
|
+
</div>"
|
136
|
+
end
|
137
|
+
|
138
|
+
def failed_tests()
|
139
|
+
"<div class=\"param-wrap\" title=\"Failed tests\" #{@data_provider[:fail] > 0 ? "onclick=\"filterAllFailed()\" style=\"cursor: pointer\"" : ""}>
|
140
|
+
<i class=\"pi red-font material-icons\">cancel</i>
|
141
|
+
<h5 id=\"pt\">#{@data_provider[:fail] == 0 ? "None" : @data_provider[:fail]}</h5>
|
142
|
+
</div>"
|
143
|
+
end
|
144
|
+
|
145
|
+
def percentage_pass()
|
146
|
+
pass_percentage = ((@data_provider[:pass]/@data_provider[:total].to_f) * 100).round(2)
|
147
|
+
|
148
|
+
return "<div class=\"param-wrap\" title=\"Pass percentage\">
|
149
|
+
<i class=\"pi #{pass_percentage.to_i == 100 ? "green-font" : ""} material-icons\">equalizer</i>
|
150
|
+
<h5 id=\"pt\">#{pass_percentage.to_i == 100 ? pass_percentage.to_i : pass_percentage}%</h5>
|
151
|
+
</div>"
|
152
|
+
end
|
153
|
+
|
154
|
+
def environment()
|
155
|
+
return if !@data_provider.key?(:environment)
|
156
|
+
|
157
|
+
return config_item("Test environment", @data_provider[:environment], "layers")
|
158
|
+
end
|
159
|
+
|
160
|
+
def app_version()
|
161
|
+
return if !@data_provider.key?(:app_version)
|
162
|
+
|
163
|
+
return config_item("App version tested", @data_provider[:app_version], "info")
|
164
|
+
end
|
165
|
+
|
166
|
+
def release_name()
|
167
|
+
return if !@data_provider.key?(:release_name)
|
168
|
+
|
169
|
+
return config_item("Release", @data_provider[:release_name], "bookmark")
|
170
|
+
end
|
171
|
+
|
172
|
+
def os()
|
173
|
+
return if !@data_provider.key?(:os)
|
174
|
+
|
175
|
+
return config_item("Os tested", @data_provider[:os], "settings")
|
176
|
+
end
|
177
|
+
|
178
|
+
def device()
|
179
|
+
return if !@data_provider.key?(:device)
|
180
|
+
|
181
|
+
return config_item("Device tested", @data_provider[:device], "devices")
|
182
|
+
end
|
183
|
+
|
184
|
+
def execution_date()
|
185
|
+
@data_provider[:execution_date] = Time.now().strftime("%b %d, %Y") if !@data_provider.key?(:execution_date)
|
186
|
+
|
187
|
+
return config_item("Execution date", @data_provider[:execution_date], "event")
|
188
|
+
end
|
189
|
+
|
190
|
+
def config_item(toot_tip, name, icon)
|
191
|
+
"<div class=\"param-wrap\" title=\"#{toot_tip}\">
|
192
|
+
<i class=\"pi material-icons\">#{icon}</i>
|
193
|
+
<h5 id=\"pt\">#{name}</h5>
|
194
|
+
</div>"
|
195
|
+
end
|
196
|
+
end
|
@@ -0,0 +1,233 @@
|
|
1
|
+
|
2
|
+
module NxgJavascript
|
3
|
+
|
4
|
+
def js_detect_system_dark_mode()
|
5
|
+
"if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
6
|
+
$(document.documentElement).attr(\"theme\", \"dark\");
|
7
|
+
}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def js(data_provider)
|
11
|
+
|
12
|
+
js_array = data_provider[:features].to_s.gsub("=>", ":")
|
13
|
+
|
14
|
+
return "<script>
|
15
|
+
const allFeatures = #{js_array};
|
16
|
+
const STATUS = { pass: \"check_circle\", fail: \"cancel\", };
|
17
|
+
var displayFailuresOnly = false;
|
18
|
+
var dataSource = [];
|
19
|
+
var catergories = [];
|
20
|
+
|
21
|
+
function onRefresh() {
|
22
|
+
dataSource = allFeatures;
|
23
|
+
setFilter();
|
24
|
+
currentTheme = $(document.documentElement).attr(\"theme\");
|
25
|
+
$(\"#theme-icon\").text(currentTheme === \"dark\" ? \"brightness_2\" : \"wb_sunny\");
|
26
|
+
}
|
27
|
+
|
28
|
+
function updateView() {
|
29
|
+
$(\".banner\").removeClass(\"banner\").addClass(\"features-grid\");
|
30
|
+
$(\".features-grid\").empty();
|
31
|
+
|
32
|
+
if (dataSource.length === 0) {
|
33
|
+
console.log(\"inside\");
|
34
|
+
$(\".features-grid\")
|
35
|
+
.removeClass(\"features-grid\")
|
36
|
+
.addClass(\"banner\")
|
37
|
+
.append(
|
38
|
+
`<i class=\"banner-text green-font material-icons\">done_all</i><h1>No Failures</>`
|
39
|
+
);
|
40
|
+
return;
|
41
|
+
}
|
42
|
+
|
43
|
+
dataSource.forEach((feature, index) => {
|
44
|
+
$(\".features-grid\").append(
|
45
|
+
`<div class=\"module dark ${
|
46
|
+
feature.fail > 0 ? \"red-bg\" : \"\"
|
47
|
+
}\" onclick=\"showDetails(${index})\"><div class=\"funcname\"><h4>${
|
48
|
+
feature.name
|
49
|
+
}</h4></div><div class=\"total\"><h6>Total</h6><h4>${
|
50
|
+
feature.total
|
51
|
+
}</h4></div><div class=\"pass green-font\"><h6>Passed</h6><h4>${
|
52
|
+
feature.pass
|
53
|
+
}</h4></div><div class=\"fail red-font\"><h6>Failed</h6><h4>${
|
54
|
+
feature.fail
|
55
|
+
}</h4></div></div>`
|
56
|
+
);
|
57
|
+
});
|
58
|
+
}
|
59
|
+
|
60
|
+
function setFilter() {
|
61
|
+
if (displayFailuresOnly) {
|
62
|
+
$(\"#filter h5\").text(\"Failed\");
|
63
|
+
dataSource = allFeatures.filter((feature) => {
|
64
|
+
return feature.fail > 0;
|
65
|
+
});
|
66
|
+
} else {
|
67
|
+
$(\"#filter h5\").text(\"All\");
|
68
|
+
dataSource = allFeatures;
|
69
|
+
}
|
70
|
+
updateView();
|
71
|
+
displayFailuresOnly = !displayFailuresOnly;
|
72
|
+
}
|
73
|
+
|
74
|
+
function filterAllFailed() {
|
75
|
+
allFailedTests = [];
|
76
|
+
catergories = [];
|
77
|
+
|
78
|
+
failedFeatures = allFeatures.filter((feature) => {
|
79
|
+
return feature.fail > 0;
|
80
|
+
});
|
81
|
+
|
82
|
+
for (index = 0; index < failedFeatures.length; index++) {
|
83
|
+
failedFeatures[index].tests.filter((test) => {
|
84
|
+
if (!test.testPass) {
|
85
|
+
allFailedTests.push(test);
|
86
|
+
}
|
87
|
+
});
|
88
|
+
}
|
89
|
+
|
90
|
+
$(\"#body-wrap\").css(\"overflow\", \"hidden\");
|
91
|
+
$(\"#sidebar-overlay\").css(\"overflow\", \"auto\");
|
92
|
+
$(\"#sidebar-overlay\").css(\"visibility\", \"visible\");
|
93
|
+
$(\"#sidebar-overlay\").css(\"margin-left\", \"40%\");
|
94
|
+
$(\"#sidebar\").css(\"width\", \"40%\");
|
95
|
+
$(\"#sidebar-title\").css(\"visibility\", \"visible\");
|
96
|
+
$(\"#sidebar-status\").css(\"visibility\", \"visible\");
|
97
|
+
$(\"#sidebar-title\").css(\"opacity\", \"1\");
|
98
|
+
$(\"#sidebar-status\").css(\"opacity\", \"1\");
|
99
|
+
$(\"#sidebar-catergories\").css(\"visibility\", \"visible\");
|
100
|
+
$(\"#sidebar-catergories\").css(\"opacity\", \"1\");
|
101
|
+
/* Update Test Information */
|
102
|
+
|
103
|
+
$(\"#sidebar-title\").text(\"Failed Tests\");
|
104
|
+
$(\"#sidebar-status\").text(STATUS.fail);
|
105
|
+
$(\"#sidebar-overlay-grid\").empty();
|
106
|
+
allFailedTests.forEach((test) => {
|
107
|
+
$(\"#sidebar-overlay-grid\").append(
|
108
|
+
`<div id=\"sidebar-overlay-test-info\" onclick=\"()=>{}\"><i class=\"${
|
109
|
+
test.testPass ? \"green-font\" : \"red-font\"
|
110
|
+
} material-icons\" style=\"font-size: 1em\">${
|
111
|
+
STATUS.fail
|
112
|
+
}</i> <h4 id=\"test-title\">${test.name}</h4><div><h4 id=\"test-execution-time\">${test.time} secs</h4></div>${
|
113
|
+
test.comments !== \"\"
|
114
|
+
? `<p id=\"error-message\">${test.comments}</p>`
|
115
|
+
: \"\"
|
116
|
+
}</div>`
|
117
|
+
);
|
118
|
+
categorize(test);
|
119
|
+
});
|
120
|
+
displayCategories();
|
121
|
+
}
|
122
|
+
|
123
|
+
function displayCategories() {
|
124
|
+
$(\"#sidebar-catergories\").empty();
|
125
|
+
if(catergories.length === 1) { return; }
|
126
|
+
catergories.forEach((cat) => {$(\"#sidebar-catergories\").append(`<div><h6>#${cat.name}</h6></div>`);});
|
127
|
+
}
|
128
|
+
|
129
|
+
function switchTheme() {
|
130
|
+
currentTheme = $(document.documentElement).attr(\"theme\");
|
131
|
+
$(document.documentElement).attr(\"theme\", currentTheme === \"dark\" ? \"light\" : \"dark\");
|
132
|
+
$(\"#theme-icon\").text(currentTheme === \"dark\" ? \"wb_sunny\" : \"brightness_2\");
|
133
|
+
}
|
134
|
+
|
135
|
+
function closeDetails(e) {
|
136
|
+
if (e.target.id === \"sidebar\" || e.target.id === \"sidebar-overlay\") {
|
137
|
+
$(\"#sidebar-catergories\").css(\"visibility\", \"hidden\");
|
138
|
+
$(\"#sidebar-catergories\").css(\"opacity\", \"0\");
|
139
|
+
$(\"#sidebar-title\").css(\"visibility\", \"hidden\");
|
140
|
+
$(\"#sidebar-status\").css(\"visibility\", \"hidden\");
|
141
|
+
$(\"#sidebar-title\").css(\"opacity\", \"0\");
|
142
|
+
$(\"#sidebar-status\").css(\"opacity\", \"0\");
|
143
|
+
$(\"#sidebar-overlay\").css(\"margin-left\", \"0\");
|
144
|
+
$(\"#sidebar-overlay\").css(\"visibility\", \"hidden\");
|
145
|
+
$(\"#sidebar\").css(\"width\", \"0\");
|
146
|
+
$(\"#body-wrap\").css(\"overflow\", \"auto\");
|
147
|
+
$(\"#sidebar-overlay\").css(\"overflow\", \"hidden\");
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
window
|
152
|
+
.matchMedia(\"(prefers-color-scheme: dark)\")
|
153
|
+
.addEventListener(\"change\", (e) => {
|
154
|
+
darkTheme = e.matches;
|
155
|
+
$(document.documentElement).attr(\"theme\", darkTheme ? \"dark\" : \"light\");
|
156
|
+
$(\"#theme-icon\").text(darkTheme ? \"brightness_2\" : \"wb_sunny\");
|
157
|
+
});
|
158
|
+
|
159
|
+
function showDetails(featureID) {
|
160
|
+
feature = dataSource[featureID];
|
161
|
+
catergories = [];
|
162
|
+
|
163
|
+
$(\"#body-wrap\").css(\"overflow\", \"hidden\");
|
164
|
+
$(\"#sidebar-overlay\").css(\"overflow\", \"auto\");
|
165
|
+
$(\"#sidebar-overlay\").css(\"visibility\", \"visible\");
|
166
|
+
$(\"#sidebar-overlay\").css(\"margin-left\", \"40%\");
|
167
|
+
$(\"#sidebar\").css(\"width\", \"40%\");
|
168
|
+
$(\"#sidebar-title\").css(\"visibility\", \"visible\");
|
169
|
+
$(\"#sidebar-status\").css(\"visibility\", \"visible\");
|
170
|
+
$(\"#sidebar-title\").css(\"opacity\", \"1\");
|
171
|
+
$(\"#sidebar-status\").css(\"opacity\", \"1\");
|
172
|
+
$(\"#sidebar-catergories\").css(\"visibility\", \"visible\");
|
173
|
+
$(\"#sidebar-catergories\").css(\"opacity\", \"1\");
|
174
|
+
/* Update Test Information */
|
175
|
+
|
176
|
+
$(\"#sidebar-title\").text(feature.name);
|
177
|
+
$(\"#sidebar-overlay-grid\").empty();
|
178
|
+
feature.tests.forEach((test) => {
|
179
|
+
$(\"#sidebar-overlay-grid\").append(
|
180
|
+
`<div id=\"sidebar-overlay-test-info\" onclick=\"()=>{}\"><i class=\"${
|
181
|
+
test.testPass ? \"green-font\" : \"red-font\"
|
182
|
+
} material-icons\" style=\"font-size: 1em\">${
|
183
|
+
test.testPass ? STATUS.pass : STATUS.fail
|
184
|
+
}</i> <h4 id=\"test-title\">${test.name}</h4><div><h4 id=\"test-execution-time\">${test.time} secs</h4></div>${
|
185
|
+
test.comments !== \"\"
|
186
|
+
? `<p id=\"error-message\">${test.comments}</p>`
|
187
|
+
: \"\"
|
188
|
+
}</div>`
|
189
|
+
);
|
190
|
+
categorize(test);
|
191
|
+
});
|
192
|
+
displayCategories();
|
193
|
+
|
194
|
+
for (index = 0; index < feature.tests.length; index++) {
|
195
|
+
if (!feature.tests[index].testPass) {
|
196
|
+
$(\"#sidebar-status\").text(STATUS.fail);
|
197
|
+
return;
|
198
|
+
}
|
199
|
+
}
|
200
|
+
$(\"#sidebar-status\").text(STATUS.pass);
|
201
|
+
}
|
202
|
+
|
203
|
+
function categorize(test) {
|
204
|
+
if (test.tag === \"\") {
|
205
|
+
return;
|
206
|
+
}
|
207
|
+
if (!catergoryAdded(test.tag)) {
|
208
|
+
catergories.push({ name: test.tag.toLowerCase(), tests: [test] });
|
209
|
+
} else {
|
210
|
+
catergories[catergoryIndex(test.tag)].tests.push(test);
|
211
|
+
}
|
212
|
+
}
|
213
|
+
|
214
|
+
function catergoryAdded(category) {
|
215
|
+
for (var i = 0; i < catergories.length; i++) {
|
216
|
+
if (catergories[i].name === category.toLowerCase()) {
|
217
|
+
return true;
|
218
|
+
}
|
219
|
+
}
|
220
|
+
return false;
|
221
|
+
}
|
222
|
+
|
223
|
+
function catergoryIndex(category) {
|
224
|
+
for (var i = 0; i < catergories.length; i++) {
|
225
|
+
if (catergories[i].name === category.toLowerCase()) {
|
226
|
+
return i;
|
227
|
+
}
|
228
|
+
}
|
229
|
+
return 0;
|
230
|
+
}
|
231
|
+
</script>"
|
232
|
+
end
|
233
|
+
end
|
metadata
CHANGED
@@ -1,31 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nxgreport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Balabharathi Jayaraman
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2021-08-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: test-unit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Generate a beautiful emailable test report.
|
42
|
+
email:
|
43
|
+
- balabharathi.jayaraman@gmail.com
|
15
44
|
executables: []
|
16
45
|
extensions: []
|
17
46
|
extra_rdoc_files: []
|
18
47
|
files:
|
19
|
-
- lib/nxgcore.rb
|
20
|
-
- lib/nxgcss.rb
|
21
48
|
- lib/nxgreport.rb
|
49
|
+
- lib/nxgreport/nxgcore.rb
|
50
|
+
- lib/nxgreport/nxgcss.rb
|
51
|
+
- lib/nxgreport/nxghtml.rb
|
52
|
+
- lib/nxgreport/nxgjs.rb
|
53
|
+
- lib/nxgreport/version.rb
|
22
54
|
homepage: https://rubygemspec.org/gems/nxgreport
|
23
55
|
licenses:
|
24
56
|
- MIT
|
25
57
|
metadata:
|
26
58
|
homepage_uri: https://rubygemspec.org/gems/nxgreport
|
27
|
-
source_code_uri: https://github.com/
|
28
|
-
changelog_uri: https://github.com/
|
59
|
+
source_code_uri: https://github.com/iambalabharathi/nxgreport-ruby
|
60
|
+
changelog_uri: https://github.com/iambalabharathi/nxgreport-ruby/blob/master/CHANGELOG.md
|
29
61
|
post_install_message:
|
30
62
|
rdoc_options: []
|
31
63
|
require_paths:
|
@@ -41,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
41
73
|
- !ruby/object:Gem::Version
|
42
74
|
version: '0'
|
43
75
|
requirements: []
|
44
|
-
rubygems_version: 3.1
|
76
|
+
rubygems_version: 3.0.3.1
|
45
77
|
signing_key:
|
46
78
|
specification_version: 4
|
47
79
|
summary: Next Gen Report
|