pinstripe 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.pinstripe +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +24 -0
- data/LICENSE +20 -0
- data/README.md +5 -0
- data/Rakefile +10 -0
- data/exe/pinstripe +4 -0
- data/lib/pinstripe/call_handler.rb +12 -0
- data/lib/pinstripe/command.rb +20 -0
- data/lib/pinstripe/commands/list_commands.rb +16 -0
- data/lib/pinstripe/commands/start_console.rb +14 -0
- data/lib/pinstripe/concern.rb +19 -0
- data/lib/pinstripe/database/row.rb +48 -0
- data/lib/pinstripe/database/table.rb +131 -0
- data/lib/pinstripe/database/table_alias_manager.rb +20 -0
- data/lib/pinstripe/database/union.rb +20 -0
- data/lib/pinstripe/database.rb +56 -0
- data/lib/pinstripe/helper.rb +20 -0
- data/lib/pinstripe/helpers.rb +8 -0
- data/lib/pinstripe/inflector/inflections.rb +122 -0
- data/lib/pinstripe/inflector.rb +28 -0
- data/lib/pinstripe/monkey_patches/pluralize.rb +8 -0
- data/lib/pinstripe/monkey_patches/require_all.rb +18 -0
- data/lib/pinstripe/monkey_patches/singularize.rb +8 -0
- data/lib/pinstripe/monkey_patches/to_params_hash.rb +20 -0
- data/lib/pinstripe/params_hash.rb +44 -0
- data/lib/pinstripe/project.rb +29 -0
- data/lib/pinstripe/registry.rb +46 -0
- data/lib/pinstripe/resource_factories/call_handler.rb +8 -0
- data/lib/pinstripe/resource_factories/env.rb +9 -0
- data/lib/pinstripe/resource_factories/environment.rb +8 -0
- data/lib/pinstripe/resource_factories/project.rb +8 -0
- data/lib/pinstripe/resource_factory.rb +32 -0
- data/lib/pinstripe/resource_provider.rb +50 -0
- data/lib/pinstripe/version.rb +3 -0
- data/lib/pinstripe/workspace.rb +8 -0
- data/lib/pinstripe.rb +24 -0
- data/package.json +15 -0
- data/pinstripe +4 -0
- data/pinstripe.gemspec +38 -0
- data/rollup.config.js +19 -0
- data/web/javascripts/_pinstripe/event_wrapper.js +29 -0
- data/web/javascripts/_pinstripe/index.js +3 -0
- data/web/javascripts/_pinstripe/initialize.js +29 -0
- data/web/javascripts/_pinstripe/node_wrapper.js +354 -0
- data/web/javascripts/_pinstripe/node_wrappers/anchor.js +56 -0
- data/web/javascripts/_pinstripe/node_wrappers/document.js +27 -0
- data/web/javascripts/_pinstripe/node_wrappers/form.js +52 -0
- data/web/javascripts/_pinstripe/node_wrappers/frame.js +72 -0
- data/web/javascripts/_pinstripe/node_wrappers/index.js +8 -0
- data/web/javascripts/_pinstripe/node_wrappers/input.js +23 -0
- data/web/javascripts/_pinstripe/node_wrappers/modal.js +36 -0
- data/web/javascripts/_pinstripe/node_wrappers/script.js +17 -0
- data/web/javascripts/_pinstripe/string_reader.js +24 -0
- data/web/javascripts/_pinstripe/url.js +94 -0
- data/web/javascripts/_pinstripe/util/benchmark.js +10 -0
- data/web/javascripts/_pinstripe/util/capitalize.js +4 -0
- data/web/javascripts/_pinstripe/util/index.js +4 -0
- data/web/javascripts/_pinstripe/util/unescape_html.js +13 -0
- data/web/javascripts/_pinstripe/virtual_node.js +156 -0
- data/yarn.lock +72 -0
- metadata +162 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
|
2
|
+
import { StringReader } from './string_reader'
|
3
|
+
|
4
|
+
export class Url {
|
5
|
+
|
6
|
+
static fromString(url, referenceUrl){
|
7
|
+
const out = new Url()
|
8
|
+
url = new StringReader(url)
|
9
|
+
if(!(referenceUrl instanceof Url)){
|
10
|
+
referenceUrl = Url.fromString(referenceUrl || window.location, new Url())
|
11
|
+
}
|
12
|
+
|
13
|
+
let matches;
|
14
|
+
|
15
|
+
if(matches = url.match(/^([a-z]+):\/\/([a-z\.-]+)/i)){
|
16
|
+
out.protocol = matches[1].toLowerCase()
|
17
|
+
out.host = matches[2].toLowerCase()
|
18
|
+
if(matches = url.match(/^:(\d+)/)){
|
19
|
+
out.port = parseInt(matches[1])
|
20
|
+
}
|
21
|
+
} else {
|
22
|
+
out.protocol = referenceUrl.protocol
|
23
|
+
out.host = referenceUrl.host
|
24
|
+
out.port = referenceUrl.port
|
25
|
+
}
|
26
|
+
|
27
|
+
if(matches = url.match(/^\/[^\?\#]*/)){
|
28
|
+
out.path = normalizePath(matches[0])
|
29
|
+
} else if(matches = url.match(/^[^\?\#]+/)){
|
30
|
+
out.path = normalizePath(`${referenceUrl.path.replace(/[^\/]*$/, '')}${matches[0]}`)
|
31
|
+
} else {
|
32
|
+
out.path = referenceUrl.path
|
33
|
+
}
|
34
|
+
|
35
|
+
if(matches = url.match(/^\?([^\#]*)/)){
|
36
|
+
matches[1].split(/&/).forEach((pair) => {
|
37
|
+
const [key, value] = pair.split(/=/)
|
38
|
+
out.params[decodeURIComponent(key)] = decodeURIComponent(value)
|
39
|
+
})
|
40
|
+
}
|
41
|
+
|
42
|
+
return out
|
43
|
+
}
|
44
|
+
|
45
|
+
constructor(protocol = 'http', host = 'localhost', port = 80, path = '/', params = {}){
|
46
|
+
this.protocol = protocol
|
47
|
+
this.host = host
|
48
|
+
this.port = port
|
49
|
+
this.path = path
|
50
|
+
this.params = params
|
51
|
+
}
|
52
|
+
|
53
|
+
toString(){
|
54
|
+
const out = [`${this.protocol}://${this.host}`]
|
55
|
+
|
56
|
+
const defaultPort = this.protocol == 'https' ? 443 : 80
|
57
|
+
if(this.port != defaultPort){
|
58
|
+
out.push(`:${this.port}`)
|
59
|
+
}
|
60
|
+
|
61
|
+
out.push(this.path)
|
62
|
+
|
63
|
+
const pairs = []
|
64
|
+
Object.keys(this.params).forEach((key) => {
|
65
|
+
pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(this.params[key])}`)
|
66
|
+
})
|
67
|
+
if(pairs.length > 0){
|
68
|
+
out.push(`?${pairs.join('&')}`)
|
69
|
+
}
|
70
|
+
|
71
|
+
return out.join('')
|
72
|
+
}
|
73
|
+
|
74
|
+
get defaultPort(){
|
75
|
+
if(this.protocol == 'https'){
|
76
|
+
return 443
|
77
|
+
} else {
|
78
|
+
return 80
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
}
|
83
|
+
|
84
|
+
function normalizePath(path){
|
85
|
+
const out = []
|
86
|
+
path.split(/\//).forEach((segment) => {
|
87
|
+
if(segment == '..'){
|
88
|
+
out.pop()
|
89
|
+
} else if(segment != '.'){
|
90
|
+
out.push(segment);
|
91
|
+
}
|
92
|
+
})
|
93
|
+
return out.join('/');
|
94
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
const element = document.createElement('div')
|
3
|
+
const entityCache = {};
|
4
|
+
|
5
|
+
export function unescapeHtml(string){
|
6
|
+
return string.replace(/&[^\s;]+;{0,1}/gi, function(entity){
|
7
|
+
if(!entityCache[entity]){
|
8
|
+
element.innerHTML = string
|
9
|
+
entityCache[entity] = element.childNodes.length == 0 ? "" : element.childNodes[0].nodeValue
|
10
|
+
}
|
11
|
+
return entityCache[entity]
|
12
|
+
})
|
13
|
+
}
|
@@ -0,0 +1,156 @@
|
|
1
|
+
|
2
|
+
import { unescapeHtml } from './util'
|
3
|
+
import { StringReader } from './string_reader'
|
4
|
+
|
5
|
+
const SELF_CLOSING_TAGS = [
|
6
|
+
'area',
|
7
|
+
'base',
|
8
|
+
'br',
|
9
|
+
'embed',
|
10
|
+
'hr',
|
11
|
+
'iframe',
|
12
|
+
'img',
|
13
|
+
'input',
|
14
|
+
'link',
|
15
|
+
'meta',
|
16
|
+
'param',
|
17
|
+
'source',
|
18
|
+
'track'
|
19
|
+
]
|
20
|
+
|
21
|
+
const TEXT_ONLY_TAGS = [
|
22
|
+
'script',
|
23
|
+
'style'
|
24
|
+
]
|
25
|
+
|
26
|
+
class CloseTag {
|
27
|
+
|
28
|
+
constructor(type){
|
29
|
+
this.type = type
|
30
|
+
}
|
31
|
+
|
32
|
+
}
|
33
|
+
|
34
|
+
export class VirtualNode {
|
35
|
+
|
36
|
+
static fromString(html){
|
37
|
+
const out = new this()
|
38
|
+
out.appendHtml(html)
|
39
|
+
out.normalize()
|
40
|
+
return out
|
41
|
+
}
|
42
|
+
|
43
|
+
constructor(parent = null, type = '#fragment', attributes = {}){
|
44
|
+
this.parent = parent
|
45
|
+
this.type = type
|
46
|
+
this.attributes = attributes
|
47
|
+
this.children = []
|
48
|
+
}
|
49
|
+
|
50
|
+
appendNode(type, attributes = {}){
|
51
|
+
const out = new this.constructor(this, type, attributes)
|
52
|
+
this.children.push(out)
|
53
|
+
return out
|
54
|
+
}
|
55
|
+
|
56
|
+
appendHtml(html){
|
57
|
+
if(!(html instanceof StringReader)){
|
58
|
+
html = new StringReader(html)
|
59
|
+
|
60
|
+
while(html.length > 0){
|
61
|
+
try {
|
62
|
+
this.appendHtml(html)
|
63
|
+
} catch(e){
|
64
|
+
if(e instanceof CloseTag){
|
65
|
+
//do nothing
|
66
|
+
} else {
|
67
|
+
throw e
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
return this
|
73
|
+
}
|
74
|
+
|
75
|
+
while(html.length > 0){
|
76
|
+
let matches;
|
77
|
+
|
78
|
+
if(matches = html.match(/^[^<]+/)){
|
79
|
+
this.appendNode('#text', {value: matches[0]})
|
80
|
+
} else if(matches = html.match(/^<!DOCTYPE[^>]*>/i)){
|
81
|
+
if(!this.parent){
|
82
|
+
this.appendNode('#doctype')
|
83
|
+
}
|
84
|
+
} else if(matches = html.match(/^<!--([\s\S]*?)-->/i)){
|
85
|
+
this.appendNode('#comment', {value: matches[1]})
|
86
|
+
} else if(matches = html.match(/^<([^>\s]+)/)){
|
87
|
+
const type = matches[1].toLowerCase()
|
88
|
+
const attributes = {}
|
89
|
+
|
90
|
+
while(html.length > 0){
|
91
|
+
if(matches = html.match(/^\s*([\w-]+)\s*=\s*\"([^\">]*)\"/)){
|
92
|
+
attributes[matches[1]] = unescapeHtml(matches[2])
|
93
|
+
} else if(matches = html.match(/^\s*([\w-]+)\s*=\s*\'([^\'>]*)\'/)){
|
94
|
+
attributes[matches[1]] = unescapeHtml(matches[2])
|
95
|
+
} else if(matches = html.match(/^\s*([\w-]+)\s*=\s*([^\s>]+)/)){
|
96
|
+
attributes[matches[1]] = unescapeHtml(matches[2])
|
97
|
+
} else if(matches = html.match(/^\s*([\w-]+)/)){
|
98
|
+
attributes[matches[1]] = null
|
99
|
+
} else {
|
100
|
+
html.match(/^[^>]*>/)
|
101
|
+
break
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
if(matches = type.match(/^\/(.*)/)){
|
106
|
+
throw new CloseTag(matches[1])
|
107
|
+
}
|
108
|
+
|
109
|
+
const child = this.appendNode(type, attributes)
|
110
|
+
|
111
|
+
if(SELF_CLOSING_TAGS.includes(type)){
|
112
|
+
// do nothing
|
113
|
+
} else if(TEXT_ONLY_TAGS.includes(type) && (matches = html.match(new RegExp(`^([\\s\\S]*?)<\\/${type}[^>]*>`)))){
|
114
|
+
child.appendNode('#text', {value: matches[1]})
|
115
|
+
} else if(TEXT_ONLY_TAGS.includes(type) && (matches = html.match(/^([\s\S]+)/))){
|
116
|
+
child.appendNode('#text', {value: matches[1]})
|
117
|
+
} else {
|
118
|
+
try {
|
119
|
+
child.appendHtml(html)
|
120
|
+
} catch(e){
|
121
|
+
if(e instanceof CloseTag && e.type == type){
|
122
|
+
//do nothing
|
123
|
+
} else {
|
124
|
+
throw e
|
125
|
+
}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
} else if(matches = html.match(/^[\s\S]/)) {
|
129
|
+
this.appendNode('#text', {value: matches[0]})
|
130
|
+
} else {
|
131
|
+
break;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
}
|
136
|
+
|
137
|
+
normalize(){
|
138
|
+
if(!this.parent && this.children.some(child => child.type == 'html')){
|
139
|
+
this.children = [
|
140
|
+
new this.constructor(this, '#doctype'),
|
141
|
+
...this.children.filter(child => child.type == 'html')
|
142
|
+
]
|
143
|
+
}
|
144
|
+
|
145
|
+
if(this.type == '#text'){
|
146
|
+
this.attributes.value = this.attributes.value.replace(/\r\n/g, '\n').replace(/\r/g, '\n')
|
147
|
+
}
|
148
|
+
|
149
|
+
if(this.parent && this.parent.type == 'textarea' && this.type == '#text'){
|
150
|
+
this.attributes.value = this.attributes.value.replace(/^\n/, '')
|
151
|
+
}
|
152
|
+
|
153
|
+
this.children.forEach(child => child.normalize())
|
154
|
+
}
|
155
|
+
|
156
|
+
}
|
data/yarn.lock
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
+
# yarn lockfile v1
|
3
|
+
|
4
|
+
|
5
|
+
"@types/node@*":
|
6
|
+
version "13.13.2"
|
7
|
+
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54"
|
8
|
+
integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A==
|
9
|
+
|
10
|
+
"@types/resolve@0.0.8":
|
11
|
+
version "0.0.8"
|
12
|
+
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194"
|
13
|
+
integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==
|
14
|
+
dependencies:
|
15
|
+
"@types/node" "*"
|
16
|
+
|
17
|
+
builtin-modules@^3.1.0:
|
18
|
+
version "3.1.0"
|
19
|
+
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484"
|
20
|
+
integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==
|
21
|
+
|
22
|
+
estree-walker@^0.6.1:
|
23
|
+
version "0.6.1"
|
24
|
+
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
|
25
|
+
integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
|
26
|
+
|
27
|
+
fsevents@~2.1.2:
|
28
|
+
version "2.1.3"
|
29
|
+
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
|
30
|
+
integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
|
31
|
+
|
32
|
+
is-module@^1.0.0:
|
33
|
+
version "1.0.0"
|
34
|
+
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
|
35
|
+
integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
|
36
|
+
|
37
|
+
path-parse@^1.0.6:
|
38
|
+
version "1.0.6"
|
39
|
+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
40
|
+
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
41
|
+
|
42
|
+
resolve@^1.11.1:
|
43
|
+
version "1.16.1"
|
44
|
+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.16.1.tgz#49fac5d8bacf1fd53f200fa51247ae736175832c"
|
45
|
+
integrity sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==
|
46
|
+
dependencies:
|
47
|
+
path-parse "^1.0.6"
|
48
|
+
|
49
|
+
rollup-plugin-node-resolve@^5.2.0:
|
50
|
+
version "5.2.0"
|
51
|
+
resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523"
|
52
|
+
integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==
|
53
|
+
dependencies:
|
54
|
+
"@types/resolve" "0.0.8"
|
55
|
+
builtin-modules "^3.1.0"
|
56
|
+
is-module "^1.0.0"
|
57
|
+
resolve "^1.11.1"
|
58
|
+
rollup-pluginutils "^2.8.1"
|
59
|
+
|
60
|
+
rollup-pluginutils@^2.8.1:
|
61
|
+
version "2.8.2"
|
62
|
+
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
|
63
|
+
integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
|
64
|
+
dependencies:
|
65
|
+
estree-walker "^0.6.1"
|
66
|
+
|
67
|
+
rollup@^2.0.2:
|
68
|
+
version "2.7.1"
|
69
|
+
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.7.1.tgz#d571e49a35b1c923fe9cf6f7290dba2482864fdc"
|
70
|
+
integrity sha512-c1FCjY8HK1nAq0bTZHaR72ZknpP7p0EjxbcVc6BcmtOosurK//P5jtwxX+f/4fgtbrjczqf0uvR+EdtxpriE8g==
|
71
|
+
optionalDependencies:
|
72
|
+
fsevents "~2.1.2"
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pinstripe
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jody Salt
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-04-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mysql2
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.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: '13.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '13.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.0'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- jody@jodysalt.com
|
72
|
+
executables:
|
73
|
+
- pinstripe
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- ".pinstripe"
|
79
|
+
- Gemfile
|
80
|
+
- Gemfile.lock
|
81
|
+
- LICENSE
|
82
|
+
- README.md
|
83
|
+
- Rakefile
|
84
|
+
- exe/pinstripe
|
85
|
+
- lib/pinstripe.rb
|
86
|
+
- lib/pinstripe/call_handler.rb
|
87
|
+
- lib/pinstripe/command.rb
|
88
|
+
- lib/pinstripe/commands/list_commands.rb
|
89
|
+
- lib/pinstripe/commands/start_console.rb
|
90
|
+
- lib/pinstripe/concern.rb
|
91
|
+
- lib/pinstripe/database.rb
|
92
|
+
- lib/pinstripe/database/row.rb
|
93
|
+
- lib/pinstripe/database/table.rb
|
94
|
+
- lib/pinstripe/database/table_alias_manager.rb
|
95
|
+
- lib/pinstripe/database/union.rb
|
96
|
+
- lib/pinstripe/helper.rb
|
97
|
+
- lib/pinstripe/helpers.rb
|
98
|
+
- lib/pinstripe/inflector.rb
|
99
|
+
- lib/pinstripe/inflector/inflections.rb
|
100
|
+
- lib/pinstripe/monkey_patches/pluralize.rb
|
101
|
+
- lib/pinstripe/monkey_patches/require_all.rb
|
102
|
+
- lib/pinstripe/monkey_patches/singularize.rb
|
103
|
+
- lib/pinstripe/monkey_patches/to_params_hash.rb
|
104
|
+
- lib/pinstripe/params_hash.rb
|
105
|
+
- lib/pinstripe/project.rb
|
106
|
+
- lib/pinstripe/registry.rb
|
107
|
+
- lib/pinstripe/resource_factories/call_handler.rb
|
108
|
+
- lib/pinstripe/resource_factories/env.rb
|
109
|
+
- lib/pinstripe/resource_factories/environment.rb
|
110
|
+
- lib/pinstripe/resource_factories/project.rb
|
111
|
+
- lib/pinstripe/resource_factory.rb
|
112
|
+
- lib/pinstripe/resource_provider.rb
|
113
|
+
- lib/pinstripe/version.rb
|
114
|
+
- lib/pinstripe/workspace.rb
|
115
|
+
- package.json
|
116
|
+
- pinstripe
|
117
|
+
- pinstripe.gemspec
|
118
|
+
- rollup.config.js
|
119
|
+
- web/javascripts/_pinstripe/event_wrapper.js
|
120
|
+
- web/javascripts/_pinstripe/index.js
|
121
|
+
- web/javascripts/_pinstripe/initialize.js
|
122
|
+
- web/javascripts/_pinstripe/node_wrapper.js
|
123
|
+
- web/javascripts/_pinstripe/node_wrappers/anchor.js
|
124
|
+
- web/javascripts/_pinstripe/node_wrappers/document.js
|
125
|
+
- web/javascripts/_pinstripe/node_wrappers/form.js
|
126
|
+
- web/javascripts/_pinstripe/node_wrappers/frame.js
|
127
|
+
- web/javascripts/_pinstripe/node_wrappers/index.js
|
128
|
+
- web/javascripts/_pinstripe/node_wrappers/input.js
|
129
|
+
- web/javascripts/_pinstripe/node_wrappers/modal.js
|
130
|
+
- web/javascripts/_pinstripe/node_wrappers/script.js
|
131
|
+
- web/javascripts/_pinstripe/string_reader.js
|
132
|
+
- web/javascripts/_pinstripe/url.js
|
133
|
+
- web/javascripts/_pinstripe/util/benchmark.js
|
134
|
+
- web/javascripts/_pinstripe/util/capitalize.js
|
135
|
+
- web/javascripts/_pinstripe/util/index.js
|
136
|
+
- web/javascripts/_pinstripe/util/unescape_html.js
|
137
|
+
- web/javascripts/_pinstripe/virtual_node.js
|
138
|
+
- yarn.lock
|
139
|
+
homepage:
|
140
|
+
licenses:
|
141
|
+
- MIT
|
142
|
+
metadata: {}
|
143
|
+
post_install_message:
|
144
|
+
rdoc_options: []
|
145
|
+
require_paths:
|
146
|
+
- lib
|
147
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
requirements: []
|
158
|
+
rubygems_version: 3.0.6
|
159
|
+
signing_key:
|
160
|
+
specification_version: 4
|
161
|
+
summary: An entrepreneurial full stack web framework!
|
162
|
+
test_files: []
|