icodi 0.0.1 → 0.1.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -3
  3. data/lib/icodi.rb +18 -22
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b1bdd7935d65c413f8cf5045617e65fdc577ec29791d6b6d057f5136b09ae21
4
- data.tar.gz: b2fe8269f46af45a14fe623cec635db2411100c14d27f971cb72da55d37ec356
3
+ metadata.gz: 0a3f414c62dea517e5a15996bffc590270bc185afc1bcf95258ba8a081d16891
4
+ data.tar.gz: 5407c73c9d3213d87a7b1f359efb64e0bfa57c8b1e72feb2ef859480c1499d6c
5
5
  SHA512:
6
- metadata.gz: 1c10feaef8ce4d94eb903c7470fb305f6438f81ffca59f4c7fd690ee04c86bcf38af06360eebbde832282a5789cd561742309546e256c5aa8a8a38b43a54104e
7
- data.tar.gz: 80a364f7250b254af25de1dfcc2bcf3a820fc5cb27d6c0608457d27bb45092cec01bc3721f9c37f9a7211d53352277411655fa7c1c49ca3fbb3f9e9804ebaf8a
6
+ metadata.gz: 27d92abc7cceb5ca423e063877a8e154ca1cf297ea08310b42574c6e829b8b2d191f59fb11910f475647c8a8fd3428dfbbeb04530937f3475cf2e77095363a08
7
+ data.tar.gz: 2d86e71a27ae1cbee43b2834ae328d9cc7d917e978c3f8bfd874fa1718674cd4ace2783548ec7372a26e5c07fb21d65526481ce9f34130493724db7a56720f67
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ ![logo](assets/logo.svg)
2
+
1
3
  Icodi - Deterministic Random SVG Icon Generator
2
4
  ==================================================
3
5
 
@@ -6,8 +8,8 @@ Icodi - Deterministic Random SVG Icon Generator
6
8
 
7
9
  ---
8
10
 
9
- Generate repeatable random SVG icons from any string, similar to GitHub's
10
- identicons.
11
+ Generate repeatable random SVG icons from any string, similar to
12
+ [GitHub identicons].
11
13
 
12
14
  ---
13
15
 
@@ -18,7 +20,91 @@ Installation
18
20
 
19
21
 
20
22
 
23
+ Examples
24
+ --------------------------------------------------
25
+
26
+ ### Grid: 5x5, Mirror: X (default options)
27
+
28
+ ![sample](assets/sample-strip-default.svg)
29
+
30
+ ### Grid: 6x6, Mirror: Y
31
+
32
+ ![sample](assets/sample-strip-6y.svg)
33
+
34
+ ### Grid: 8x8, Mirror: X/Y, Density: 0.3
35
+
36
+ ![sample](assets/sample-strip-8xylow.svg)
37
+
38
+ ### Grid: 8x8, Mirror: X/Y, Density: 0.8
39
+
40
+ ![sample](assets/sample-strip-8xyhigh.svg)
41
+
42
+ ### Increasing Stroke: 0.1 - 5.0
43
+
44
+ ![sample](assets/sample-strip-stroke.svg)
45
+
46
+ ### Increasing Density: 0.3 - 0.8
47
+
48
+ ![sample](assets/sample-strip-density.svg)
49
+
50
+ ### Mirror Styles: X, Y, Both, None
51
+
52
+ ![sample](assets/sample-strip-mirrors.svg)
53
+
54
+
21
55
  Usage
22
56
  --------------------------------------------------
23
57
 
