divygrid 0.0.2 → 0.0.3
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/.gitignore +2 -0
- data/.hound.yml +473 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +21 -0
- data/LICENSE.txt +22 -0
- data/README.md +95 -0
- data/Rakefile +11 -0
- data/divygrid.gemspec +26 -0
- data/lib/divy/div_generator.rb +97 -0
- data/lib/divy/divygrid_error.rb +13 -0
- data/lib/divy/grid.rb +113 -0
- data/lib/divy/version.rb +3 -0
- data/lib/divy.rb +8 -0
- data/test/lib/divy/div_generator_test.rb +131 -0
- data/test/lib/divy/grid_test.rb +206 -0
- data/test/lib/divy/html_examples.yml +150 -0
- data/test/lib/divy/version_test.rb +9 -0
- data/test/test_helper.rb +5 -0
- metadata +26 -3
@@ -0,0 +1,97 @@
|
|
1
|
+
module Divy
|
2
|
+
class DivGenerator
|
3
|
+
def divy_container(container_size, container_content)
|
4
|
+
style = "style=\"width: #{size_and_unit(container_size[0])}; height: #{size_and_unit(container_size[1])};\""
|
5
|
+
begin_tag = "<div class=\"divycontainer\" #{style}>\n"
|
6
|
+
end_tag = "</div>\n"
|
7
|
+
begin_tag + container_content + end_tag
|
8
|
+
end
|
9
|
+
|
10
|
+
def size_and_unit(container_size)
|
11
|
+
if container_size.to_s.match(/%/)
|
12
|
+
container_size
|
13
|
+
else
|
14
|
+
"#{container_size}px"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def divy_content(grid_size, content_arr, options = {})
|
19
|
+
html_content = ''
|
20
|
+
content_arr.each do |content_hsh|
|
21
|
+
html_content += content_as_html(grid_size, content_hsh, options)
|
22
|
+
end
|
23
|
+
html_content
|
24
|
+
end
|
25
|
+
|
26
|
+
def content_as_html(grid_size, content, options)
|
27
|
+
case content[:type]
|
28
|
+
when :html
|
29
|
+
divy_box(content[:location][0], content[:location][1], grid_size, content[:value], content[:size], options)
|
30
|
+
when :image
|
31
|
+
divy_box(content[:location][0], content[:location][1], grid_size, image_html(content[:value]), content[:size],options)
|
32
|
+
when :none
|
33
|
+
''
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def image_html(path)
|
38
|
+
"<img src=\"#{path}\" height=\"100%\" width=\"100%\"></img>"
|
39
|
+
end
|
40
|
+
|
41
|
+
def grid_html(grid_dimensions, options = {})
|
42
|
+
div_grid_html = ""
|
43
|
+
(0..(grid_dimensions[0] - 1)).each do |x|
|
44
|
+
(0..(grid_dimensions[1] - 1)).each do |y|
|
45
|
+
div_grid_html += divy_box(x, y, grid_dimensions, nil, nil, options)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
div_grid_html
|
49
|
+
end
|
50
|
+
|
51
|
+
def divy_box(x = 0, y = 0, grid_size = [10, 10], content = nil, content_size = nil, options = {})
|
52
|
+
style = divy_box_stylez(x, y, grid_size, content_size, options)
|
53
|
+
"<div class=\"divybox\" style=\"#{style}\">#{content}</div>\n"
|
54
|
+
end
|
55
|
+
|
56
|
+
def divy_box_stylez(x, y, grid_size, content_size = nil, options = {})
|
57
|
+
if content_size
|
58
|
+
content_divy_box_stylez(x, y, grid_size, content_size, options)
|
59
|
+
else
|
60
|
+
general_divy_box_stylez(x, y, grid_size, content_size, options)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def general_divy_box_stylez(x, y, grid_size, content_size = nil, options = {})
|
65
|
+
bottom = scaled_value(grid_size[1], y)
|
66
|
+
left = scaled_value(grid_size[0], x)
|
67
|
+
width = scaled_percentage(grid_size[0])
|
68
|
+
height = scaled_percentage(grid_size[1])
|
69
|
+
"bottom: #{bottom}%; left: #{left}%; width: #{width}%; height: #{height}%; #{default_stylez(options)}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def content_divy_box_stylez(x, y, grid_size, content_size = nil, options = {})
|
73
|
+
bottom = scaled_value(grid_size[1], (y - 0.5))
|
74
|
+
left = scaled_value(grid_size[0], (x - 0.5))
|
75
|
+
width = scaled_value(grid_size[0], content_size[0])
|
76
|
+
height = scaled_value(grid_size[1], content_size[1])
|
77
|
+
"bottom: #{bottom}%; left: #{left}%; width: #{width}%; height: #{height}%; #{default_stylez(options)}"
|
78
|
+
end
|
79
|
+
|
80
|
+
def scaled_value(total_units, val)
|
81
|
+
scaled_percentage(total_units) * val.to_f
|
82
|
+
end
|
83
|
+
|
84
|
+
def scaled_percentage(total_units)
|
85
|
+
(100 / total_units.to_f)
|
86
|
+
end
|
87
|
+
|
88
|
+
def default_stylez(options = {})
|
89
|
+
if options[:show_grid]
|
90
|
+
color = options[:grid_color] || '#000000'
|
91
|
+
"position: absolute; border-style:solid; border-color:#{color};"
|
92
|
+
else
|
93
|
+
'position: absolute;'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class DivyGridError < StandardError
|
2
|
+
def initialize(msg_type = :default)
|
3
|
+
msg = {
|
4
|
+
default: 'DivyGrid not so divy',
|
5
|
+
hex: 'Hex color not valid',
|
6
|
+
content_type: 'Content inputs must be an array of hashes',
|
7
|
+
content_hsh: "Content type must be of format {type: html/image/none, value: '', location: [num, num]",
|
8
|
+
container_size: 'Invalid input format, must be an array of integer numbers, or percentages as a string',
|
9
|
+
num_array: 'Invalid input format, must be an array of numbers of length 2'
|
10
|
+
}[msg_type]
|
11
|
+
super(msg)
|
12
|
+
end
|
13
|
+
end
|
data/lib/divy/grid.rb
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
module Divy
|
2
|
+
class Grid
|
3
|
+
attr_accessor :content, :container_size, :grid_dimensions, :show_grid, :grid_color
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@content = validated_content_arr(options.fetch(:content, [{type: :none, value: '', location: [0, 0], size: [1, 1]}]))
|
7
|
+
@container_size = validated_container_size(options.fetch(:container_size, ['100%', '100%']))
|
8
|
+
@grid_dimensions = validated_number_array(options.fetch(:grid_dimensions, [10, 10]))
|
9
|
+
@show_grid = options.fetch(:show_grid, false)
|
10
|
+
@grid_color = validated_hex_color(options.fetch(:grid_color, 'invisible'))
|
11
|
+
@div_generator = Divy::DivGenerator.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_content(input_content)
|
15
|
+
@content += validated_content_arr(input_content)
|
16
|
+
end
|
17
|
+
|
18
|
+
def html
|
19
|
+
options = {show_grid: @show_grid, grid_color: @grid_color}
|
20
|
+
content_html = @div_generator.divy_content(@grid_dimensions, @content, options)
|
21
|
+
grid_html = @div_generator.grid_html(@grid_dimensions, options)
|
22
|
+
all_content = content_html + grid_html
|
23
|
+
@div_generator.divy_container(@container_size, all_content)
|
24
|
+
end
|
25
|
+
|
26
|
+
def validated_hex_color(color)
|
27
|
+
if color =~ /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i || color == 'invisible'
|
28
|
+
color
|
29
|
+
else
|
30
|
+
raise DivyGridError, :hex
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def validated_content_arr(arr)
|
35
|
+
if arr.kind_of?(Array)
|
36
|
+
arr.each_with_object([]) do |content_hsh, valid_arr|
|
37
|
+
valid_arr << validated_content_hsh(content_hsh)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
raise DivyGridError, :content_type
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def validated_content_hsh(content_hsh)
|
45
|
+
if valid_content_type?(content_hsh)
|
46
|
+
content_hsh[:location] = validated_number_array(content_hsh[:location] || [0,0])
|
47
|
+
content_hsh[:size] = validated_number_array(content_hsh[:size] || [1,1])
|
48
|
+
content_hsh[:value] ||= ''
|
49
|
+
content_hsh
|
50
|
+
else
|
51
|
+
raise DivyGridError, :content_hsh
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def valid_content_type?(content_hsh)
|
56
|
+
case content_hsh[:type]
|
57
|
+
when :none, :html, :image
|
58
|
+
true
|
59
|
+
else
|
60
|
+
false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def validated_container_size(arr)
|
65
|
+
if two_numbers?(arr)
|
66
|
+
arr.map{|n| n.to_i}
|
67
|
+
elsif two_percents?(arr)
|
68
|
+
arr
|
69
|
+
else
|
70
|
+
raise DivyGridError, :container_size
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def validated_number_array(arr)
|
75
|
+
if two_numbers?(arr)
|
76
|
+
arr.map{|n| n.to_i}
|
77
|
+
else
|
78
|
+
raise DivyGridError, :num_array
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def two_numbers?(arr)
|
83
|
+
if arr.kind_of?(Array) &&
|
84
|
+
arr.length == 2 &&
|
85
|
+
can_be_num?(arr[0]) &&
|
86
|
+
can_be_num?(arr[1])
|
87
|
+
true
|
88
|
+
else
|
89
|
+
false
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def can_be_num?(num)
|
94
|
+
(true if Float(num) rescue false)
|
95
|
+
end
|
96
|
+
|
97
|
+
def two_percents?(arr)
|
98
|
+
if arr.kind_of?(Array) &&
|
99
|
+
arr.length == 2 &&
|
100
|
+
percent?(arr[0]) &&
|
101
|
+
percent?(arr[1])
|
102
|
+
true
|
103
|
+
else
|
104
|
+
false
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def percent?(percent)
|
109
|
+
percent =~ /\d{1,3}%/
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
end
|
data/lib/divy/version.rb
ADDED
data/lib/divy.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
describe Divy::DivGenerator do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@test_div = Divy::DivGenerator.new
|
8
|
+
@html_results = YAML.load(File.open('test/lib/divy/html_examples.yml'))
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#default_stylez' do
|
12
|
+
it 'should return the common default styles given no arguments' do
|
13
|
+
@test_div.default_stylez.must_equal 'position: absolute;'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should return default styles given show_grid as false' do
|
17
|
+
options = {show_grid: false}
|
18
|
+
@test_div.default_stylez(options).must_equal 'position: absolute;'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should return default grid colors if given show_grid as true' do
|
22
|
+
options = {show_grid: true}
|
23
|
+
style = 'position: absolute; border-style:solid; border-color:#000000;'
|
24
|
+
@test_div.default_stylez(options). must_equal style
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should return the input color as boredr color if show_grid true and color provided' do
|
28
|
+
options = {show_grid: true, grid_color: '#00FFFF'}
|
29
|
+
style = 'position: absolute; border-style:solid; border-color:#00FFFF;'
|
30
|
+
@test_div.default_stylez(options).must_equal style
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#scaled_percentage' do
|
35
|
+
it 'should return the percentage of a single unit based on number of units' do
|
36
|
+
@test_div.scaled_percentage(7).must_equal 14.285714285714286
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should respond correctly if given a string number' do
|
40
|
+
@test_div.scaled_percentage('7').must_equal 14.285714285714286
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#scaled_value' do
|
45
|
+
it 'should return the percentage of height based on y unit location' do
|
46
|
+
@test_div.scaled_value(10, 3).must_equal 30
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should respond correctly for a float result' do
|
50
|
+
@test_div.scaled_value(7, 3).must_equal 42.85714285714286
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should respond currently given strign numbers' do
|
54
|
+
@test_div.scaled_value('7', 3).must_equal 42.85714285714286
|
55
|
+
@test_div.scaled_value(7, '3').must_equal 42.85714285714286
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#divy_box_stylez' do
|
60
|
+
it 'should return the style parameters for a divybox' do
|
61
|
+
style = 'bottom: 20.0%; left: 10.0%; width: 10.0%; height: 10.0%; position: absolute;'
|
62
|
+
@test_div.divy_box_stylez(1, 2, [10, 10]).must_equal style
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should return colors if borders and colors if correct options are passed' do
|
66
|
+
options = {show_grid: true, grid_color: '#00FFFF'}
|
67
|
+
style = 'bottom: 20.0%; left: 10.0%; width: 10.0%; height: 10.0%; position: absolute; border-style:solid; border-color:#00FFFF;'
|
68
|
+
@test_div.divy_box_stylez(1, 2, [10, 10], nil, options).must_equal style
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should return modified content styles if content size is passed' do
|
72
|
+
options = {show_grid: true, grid_color: '#00FFFF'}
|
73
|
+
style = 'bottom: 15.0%; left: 5.0%; width: 20.0%; height: 20.0%; position: absolute; border-style:solid; border-color:#00FFFF;'
|
74
|
+
@test_div.divy_box_stylez(1, 2, [10, 10], [2, 2], options).must_equal style
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#divy_box' do
|
79
|
+
it 'should return a default box and location gven no inputs' do
|
80
|
+
div_content = "<div class=\"divybox\" style=\"bottom: 0.0%; left: 0.0%; width: 10.0%; height: 10.0%; position: absolute;\"></div>\n"
|
81
|
+
@test_div.divy_box.must_equal div_content
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should add content to the div if content is passed' do
|
85
|
+
div_content = "<div class=\"divybox\" style=\"bottom: 0.0%; left: 0.0%; width: 10.0%; height: 10.0%; position: absolute;\">1</div>\n"
|
86
|
+
@test_div.divy_box(0, 0, [10, 10], 1).must_equal div_content
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe '#divy_container' do
|
91
|
+
it 'should wrap the given content in a divycontainer div with %' do
|
92
|
+
div_content = "<div class=\"divycontainer\" style=\"width: 100%; height: 100%;\">\ntest content</div>\n"
|
93
|
+
@test_div.divy_container(['100%', '100%'], 'test content').must_equal div_content
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should wrap the given content in a divycontainer div with as px' do
|
97
|
+
div_content = "<div class=\"divycontainer\" style=\"width: 100px; height: 100px;\">\ntest content</div>\n"
|
98
|
+
@test_div.divy_container([100, 100], 'test content').must_equal div_content
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#divy_content' do
|
104
|
+
it 'should return all content for the given content array' do
|
105
|
+
content = [
|
106
|
+
{type: :html, value: 'coolhtmlstuff', location: [1, 3], size: [1, 1]},
|
107
|
+
{type: :image, value: 'someimagepath', location: [1, 5], size: [1, 1]},
|
108
|
+
{type: :none, value: 'gonnaignorethisanyways', location: [1, 7], size: [1, 1]}
|
109
|
+
]
|
110
|
+
@test_div.divy_content([10, 10], content).must_equal @html_results[3]
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'should include options in teh divy box if they are passed' do
|
114
|
+
options = {show_grid: true, grid_color: '#00FFFF'}
|
115
|
+
content = [
|
116
|
+
{type: :html, value: 'coolhtmlstuff', location: [1, 3], size: [1, 1]},
|
117
|
+
{type: :image, value: 'someimagepath', location: [1, 5], size: [1, 1]},
|
118
|
+
{type: :none, value: 'gonnaignorethisanyways', location: [1, 7], size: [1, 1]}
|
119
|
+
]
|
120
|
+
@test_div.divy_content([10, 10], content, options).must_equal @html_results[2]
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe '#grid_html' do
|
125
|
+
it 'should return each square of the div grid with no options' do
|
126
|
+
@test_div.grid_html([3, 3]).must_equal @html_results[1]
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
|
131
|
+
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
describe Divy::Grid do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@grid = Divy::Grid.new
|
8
|
+
@html_results = YAML.load(File.open('test/lib/divy/html_examples.yml'))
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#initialize' do
|
12
|
+
it 'should set content to the given value if valid' do
|
13
|
+
content = [{type: :html, value: 'totally valid', location: [1, 3]}]
|
14
|
+
new_grid = Divy::Grid.new(content: content)
|
15
|
+
new_grid.content.must_equal content
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should set the default value for content if none given' do
|
19
|
+
@grid.content.must_equal([{:type => :none, :value => '', :location => [0, 0], :size=>[1, 1]}])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should set container size if valid' do
|
23
|
+
new_grid = Divy::Grid.new(container_size: [20, 20])
|
24
|
+
new_grid.container_size.must_equal [20, 20]
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should set default container size if none given' do
|
28
|
+
@grid.container_size.must_equal %w(100% 100%)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should set grid dimensions if valid' do
|
32
|
+
new_grid = Divy::Grid.new(grid_dimensions: [7, 7])
|
33
|
+
new_grid.grid_dimensions.must_equal [7, 7]
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should set default grid dimensions if none given' do
|
37
|
+
@grid.grid_dimensions.must_equal [10,10]
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should set grid color if valid' do
|
41
|
+
new_grid = Divy::Grid.new(grid_color: '#000000')
|
42
|
+
new_grid.grid_color.must_equal '#000000'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should set default grid color to invisible if none given' do
|
46
|
+
@grid.grid_color.must_equal 'invisible'
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should set show_grid to false if not provided' do
|
50
|
+
@grid.show_grid.must_equal false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#add_content' do
|
55
|
+
it 'should add content to the content array if valid' do
|
56
|
+
content = [{type: :html, value: 'coolhtmlstuff', location: [1, 3], size: [1, 1]}]
|
57
|
+
result_content = [
|
58
|
+
{type: :none, value: '', location: [0, 0], size: [1, 1]},
|
59
|
+
content[0]
|
60
|
+
]
|
61
|
+
@grid.add_content(content)
|
62
|
+
@grid.content.must_equal result_content
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#validated_content_arr' do
|
67
|
+
it 'should return all content if all valid' do
|
68
|
+
content = [
|
69
|
+
{type: :html, value: 'coolhtmlstuff', location: [1, 3]},
|
70
|
+
{type: :image, value: 'someimagepath', location: [1, 3]},
|
71
|
+
{type: :none, value: 'gonnaignorethisanyways', location: [1, 3]}
|
72
|
+
]
|
73
|
+
@grid.validated_content_arr(content).must_equal content
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should raise an error if invalid content is provided' do
|
77
|
+
content = [
|
78
|
+
{type: :html, value: 'coolhtmlstuff', location: [1, 3]},
|
79
|
+
{type: :image, value: 'someimagepath', location: [1, 3]},
|
80
|
+
{broken_stuff: 'HAHAIBREAKINURCODEZ!'}
|
81
|
+
]
|
82
|
+
proc{@grid.validated_content_arr(content)}.must_raise DivyGridError
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '#validated_content_hsh' do
|
87
|
+
it 'should return content if content is valid html type' do
|
88
|
+
content = {type: :html, value: 'coolhtmlstuff', location: [1, 3]}
|
89
|
+
@grid.validated_content_hsh(content).must_equal content
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should return content if content is valid html type' do
|
93
|
+
content = {type: :image, value: 'someimagepath', location: [1, 3]}
|
94
|
+
@grid.validated_content_hsh(content).must_equal content
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should return content if content is valid html type' do
|
98
|
+
content = {type: :none, value: 'gonnaignorethisanyways', location: [1, 3]}
|
99
|
+
@grid.validated_content_hsh(content).must_equal content
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should raise an exception if the content type is not valid' do
|
103
|
+
proc{@grid.validated_content_hsh(broken_stuff: 'HAHAIBREAKINURCODEZ!')}.must_raise DivyGridError
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe '#validated hex color' do
|
108
|
+
it 'should return the color if a valid hex color' do
|
109
|
+
@grid.validated_hex_color('#FF0022').must_equal '#FF0022'
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'should raise an exception if input is not a valid hex color' do
|
113
|
+
proc{@grid.validated_hex_color('#FF002')}.must_raise DivyGridError
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe '#validated_container_size' do
|
118
|
+
it 'should return the container size if both inputs are valid percents as a string' do
|
119
|
+
@grid.validated_container_size(%w(20% 88%)).must_equal ['20%', '88%']
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should return the container size if both inputs are valid ints' do
|
123
|
+
@grid.validated_container_size([56, 97]).must_equal [56, 97]
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'should return the container size if both inputs are valid ints as a string' do
|
127
|
+
@grid.validated_container_size(%w(56 97)).must_equal [56, 97]
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should raise an exception if inputs are not valid ints or percents' do
|
131
|
+
proc{@grid.validated_container_size([56, 'snoo'])}.must_raise DivyGridError
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe '#validated_number_array' do
|
136
|
+
it 'should return the array if both inputs in array are numbers as float/int' do
|
137
|
+
@grid.validated_number_array([4, 8]).must_equal [4, 8]
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'should return the array if the inputs are valid numbers as strings' do
|
141
|
+
@grid.validated_number_array(%w(4 8)).must_equal [4, 8]
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'should return the array for a valid input of a combo of int/float/string' do
|
145
|
+
@grid.validated_number_array([9, '2']).must_equal [9, 2]
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'should raise an exception if both inputs are not valid numbers' do
|
149
|
+
proc{@grid.validated_number_array(%w(meow 8))}.must_raise DivyGridError
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe '#two_numbers?' do
|
154
|
+
it 'should return true if both inputs are integers/floats' do
|
155
|
+
@grid.two_numbers?([2, 6]).must_equal true
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'should return true if both inputs are numbers a as a string' do
|
159
|
+
@grid.two_numbers?(%w(2 6)).must_equal true
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should return true for a combo of ints/floats/numbers as a string' do
|
163
|
+
@grid.two_numbers?([9, '4']).must_equal true
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'should return false if either input is not a valid number' do
|
167
|
+
@grid.two_numbers?(['puppy', 6]).must_equal false
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'should return false if array length is not 2' do
|
171
|
+
@grid.two_numbers?([2, 6, 4]).must_equal false
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
describe '#two_percents?' do
|
176
|
+
it 'should return true if both numbers are valid percents as a string' do
|
177
|
+
@grid.two_percents?(%w(46% 23%)).must_equal true
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'should return false if either number is not a percent as a string' do
|
181
|
+
@grid.two_percents?(%w(bleh 23%)).must_equal false
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'should return false if array length is not 2' do
|
185
|
+
@grid.two_percents?(%w(46% 23% 12%)).must_equal false
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe '#html' do
|
190
|
+
it 'should return correct html content given all arguments' do
|
191
|
+
@grid.content = [
|
192
|
+
{type: :html, value: 'coolhtmlstuff', location: [1, 3], size: [1, 1]},
|
193
|
+
{type: :image, value: 'someimagepath', location: [1, 3], size: [2, 2]}
|
194
|
+
]
|
195
|
+
@grid.grid_dimensions = [5, 5]
|
196
|
+
@grid.show_grid = true
|
197
|
+
@grid.grid_color = '#FF00CC'
|
198
|
+
@grid.container_size = [100, 100]
|
199
|
+
@grid.html.must_equal (@html_results[0] + "\n")
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'should return default contents given no arguments' do
|
203
|
+
@grid.html.must_equal (@html_results[4] + "\n")
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|