route_soap 0.0.1
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 +7 -0
- data/route_soap.rb +155 -0
- data/route_soap_spec.rb +58 -0
- metadata +124 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dda88b7513c1a4d3f8a56eac537da1b0768fd883
|
4
|
+
data.tar.gz: ae5b432be1c4f484b8c0722b6769ead16d05de01
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 38aa431651f9653acc1282e18e91b4a6db66d251af02fedcc4dc88fe4c1dadc5e4448ccf1c85902f201eb93707d8acbabeb78bf7ec5e6f506cc9b74500bf09c0
|
7
|
+
data.tar.gz: 4c76e28b2e696da0b4381954e7af82cab4909f985990d0204e52e777cda39cc077d6f00da85eaefcfedad1f2e9af431cbc950f7a29e88d8f473f6de435239b75
|
data/route_soap.rb
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
require "contracts"
|
2
|
+
require "securerandom"
|
3
|
+
|
4
|
+
module RouteSoap
|
5
|
+
DefaultRouter = Rails.application.routes if defined? Rails
|
6
|
+
|
7
|
+
PathLike = -> (_) do
|
8
|
+
_.respond_to?(:required_names) && _.respond_to?(:spec)
|
9
|
+
end
|
10
|
+
|
11
|
+
RouteLike = -> (_) do
|
12
|
+
_.respond_to?(:defaults) && _.respond_to?(:path) && _.respond_to?(:verb)
|
13
|
+
end
|
14
|
+
|
15
|
+
RouterLike = -> (_) do
|
16
|
+
_.respond_to?(:routes)
|
17
|
+
end
|
18
|
+
|
19
|
+
class Route
|
20
|
+
include Contracts
|
21
|
+
|
22
|
+
BLACKLIST = [
|
23
|
+
"/",
|
24
|
+
"/prototypes/*id",
|
25
|
+
"/rails/info",
|
26
|
+
"/rails/info/properties",
|
27
|
+
"/rails/info/routes"
|
28
|
+
]
|
29
|
+
|
30
|
+
VERBS = {
|
31
|
+
/^DELETE$/ => :delete,
|
32
|
+
/^GET$/ => :get,
|
33
|
+
/^PATCH$/ => :patch,
|
34
|
+
/^POST$/ => :post,
|
35
|
+
/^PUT$/ => :put
|
36
|
+
}
|
37
|
+
|
38
|
+
Contract RouteLike => Route
|
39
|
+
def initialize(route)
|
40
|
+
@route = route
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
Contract nil => Bool
|
45
|
+
def valid?
|
46
|
+
action && controller && verb && !blacklisted? && true || false
|
47
|
+
end
|
48
|
+
|
49
|
+
Contract nil => String
|
50
|
+
def controller_action
|
51
|
+
@controller_action ||= [route.defaults[:controller], route.defaults[:action]].join("#")
|
52
|
+
end
|
53
|
+
|
54
|
+
Contract nil => String
|
55
|
+
def path
|
56
|
+
@path ||= String(route_path.spec).gsub("(.:format)", "").tap do |path|
|
57
|
+
required_params.each do |param, value|
|
58
|
+
path.gsub!(":#{param}", value)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Contract nil => Hash
|
64
|
+
def required_params
|
65
|
+
@required_params ||= route_path.required_names.reduce(Hash.new) do |acc, param|
|
66
|
+
acc[param] = SecureRandom.hex(3)
|
67
|
+
acc
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
Contract nil => Symbol
|
72
|
+
def verb
|
73
|
+
@verb ||= VERBS[route.verb]
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
attr_reader :route
|
79
|
+
|
80
|
+
Contract nil => Or[String, nil]
|
81
|
+
def action
|
82
|
+
route.defaults[:action]
|
83
|
+
end
|
84
|
+
|
85
|
+
Contract nil => Bool
|
86
|
+
def blacklisted?
|
87
|
+
BLACKLIST.include?(path)
|
88
|
+
end
|
89
|
+
|
90
|
+
Contract nil => Or[String, nil]
|
91
|
+
def controller
|
92
|
+
route.defaults[:controller]
|
93
|
+
end
|
94
|
+
|
95
|
+
Contract nil => PathLike
|
96
|
+
def route_path
|
97
|
+
route.path
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class Spec
|
102
|
+
include Contracts
|
103
|
+
|
104
|
+
Contract Route => Spec
|
105
|
+
def initialize(route)
|
106
|
+
@route = route
|
107
|
+
self
|
108
|
+
end
|
109
|
+
|
110
|
+
Contract nil => String
|
111
|
+
def to_s
|
112
|
+
"it { #{ expectation } #{ result } }"
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
attr_reader :route
|
118
|
+
|
119
|
+
def expectation
|
120
|
+
"expect(#{ route.verb }(\"#{ route.path }\")).to"
|
121
|
+
end
|
122
|
+
|
123
|
+
def result
|
124
|
+
"route_to(\"#{ route.controller_action }\", #{ route.required_params })"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
class Command
|
129
|
+
class << self
|
130
|
+
include Contracts
|
131
|
+
|
132
|
+
Contract Or[RouterLike, nil] => nil
|
133
|
+
def run!(router = DefaultRouter)
|
134
|
+
puts Query.run(router)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
class Query
|
140
|
+
class << self
|
141
|
+
include Contracts
|
142
|
+
|
143
|
+
Contract Or[RouterLike, nil] => Array[String]
|
144
|
+
def run(router = DefaultRouter)
|
145
|
+
Array.new.tap do |lines|
|
146
|
+
router.routes.each do |route|
|
147
|
+
Route.new(route).tap do |simple_route|
|
148
|
+
lines << String(Spec.new(simple_route)) if simple_route.valid?
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
data/route_soap_spec.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require "route_soap.rb"
|
2
|
+
|
3
|
+
describe RouteSoap do
|
4
|
+
module RAILS_4_0_3
|
5
|
+
class Spec
|
6
|
+
def to_s
|
7
|
+
"/admin/workspaces/:workspace_id/users/:id(.:format)"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Path
|
12
|
+
def required_names
|
13
|
+
["workspace_id", "id"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def spec
|
17
|
+
RAILS_4_0_3::Spec.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Route
|
22
|
+
def defaults
|
23
|
+
{ controller: "admin/users", action: "show" }
|
24
|
+
end
|
25
|
+
|
26
|
+
def path
|
27
|
+
RAILS_4_0_3::Path.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def verb
|
31
|
+
/^GET$/
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Router
|
36
|
+
def routes
|
37
|
+
[RAILS_4_0_3::Route.new]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
let(:result) do
|
43
|
+
"it { expect(get(\"/admin/workspaces/42/users/42\")).to route_to(\"admin/users#show\", {\"workspace_id\"=>\"42\", \"id\"=>\"42\"}) }"
|
44
|
+
end
|
45
|
+
|
46
|
+
context "when i have router-like object" do
|
47
|
+
describe ".run" do
|
48
|
+
it "should be possible to transform it into an array specs" do
|
49
|
+
stub_hex!
|
50
|
+
expect(RouteSoap::Query.run(RAILS_4_0_3::Router.new)).to eq([result])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def stub_hex!
|
56
|
+
allow(SecureRandom).to receive(:hex).and_return("42")
|
57
|
+
end
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: route_soap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Philip Cunningham
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: contracts
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.4'
|
76
|
+
- - <
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0.6'
|
79
|
+
type: :runtime
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0.4'
|
86
|
+
- - <
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0.6'
|
89
|
+
description: Route spec generator
|
90
|
+
email:
|
91
|
+
- hello@filib.io
|
92
|
+
executables: []
|
93
|
+
extensions: []
|
94
|
+
extra_rdoc_files: []
|
95
|
+
files:
|
96
|
+
- route_soap.rb
|
97
|
+
- route_soap_spec.rb
|
98
|
+
homepage: https://github.com/filib/route_soap
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- .
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.9.3
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - '>='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 2.0.2
|
119
|
+
signing_key:
|
120
|
+
specification_version: 4
|
121
|
+
summary: A little gem to assist you in keeping your routes clean.
|
122
|
+
test_files:
|
123
|
+
- route_soap_spec.rb
|
124
|
+
has_rdoc:
|