24
- TODO
58
+ This is the general usage pattern:
59
+
60
+ ```ruby
61
+ require 'icodi'
62
+
63
+ # initialize with optional text and options
64
+ icon = Icodi.new text, options
65
+
66
+ # get the SVG string
67
+ icon.render
68
+
69
+ # or save to SVG file
70
+ icon.save 'logo'
71
+ ```
72
+
73
+ Generate a random icon with the default options, and save it to `icon.svg`:
74
+
75
+ ```ruby
76
+ icon = Icodi.new
77
+ icon.save 'icon'
78
+ ```
79
+
80
+ Generate persistent random icon (same input generates the same output):
81
+
82
+ ```ruby
83
+ icon = Icodi.new "any string"
84
+ icon.save 'icon'
85
+ ```
86
+
87
+ Options
88
+ --------------------------------------------------
89
+
90
+ Options can be provided as the first or second argument:
91
+
92
+ ```ruby
93
+ Icodi.new "any string", pixels: 8, density: 0.3
94
+ Icodi.new pixels: 8, density: 0.3, stroke: 2
95
+ ```
96
+
97
+ Parameter | Default | Type | Description
98
+ ------------|------------|---------|---------------------
99
+ `pixels` | `5` | Integer | Grid size.
100
+ `mirror` | `:x` | Symbol | Mirroring mode: `:x`, `:y`, `:both` or `:none`.
101
+ `color` | Deterministic Random | String | A color string for the pixels.
102
+ `density` | `0.5` | Float | A value between 0 and 1 representing the chance for a pixel to be drawn. Lower values mean less pixels.
103
+ `stroke` | `0.1` | Float | Width of the border around each pixel. Note that each pixel is a 10x10 box, so a stroke of 1 means it will take 10% of the box. Higher values generate more overlap between the pixels.
104
+ `background`| `#fff` | String | A named SVG color string (`blue`, `yellow` etc.) or RGB color (for example `#dddddd`).
105
+ `template` | `:default` | Symbol/String | SVG template to use. Can be `:default`, `:html` or a path to a file. Read more on [Victor SVG Templates].
106
+
107
+ ---
108
+
109
+ [GitHub identicons]: https://blog.github.com/2013-08-14-identicons/
110
+ [Victor SVG Templates]: https://github.com/DannyBen/victor#svg-templates
data/lib/icodi.rb CHANGED
@@ -8,6 +8,8 @@ class Icodi < Victor::SVGBase
8
8
  text, options = nil, text if text.is_a? Hash
9
9
  @text, @options = text, options
10
10
  super template: template, viewBox: "0 0 #{size} #{size}"
11
+
12
+ first_random_hit
11
13
  generate
12
14
  end
13
15
 
@@ -69,42 +71,36 @@ private
69
71
  mirror == :both
70
72
  end
71
73
 
74
+ def first_random_hit
75
+ options[:color] ? random.rand : color
76
+ end
77
+
72
78
  def generate
73
- color # always randomize color first
74
79
  element :rect, x: 0, y: 0, width: size, height: size, fill: background
75
80
  half = (pixels / 2.0).round
76
81
  x = mirror_x ? half : pixels
77
82
  y = mirror_y ? half : pixels
78
83
 
79
- draw matrix x, y
84
+ draw x, y
80
85
  end
81
86
 
82
- def draw(grid)
83
- grid.each_with_index do |row, y|
84
- row.each_with_index do |enabled, x|
85
- if enabled
86
- add_pixel x, y
87
- add_pixel pixels-1-x, y if mirror_x and x != pixels/2
88
- add_pixel x, pixels-1-y if mirror_y and y != pixels/2
89
- add_pixel pixels-1-x, pixels-1-y if mirror_both and x != pixels/2 and y != pixels/2
90
- end
87
+ def draw(x_times, y_times)
88
+ y_times.times do |y|
89
+ x_times.times do |x|
90
+ add_pixels x, y if random.rand < density
91
91
  end
92
92
  end
93
93
  end
94
94
 
95
- def matrix(xtimes, ytimes)
96
- matrix = []
97
- ytimes.times do |y|
98
- matrix[y] = []
99
- xtimes.times do |x|
100
- matrix[y][x] = random.rand < density
101
- end
102
- end
103
-
104
- matrix
95
+ def add_pixels(x, y)
96
+ draw_pixel x, y
97
+ draw_pixel pixels-1-x, y if mirror_x and x != pixels/2
98
+ draw_pixel x, pixels-1-y if mirror_y and y != pixels/2
99
+ draw_pixel pixels-1-x, pixels-1-y if mirror_both and x != pixels/2 and y != pixels/2
105
100
  end
106
101
 
107
- def add_pixel(x, y)
102
+ def draw_pixel(x, y)
108
103
  element :rect, x: x*10, y: y*10, width: 10, height: 10, fill: color, style: style
109
104
  end
105
+
110
106
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: icodi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-15 00:00:00.000000000 Z
11
+ date: 2018-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: victor