heatmap-builder 0.2.0 → 0.4.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +2 -5
  3. data/CHANGELOG.md +70 -3
  4. data/Gemfile.lock +27 -24
  5. data/README.md +105 -135
  6. data/bin/generate_examples +42 -99
  7. data/examples/calendar_blue_ocean.svg +1 -1
  8. data/examples/calendar_cell_borders.svg +1 -0
  9. data/examples/calendar_default.svg +1 -1
  10. data/examples/calendar_github_style.svg +1 -1
  11. data/examples/calendar_month_spacing_rounded.svg +1 -0
  12. data/examples/calendar_no_borders.svg +1 -0
  13. data/examples/calendar_purple_vibes.svg +1 -1
  14. data/examples/calendar_red_to_green.svg +1 -1
  15. data/examples/calendar_rounded_corners.svg +1 -1
  16. data/examples/calendar_rounded_corners_max_radius.svg +1 -1
  17. data/examples/calendar_sunday_start.svg +1 -1
  18. data/examples/calendar_warm_sunset.svg +1 -1
  19. data/examples/calendar_with_outside_cells.svg +1 -1
  20. data/heatmap-builder.gemspec +4 -4
  21. data/lib/heatmap-builder.rb +5 -31
  22. data/lib/heatmap_builder/calendar.rb +426 -0
  23. data/lib/heatmap_builder/color_helpers.rb +121 -141
  24. data/lib/heatmap_builder/svg_helpers.rb +11 -4
  25. data/lib/heatmap_builder/value_conversion.rb +9 -5
  26. data/lib/heatmap_builder/version.rb +1 -1
  27. metadata +13 -22
  28. data/examples/large_cells.svg +0 -1
  29. data/examples/linear_blue_ocean.svg +0 -1
  30. data/examples/linear_github_green.svg +0 -1
  31. data/examples/linear_neon_gradient.svg +0 -1
  32. data/examples/linear_purple_vibes.svg +0 -1
  33. data/examples/linear_red_to_green.svg +0 -1
  34. data/examples/linear_rounded_corners.svg +0 -1
  35. data/examples/linear_rounded_corners_max_radius.svg +0 -1
  36. data/examples/linear_warm_sunset.svg +0 -1
  37. data/examples/weekly_progress.svg +0 -1
  38. data/lib/heatmap_builder/builder.rb +0 -100
  39. data/lib/heatmap_builder/calendar_heatmap_builder.rb +0 -310
  40. data/lib/heatmap_builder/linear_heatmap_builder.rb +0 -74
@@ -30,79 +30,11 @@ end
30
30
  def generate_sample_svgs(force: false)
31
31
  Dir.mkdir(EXAMPLES_DIR) unless Dir.exist?(EXAMPLES_DIR)
32
32
 
33
- weekly_scores = [0, 1, 3, 2, 4, 1, 0]
34
- generate_example("weekly_progress.svg", "basic weekly progress", force: force) do
35
- HeatmapBuilder.build_linear(scores: weekly_scores, cell_size: 18)
36
- end
37
-
38
- large_cell_scores = [1, 2, 3, 4, 5, 6, 7]
39
- generate_example("large_cells.svg", "large cells example", force: force) do
40
- HeatmapBuilder.build_linear(
41
- scores: large_cell_scores,
42
- cell_size: 35,
43
- cell_spacing: 1,
44
- font_size: 20
45
- )
46
- end
47
-
48
- puts "Generating linear heatmaps with different palettes..."
49
- puts
50
-
51
- linear_scores = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
52
-
53
- generate_example("linear_github_green.svg", "linear with GitHub Green palette", force: force) do
54
- HeatmapBuilder.build_linear(
55
- scores: linear_scores,
56
- colors: HeatmapBuilder::GITHUB_GREEN,
57
- cell_size: 18
58
- )
59
- end
60
-
61
- generate_example("linear_blue_ocean.svg", "linear with Blue Ocean palette", force: force) do
62
- HeatmapBuilder.build_linear(
63
- scores: linear_scores,
64
- colors: HeatmapBuilder::BLUE_OCEAN,
65
- cell_size: 18
66
- )
67
- end
68
-
69
- generate_example("linear_warm_sunset.svg", "linear with Warm Sunset palette", force: force) do
70
- HeatmapBuilder.build_linear(
71
- scores: linear_scores,
72
- colors: HeatmapBuilder::WARM_SUNSET,
73
- cell_size: 18
74
- )
75
- end
76
-
77
- generate_example("linear_purple_vibes.svg", "linear with Purple Vibes palette", force: force) do
78
- HeatmapBuilder.build_linear(
79
- scores: linear_scores,
80
- colors: HeatmapBuilder::PURPLE_VIBES,
81
- cell_size: 18
82
- )
83
- end
84
-
85
- generate_example("linear_red_to_green.svg", "linear with Red to Green palette", force: force) do
86
- HeatmapBuilder.build_linear(
87
- scores: linear_scores,
88
- colors: HeatmapBuilder::RED_TO_GREEN,
89
- cell_size: 18
90
- )
91
- end
92
-
93
- generate_example("linear_neon_gradient.svg", "linear with neon gradient (OKLCH interpolation)", force: force) do
94
- HeatmapBuilder.build_linear(
95
- scores: linear_scores,
96
- colors: {from: "#00FFFF", to: "#FF1493", steps: 5},
97
- cell_size: 18
98
- )
99
- end
100
-
101
33
  calendar_data = sample_calendar_data
