susanin 0.0.1 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 59b6559ce5c0548853359a6ff22589bd05445937
4
- data.tar.gz: a4f94a1fe9eb848681f264855187ec0174b67e77
2
+ SHA256:
3
+ metadata.gz: a0d2e26626b7792e2bbded08c10b9c219c957cc04b2fc49603254e453cf6728f
4
+ data.tar.gz: 56cc3d7e7bd0b9f530953c3784e2f3b2c097d7942798f115cc1540c2458f165c
5
5
  SHA512:
6
- metadata.gz: 3cca6bf0ac14d8bfdcaa7e9f80fa50f716164f79ad2082acc88f136a2601b4713b85efcb1d545c7c2b8a2155dce80cf66ceda200c20729b90599c9a49bf20c1d
7
- data.tar.gz: 8540146c20a09ef5caadb50a3047f8c90b3b1a57f5ba8df20c291f10dfbb3dbb359408703305ea9fded1375068972a84032612e19ae38b84433b1cbd524d3c50
6
+ metadata.gz: c6efe38491677b7832e87f4a8f19839718797ace7086f58ba2b3e76283fc90957ac1788dee8e9e12aee1b01522bf21ec49b7d527f833af9e5e0c4768a6a91f2a
7
+ data.tar.gz: d702e4e2b8a1221ff0ed7ba9af8075bd622b1c096ec04a60f3f861f4ca6dbd357961b8197175eba4846b9c5dd7c03ae9c42206b99918f5acac9bdedf3a6a1063
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.6', '2.7', '3.0']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
+ # uses: ruby/setup-ruby@v1
30
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rake
data/README.md CHANGED
@@ -24,12 +24,17 @@ By default gems do nothing. Include module 'susanin' to the controller.
24
24
  class ApplicationController < ActionController::Base
25
25
  include ::Susanin
26
26
 
27
- polymorphic_url_prefix do
28
- {
29
- Admin => ->(resource) { [resource.company, resource] },
30
- Photo => ->(resource) { [resource.admin.company, resource.admin, resource] },
31
- Gallery => ->(resource) { [resource.company, resource] }
32
- }
27
+ susanin do
28
+ [
29
+ [:owner, ->(r) { [:admin] }],
30
+ [[:frontend, Link], ->(r) { [:frontend, r] }],
31
+ [User, ->(r) { [:owner, r] }],
32
+ [Project, ->(r) { [:owner, r] }],
33
+ [Link, ->(r) { [:owner, r] }],
34
+ [Admin, ->(r) { [r.company, r] }],
35
+ [Photo, ->(r) { [r.admin.company, r.admin, r] }],
36
+ [Gallery, ->(r) { [r.company, r] }]
37
+ ]
33
38
  end
34
39
 
35
40
  end
@@ -47,7 +52,6 @@ You are able to write this:
47
52
  link_to user.email, [:edit, user], class: 'button'
