geo_pattern 1.4.0 → 1.5.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.
- 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
|
+
[](http://rubygems.org/gems/geo_pattern)
|
8
|
+

|
9
|
+
[](http://rubygems.org/gems/geo_pattern)
|
10
|
+
[](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
|

|
158
167
|
|
159
|
-
### GeoPattern::ChevronPattern
|
160
|
-
|
161
|
-

|
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
|