102
34
 
103
35
  generate_example("calendar_github_style.svg", "GitHub-style calendar", force: force) do
104
36
  HeatmapBuilder.build_calendar(
105
- scores: calendar_data,
37
+ values: calendar_data,
106
38
  cell_size: 14,
107
39
  month_spacing: 0
108
40
  )
@@ -110,7 +42,7 @@ def generate_sample_svgs(force: false)
110
42
 
111
43
  generate_example("calendar_default.svg", "default colors calendar", force: force) do
112
44
  HeatmapBuilder.build_calendar(
113
- scores: calendar_data,
45
+ values: calendar_data,
114
46
  cell_size: 14,
115
47
  month_spacing: 0
116
48
  )
@@ -118,8 +50,8 @@ def generate_sample_svgs(force: false)
118
50
 
119
51
  generate_example("calendar_blue_ocean.svg", "calendar with Blue Ocean palette", force: force) do
120
52
  HeatmapBuilder.build_calendar(
121
- scores: calendar_data,
122
- colors: HeatmapBuilder::BLUE_OCEAN,
53
+ values: calendar_data,
54
+ colors: HeatmapBuilder::Calendar::BLUE_OCEAN,
123
55
  cell_size: 14,
124
56
  month_spacing: 0
125
57
  )
@@ -127,8 +59,8 @@ def generate_sample_svgs(force: false)
127
59
 
128
60
  generate_example("calendar_warm_sunset.svg", "calendar with Warm Sunset palette", force: force) do
129
61
  HeatmapBuilder.build_calendar(
130
- scores: calendar_data,
131
- colors: HeatmapBuilder::WARM_SUNSET,
62
+ values: calendar_data,
63
+ colors: HeatmapBuilder::Calendar::WARM_SUNSET,
132
64
  cell_size: 14,
133
65
  month_spacing: 0
134
66
  )
@@ -136,8 +68,8 @@ def generate_sample_svgs(force: false)
136
68
 
137
69
  generate_example("calendar_purple_vibes.svg", "calendar with Purple Vibes palette", force: force) do
138
70
  HeatmapBuilder.build_calendar(
139
- scores: calendar_data,
140
- colors: HeatmapBuilder::PURPLE_VIBES,
71
+ values: calendar_data,
72
+ colors: HeatmapBuilder::Calendar::PURPLE_VIBES,
141
73
  cell_size: 14,
142
74
  month_spacing: 0
143
75
  )
@@ -145,8 +77,8 @@ def generate_sample_svgs(force: false)
145
77
 
146
78
  generate_example("calendar_red_to_green.svg", "calendar with Red to Green palette", force: force) do
147
79
  HeatmapBuilder.build_calendar(
148
- scores: calendar_data,
149
- colors: HeatmapBuilder::RED_TO_GREEN,
80
+ values: calendar_data,
81
+ colors: HeatmapBuilder::Calendar::RED_TO_GREEN,
150
82
  cell_size: 14,
151
83
  month_spacing: 0
152
84
  )
