csv_plus_plus 0.0.3 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +9 -4
- data/bin/csv++ +1 -78
- data/bin/csvpp +6 -0
- data/lib/csv_plus_plus/cli.rb +84 -0
- data/lib/csv_plus_plus/cli_flag.rb +83 -0
- data/lib/csv_plus_plus/color.rb +45 -11
- data/lib/csv_plus_plus/error.rb +7 -0
- data/lib/csv_plus_plus/google_api_client.rb +20 -0
- data/lib/csv_plus_plus/graph.rb +0 -5
- data/lib/csv_plus_plus/language/compiler.rb +0 -1
- data/lib/csv_plus_plus/language/entities/boolean.rb +3 -3
- data/lib/csv_plus_plus/language/entities/entity.rb +10 -6
- data/lib/csv_plus_plus/language/scope.rb +0 -2
- data/lib/csv_plus_plus/language/syntax_error.rb +1 -1
- data/lib/csv_plus_plus/modifier.rb +49 -22
- data/lib/csv_plus_plus/modifier.tab.rb +367 -381
- data/lib/csv_plus_plus/options.rb +1 -1
- data/lib/csv_plus_plus/version.rb +1 -1
- data/lib/csv_plus_plus/writer/base_writer.rb +0 -1
- data/lib/csv_plus_plus/writer/csv.rb +4 -1
- data/lib/csv_plus_plus/writer/excel.rb +18 -2
- data/lib/csv_plus_plus/writer/file_backer_upper.rb +56 -0
- data/lib/csv_plus_plus/writer/google_sheet_builder.rb +12 -31
- data/lib/csv_plus_plus/writer/google_sheet_modifier.rb +56 -0
- data/lib/csv_plus_plus/writer/google_sheets.rb +25 -38
- data/lib/csv_plus_plus/writer/rubyxl_builder.rb +112 -0
- data/lib/csv_plus_plus/writer/rubyxl_modifier.rb +52 -0
- data/lib/csv_plus_plus/writer.rb +2 -3
- data/lib/csv_plus_plus.rb +6 -1
- metadata +45 -15
@@ -6,73 +6,91 @@ require_relative './expand'
|
|
6
6
|
require_relative './language/syntax_error'
|
7
7
|
|
8
8
|
module CSVPlusPlus
|
9
|
-
##
|
10
9
|
# A container representing the operations that can be applied to a cell or row
|
10
|
+
#
|
11
|
+
# @attr expand [Expand]
|
12
|
+
# @attr fontfamily [String]
|
13
|
+
# @attr fontsize [String]
|
14
|
+
# @attr halign ['left', 'center', 'right']
|
15
|
+
# @attr valign ['top', 'center', 'bottom']
|
16
|
+
# @attr note [String]
|
17
|
+
# @attr numberformat [String]
|
18
|
+
# @attr row_level [Boolean]
|
19
|
+
# @attr validation [Object]
|
20
|
+
#
|
21
|
+
# @attr_writer borderstyle [String]
|
22
|
+
#
|
23
|
+
# @attr_reader bordercolor [String]
|
24
|
+
# @attr_reader borders [Array<String>]
|
25
|
+
# @attr_reader color [Color]
|
26
|
+
# @attr_reader fontcolor [Color]
|
27
|
+
# @attr_reader formats [Array<String>]
|
11
28
|
class Modifier
|
12
29
|
attr_reader :bordercolor, :borders, :color, :fontcolor, :formats
|
13
30
|
attr_writer :borderstyle
|
14
|
-
attr_accessor :expand, :fontfamily, :fontsize, :note, :numberformat, :row_level, :validation
|
31
|
+
attr_accessor :expand, :fontfamily, :fontsize, :halign, :valign, :note, :numberformat, :row_level, :validation
|
15
32
|
|
16
|
-
#
|
33
|
+
# @param row_level [Boolean] Whether or not this modifier applies to the entire row
|
17
34
|
def initialize(row_level: false)
|
18
35
|
@row_level = row_level
|
19
36
|
@freeze = false
|
20
|
-
@align = ::Set.new
|
21
37
|
@borders = ::Set.new
|
22
38
|
@formats = ::Set.new
|
23
39
|
end
|
24
40
|
|
25
|
-
# Set
|
26
|
-
|
27
|
-
@align << direction
|
28
|
-
end
|
29
|
-
|
30
|
-
# Is it aligned to a given direction?
|
31
|
-
def aligned?(direction)
|
32
|
-
@align.include?(direction)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Set the color. hex_value is a String
|
41
|
+
# Set the color
|
42
|
+
# @param hex_value [String]
|
36
43
|
def color=(hex_value)
|
37
44
|
@color = ::CSVPlusPlus::Color.new(hex_value)
|
38
45
|
end
|
39
46
|
|
40
|
-
# Assign a border
|
47
|
+
# Assign a border
|
48
|
+
# @param side ['top', 'left', 'bottom', 'right', 'all']
|
41
49
|
def border=(side)
|
42
50
|
@borders << side
|
43
51
|
end
|
44
52
|
|
45
53
|
# Does this have a border along +side+?
|
54
|
+
# @param side ['top', 'left', 'bottom', 'right', 'all']
|
55
|
+
# @return [Boolean]
|
46
56
|
def border_along?(side)
|
47
|
-
|
57
|
+
@borders.include?('all') || @borders.include?(side)
|
48
58
|
end
|
49
59
|
|
50
60
|
# Does this have a border along all sides?
|
61
|
+
# @return [Boolean]
|
51
62
|
def border_all?
|
52
|
-
@borders.include?('all')
|
63
|
+
@borders.include?('all') \
|
64
|
+
|| (border_along?('top') && border_along?('bottom') && border_along?('left') && border_along?('right'))
|
53
65
|
end
|
54
66
|
|
55
67
|
# Set the bordercolor
|
68
|
+
# @param hex_value [String] formatted as '#000000', '#000' or '000000'
|
56
69
|
def bordercolor=(hex_value)
|
57
70
|
@bordercolor = ::CSVPlusPlus::Color.new(hex_value)
|
58
71
|
end
|
59
72
|
|
60
73
|
# Are there any borders set?
|
74
|
+
# @return [Boolean]
|
61
75
|
def any_border?
|
62
76
|
!@borders.empty?
|
63
77
|
end
|
64
78
|
|
65
79
|
# Set the fontcolor
|
80
|
+
# @param hex_value [String] formatted as '#000000', '#000' or '000000'
|
66
81
|
def fontcolor=(hex_value)
|
67
82
|
@fontcolor = ::CSVPlusPlus::Color.new(hex_value)
|
68
83
|
end
|
69
84
|
|
70
|
-
# Set a format
|
85
|
+
# Set a text format (bolid, italic, underline or strikethrough)
|
86
|
+
# @param value ['bold', 'italic', 'underline', 'strikethrough']
|
71
87
|
def format=(value)
|
72
88
|
@formats << value
|
73
89
|
end
|
74
90
|
|
75
91
|
# Is the given format set?
|
92
|
+
# @param type ['bold', 'italic', 'underline', 'strikethrough']
|
93
|
+
# @return [Boolean]
|
76
94
|
def formatted?(type)
|
77
95
|
@formats.include?(type)
|
78
96
|
end
|
@@ -83,6 +101,7 @@ module CSVPlusPlus
|
|
83
101
|
end
|
84
102
|
|
85
103
|
# Is the row forzen?
|
104
|
+
# @return [Boolean]
|
86
105
|
def frozen?
|
87
106
|
@frozen
|
88
107
|
end
|
@@ -93,29 +112,37 @@ module CSVPlusPlus
|
|
93
112
|
end
|
94
113
|
|
95
114
|
# Is this a row-level modifier?
|
115
|
+
# @return [Boolean]
|
96
116
|
def row_level?
|
97
117
|
@row_level
|
98
118
|
end
|
99
119
|
|
100
120
|
# Is this a cell-level modifier?
|
121
|
+
# @return [Boolean]
|
101
122
|
def cell_level?
|
102
123
|
!@row_level
|
103
124
|
end
|
104
125
|
|
105
126
|
# Style of border
|
127
|
+
# @return [String]
|
106
128
|
def borderstyle
|
107
129
|
@borderstyle || 'solid'
|
108
130
|
end
|
109
131
|
|
110
|
-
#
|
132
|
+
# @return [String]
|
111
133
|
def to_s
|
112
134
|
# TODO... I dunno, not sure how to manage this
|
113
|
-
"Modifier(row_level: #{@row_level}
|
135
|
+
"Modifier(row_level: #{@row_level} halign: #{@halign} valign: #{@valign} format: #{@formats} " \
|
136
|
+
"font_size: #{@font_size})"
|
114
137
|
end
|
115
138
|
|
116
139
|
# Create a new modifier instance, with all values defaulted from +other+
|
140
|
+
# @param other [Modifier]
|
117
141
|
def take_defaults_from!(other)
|
118
|
-
instance_variables.each do |property|
|
142
|
+
other.instance_variables.each do |property|
|
143
|
+
# don't propagate row-specific values
|
144
|
+
next if property == :@row_level
|
145
|
+
|
119
146
|
value = other.instance_variable_get(property)
|
120
147
|
instance_variable_set(property, value.clone)
|
121
148
|
end
|