48
53
  ```
49
54
 
50
-
51
55
  ## Contributing
52
56
 
53
57
  1. Fork it ( https://github.com/[my-github-username]/susanin/fork )
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
2
3
 
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "susanin"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ require "pry"
11
+ Pry.start
data/bin/rake ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rake' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rake", "rake")
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,37 @@
1
+ require "active_support/core_ext/array"
2
+
3
+ module Susanin
4
+
5
+ class Pattern
6
+ include Enumerable
7
+
8
+ def initialize(arr)
9
+ @arr = Array.wrap(arr)
10
+ end
11
+
12
+ def each(&block)
13
+ shifts.map do |s|
14
+ a = @arr.slice(*s)
15
+ block.call(a.size == 1 ? a[0] : a)
16
+ end
17
+ end
18
+
19
+ def arr_size
20
+ @arr.size
21
+ end
22
+
23
+ def shifts
24
+ arr_size.downto(1).flat_map do |shift|
25
+ (0).upto(arr_size-shift).map do |i|
26
+ [0+i, shift]
27
+ end
28
+ end
29
+ end
30
+
31
+ def inspect
32
+ map{|i|i}
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,213 @@
1
+ require "active_support/core_ext/array"
2
+ require "active_support/concern"
3
+
4
+ module Susanin
5
+
6
+ class Resource
7
+
8
+ def initialize(values=[])
9
+ @resources = values.dup
10
+ end
11
+
12
+ def url_parameters(record_or_hash_or_array, options={})
13
+ params = self.get(Array.wrap(record_or_hash_or_array)).flatten
14
+ opts, params = params.partition { |i| i.is_a?(Hash) }
15
+ merged_options(params, opts.inject(options) { |acc, i| acc.merge(i) })
16
+ end
17
+
18
+ #
19
+ # get(
20
+ # [:a, :c, :d],
21
+ # [
22
+ # [[:A, :B], ->(r) {:a}]
23
+ # [[:A], ->(r) {:q}]
24
+ # [[:C], ->(r) {:w}]
25
+ # [[:E], ->(r) {:e}]
26
+ # ]
27
+ # )
28
+ #
29
+ # [:qwe, :wer, :d]
30
+ #
31
+ def get(record, resources=@resources)
32
+ new_record, new_resources = replace_with(Array.wrap(record), resources)
33
+ if record == new_record
34
+ new_record
35
+ else
36
+ get(new_record, new_resources)
37
+ end
38
+ end
39
+
40
+ #
41
+ # replace_with(
42
+ # [:a, :b, :c, :d],
43
+ # [
44
+ # [[:A, :B], ->(r) {:a}]
45
+ # [[:C], ->(r) {:w}]
46
+ # [[:E], ->(r) {:e}]
47
+ # ]
48
+ # )
49
+ #
50
+ # [
51
+ # [:a, :c, :d],
52
+ # [
53
+ # [[:C], ->(r) {:w}]
54
+ # [[:E], ->(r) {:e}]
55
+ # ]
56
+ # ]
57
+ #
58
+ def replace_with(record, resources)
59
+ record = record.dup
60
+ resources = resources.dup
61
+ pattern, converter = find_first_pattern(record, resources)
62
+
63
+ [replace_subrecord(record, pattern, converter), resources_except(resources, pattern)]
64
+ end
65
+
66
+ #
67
+ # find_first_pattern(
68
+ # [:a, :b, :c, :d],
69
+ # [
70
+ # [[:A, :B], ->(r) {:a}]
71
+ # [[:C], ->(r) {:w}]
72
+ # [[:E], ->(r) {:e}]
73
+ # ]
74
+ # )
75
+ #
76
+ # [[:A, :B], ->(r) {:a}]
77
+ #
78
+ def find_first_pattern(record, resources)
79
+ record_patterns = patterns(get_key(record))
80
+
81
+ resources.select do |r|
82
+ record_patterns.include?(r[0])
83
+ end.first || []
84
+ end
85
+
86
+ #
87
+ # resources_except(
88
+ # [
89
+ # [[:A, :B], ->(r) {:a}]
90
+ # [[:A], ->(r) {:q}]
91
+ # [[:C], ->(r) {:w}]
92
+ # [[:E], ->(r) {:e}]
93
+ # ],
94
+ # [:A, :B]
95
+ # )
96
+ #
97
+ # [
98
+ # [[:C], ->(r) {:w}]
99
+ # [[:E], ->(r) {:e}]
100
+ # ],
101
+ #
102
+ def resources_except(resources, keys)
103
+ keys = Array.wrap(keys)
104
+ new_resources = resources.dup
105
+ new_resources.reject! { |r| contains_subarray?(keys, Array.wrap(r[0])) }
106
+ new_resources
107
+ end
108
+
109
+ #
110
+ # get_key(a) => A
111
+ # get_key(A) => A
112
+ # get_key([a]) => [A]
113
+ # get_key([a, B]) => [A, B]
114
+ # get_key([A]) => [A]
115
+ # get_key([A]) => [A]
116
+ # get_key(:qwe) => :qwe
117
+ # get_key([:qwe]) => [:qwe]
118
+ # get_key('qwe') => 'qwe'
119
+ #
120
+ def get_key(record)
121
+ case record
122
+ when Class then record
123
+ when Array then record.map { |i| get_key(i) }
124
+ when Symbol then record
125
+ when String then record
126
+ else record.class
127
+ end
128
+ end
129
+
130
+ #
131
+ # merged_options([], {}) #=> []
132
+ # merged_options([a], {}) #=> [a]
133
+ # merged_options([a, {}], {}) #=> [a]
134
+ # merged_options([a, {a: 1}], {}) #=> [a, {a: 1}]
135
+ # merged_options([a, {}], {a: 1}) #=> [a, {a: 1}]
136
+ # merged_options([a, {a: 1}], {a: 2}) #=> [a, {a: 1}]
137
+ #
138
+ def merged_options(params, options={})
139
+ params = params.dup
140
+ default_options = params.extract_options!
141
+ params + ((default_options.any? || options.any?) ? [default_options.merge(options)] : [])
142
+ end
143
+
144
+ #
145
+ # contains_subarray?([1,2,3,4,5], [1,2,3]) => true
146
+ # contains_subarray?([1,2,3,4,5], [3,4]) => true
147
+ # contains_subarray?([1,2,3,4,5], [1,3,4]) => false
148
+ # contains_subarray?([1,2,3,4,5], 5) => true
149
+ #
150
+ def contains_subarray?(source, subarray)
151
+ source = Array.wrap(source)
152
+ subarray = Array.wrap(subarray)
153
+ iteration_count = source.length - subarray.length
154
+ 0.upto(iteration_count).any? do |i|
155
+ source[i..(i+subarray.length-1)] == subarray
156
+ end
157
+ end
158
+
159
+ def patterns(arr)
160
+ Pattern.new(arr)
161
+ end
162
+
163
+ #
164
+ # replace_subrecord(
165
+ # [:a, :b, :c, :a, :b, :b],
166
+ # [:a, :b],
167
+ # ->(){ '_1_' }
168
+ # )
169
+ #
170
+ # ['_1_', :c, '_1_', :b]
171
+ #
172
+ def replace_subrecord(record, pattern, resource)
173
+ record = record.dup
174
+ pattern = Array.wrap(pattern)
175
+
176
+ i = pattern.length
177
+
178
+ return record if i == 0
179
+
180
+ while i <= record.length do
181
+ set = (0+(i-pattern.length))..(i-1)
182
+ subset = record[set]
183
+
184
+ if pattern_match?(subset, pattern)
185
+ value = resource.call(*subset)
186
+ record[set] = value
187
+ i += Array.wrap(value).size
188
+ else
189
+ i += 1
190
+ end
191
+ end
192
+
193
+ opts, r = record.partition { |i| i.is_a?(Hash) }
194
+ opts.any? ? [*r, opts.inject({}, :merge)] : r
195
+ end
196
+
197
+ #
198
+ # pattern_match?([a, b], [A, B]) => true
199
+ # pattern_match?([a, b], [a, b]) => false
200
+ #
201
+ def pattern_match?(record, pattern)
202
+ Array.wrap(get_key(record)).zip(Array.wrap(pattern)).all? do |a, b|
203
+ b.is_a?(Class) && a.is_a?(Class) ? a <= b : b == a
204
+ end
205
+ end
206
+
207
+ def array_unwrap(a)
208
+ a.size == 1 ? a[0] : a
209
+ end
210
+
211
+ end
212
+
213
+ end
@@ -1,3 +1,3 @@
1
1
  module Susanin
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/susanin.rb CHANGED
@@ -1,45 +1,55 @@
1
+ require "active_support/core_ext/array"
2
+ require "active_support/concern"
3
+ require "active_support/dependencies/autoload"
1
4
  require "susanin/version"
2
5
 
3
6
  module Susanin
4
7
  extend ActiveSupport::Concern
5
8
 
9
+ autoload :Resource, 'susanin/resource'
10
+ autoload :Pattern, 'susanin/pattern'
11
+
6
12
  included do
7
- hide_action :polymorphic_url
8
- helper_method :polymorphic_url
13
+ helper_method :polymorphic_url, :polymorphic_path
9
14
  end
10
15
 
11
- class Resource
16
+ module ClassMethods
17
+ def susanin(content = nil, &block)
18
+ content_proc = block_given? ? Proc.new(&block) : Proc.new { content }
12
19
 
13
- def initialize(values={}, default = ->(resource) { resource })
14
- @resources = values.dup
15
- @resources.default = default
20
+ define_method :susanin do
21
+ @susanin ||= Resource.new(Array.wrap(instance_exec(&content_proc)))
22
+ end
16
23
  end
24
+ end
17
25
 
18
- def get(record)
19
- @resources[record.class][record]
20
- end
26
+ def polymorphic_url(record_or_hash_or_array, options={})
27
+ params = susanin_converter(record_or_hash_or_array, options)
21
28
 
29
+ if (params.first.size == 1) && params.first[0].is_a?(String)
30
+ params.first.first
31
+ else
32
+ super(*params)
33
+ end
22
34
  end
23
35
 
24
- module ClassMethods
25
- def polymorphic_url_prefix(content = nil)
26
- content_proc = if block_given?
27
- Proc.new
28
- else
29
- Proc.new { content }
30
- end
31
- define_method :polymorphic_url_prefix do
32
- @polymorphic_url_prefix ||= Resource.new(*Array.wrap(instance_exec(&content_proc)))
33
- end
36
+ def polymorphic_path(record_or_hash_or_array, options={})
37
+ params = susanin_converter(record_or_hash_or_array, options)
38
+
39
+ if (params.first.size == 1) && params.first[0].is_a?(String)
40
+ params.first.first
41
+ else
42
+ super(*params)
34
43
  end
35
44
  end
36
45
 
37
- def polymorphic_url(record_or_hash_or_array, options={})
38
- parameters = Array.wrap(record_or_hash_or_array).map {|i| polymorphic_url_prefix.get(i) }.flatten
39
- super(parameters, options)
46
+ def susanin_converter(record_or_hash_or_array, options={})
47
+ params = susanin.url_parameters(Array.wrap(record_or_hash_or_array))
48
+ params_options = params.extract_options!
49
+ [params, options.merge(params_options)]
40
50
  end
41
51
 
42
- def polymorphic_url_prefix
43
- @polymorphic_url_prefix ||= Resource.new()
52
+ def susanin
53
+ @susanin ||= Resource.new()
44
54
  end
45
55
  end
data/susanin.gemspec CHANGED
@@ -7,19 +7,22 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "susanin"
8
8
  spec.version = Susanin::VERSION
9
9
  spec.authors = ["Alexey Osipenko"]
10
- spec.email = ["alexey@osipenko.in.ua"]
10
+ spec.email = ["alexey@cimon.io"]
11
11
  spec.summary = %q{polymorphic_url extention to help with route generation}
12
- spec.description = %q{This gem simplify the route generation which generates via `polymorphic_url` method }
13
- spec.homepage = "https://github.com/aratak/susanin"
12
+ spec.description = %q{This gem simplify the route generation which generates via `polymorphic_url` method}
13
+ spec.homepage = "https://github.com/cimon-io/susanin"
14
14
  spec.license = "MIT"
15
15
 
16
- spec.files = `git ls-files -z`.split("\x0")
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "actionpack", "~> 4.1.1"
21
+ spec.add_dependency "actionpack", ">= 5.0.0", "< 8.0"
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.6"
23
+ spec.add_development_dependency "bundler"
24
24
  spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "pry"
26
+ spec.add_development_dependency "minitest"
27
+ spec.add_development_dependency "simplecov"
25
28
  end
metadata CHANGED
@@ -1,43 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: susanin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Osipenko
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-11 00:00:00.000000000 Z
11
+ date: 2021-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.0
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 4.1.1
22
+ version: '8.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 4.1.1
29
+ version: 5.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '8.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: bundler
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '1.6'
39
+ version: '0'
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - "~>"
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '1.6'
46
+ version: '0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rake
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -52,27 +58,78 @@ dependencies:
52
58
  - - ">="
53
59
  - !ruby/object:Gem::Version
54
60
  version: '0'
55
- description: 'This gem simplify the route generation which generates via `polymorphic_url`
56
- method '
61
+ - !ruby/object:Gem::Dependency
62
+ name: pry
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: minitest
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: simplecov
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ description: This gem simplify the route generation which generates via `polymorphic_url`
104
+ method
57
105
  email:
58
- - alexey@osipenko.in.ua
59
- executables: []
106
+ - alexey@cimon.io
107
+ executables:
108
+ - console
109
+ - rake
110
+ - setup
60
111
  extensions: []
61
112
  extra_rdoc_files: []
62
113
  files:
114
+ - ".github/workflows/ruby.yml"
63
115
  - ".gitignore"
64
116
  - Gemfile
65
117
  - LICENSE.txt
66
118
  - README.md
67
119
  - Rakefile
120
+ - bin/console
121
+ - bin/rake
122
+ - bin/setup
68
123
  - lib/susanin.rb
124
+ - lib/susanin/pattern.rb
125
+ - lib/susanin/resource.rb
69
126
  - lib/susanin/version.rb
70
127
  - susanin.gemspec
71
- homepage: https://github.com/aratak/susanin
128
+ homepage: https://github.com/cimon-io/susanin
72
129
  licenses:
73
130
  - MIT
74
131
  metadata: {}
75
- post_install_message:
132
+ post_install_message:
76
133
  rdoc_options: []
77
134
  require_paths:
78
135
  - lib
@@ -87,10 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
144
  - !ruby/object:Gem::Version
88
145
  version: '0'
89
146
  requirements: []
90
- rubyforge_project:
91
- rubygems_version: 2.2.2
92
- signing_key:
147
+ rubygems_version: 3.2.3
148
+ signing_key:
93
149
  specification_version: 4
94
150
  summary: polymorphic_url extention to help with route generation
95
151
  test_files: []
96
- has_rdoc: