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.
Files changed (97) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +30 -0
  3. data/.gitignore +1 -0
  4. data/.simplecov +1 -0
  5. data/Gemfile +17 -19
  6. data/README.md +35 -12
  7. data/Rakefile +45 -49
  8. data/geo_pattern.gemspec +18 -22
  9. data/lib/geo_pattern/background.rb +9 -7
  10. data/lib/geo_pattern/background_generators/solid_generator.rb +4 -2
  11. data/lib/geo_pattern/color.rb +3 -1
  12. data/lib/geo_pattern/color_generators/base_color_generator.rb +12 -10
  13. data/lib/geo_pattern/color_generators/simple_generator.rb +2 -0
  14. data/lib/geo_pattern/color_preset.rb +7 -1
  15. data/lib/geo_pattern/errors.rb +2 -0
  16. data/lib/geo_pattern/geo_pattern_task.rb +11 -9
  17. data/lib/geo_pattern/helpers.rb +7 -5
  18. data/lib/geo_pattern/pattern.rb +6 -4
  19. data/lib/geo_pattern/pattern_generator.rb +14 -12
  20. data/lib/geo_pattern/pattern_helpers.rb +11 -8
  21. data/lib/geo_pattern/pattern_preset.rb +3 -1
  22. data/lib/geo_pattern/pattern_sieve.rb +5 -3
  23. data/lib/geo_pattern/pattern_store.rb +20 -18
  24. data/lib/geo_pattern/pattern_validator.rb +4 -2
  25. data/lib/geo_pattern/rake_task.rb +19 -16
  26. data/lib/geo_pattern/roles/comparable_metadata.rb +2 -0
  27. data/lib/geo_pattern/roles/named_generator.rb +3 -1
  28. data/lib/geo_pattern/seed.rb +2 -0
  29. data/lib/geo_pattern/structure.rb +9 -7
  30. data/lib/geo_pattern/structure_generators/base_generator.rb +17 -14
  31. data/lib/geo_pattern/structure_generators/chevrons_generator.rb +19 -17
  32. data/lib/geo_pattern/structure_generators/concentric_circles_generator.rb +19 -17
  33. data/lib/geo_pattern/structure_generators/diamonds_generator.rb +23 -17
  34. data/lib/geo_pattern/structure_generators/hexagons_generator.rb +25 -23
  35. data/lib/geo_pattern/structure_generators/mosaic_squares_generator.rb +35 -35
  36. data/lib/geo_pattern/structure_generators/nested_squares_generator.rb +23 -21
  37. data/lib/geo_pattern/structure_generators/octagons_generator.rb +12 -11
  38. data/lib/geo_pattern/structure_generators/overlapping_circles_generator.rb +13 -11
  39. data/lib/geo_pattern/structure_generators/overlapping_rings_generator.rb +15 -13
  40. data/lib/geo_pattern/structure_generators/plaid_generator.rb +18 -18
  41. data/lib/geo_pattern/structure_generators/plus_signs_generator.rb +24 -18
  42. data/lib/geo_pattern/structure_generators/sine_waves_generator.rb +17 -15
  43. data/lib/geo_pattern/structure_generators/squares_generator.rb +10 -9
  44. data/lib/geo_pattern/structure_generators/tessellation_generator.rb +36 -34
  45. data/lib/geo_pattern/structure_generators/triangles_generator.rb +22 -19
  46. data/lib/geo_pattern/structure_generators/xes_generator.rb +26 -19
  47. data/lib/geo_pattern/svg_image.rb +10 -8
  48. data/lib/geo_pattern/version.rb +3 -1
  49. data/lib/geo_pattern.rb +53 -51
  50. data/script/console +4 -3
  51. data/spec/background_generators/solid_generator_spec.rb +16 -14
  52. data/spec/background_spec.rb +13 -11
  53. data/spec/color_generators/base_color_generator_spec.rb +10 -8
  54. data/spec/color_generators/simple_generator_spec.rb +5 -3
  55. data/spec/color_preset_spec.rb +17 -15
  56. data/spec/color_spec.rb +8 -6
  57. data/spec/geo_pattern_spec.rb +59 -58
  58. data/spec/helpers_spec.rb +30 -28
  59. data/spec/pattern_preset_spec.rb +15 -13
  60. data/spec/pattern_sieve_spec.rb +13 -11
  61. data/spec/pattern_spec.rb +20 -18
  62. data/spec/pattern_store_spec.rb +21 -19
  63. data/spec/pattern_validator_spec.rb +11 -9
  64. data/spec/seed_spec.rb +6 -4
  65. data/spec/spec_helper.rb +9 -8
  66. data/spec/structure_generators/chevrons_generator_spec.rb +4 -2
  67. data/spec/structure_generators/concentric_circles_generator_spec.rb +4 -2
  68. data/spec/structure_generators/diamonds_generator_spec.rb +4 -2
  69. data/spec/structure_generators/hexagons_generator_spec.rb +4 -2
  70. data/spec/structure_generators/mosaic_squares_generator_spec.rb +4 -2
  71. data/spec/structure_generators/nested_squares_generator_spec.rb +4 -2
  72. data/spec/structure_generators/octagons_generator_spec.rb +4 -2
  73. data/spec/structure_generators/overlapping_circles_generator_spec.rb +4 -2
  74. data/spec/structure_generators/overlapping_rings_generator_spec.rb +4 -2
  75. data/spec/structure_generators/plaid_generator_spec.rb +4 -2
  76. data/spec/structure_generators/plus_signs_generator_spec.rb +4 -2
  77. data/spec/structure_generators/sine_waves_generator_spec.rb +4 -2
  78. data/spec/structure_generators/squares_generator_spec.rb +4 -2
  79. data/spec/structure_generators/tessellation_generator_spec.rb +4 -2
  80. data/spec/structure_generators/triangles_generator_spec.rb +4 -2
  81. data/spec/structure_generators/xes_generator_spec.rb +4 -2
  82. data/spec/structure_spec.rb +18 -16
  83. data/spec/support/aruba.rb +6 -6
  84. data/spec/support/helpers/fixtures.rb +3 -1
  85. data/spec/support/kernel.rb +8 -2
  86. data/spec/support/matchers/image.rb +4 -2
  87. data/spec/support/matchers/name.rb +3 -1
  88. data/spec/support/rspec.rb +4 -2
  89. data/spec/support/shared_examples/generator.rb +12 -10
  90. data/spec/support/shared_examples/pattern.rb +7 -5
  91. data/spec/support/shared_examples/pattern_name.rb +4 -2
  92. data/spec/support/shared_examples/structure.rb +12 -10
  93. data/spec/support/string.rb +3 -2
  94. data/spec/svg_spec.rb +5 -3
  95. metadata +11 -59
  96. data/.rubocop.yml +0 -71
  97. data/.travis.yml +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 505b039dc31f17e65a619928b123b061077629ad
4
- data.tar.gz: 549237f81df720c5ef2a9a2767b4d7be0ee3a96f
2
+ SHA256:
3
+ metadata.gz: 673c02d78cab6a2a0d4739661a9a4e93845fd6c3dafff82f36f36e15e759e032
4
+ data.tar.gz: da40879b6a7e41a039e00741d5b48e4be51a584f339bc84572bf5d47cb1b44cc
5
5
  SHA512:
6
- metadata.gz: 982753d4976ffe9aeef807a814aecc5e4a8a64f972228a05eef69dde285c4ec42d9b8dd328f5b0fbd5dbe6218fdad26a6956b729f443b21cb9fa54ea8628a3bc
7
- data.tar.gz: 185373a809c450c8427928f72e0c4d4941b1c3182d78ddac129f797a5e67477ab66bfcd232c03358ee996e0c98efd1e578402de00d570dca58f0c968829ed6c4
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
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  test.rb
19
+ .ruby-version
data/.simplecov CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  class ExcludeRegexFilter < SimpleCov::Filter
4
5
  def matches?(source_file)
data/Gemfile CHANGED
@@ -1,26 +1,24 @@
1
- source 'https://rubygems.org'
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 'rspec'
8
- gem 'aruba'
9
- gem 'rake'
10
- gem 'rubocop'
11
- gem 'simplecov'
12
- gem 'fuubar'
13
- gem 'inch'
14
- gem 'activesupport'
15
- gem 'pry'
16
- gem 'pry-rescue'
17
- gem 'pry-stack_explorer'
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
- if RUBY_VERSION >= '2'
20
- gem 'byebug'
21
- gem 'pry-byebug'
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
- [![](http://img.shields.io/gem/v/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
2
- [![](https://img.shields.io/travis/jasonlong/geo_pattern.svg?style=flat)](https://travis-ci.org/jasonlong/geo_pattern)
3
- [![](http://img.shields.io/gem/dt/geo_pattern.svg?style=flat)](http://rubygems.org/gems/geo_pattern)
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](http://guides.github.com) site and the [Explore section
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 ( http://github.com/jasonlong/geo_pattern/fork )
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/geopatterns-js
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/geo_pattern
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
- $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
2
 
3
- desc 'Default task running Tests'
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 'Run test suite'
7
- task test: ['test:rubocop', 'test:rspec']
8
- task 'test:ci' => ['bootstrap:gem_requirements', :test]
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 'rspec'
12
- end
13
-
14
- task :rubocop do
15
- sh 'rubocop'
13
+ sh "rspec"
16
14
  end
17
15
 
18
- task 'rubocop:autocorrect' do
19
- sh 'rubocop --auto-correct'
16
+ task "inch" do
17
+ sh "inch"
20
18
  end
21
19
 
22
- task 'inch' do
23
- sh 'inch'
24
- end
20
+ require "standard/rake"
25
21
  end
26
22
 
27
23
  namespace :gem do
28
- require 'bundler/gem_tasks'
24
+ require "bundler/gem_tasks"
29
25
  end
30
26
 
31
- unless ENV.key?('CI')
32
- require 'geo_pattern/geo_pattern_task'
27
+ unless ENV.key?("CI")
28
+ require "geo_pattern/geo_pattern_task"
33
29
 
34
30
  namespace :fixtures do
35
- string = 'Mastering Markdown'
31
+ string = "Mastering Markdown"
36
32
 
37
33
  GeoPattern::GeoPatternTask.new(
38
- name: 'generate',
39
- description: 'Generate patterns to make them available as fixtures',
34
+ name: "generate",
35
+ description: "Generate patterns to make them available as fixtures",
40
36
  data: {
41
- 'fixtures/generated_patterns/chevrons.svg' => { input: string, patterns: [:chevrons] },
42
- 'fixtures/generated_patterns/concentric_circles.svg' => { input: string, patterns: [:concentric_circles] },
43
- 'fixtures/generated_patterns/diamonds.svg' => { input: string, patterns: [:diamonds] },
44
- 'fixtures/generated_patterns/hexagons.svg' => { input: string, patterns: [:hexagons] },
45
- 'fixtures/generated_patterns/mosaic_squares.svg' => { input: string, patterns: [:mosaic_squares] },
46
- 'fixtures/generated_patterns/nested_squares.svg' => { input: string, patterns: [:nested_squares] },
47
- 'fixtures/generated_patterns/octagons.svg' => { input: string, patterns: [:octagons] },
48
- 'fixtures/generated_patterns/overlapping_circles.svg' => { input: string, patterns: [:overlapping_circles] },
49
- 'fixtures/generated_patterns/overlapping_rings.svg' => { input: string, patterns: [:overlapping_rings] },
50
- 'fixtures/generated_patterns/plaid.svg' => { input: string, patterns: [:plaid] },
51
- 'fixtures/generated_patterns/plus_signs.svg' => { input: string, patterns: [:plus_signs] },
52
- 'fixtures/generated_patterns/sine_waves.svg' => { input: string, patterns: [:sine_waves] },
53
- 'fixtures/generated_patterns/squares.svg' => { input: string, patterns: [:squares] },
54
- 'fixtures/generated_patterns/tessellation.svg' => { input: string, patterns: [:tessellation] },
55
- 'fixtures/generated_patterns/triangles.svg' => { input: string, patterns: [:triangles] },
56
- 'fixtures/generated_patterns/xes.svg' => { input: string, patterns: [:xes] },
57
- 'fixtures/generated_patterns/diamonds_with_color.svg' => { input: string, patterns: [:diamonds], color: '#00ff00' },
58
- 'fixtures/generated_patterns/diamonds_with_base_color.svg' => { input: string, patterns: [:diamonds], base_color: '#00ff00' }
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 'Bootstrap project'
65
- task bootstrap: %w(bootstrap:bundler)
60
+ desc "Bootstrap project"
61
+ task bootstrap: %w[bootstrap:bundler]
66
62
 
67
- desc 'Bootstrap project for ci'
68
- task 'bootstrap:ci' do
69
- Rake::Task['bootstrap'].invoke
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 'Bootstrap bundler'
69
+ desc "Bootstrap bundler"
74
70
  task :bundler do |t|
75
71
  puts t.comment
76
- sh 'gem install bundler'
77
- sh 'bundle install'
72
+ sh "gem install bundler"
73
+ sh "bundle install"
78
74
  end
79
75
 
80
- desc 'Require gems'
76
+ desc "Require gems"
81
77
  task :gem_requirements do |t|
82
78
  puts t.comment
83
- require 'bundler'
79
+ require "bundler"
84
80
  Bundler.require
85
81
  end
86
82
  end
data/geo_pattern.gemspec CHANGED
@@ -1,29 +1,25 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
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 'geo_pattern/version'
5
+ require "geo_pattern/version"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = 'geo_pattern'
8
- spec.version = GeoPattern::VERSION
9
- spec.authors = ['Jason Long']
10
- spec.email = ['jlong@github.com']
11
- spec.summary = 'Generate SVG beautiful patterns'
12
- spec.description = 'Generate SVG beautiful patterns'
13
- spec.homepage = 'https://github.com/jasonlong/geo_pattern'
14
- spec.license = 'MIT'
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.required_ruby_version = '~>2'
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.add_dependency 'color', '~> 1.5'
24
- spec.add_development_dependency 'bundler', '~> 1.5'
21
+ spec.required_ruby_version = ">= 2.6"
25
22
 
26
- spec.post_install_message = <<-EOS
27
- Class style pattern names are deprecated as of 1.3.1
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 = options[:image]
13
- @preset = options[:preset]
14
- @color = options[:color]
14
+ @image = options[:image]
15
+ @preset = options[:preset]
16
+ @color = options[:color]
15
17
  @generator = options[:generator]
16
18
 
17
- fail ArgumentError, 'Argument color is missing' if @color.nil?
18
- fail ArgumentError, 'Argument image is missing' if @image.nil?
19
- fail ArgumentError, 'Argument preset is missing' if @preset.nil?
20
- fail ArgumentError, 'Argument generator is missing' if @generator.nil?
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 = color_for(seed, preset)
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, '100%', '100%', 'fill' => color.to_svg)
42
+ svg.rect(0, 0, "100%", "100%", "fill" => color.to_svg)
41
43
 
42
44
  svg
43
45
  end
@@ -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('rgb(%d, %d, %d)', r, g, b)
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 = color
18
- @seed = 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 = map(seed.to_i(14, 3), 0, 4095, 0, 359)
31
- sat_offset = seed.to_i(17, 1)
32
- new_color = ::Color::RGB.from_html(color).to_hsl
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 (sat_offset % 2 == 0)
36
- new_color.saturation = new_color.saturation + sat_offset
37
+ new_color.saturation = if sat_offset % 2 == 0
38
+ new_color.saturation + sat_offset
37
39
  else
38
- new_color.saturation = new_color.saturation - sat_offset
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
- def map(value, v_min, v_max, d_min, d_max) # v for value, d for desired
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoPattern
2
4
  # Color generators
3
5
  module ColorGenerators
@@ -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 = 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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GeoPattern
2
4
  # user errors
3
5
  class UserError < StandardError; end
@@ -1,5 +1,7 @@
1
- require 'geo_pattern'
2
- require 'geo_pattern/rake_task'
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
- fail ArgumentError, :data if @options[:data].nil?
32
+ raise ArgumentError, :data if @options[:data].nil?
31
33
 
32
- @data = @options[: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 = File.expand_path(path)
42
+ path = File.expand_path(path)
41
43
 
42
44
  if string.is_a?(Hash)
43
- input = string[:input]
44
- opts[:patterns] = string[:patterns] if string.key? :patterns
45
- opts[:color] = string[:color] if string.key? :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
- fail 'Invalid data structure for Rake Task'
50
+ raise "Invalid data structure for Rake Task"
49
51
  end
50
52
 
51
53
  pattern = GeoPattern.generate(input, opts)
@@ -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 camel_cased_word =~ /[A-Z-]/
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)..-1]
43
+ if (i = path.rindex("::"))
44
+ path[(i + 2)..]
43
45
  else
44
46
  path
45
47
  end
@@ -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
- $stderr.puts 'Using "#uri_image" is deprecated as of 1.3.1. Please use "#to_data_uri" instead.'
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
- $stderr.puts 'Using "#svg_string" is deprecated as of 1.3.1. Please use "#to_svg" instead.'
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
- $stderr.puts 'Using "#base64_string" is deprecated as of 1.3.1. Please use "#to_base64" instead.'
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 = width
78
+ svg_image.width = width
77
79
 
78
80
  svg_image << background.image if background
79
81
  svg_image << structure.image if structure