icodi 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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