url_params_manager 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +19 -0
- data/Gemfile +5 -0
- data/README.md +206 -0
- data/Rakefile +11 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/url_params_manager.rb +13 -0
- data/lib/url_params_manager/service.rb +128 -0
- data/lib/url_params_manager/unrecognised_prefix_error.rb +4 -0
- data/lib/url_params_manager/version.rb +3 -0
- data/url_params_manager.gemspec +37 -0
- metadata +214 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 20007cb9733a6548af2f7fb5dbb1c3e1bf4cf4c1
|
4
|
+
data.tar.gz: fd0c71ec50dd016dd88291ab42118c05a139dcbd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f255f9748eef06fb3f09fc28b13cd5d092ddaecfe9ead9d9d11375cd0fc86539f24c222b194d0cce83ee77d9220f43c4d9a72a843c2c2b86edbbbfc06b8d11e6
|
7
|
+
data.tar.gz: 64f773adecfad17d95a6d29aedf715c866ace65113d366b5cb0a48e42251d04d17c7e890a4c5b46eeb2220bef9dab75fa51bb46c21b1682879cca35aa7d26ba0
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
language: ruby
|
2
|
+
cache: bundler
|
3
|
+
|
4
|
+
addons:
|
5
|
+
code_climate:
|
6
|
+
repo_token: 0af3f52c81bbe7c92359d70d648edc9fae739e6555719fa2164c8d76dd71a314
|
7
|
+
|
8
|
+
rvm:
|
9
|
+
- 2.1.6
|
10
|
+
- 2.2.2
|
11
|
+
|
12
|
+
script: 'bundle exec rake spec'
|
13
|
+
|
14
|
+
notifications:
|
15
|
+
email:
|
16
|
+
recipients:
|
17
|
+
- eturino@eturino.com
|
18
|
+
on_failure: change
|
19
|
+
on_success: never
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
# UrlParamsManager
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/url_params_manager.svg)](http://badge.fury.io/rb/url_params_manager)
|
4
|
+
[![Build Status](https://travis-ci.org/artirix/url_params_manager.svg?branch=master)](https://travis-ci.org/artirix/url_params_manager)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/artirix/url_params_manager/badges/gpa.svg)](https://codeclimate.com/github/artirix/url_params_manager)
|
6
|
+
[![Test Coverage](https://codeclimate.com/github/artirix/url_params_manager/badges/coverage.svg)](https://codeclimate.com/github/artirix/url_params_manager/coverage)
|
7
|
+
|
8
|
+
Allows SEO Friendly urls for search pages to be built easily.
|
9
|
+
|
10
|
+
The urls will look like: `example.org/my-search/color-black/color-red/size-big/page-3` and will end up in this params: `{ color: ['black', 'red'], size: 'big', page: '3' }`.
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
With this gem you can specify what parameters will be in the path and what will be added to the querystring.
|
15
|
+
|
16
|
+
By default all parameters will be in the querystring, unless specified otherwise. Those are the *indexed params*.
|
17
|
+
|
18
|
+
The indexed params follow these rules:
|
19
|
+
|
20
|
+
1. they will be added in a `"#{param_prefix}-#{value}` pairs.
|
21
|
+
2. the order of the pairs in the URL is determined by the priority of the params in the config
|
22
|
+
3. in case of multivalued, multiple param-value pairs will be added, following value's alphabetical order
|
23
|
+
|
24
|
+
### Param name vs Param Prefix
|
25
|
+
|
26
|
+
We use this to "translate" the params from how they're known in the app to what they're known in the URLs. With this, we can change how the param is named in the URLs without changing it in the app. This will help us with white-labels config, multi-language configs, or SEO/UX related changes.
|
27
|
+
|
28
|
+
The "Param Name" or "Param name in the App" is how the param is known in the app, how it'll be accessed in Rails' params.
|
29
|
+
The "Param Prefix" or "Param alias in the URL" is how the param will be shown in the URL, either in the path or in the querystring.
|
30
|
+
|
31
|
+
The "prefix -> name" map are set on the config of the UrlParamsManager.
|
32
|
+
|
33
|
+
By default, if the config does not say otherwise, the prefix and the name are the same.
|
34
|
+
|
35
|
+
important: if the param is an indexed param (it's shown in the path not in the querystring), then we have to add it to this hash, even with the same name:
|
36
|
+
ie:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
map = {
|
40
|
+
prefix: :real_name,
|
41
|
+
same_name: :same_name,
|
42
|
+
page: :page,
|
43
|
+
}
|
44
|
+
```
|
45
|
+
|
46
|
+
### Indexed vs non Indexed params
|
47
|
+
|
48
|
+
Indexed params appear in the path, ordered (following a priority order set in the config of the UrlParamsManager).
|
49
|
+
|
50
|
+
Non Indexed params are every other param, and they appear in the querystring.
|
51
|
+
|
52
|
+
note: We specify the indexed params using the Param Prefix (aka Param alias in the URL)
|
53
|
+
|
54
|
+
note: Indexed Params may have multiple values but those will be *UNORDERED*. (See the example for reasoning).
|
55
|
+
|
56
|
+
### Default Values
|
57
|
+
|
58
|
+
The config can specify default values for specific params. That means that:
|
59
|
+
|
60
|
+
- if the param does not appear in the URL, we'll give the param the default value in the app.
|
61
|
+
- if the param is given the default app, the resulting URL will not have the param: if the param has the default value it is ignored when building the URL.
|
62
|
+
|
63
|
+
The default value can be a list.
|
64
|
+
|
65
|
+
note: We specify the default values using the Param Name.
|
66
|
+
|
67
|
+
## Example of use and Config
|
68
|
+
|
69
|
+
### UrlParamsManager object
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
# List of Params Prefixes to be considered as indexed params (in the path, not in the querystring)
|
73
|
+
indexed_url_params_order = [
|
74
|
+
:feat,
|
75
|
+
:cap,
|
76
|
+
:ndef,
|
77
|
+
# ALWAYS LAST
|
78
|
+
:page
|
79
|
+
]
|
80
|
+
|
81
|
+
# Param Prefix => Param name in the app
|
82
|
+
url_to_filter_params = {
|
83
|
+
feat: :feature, # indexed => in URL
|
84
|
+
cap: :capacity, # indexed => in URL
|
85
|
+
some: :something, # not indexed => in querystring
|
86
|
+
ndef: :non_default, # value with default
|
87
|
+
page: :page,
|
88
|
+
}
|
89
|
+
|
90
|
+
# Default values for the params
|
91
|
+
default_params = {
|
92
|
+
something: 99,
|
93
|
+
non_default: 'paco',
|
94
|
+
with_default_value: 2,
|
95
|
+
with_default_list: [1, 2],
|
96
|
+
}
|
97
|
+
|
98
|
+
# UrlParamsManager object
|
99
|
+
@upm = UrlParamsManager.for url_to_filter_params: url_to_filter_params, # Param Name Map
|
100
|
+
indexed_url_params_order: indexed_url_params_order, # Indexed Params list
|
101
|
+
app_url_helpers: Rails.application.routes.url_helpers, # Object to receive the URL's Path calls (usually Rails URL Helpers)
|
102
|
+
default_params: default_params # Default Params map
|
103
|
+
```
|
104
|
+
|
105
|
+
### Building URLs
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
pars = {
|
109
|
+
capacity: ['25+'],
|
110
|
+
page: 2,
|
111
|
+
feature: ['swimming-pool', 'helipad'],
|
112
|
+
something: ['other', 'another'],
|
113
|
+
with_default_value: 2,
|
114
|
+
with_default_list: [2, 1],
|
115
|
+
non_default: 'ohmy',
|
116
|
+
}
|
117
|
+
|
118
|
+
expected_path = @upm.my_search_path(pars)
|
119
|
+
# => '/search/feat-helipad/feat-swimming-pool/cap-25+/ndef-ohmy/page-2?some%5B%5D=another&some%5B%5D=other'
|
120
|
+
|
121
|
+
# capacity => indexed with prefix 'cap'
|
122
|
+
# page => indexed with prefix 'page'
|
123
|
+
# feature => indexed with prefix 'feat'. Both values are shown, alpha-ordered.
|
124
|
+
# something => not indexed, using prefix (or 'Param Alias in URL') as key and the values alpha-ordered.
|
125
|
+
# with_default_value => since it has the default value, it does not appear
|
126
|
+
# with_default_list => since it has the default value, it does not appear. Note that we gave it the same values but in different order
|
127
|
+
# non_default => indexed with prefix 'ndef'
|
128
|
+
|
129
|
+
```
|
130
|
+
|
131
|
+
### Rails config for interpreting the URL
|
132
|
+
|
133
|
+
routes.rb file:
|
134
|
+
```ruby
|
135
|
+
|
136
|
+
Rails.application.routes.draw do
|
137
|
+
|
138
|
+
get 'search(/*filters)', to: 'articles#index', as: :articles_search
|
139
|
+
end
|
140
|
+
```
|
141
|
+
|
142
|
+
With that routes config, we'll have in `params` in the controller the indexed params plus a param "filters" with the string of all the indexed params.
|
143
|
+
|
144
|
+
We'll use the UrlParamsManager defined before to convert that into a hash of params that we can use internally.
|
145
|
+
|
146
|
+
This will put together the indexed params in the path with the non indexed params in the querystring, and it will translate the param names back to the Param name to use in the app.
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
class ArticlesController < ApplicationController
|
150
|
+
|
151
|
+
SEARCH_IGNORE_PARAMS = ['controller', 'action'].map &:freeze
|
152
|
+
|
153
|
+
def index
|
154
|
+
@articles = Article.search(search_params)
|
155
|
+
end
|
156
|
+
|
157
|
+
private
|
158
|
+
def search_params
|
159
|
+
@upm.filters_from_url_params params.reject { |k, _| SEARCH_IGNORE_PARAMS.include? k }
|
160
|
+
end
|
161
|
+
end
|
162
|
+
```
|
163
|
+
|
164
|
+
With a URL like we built before: `'/search/feat-helipad/feat-swimming-pool/cap-25+/ndef-ohmy/page-2?some%5B%5D=another&some%5B%5D=other'` and this config, `Article.search` will receive a hash with:
|
165
|
+
|
166
|
+
```ruby
|
167
|
+
{
|
168
|
+
capacity: ['25+'],
|
169
|
+
page: 2,
|
170
|
+
feature: ['helipad', 'swimming-pool'],
|
171
|
+
something: ['another', 'other'],
|
172
|
+
with_default_value: 2,
|
173
|
+
with_default_list: [1, 2],
|
174
|
+
non_default: 'ohmy',
|
175
|
+
}
|
176
|
+
```
|
177
|
+
|
178
|
+
## Installation
|
179
|
+
|
180
|
+
Add this line to your application's Gemfile:
|
181
|
+
|
182
|
+
```ruby
|
183
|
+
gem 'url_params_manager'
|
184
|
+
```
|
185
|
+
|
186
|
+
And then execute:
|
187
|
+
|
188
|
+
$ bundle
|
189
|
+
|
190
|
+
Or install it yourself as:
|
191
|
+
|
192
|
+
$ gem install url_params_manager
|
193
|
+
|
194
|
+
## Development
|
195
|
+
|
196
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
197
|
+
|
198
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
199
|
+
|
200
|
+
## Contributing
|
201
|
+
|
202
|
+
1. Fork it ( https://github.com/artirix/url_params_manager/fork )
|
203
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
204
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
205
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
206
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "url_params_manager"
|
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
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'active_support/all'
|
2
|
+
require 'url_params_manager/unrecognised_prefix_error'
|
3
|
+
require 'url_params_manager/service'
|
4
|
+
require 'url_params_manager/version'
|
5
|
+
|
6
|
+
module UrlParamsManager
|
7
|
+
def self.for(url_to_filter_params: nil, indexed_url_params_order: nil, app_url_helpers: nil, default_params: {})
|
8
|
+
Service.new url_to_filter_params: url_to_filter_params,
|
9
|
+
indexed_url_params_order: indexed_url_params_order,
|
10
|
+
app_url_helpers: app_url_helpers,
|
11
|
+
default_params: default_params
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
module UrlParamsManager
|
2
|
+
class Service
|
3
|
+
attr_reader :app_url_helpers, :url_to_filter_params, :indexed_url_params_order, :filter_to_url_params, :default_params
|
4
|
+
|
5
|
+
def initialize(url_to_filter_params: nil, indexed_url_params_order: nil, app_url_helpers: nil, default_params: {})
|
6
|
+
@url_to_filter_params = url_to_filter_params
|
7
|
+
@filter_to_url_params = url_to_filter_params.invert
|
8
|
+
@indexed_url_params_order = indexed_url_params_order
|
9
|
+
@app_url_helpers = app_url_helpers
|
10
|
+
@default_params = default_params
|
11
|
+
end
|
12
|
+
|
13
|
+
# for url/path methods from filter args
|
14
|
+
def method_missing(method, args)
|
15
|
+
path_method method, args
|
16
|
+
end
|
17
|
+
|
18
|
+
# for filters from url/path params
|
19
|
+
def filters_from_url_params(params)
|
20
|
+
params = params.to_h.symbolize_keys
|
21
|
+
|
22
|
+
filters = {}.merge default_params
|
23
|
+
|
24
|
+
params.delete(:filters).to_s.split('/').each do |part|
|
25
|
+
filter, value = recognise_prefix(part)
|
26
|
+
if filters.has_key? filter
|
27
|
+
filters[filter] = Array(filters[filter])
|
28
|
+
filters[filter] << value
|
29
|
+
else
|
30
|
+
filters[filter] = value
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
filters.merge querystring_to_filters(params)
|
35
|
+
end
|
36
|
+
|
37
|
+
def querystring_to_filters(querystring_params)
|
38
|
+
querystring_params.inject({}) do |h, (k, v)|
|
39
|
+
new_key = url_to_filter_params[k] || k
|
40
|
+
h[new_key] = v
|
41
|
+
h
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
def path_method(method, filter_args)
|
47
|
+
url_args = url_args_from_filters(filter_args)
|
48
|
+
app_url_helpers.send(method, url_args)
|
49
|
+
end
|
50
|
+
|
51
|
+
EMPTY_STRING = ''.freeze
|
52
|
+
|
53
|
+
def recognise_prefix(url_part)
|
54
|
+
url_to_filter_params.each do |url_prefix, filter|
|
55
|
+
pref = "#{url_prefix}-"
|
56
|
+
if url_part.start_with? pref
|
57
|
+
return [filter, url_part.sub(pref, EMPTY_STRING)]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
raise UnrecognisedPrefixError, "url part: #{url_part}"
|
62
|
+
end
|
63
|
+
|
64
|
+
def url_args_from_filters(filter_args)
|
65
|
+
valid_filter_args = remove_defaults(filter_args)
|
66
|
+
bare_args = translate_filter_keys(valid_filter_args)
|
67
|
+
|
68
|
+
in_uri_args = bare_args.select { |(k, _)| indexed_url_params_order.include? k }
|
69
|
+
query_string_args = bare_args.reject { |(k, _)| indexed_url_params_order.include? k }
|
70
|
+
|
71
|
+
# sorting indexed part
|
72
|
+
sorted_uri_args = sort_uri_filters(in_uri_args)
|
73
|
+
|
74
|
+
#converting into string
|
75
|
+
filters_uri_part = generate_uri_part(sorted_uri_args)
|
76
|
+
|
77
|
+
# query string args + filter param for the urlpath helper methods
|
78
|
+
query_string_args.merge filters: filters_uri_part.join('/')
|
79
|
+
end
|
80
|
+
|
81
|
+
def sort_uri_filters(in_uri_args)
|
82
|
+
keys_sorted = Hash[
|
83
|
+
in_uri_args.to_a.sort_by do |k, _|
|
84
|
+
@indexed_url_params_order.index(k)
|
85
|
+
end
|
86
|
+
]
|
87
|
+
|
88
|
+
Hash[
|
89
|
+
keys_sorted.map do |k, v|
|
90
|
+
sorted_v = v.respond_to?(:sort) ? v.sort : v
|
91
|
+
[k, sorted_v]
|
92
|
+
end
|
93
|
+
]
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
def translate_filter_keys(filter_args)
|
98
|
+
Hash[
|
99
|
+
filter_args.map do |k, v|
|
100
|
+
[
|
101
|
+
filter_to_url_params[k] || k, # new key -> translated one, or the original if no translation available
|
102
|
+
v
|
103
|
+
]
|
104
|
+
end
|
105
|
+
]
|
106
|
+
end
|
107
|
+
|
108
|
+
def generate_uri_part(in_uri_args)
|
109
|
+
in_uri_args.inject([]) do |uri, (key, value)|
|
110
|
+
Array(value).each do |v|
|
111
|
+
uri << "#{key}-#{v}"
|
112
|
+
end
|
113
|
+
uri
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def remove_defaults(filter_args)
|
118
|
+
default_params.each do |k, v|
|
119
|
+
next unless filter_args.key?(k) && filter_args[k].present?
|
120
|
+
if filter_args[k] == v || Array(filter_args[k]).sort == Array(v).sort
|
121
|
+
filter_args.delete k
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
filter_args
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'url_params_manager/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'url_params_manager'
|
8
|
+
spec.version = UrlParamsManager::VERSION
|
9
|
+
spec.authors = ['Eduardo Turiño', 'Reuben Sutton']
|
10
|
+
spec.email = ['eturino@eturino.com', 'reuben.sutton@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = %q{Allows SEO Friendly urls for search pages to be built easily. Intended to be used with Rails.}
|
13
|
+
# spec.description = %q{TODO: Write a longer description or delete this line.}
|
14
|
+
spec.homepage = 'https://github.com/artirix/url_params_manager'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
# if spec.respond_to?(:metadata)
|
22
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
23
|
+
# end
|
24
|
+
|
25
|
+
spec.add_dependency 'activesupport', '~> 4'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.9'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec'
|
30
|
+
spec.add_development_dependency 'rspec-given'
|
31
|
+
spec.add_development_dependency 'rspec-nc'
|
32
|
+
spec.add_development_dependency 'pry'
|
33
|
+
spec.add_development_dependency 'pry-nav'
|
34
|
+
spec.add_development_dependency 'pry-rescue'
|
35
|
+
spec.add_development_dependency 'pry-stack_explorer'
|
36
|
+
spec.add_development_dependency 'pry-doc'
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: url_params_manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eduardo Turiño
|
8
|
+
- Reuben Sutton
|
9
|
+
autorequire:
|
10
|
+
bindir: exe
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-05-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '4'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '4'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: bundler
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.9'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.9'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rake
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '10.0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '10.0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rspec
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec-given
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rspec-nc
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: pry
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: pry-nav
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: pry-rescue
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: pry-stack_explorer
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: pry-doc
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
description:
|
169
|
+
email:
|
170
|
+
- eturino@eturino.com
|
171
|
+
- reuben.sutton@gmail.com
|
172
|
+
executables: []
|
173
|
+
extensions: []
|
174
|
+
extra_rdoc_files: []
|
175
|
+
files:
|
176
|
+
- ".gitignore"
|
177
|
+
- ".rspec"
|
178
|
+
- ".travis.yml"
|
179
|
+
- Gemfile
|
180
|
+
- README.md
|
181
|
+
- Rakefile
|
182
|
+
- bin/console
|
183
|
+
- bin/setup
|
184
|
+
- lib/url_params_manager.rb
|
185
|
+
- lib/url_params_manager/service.rb
|
186
|
+
- lib/url_params_manager/unrecognised_prefix_error.rb
|
187
|
+
- lib/url_params_manager/version.rb
|
188
|
+
- url_params_manager.gemspec
|
189
|
+
homepage: https://github.com/artirix/url_params_manager
|
190
|
+
licenses: []
|
191
|
+
metadata: {}
|
192
|
+
post_install_message:
|
193
|
+
rdoc_options: []
|
194
|
+
require_paths:
|
195
|
+
- lib
|
196
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - ">="
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0'
|
201
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
requirements: []
|
207
|
+
rubyforge_project:
|
208
|
+
rubygems_version: 2.4.6
|
209
|
+
signing_key:
|
210
|
+
specification_version: 4
|
211
|
+
summary: Allows SEO Friendly urls for search pages to be built easily. Intended to
|
212
|
+
be used with Rails.
|
213
|
+
test_files: []
|
214
|
+
has_rdoc:
|