geo_pattern 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/ruby.yml +30 -0
- data/.gitignore +1 -0
- data/.simplecov +1 -0
- data/Gemfile +17 -19
- data/README.md +35 -12
- data/Rakefile +45 -49
- data/geo_pattern.gemspec +18 -22
- data/lib/geo_pattern/background.rb +9 -7
- data/lib/geo_pattern/background_generators/solid_generator.rb +4 -2
- data/lib/geo_pattern/color.rb +3 -1
- data/lib/geo_pattern/color_generators/base_color_generator.rb +12 -10
- data/lib/geo_pattern/color_generators/simple_generator.rb +2 -0
- data/lib/geo_pattern/color_preset.rb +7 -1
- data/lib/geo_pattern/errors.rb +2 -0
- data/lib/geo_pattern/geo_pattern_task.rb +11 -9
- data/lib/geo_pattern/helpers.rb +7 -5
- data/lib/geo_pattern/pattern.rb +6 -4
- data/lib/geo_pattern/pattern_generator.rb +14 -12
- data/lib/geo_pattern/pattern_helpers.rb +11 -8
- data/lib/geo_pattern/pattern_preset.rb +3 -1
- data/lib/geo_pattern/pattern_sieve.rb +5 -3
- data/lib/geo_pattern/pattern_store.rb +20 -18
- data/lib/geo_pattern/pattern_validator.rb +4 -2
- data/lib/geo_pattern/rake_task.rb +19 -16
- data/lib/geo_pattern/roles/comparable_metadata.rb +2 -0
- data/lib/geo_pattern/roles/named_generator.rb +3 -1
- data/lib/geo_pattern/seed.rb +2 -0
- data/lib/geo_pattern/structure.rb +9 -7
- data/lib/geo_pattern/structure_generators/base_generator.rb +17 -14
- data/lib/geo_pattern/structure_generators/chevrons_generator.rb +19 -17
- data/lib/geo_pattern/structure_generators/concentric_circles_generator.rb +19 -17
- data/lib/geo_pattern/structure_generators/diamonds_generator.rb +23 -17
- data/lib/geo_pattern/structure_generators/hexagons_generator.rb +25 -23
- data/lib/geo_pattern/structure_generators/mosaic_squares_generator.rb +35 -35
- data/lib/geo_pattern/structure_generators/nested_squares_generator.rb +23 -21
- data/lib/geo_pattern/structure_generators/octagons_generator.rb +12 -11
- data/lib/geo_pattern/structure_generators/overlapping_circles_generator.rb +13 -11
- data/lib/geo_pattern/structure_generators/overlapping_rings_generator.rb +15 -13
- data/lib/geo_pattern/structure_generators/plaid_generator.rb +18 -18
- data/lib/geo_pattern/structure_generators/plus_signs_generator.rb +24 -18
- data/lib/geo_pattern/structure_generators/sine_waves_generator.rb +17 -15
- data/lib/geo_pattern/structure_generators/squares_generator.rb +10 -9
- data/lib/geo_pattern/structure_generators/tessellation_generator.rb +36 -34
- data/lib/geo_pattern/structure_generators/triangles_generator.rb +22 -19
- data/lib/geo_pattern/structure_generators/xes_generator.rb +26 -19
- data/lib/geo_pattern/svg_image.rb +10 -8
- data/lib/geo_pattern/version.rb +3 -1
- data/lib/geo_pattern.rb +53 -51
- data/script/console +4 -3
- data/spec/background_generators/solid_generator_spec.rb +16 -14
- data/spec/background_spec.rb +13 -11
- data/spec/color_generators/base_color_generator_spec.rb +10 -8
- data/spec/color_generators/simple_generator_spec.rb +5 -3
- data/spec/color_preset_spec.rb +17 -15
- data/spec/color_spec.rb +8 -6
- data/spec/geo_pattern_spec.rb +59 -58
- data/spec/helpers_spec.rb +30 -28
- data/spec/pattern_preset_spec.rb +15 -13
- data/spec/pattern_sieve_spec.rb +13 -11
- data/spec/pattern_spec.rb +20 -18
- data/spec/pattern_store_spec.rb +21 -19
- data/spec/pattern_validator_spec.rb +11 -9
- data/spec/seed_spec.rb +6 -4
- data/spec/spec_helper.rb +9 -8
- data/spec/structure_generators/chevrons_generator_spec.rb +4 -2
- data/spec/structure_generators/concentric_circles_generator_spec.rb +4 -2
- data/spec/structure_generators/diamonds_generator_spec.rb +4 -2
- data/spec/structure_generators/hexagons_generator_spec.rb +4 -2
- data/spec/structure_generators/mosaic_squares_generator_spec.rb +4 -2
- data/spec/structure_generators/nested_squares_generator_spec.rb +4 -2
- data/spec/structure_generators/octagons_generator_spec.rb +4 -2
- data/spec/structure_generators/overlapping_circles_generator_spec.rb +4 -2
- data/spec/structure_generators/overlapping_rings_generator_spec.rb +4 -2
- data/spec/structure_generators/plaid_generator_spec.rb +4 -2
- data/spec/structure_generators/plus_signs_generator_spec.rb +4 -2
- data/spec/structure_generators/sine_waves_generator_spec.rb +4 -2
- data/spec/structure_generators/squares_generator_spec.rb +4 -2
- data/spec/structure_generators/tessellation_generator_spec.rb +4 -2
- data/spec/structure_generators/triangles_generator_spec.rb +4 -2
- data/spec/structure_generators/xes_generator_spec.rb +4 -2
- data/spec/structure_spec.rb +18 -16
- data/spec/support/aruba.rb +6 -6
- data/spec/support/helpers/fixtures.rb +3 -1
- data/spec/support/kernel.rb +8 -2
- data/spec/support/matchers/image.rb +4 -2
- data/spec/support/matchers/name.rb +3 -1
- data/spec/support/rspec.rb +4 -2
- data/spec/support/shared_examples/generator.rb +12 -10
- data/spec/support/shared_examples/pattern.rb +7 -5
- data/spec/support/shared_examples/pattern_name.rb +4 -2
- data/spec/support/shared_examples/structure.rb +12 -10
- data/spec/support/string.rb +3 -2
- data/spec/svg_spec.rb +5 -3
- metadata +11 -59
- data/.rubocop.yml +0 -71
- data/.travis.yml +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 673c02d78cab6a2a0d4739661a9a4e93845fd6c3dafff82f36f36e15e759e032
|
4
|
+
data.tar.gz: da40879b6a7e41a039e00741d5b48e4be51a584f339bc84572bf5d47cb1b44cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87e2bac49b72b2dbb068ab84abdbdbf6a2240fe13f6898de4be9fc72c40d1239654cee649718d8620598257bdaa1cc24366054ed4f320346ddf68b9b11c8a66b
|
7
|
+
data.tar.gz: f69912aeb10d51c3110edd472b8a02dee9653e2b3cb0b8127d817a45a9d878e7ade1b85922a3aaf0a8ef8568912e57661f84b050220171632665fe784b3420a5
|
@@ -0,0 +1,30 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
15
|
+
ruby: [2.6, 2.7, '3.0', 3.1, 3.2, head]
|
16
|
+
|
17
|
+
runs-on: ubuntu-latest
|
18
|
+
|
19
|
+
steps:
|
20
|
+
- uses: actions/checkout@v2
|
21
|
+
|
22
|
+
- name: Set up Ruby
|
23
|
+
uses: ruby/setup-ruby@v1
|
24
|
+
with:
|
25
|
+
ruby-version: ${{ matrix.ruby }}
|
26
|
+
rubygems: latest
|
27
|
+
bundler-cache: true
|
28
|
+
|
29
|
+
- name: Run tests
|
30
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/.simplecov
CHANGED
data/Gemfile
CHANGED
@@ -1,26 +1,24 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in geopatterns.gemspec
|
4
6
|
gemspec
|
5
7
|
|
6
8
|
group :development, :test do
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem
|
11
|
-
gem
|
12
|
-
gem
|
13
|
-
gem
|
14
|
-
gem
|
15
|
-
gem
|
16
|
-
gem
|
17
|
-
gem
|
9
|
+
gem "activesupport", "~> 6"
|
10
|
+
gem "aruba"
|
11
|
+
gem "fuubar"
|
12
|
+
gem "inch"
|
13
|
+
gem "pry"
|
14
|
+
gem "pry-rescue"
|
15
|
+
gem "pry-stack_explorer"
|
16
|
+
gem "rake"
|
17
|
+
gem "rspec"
|
18
|
+
gem "standard"
|
19
|
+
gem "simplecov"
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
else
|
23
|
-
gem 'debugger'
|
24
|
-
gem 'pry-debugger'
|
25
|
-
end
|
21
|
+
gem "byebug"
|
22
|
+
gem "irb"
|
23
|
+
gem "pry-byebug"
|
26
24
|
end
|
data/README.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
### This project is largely unmaintained now.
|
2
|
+
|
3
|
+
#### I'll happily accept PRs to keep things in working order, but I no longer plan to make updates.
|
4
|
+
|
5
|
+
----
|
6
|
+
|
7
|
+
[![](https://img.shields.io/gem/v/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
|
8
|
+
![Ruby](https://github.com/jasonlong/geo_pattern/workflows/Ruby/badge.svg)
|
9
|
+
[![](https://img.shields.io/gem/dt/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
|
10
|
+
[![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
|
4
11
|
|
5
12
|
# GeoPattern
|
6
13
|
|
@@ -14,7 +21,7 @@ You can use the generated pattern as the `background-image` for a container.
|
|
14
21
|
Using the `base64` representation of the pattern still results in SVG
|
15
22
|
rendering, so it looks great on retina displays.
|
16
23
|
|
17
|
-
See the [GitHub Guides](
|
24
|
+
See the [GitHub Guides](https://guides.github.com/) site and the [Explore section
|
18
25
|
of GitHub](https://github.com/explore) are examples of this library in action.
|
19
26
|
Brandon Mills has put together an awesome [live preview
|
20
27
|
page](http://btmills.github.io/geopattern/geopattern.html) that's built on his
|
@@ -22,6 +29,8 @@ Javascript port.
|
|
22
29
|
|
23
30
|
## Installation
|
24
31
|
|
32
|
+
**Note:** as of version `1.4.0`, Ruby version 2 or greater is required.
|
33
|
+
|
25
34
|
Add this line to your application's Gemfile:
|
26
35
|
|
27
36
|
gem 'geo_pattern'
|
@@ -156,10 +165,6 @@ are deprecated in favor of symbol references (e.g. `:overlapping_circles`).*
|
|
156
165
|
|
157
166
|
![](http://jasonlong.github.io/geo_pattern/examples/tessellation.png)
|
158
167
|
|
159
|
-
### GeoPattern::ChevronPattern
|
160
|
-
|
161
|
-
![](http://jasonlong.github.io/geo_pattern/examples/chevrons.png)
|
162
|
-
|
163
168
|
|
164
169
|
## Inspection of pattern
|
165
170
|
|
@@ -229,7 +234,7 @@ rake test
|
|
229
234
|
|
230
235
|
## Contributing
|
231
236
|
|
232
|
-
1. Fork it (
|
237
|
+
1. Fork it ( https://github.com/jasonlong/geo_pattern/fork )
|
233
238
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
234
239
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
235
240
|
4. Push to the branch (`git push origin my-new-feature`)
|
@@ -244,19 +249,37 @@ examples of the test suite.
|
|
244
249
|
RSPEC_PROFILE=1 bundle exec rspec
|
245
250
|
```
|
246
251
|
|
247
|
-
## Ports
|
252
|
+
## Ports & related projects
|
248
253
|
|
249
254
|
JavaScript port by Brandon Mills:
|
250
|
-
https://github.com/btmills/
|
255
|
+
https://github.com/btmills/geopattern
|
256
|
+
|
257
|
+
TypeScript port by MooYeol Lee:
|
258
|
+
https://github.com/mooyoul/geo-pattern
|
251
259
|
|
252
260
|
Python port by Bryan Veloso:
|
253
261
|
https://github.com/bryanveloso/geopatterns
|
254
262
|
|
263
|
+
Elixir port by Anne Johnson:
|
264
|
+
https://github.com/annejohnson/geo_pattern
|
265
|
+
|
255
266
|
PHP port by Anand Capur:
|
256
267
|
https://github.com/redeyeventures/geopattern-php
|
257
268
|
|
258
269
|
Go port by Pravendra Singh:
|
259
|
-
https://github.com/pravj/
|
270
|
+
https://github.com/pravj/geopattern
|
260
271
|
|
261
272
|
CoffeeScript port by Aleks (muchweb):
|
262
273
|
https://github.com/muchweb/geo-pattern-coffee
|
274
|
+
|
275
|
+
Cocoa port by Matt Faluotico:
|
276
|
+
https://github.com/mattfxyz/GeoPattern-Cocoa
|
277
|
+
|
278
|
+
Middleman extension by @maxmeyer:
|
279
|
+
https://github.com/fedux-org/middleman-geo_pattern
|
280
|
+
|
281
|
+
Dart(Flutter) port by @suyash:
|
282
|
+
https://github.com/suyash/geopattern
|
283
|
+
|
284
|
+
Lua port by Ivan Azoyan:
|
285
|
+
https://github.com/azoyan/geopattern
|
data/Rakefile
CHANGED
@@ -1,86 +1,82 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
$LOAD_PATH.unshift File.expand_path("lib", __dir__)
|
4
|
+
|
5
|
+
desc "Default task running Tests"
|
4
6
|
task default: :test
|
5
7
|
|
6
|
-
desc
|
7
|
-
task test: [
|
8
|
-
task
|
8
|
+
desc "Run test suite"
|
9
|
+
task test: ["test:standard", "test:rspec"]
|
10
|
+
task "test:ci" => ["bootstrap:gem_requirements", :test]
|
9
11
|
namespace :test do
|
10
12
|
task :rspec do
|
11
|
-
sh
|
12
|
-
end
|
13
|
-
|
14
|
-
task :rubocop do
|
15
|
-
sh 'rubocop'
|
13
|
+
sh "rspec"
|
16
14
|
end
|
17
15
|
|
18
|
-
task
|
19
|
-
sh
|
16
|
+
task "inch" do
|
17
|
+
sh "inch"
|
20
18
|
end
|
21
19
|
|
22
|
-
|
23
|
-
sh 'inch'
|
24
|
-
end
|
20
|
+
require "standard/rake"
|
25
21
|
end
|
26
22
|
|
27
23
|
namespace :gem do
|
28
|
-
require
|
24
|
+
require "bundler/gem_tasks"
|
29
25
|
end
|
30
26
|
|
31
|
-
unless ENV.key?(
|
32
|
-
require
|
27
|
+
unless ENV.key?("CI")
|
28
|
+
require "geo_pattern/geo_pattern_task"
|
33
29
|
|
34
30
|
namespace :fixtures do
|
35
|
-
string =
|
31
|
+
string = "Mastering Markdown"
|
36
32
|
|
37
33
|
GeoPattern::GeoPatternTask.new(
|
38
|
-
name:
|
39
|
-
description:
|
34
|
+
name: "generate",
|
35
|
+
description: "Generate patterns to make them available as fixtures",
|
40
36
|
data: {
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
37
|
+
"fixtures/generated_patterns/chevrons.svg" => {input: string, patterns: [:chevrons]},
|
38
|
+
"fixtures/generated_patterns/concentric_circles.svg" => {input: string, patterns: [:concentric_circles]},
|
39
|
+
"fixtures/generated_patterns/diamonds.svg" => {input: string, patterns: [:diamonds]},
|
40
|
+
"fixtures/generated_patterns/hexagons.svg" => {input: string, patterns: [:hexagons]},
|
41
|
+
"fixtures/generated_patterns/mosaic_squares.svg" => {input: string, patterns: [:mosaic_squares]},
|
42
|
+
"fixtures/generated_patterns/nested_squares.svg" => {input: string, patterns: [:nested_squares]},
|
43
|
+
"fixtures/generated_patterns/octagons.svg" => {input: string, patterns: [:octagons]},
|
44
|
+
"fixtures/generated_patterns/overlapping_circles.svg" => {input: string, patterns: [:overlapping_circles]},
|
45
|
+
"fixtures/generated_patterns/overlapping_rings.svg" => {input: string, patterns: [:overlapping_rings]},
|
46
|
+
"fixtures/generated_patterns/plaid.svg" => {input: string, patterns: [:plaid]},
|
47
|
+
"fixtures/generated_patterns/plus_signs.svg" => {input: string, patterns: [:plus_signs]},
|
48
|
+
"fixtures/generated_patterns/sine_waves.svg" => {input: string, patterns: [:sine_waves]},
|
49
|
+
"fixtures/generated_patterns/squares.svg" => {input: string, patterns: [:squares]},
|
50
|
+
"fixtures/generated_patterns/tessellation.svg" => {input: string, patterns: [:tessellation]},
|
51
|
+
"fixtures/generated_patterns/triangles.svg" => {input: string, patterns: [:triangles]},
|
52
|
+
"fixtures/generated_patterns/xes.svg" => {input: string, patterns: [:xes]},
|
53
|
+
"fixtures/generated_patterns/diamonds_with_color.svg" => {input: string, patterns: [:diamonds], color: "#00ff00"},
|
54
|
+
"fixtures/generated_patterns/diamonds_with_base_color.svg" => {input: string, patterns: [:diamonds], base_color: "#00ff00"}
|
59
55
|
}
|
60
56
|
)
|
61
57
|
end
|
62
58
|
end
|
63
59
|
|
64
|
-
desc
|
65
|
-
task bootstrap: %w
|
60
|
+
desc "Bootstrap project"
|
61
|
+
task bootstrap: %w[bootstrap:bundler]
|
66
62
|
|
67
|
-
desc
|
68
|
-
task
|
69
|
-
Rake::Task[
|
63
|
+
desc "Bootstrap project for ci"
|
64
|
+
task "bootstrap:ci" do
|
65
|
+
Rake::Task["bootstrap"].invoke
|
70
66
|
end
|
71
67
|
|
72
68
|
namespace :bootstrap do
|
73
|
-
desc
|
69
|
+
desc "Bootstrap bundler"
|
74
70
|
task :bundler do |t|
|
75
71
|
puts t.comment
|
76
|
-
sh
|
77
|
-
sh
|
72
|
+
sh "gem install bundler"
|
73
|
+
sh "bundle install"
|
78
74
|
end
|
79
75
|
|
80
|
-
desc
|
76
|
+
desc "Require gems"
|
81
77
|
task :gem_requirements do |t|
|
82
78
|
puts t.comment
|
83
|
-
require
|
79
|
+
require "bundler"
|
84
80
|
Bundler.require
|
85
81
|
end
|
86
82
|
end
|
data/geo_pattern.gemspec
CHANGED
@@ -1,29 +1,25 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
5
|
+
require "geo_pattern/version"
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.authors
|
10
|
-
spec.email
|
11
|
-
spec.summary
|
12
|
-
spec.description
|
13
|
-
spec.homepage
|
14
|
-
spec.license
|
15
|
-
|
16
|
-
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = ['lib']
|
8
|
+
spec.name = "geo_pattern"
|
9
|
+
spec.version = GeoPattern::VERSION
|
10
|
+
spec.authors = ["Jason Long"]
|
11
|
+
spec.email = ["jason@jasonlong.me"]
|
12
|
+
spec.summary = "Generate SVG beautiful patterns"
|
13
|
+
spec.description = "Generate SVG beautiful patterns"
|
14
|
+
spec.homepage = "https://github.com/jasonlong/geo_pattern"
|
15
|
+
spec.license = "MIT"
|
20
16
|
|
21
|
-
spec.
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
22
20
|
|
23
|
-
spec.
|
24
|
-
spec.add_development_dependency 'bundler', '~> 1.5'
|
21
|
+
spec.required_ruby_version = ">= 2.6"
|
25
22
|
|
26
|
-
spec.
|
27
|
-
|
28
|
-
EOS
|
23
|
+
spec.add_dependency "color", "~> 1.5"
|
24
|
+
spec.add_development_dependency "bundler", "~> 2.2"
|
29
25
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GeoPattern
|
2
4
|
class Background
|
3
5
|
include Roles::ComparableMetadata
|
@@ -9,15 +11,15 @@ module GeoPattern
|
|
9
11
|
def_delegators :@preset, :base_color
|
10
12
|
|
11
13
|
def initialize(options)
|
12
|
-
@image
|
13
|
-
@preset
|
14
|
-
@color
|
14
|
+
@image = options[:image]
|
15
|
+
@preset = options[:preset]
|
16
|
+
@color = options[:color]
|
15
17
|
@generator = options[:generator]
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
raise ArgumentError, "Argument color is missing" if @color.nil?
|
20
|
+
raise ArgumentError, "Argument image is missing" if @image.nil?
|
21
|
+
raise ArgumentError, "Argument preset is missing" if @preset.nil?
|
22
|
+
raise ArgumentError, "Argument generator is missing" if @generator.nil?
|
21
23
|
end
|
22
24
|
|
23
25
|
def_comparators :base_color, :color
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GeoPattern
|
2
4
|
# Generating backgrounds
|
3
5
|
module BackgroundGenerators
|
@@ -19,7 +21,7 @@ module GeoPattern
|
|
19
21
|
# @param [ColorPreset] preset
|
20
22
|
# A preset of values which are used during generating the background
|
21
23
|
def initialize(seed, preset)
|
22
|
-
@color
|
24
|
+
@color = color_for(seed, preset)
|
23
25
|
@preset = preset
|
24
26
|
end
|
25
27
|
|
@@ -37,7 +39,7 @@ module GeoPattern
|
|
37
39
|
|
38
40
|
def generate_background
|
39
41
|
svg = SvgImage.new
|
40
|
-
svg.rect(0, 0,
|
42
|
+
svg.rect(0, 0, "100%", "100%", "fill" => color.to_svg)
|
41
43
|
|
42
44
|
svg
|
43
45
|
end
|
data/lib/geo_pattern/color.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GeoPattern
|
2
4
|
class Color
|
3
5
|
private
|
@@ -15,7 +17,7 @@ module GeoPattern
|
|
15
17
|
g = (color.g * 255).round
|
16
18
|
b = (color.b * 255).round
|
17
19
|
|
18
|
-
format(
|
20
|
+
format("rgb(%<r>d, %<g>d, %<b>d)", r: r, g: g, b: b)
|
19
21
|
end
|
20
22
|
|
21
23
|
def to_html
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GeoPattern
|
2
4
|
# Color generators
|
3
5
|
module ColorGenerators
|
@@ -14,8 +16,8 @@ module GeoPattern
|
|
14
16
|
# @param [String] color
|
15
17
|
# HTML color string, #0a0a0a
|
16
18
|
def initialize(color, seed, creator = Color)
|
17
|
-
@color
|
18
|
-
@seed
|
19
|
+
@color = color
|
20
|
+
@seed = seed
|
19
21
|
@creator = creator
|
20
22
|
end
|
21
23
|
|
@@ -27,23 +29,23 @@ module GeoPattern
|
|
27
29
|
private
|
28
30
|
|
29
31
|
def transform(color, seed)
|
30
|
-
hue_offset
|
31
|
-
sat_offset
|
32
|
-
new_color
|
32
|
+
hue_offset = map(seed.to_i(14, 3), 0, 4095, 0, 359)
|
33
|
+
sat_offset = seed.to_i(17, 1)
|
34
|
+
new_color = ::Color::RGB.from_html(color).to_hsl
|
33
35
|
new_color.hue = new_color.hue - hue_offset
|
34
36
|
|
35
|
-
if
|
36
|
-
new_color.saturation
|
37
|
+
new_color.saturation = if sat_offset % 2 == 0
|
38
|
+
new_color.saturation + sat_offset
|
37
39
|
else
|
38
|
-
new_color.saturation
|
40
|
+
new_color.saturation - sat_offset
|
39
41
|
end
|
40
|
-
|
41
42
|
new_color.html
|
42
43
|
end
|
43
44
|
|
44
45
|
# Ruby implementation of Processing's map function
|
45
46
|
# http://processing.org/reference/map_.html
|
46
|
-
|
47
|
+
# v for value, d for desired
|
48
|
+
def map(value, v_min, v_max, d_min, d_max)
|
47
49
|
v_value = value.to_f # so it returns float
|
48
50
|
|
49
51
|
v_range = v_max - v_min
|
@@ -1,9 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Lint/DuplicateMethods
|
4
|
+
|
1
5
|
module GeoPattern
|
2
6
|
class ColorPreset
|
3
7
|
attr_accessor :color, :base_color, :mode
|
4
8
|
|
5
9
|
def initialize(color: nil, base_color: nil)
|
6
|
-
@color
|
10
|
+
@color = color
|
7
11
|
@base_color = base_color
|
8
12
|
end
|
9
13
|
|
@@ -24,3 +28,5 @@ module GeoPattern
|
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
31
|
+
|
32
|
+
# rubocop:enable Lint/DuplicateMethods
|
data/lib/geo_pattern/errors.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "geo_pattern"
|
4
|
+
require "geo_pattern/rake_task"
|
3
5
|
|
4
6
|
module GeoPattern
|
5
7
|
# GeoPatternTask
|
@@ -27,9 +29,9 @@ module GeoPattern
|
|
27
29
|
def initialize(opts = {})
|
28
30
|
super
|
29
31
|
|
30
|
-
|
32
|
+
raise ArgumentError, :data if @options[:data].nil?
|
31
33
|
|
32
|
-
@data
|
34
|
+
@data = @options[:data]
|
33
35
|
@allowed_patterns = @options[:allowed_patterns]
|
34
36
|
end
|
35
37
|
|
@@ -37,15 +39,15 @@ module GeoPattern
|
|
37
39
|
def run_task(_verbose)
|
38
40
|
data.each do |path, string|
|
39
41
|
opts = {}
|
40
|
-
path
|
42
|
+
path = File.expand_path(path)
|
41
43
|
|
42
44
|
if string.is_a?(Hash)
|
43
|
-
input
|
44
|
-
opts[:patterns]
|
45
|
-
opts[:color]
|
45
|
+
input = string[:input]
|
46
|
+
opts[:patterns] = string[:patterns] if string.key? :patterns
|
47
|
+
opts[:color] = string[:color] if string.key? :color
|
46
48
|
opts[:base_color] = string[:base_color] if string.key? :base_color
|
47
49
|
else
|
48
|
-
|
50
|
+
raise "Invalid data structure for Rake Task"
|
49
51
|
end
|
50
52
|
|
51
53
|
pattern = GeoPattern.generate(input, opts)
|
data/lib/geo_pattern/helpers.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GeoPattern
|
2
4
|
module Helpers
|
3
5
|
def require_files_matching_pattern(pattern)
|
4
|
-
Dir.glob(pattern).each { |f| require_relative f }
|
6
|
+
Dir.glob(pattern).sort.each { |f| require_relative f }
|
5
7
|
end
|
6
8
|
|
7
9
|
# Makes an underscored, lowercase form from the expression in the string.
|
@@ -10,9 +12,9 @@ module GeoPattern
|
|
10
12
|
# It's MIT-Licensed
|
11
13
|
#
|
12
14
|
def underscore(camel_cased_word)
|
13
|
-
return camel_cased_word unless
|
15
|
+
return camel_cased_word unless /[A-Z-]/.match?(camel_cased_word)
|
14
16
|
|
15
|
-
word = camel_cased_word.to_s
|
17
|
+
word = camel_cased_word.to_s.dup
|
16
18
|
|
17
19
|
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
|
18
20
|
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
@@ -38,8 +40,8 @@ module GeoPattern
|
|
38
40
|
def demodulize(path)
|
39
41
|
path = path.to_s
|
40
42
|
|
41
|
-
if i = path.rindex(
|
42
|
-
path[(i + 2)
|
43
|
+
if (i = path.rindex("::"))
|
44
|
+
path[(i + 2)..]
|
43
45
|
else
|
44
46
|
path
|
45
47
|
end
|
data/lib/geo_pattern/pattern.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GeoPattern
|
2
4
|
class Pattern
|
3
5
|
private
|
@@ -48,7 +50,7 @@ module GeoPattern
|
|
48
50
|
# @see #to_data_uri
|
49
51
|
# @deprecated
|
50
52
|
def uri_image
|
51
|
-
|
53
|
+
warn 'Using "#uri_image" is deprecated as of 1.3.1. Please use "#to_data_uri" instead.'
|
52
54
|
|
53
55
|
to_data_uri
|
54
56
|
end
|
@@ -56,7 +58,7 @@ module GeoPattern
|
|
56
58
|
# @see #to_svg
|
57
59
|
# @deprecated
|
58
60
|
def svg_string
|
59
|
-
|
61
|
+
warn 'Using "#svg_string" is deprecated as of 1.3.1. Please use "#to_svg" instead.'
|
60
62
|
|
61
63
|
to_svg
|
62
64
|
end
|
@@ -64,7 +66,7 @@ module GeoPattern
|
|
64
66
|
# @see #to_base64
|
65
67
|
# @deprecated
|
66
68
|
def base64_string
|
67
|
-
|
69
|
+
warn 'Using "#base64_string" is deprecated as of 1.3.1. Please use "#to_base64" instead.'
|
68
70
|
|
69
71
|
to_base64
|
70
72
|
end
|
@@ -73,7 +75,7 @@ module GeoPattern
|
|
73
75
|
|
74
76
|
def image
|
75
77
|
svg_image.height = height
|
76
|
-
svg_image.width
|
78
|
+
svg_image.width = width
|
77
79
|
|
78
80
|
svg_image << background.image if background
|
79
81
|
svg_image << structure.image if structure
|