@@ -154,7 +86,7 @@ def generate_sample_svgs(force: false)
154
86
 
155
87
  generate_example("calendar_sunday_start.svg", "calendar with Sunday start", force: force) do
156
88
  HeatmapBuilder.build_calendar(
157
- scores: calendar_data,
89
+ values: calendar_data,
158
90
  cell_size: 14,
159
91
  start_of_week: :sunday,
160
92
  month_spacing: 0
@@ -163,49 +95,60 @@ def generate_sample_svgs(force: false)
163
95
 
164
96
  generate_example("calendar_with_outside_cells.svg", "calendar with outside cells", force: force) do
165
97
  HeatmapBuilder.build_calendar(
166
- scores: calendar_data,
98
+ values: calendar_data,
167
99
  cell_size: 14,
168
100
  show_outside_cells: true,
169
101
  month_spacing: 0
170
102
  )
171
103
  end
172
104
 
173
- generate_example("linear_rounded_corners.svg", "linear with rounded corners", force: force) do
174
- HeatmapBuilder.build_linear(
175
- scores: linear_scores,
176
- colors: HeatmapBuilder::GITHUB_GREEN,
177
- cell_size: 18,
178
- corner_radius: 2
105
+ generate_example("calendar_rounded_corners.svg", "calendar with rounded corners", force: force) do
106
+ HeatmapBuilder.build_calendar(
107
+ values: calendar_data,
108
+ cell_size: 14,
109
+ corner_radius: 2,
110
+ month_spacing: 0
179
111
  )
180
112
  end
181
113
 
182
- generate_example("linear_rounded_corners_max_radius.svg", "linear with rounded corners (max radius)", force: force) do
183
- HeatmapBuilder.build_linear(
184
- scores: linear_scores,
185
- colors: HeatmapBuilder::GITHUB_GREEN,
186
- cell_size: 18,
187
- corner_radius: 9
114
+ generate_example("calendar_rounded_corners_max_radius.svg", "calendar with rounded corners (max radius)", force: force) do
115
+ HeatmapBuilder.build_calendar(
116
+ values: calendar_data,
117
+ cell_size: 14,
118
+ corner_radius: 7,
119
+ month_spacing: 0
188
120
  )
189
121
  end
190
122
 
191
- generate_example("calendar_rounded_corners.svg", "calendar with rounded corners", force: force) do
123
+ generate_example("calendar_cell_borders.svg", "calendar with cell borders", force: force) do
192
124
  HeatmapBuilder.build_calendar(
193
- scores: calendar_data,
125
+ values: calendar_data,
194
126
  cell_size: 14,
195
- corner_radius: 2,
127
+ border_width: 1,
128
+ border_lightness_factor: 0.7,
196
129
  month_spacing: 0
197
130
  )
198
131
  end
199
132
 
200
- generate_example("calendar_rounded_corners_max_radius.svg", "calendar with rounded corners (max radius)", force: force) do
133
+ generate_example("calendar_no_borders.svg", "calendar with no cell borders", force: force) do
201
134
  HeatmapBuilder.build_calendar(
202
- scores: calendar_data,
135
+ values: calendar_data,
203
136
  cell_size: 14,
204
- corner_radius: 7,
137
+ border_width: 1,
138
+ border_lightness_factor: 1,
205
139
  month_spacing: 0
206
140
  )
207
141
  end
208
142
 
143
+ generate_example("calendar_month_spacing_rounded.svg", "calendar with month spacing and rounded corners", force: force) do
144
+ HeatmapBuilder.build_calendar(
145
+ values: calendar_data,
146
+ cell_size: 14,
147
+ month_spacing: 10,
148
+ corner_radius: 3
149
+ )
150
+ end
151
+
209
152
  puts "Done"
210
153
  end
211
154
 
@@ -222,7 +165,7 @@ def sample_calendar_data
222
165
  base_score = (seasonal_factor * 2.7 + 3.6).round
223
166
 
224
167
  score = rand(0..base_score)
225
- score = score / 2 if [0, 6].include?(date.wday) # Weekend reduction
168
+ score /= 2 if [0, 6].include?(date.wday) # Weekend reduction
226
169
 
227
170
  data[date.to_s] = score
228
171
  end