populate-me 0.0.27 → 0.0.32
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/.gitignore +8 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/lib/populate_me/mongo/crushyform.rb +4 -4
- data/lib/populate_me/mongo/mutation.rb +48 -21
- data/lib/populate_me/mongo/stash.rb +18 -8
- data/populate-me.gemspec +12 -3
- data/test/spec_ext.rb +1 -0
- data/test/spec_mongo_mutation.rb +17 -10
- metadata +89 -22
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c06dba10c3a16aaecd4bff9aa43dd9b85be0253c0f5456a69dd05c6a8d22d9ae
|
4
|
+
data.tar.gz: e8b380b450715787fcc60e1d69181cc1d98bed44be5d5a064c2856f481f8e18f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: '0905a6876cd39098d7c30fc86f5604abf64d8a75086b267c8b05b098d8f60e4b023461c0a9718ecd5f3f0f46c610437cc7e2ba9f83bd411172344050e331b05c'
|
7
|
+
data.tar.gz: ebe75ce21a787a0ba8bec25665089a3b9e5217e88e768f937cabf038b74353b885c6d09a4b6769a65da630f79fc35524eaf76751bcf79299b692f98751e61cde
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2017 Mickael Riga
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
20
|
+
|
@@ -76,7 +76,7 @@ module PopulateMe
|
|
76
76
|
end,
|
77
77
|
:attachment => proc do |m,c,o|
|
78
78
|
deleter = "<input type='checkbox' name='#{o[:input_name]}' class='deleter' value='nil' /> Delete this file<br />" unless m.doc[c].nil?
|
79
|
-
"%s
|
79
|
+
"%s<input type='file' name='%s' id='%s' class='%s' />%s %s\n" % [m.to_thumb(c), o[:input_name], m.field_id_for(c), o[:input_class], o[:required], deleter]
|
80
80
|
end,
|
81
81
|
:select => proc do |m,c,o|
|
82
82
|
# starter ensures it sends something when multiple is empty
|
@@ -100,13 +100,13 @@ module PopulateMe
|
|
100
100
|
select_options.each do |op|
|
101
101
|
key,val = op.kind_of?(Array) ? [op[0],op[1]] : [op,op]
|
102
102
|
if key==:optgroup
|
103
|
-
out << "<optgroup label
|
103
|
+
out << "<optgroup label=\"%s\">\n" % [val]
|
104
104
|
elsif key==:closegroup
|
105
105
|
out << "</optgroup>\n"
|
106
106
|
else
|
107
107
|
# Array case is for multiple select
|
108
108
|
selected = 'selected' if (val==o[:input_value] || (o[:input_value].kind_of?(Array)&&o[:input_value].include?(val)))
|
109
|
-
out << "<option value
|
109
|
+
out << "<option value=\"%s\" %s>%s</option>\n" % [val,selected,key]
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
@@ -188,7 +188,7 @@ module PopulateMe
|
|
188
188
|
end
|
189
189
|
def dropdown_cache
|
190
190
|
@dropdown_cache ||= self.find({},:fields=>['_id',label_column]).inject([]) do |out,row|
|
191
|
-
out.push([row.to_label, row.id.to_s, "<option value
|
191
|
+
out.push([row.to_label, row.id.to_s, "<option value=\"#{row.id}\" ", ">#{row.to_label}</option>\n"])
|
192
192
|
end
|
193
193
|
end
|
194
194
|
def reset_dropdown_cache; @dropdown_cache = nil; end
|
@@ -9,8 +9,8 @@ module PopulateMe
|
|
9
9
|
def self.included(weak)
|
10
10
|
weak.extend(MutateClass)
|
11
11
|
weak.db = DB if defined?(DB)
|
12
|
-
weak.schema =
|
13
|
-
weak.relationships =
|
12
|
+
weak.schema = {}
|
13
|
+
weak.relationships = {}
|
14
14
|
end
|
15
15
|
|
16
16
|
module MutateClass
|
@@ -38,6 +38,13 @@ module PopulateMe
|
|
38
38
|
def find(selector={},opts={})
|
39
39
|
selector.update(opts.delete(:selector)||{})
|
40
40
|
opts = {:sort=>self.sorting_order}.update(opts)
|
41
|
+
if opts.key?(:fields)
|
42
|
+
opts[:projection] = opts[:fields].inject({}) do |h, f|
|
43
|
+
h[f.to_sym] = 1
|
44
|
+
h
|
45
|
+
end
|
46
|
+
opts.delete(:fields)
|
47
|
+
end
|
41
48
|
cur = collection.find(selector,opts)
|
42
49
|
cur.instance_variable_set('@mutant_class', self)
|
43
50
|
cur.extend(CursorMutation)
|
@@ -45,30 +52,36 @@ module PopulateMe
|
|
45
52
|
def find_one(spec_or_object_id=nil,opts={})
|
46
53
|
spec_or_object_id.nil? ? spec_or_object_id = opts.delete(:selector) : spec_or_object_id.update(opts.delete(:selector)||{})
|
47
54
|
opts = {:sort=>self.sorting_order}.update(opts)
|
48
|
-
item = collection.
|
55
|
+
item = collection.find(spec_or_object_id,opts).first
|
49
56
|
item.nil? ? nil : self.new(item)
|
50
57
|
end
|
51
58
|
def count(opts={}); collection.count(opts); end
|
52
59
|
|
53
60
|
def sorting_order
|
54
61
|
@sorting_order ||= if @schema.key?('position')&&!@schema['position'][:scope].nil?
|
55
|
-
|
62
|
+
{@schema['position'][:scope] => 1, 'position' => 1}
|
56
63
|
elsif @schema.key?('position')
|
57
|
-
|
64
|
+
{'position' => 1, '_id' => 1}
|
58
65
|
else
|
59
|
-
|
66
|
+
{'_id' => 1}
|
60
67
|
end
|
61
68
|
end
|
62
69
|
|
63
|
-
def sort(
|
64
|
-
|
65
|
-
|
70
|
+
def sort(ids)
|
71
|
+
requests = ids.each_with_index.inject([]) do |list, (id, i)|
|
72
|
+
list << {update_one:
|
73
|
+
{
|
74
|
+
filter: ref(id),
|
75
|
+
update: {'$set'=>{'position'=>i}}
|
76
|
+
}
|
77
|
+
}
|
66
78
|
end
|
79
|
+
collection.bulk_write requests
|
67
80
|
end
|
68
81
|
|
69
82
|
# CRUD
|
70
|
-
def get(id, opts={}); doc = collection.
|
71
|
-
def delete(id); collection.
|
83
|
+
def get(id, opts={}); doc = collection.find(ref(id), opts).first; doc.nil? ? nil : self.new(doc); end
|
84
|
+
def delete(id); collection.delete_one(ref(id)); end
|
72
85
|
|
73
86
|
def get_multiple(ids, opts={})
|
74
87
|
corrected_ids = ids.map{|id| correct_id_class(id) }
|
@@ -169,7 +182,7 @@ module PopulateMe
|
|
169
182
|
def children_count(k,sel={})
|
170
183
|
k = resolve_class(k)
|
171
184
|
slot_name = sel.delete(:slot_name) || model.foreign_key_name
|
172
|
-
k.collection.count(
|
185
|
+
k.collection.count({slot_name=>@doc['_id'].to_s}.update(sel))
|
173
186
|
end
|
174
187
|
|
175
188
|
# CRUD
|
@@ -181,7 +194,12 @@ module PopulateMe
|
|
181
194
|
|
182
195
|
# saving and hooks
|
183
196
|
def new?; @is_new ||= !@doc.key?('_id'); end
|
184
|
-
def update_doc(fields)
|
197
|
+
def update_doc(fields)
|
198
|
+
@old_doc = @doc.dup
|
199
|
+
@doc.update(fields)
|
200
|
+
@is_new = false
|
201
|
+
self
|
202
|
+
end
|
185
203
|
# Getter and setter in one
|
186
204
|
def errors_on(col,message=nil)
|
187
205
|
message.nil? ? @errors[col] : @errors[col] = (@errors[col]||[]) << message
|
@@ -206,7 +224,7 @@ module PopulateMe
|
|
206
224
|
next unless model.schema.key?(k)
|
207
225
|
type = k=='_id' ? :primary_key : model.schema[k][:type]
|
208
226
|
fix_method = "fix_type_#{type}"
|
209
|
-
if v==''
|
227
|
+
if v=='' and type!=:attachment
|
210
228
|
default = model.schema[k][:default]
|
211
229
|
@doc[k] = default.is_a?(Proc) ? default.call : default
|
212
230
|
else
|
@@ -256,16 +274,18 @@ module PopulateMe
|
|
256
274
|
before_save
|
257
275
|
if new?
|
258
276
|
before_create
|
259
|
-
|
260
|
-
@doc['_id']
|
277
|
+
result = model.collection.insert_one(@doc)
|
278
|
+
if result.ok? and @doc['_id'].nil?
|
279
|
+
@doc['_id'] = result.inserted_id
|
280
|
+
end
|
261
281
|
after_create
|
262
282
|
else
|
263
283
|
before_update
|
264
|
-
|
284
|
+
result = model.collection.update_one({'_id'=>@doc['_id']}, @doc)
|
265
285
|
after_update
|
266
286
|
end
|
267
287
|
after_save
|
268
|
-
|
288
|
+
result.ok? ? self : nil
|
269
289
|
end
|
270
290
|
def before_save; end
|
271
291
|
def before_create; end
|
@@ -283,9 +303,16 @@ module PopulateMe
|
|
283
303
|
# so we should extend on demand.
|
284
304
|
# Meaning the cursor object should be extended, not the cursor class.
|
285
305
|
# @mutant_class should be defined before extending
|
286
|
-
|
287
|
-
|
288
|
-
|
306
|
+
#
|
307
|
+
# def next
|
308
|
+
# n = super
|
309
|
+
# n.nil? ? nil : @mutant_class.new(n)
|
310
|
+
# end
|
311
|
+
#
|
312
|
+
def each
|
313
|
+
super do |doc|
|
314
|
+
yield @mutant_class.new(doc)
|
315
|
+
end if block_given?
|
289
316
|
end
|
290
317
|
# legacy
|
291
318
|
def each_mutant(&b); each(&b); end
|
@@ -45,8 +45,14 @@ module PopulateMe
|
|
45
45
|
delete_files_for(k) unless new?
|
46
46
|
@temp_attachments ||= {}
|
47
47
|
@temp_attachments[k] = v
|
48
|
-
attachment_id = model.gridfs.
|
48
|
+
attachment_id = model.gridfs.upload_from_stream(
|
49
|
+
v[:filename],
|
50
|
+
v[:tempfile], {
|
51
|
+
:content_type=>v[:type]
|
52
|
+
})
|
49
53
|
@doc[k] = {'original'=>attachment_id}
|
54
|
+
else # Untouched
|
55
|
+
@doc[k] = @old_doc[k]
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
@@ -80,17 +86,17 @@ module PopulateMe
|
|
80
86
|
def convert(col, convert_steps, style)
|
81
87
|
return if @doc[col].nil?
|
82
88
|
if @temp_attachments.nil? || @temp_attachments[col].nil?
|
83
|
-
f = model.gridfs.
|
89
|
+
f = model.gridfs.find({'_id'=>@doc[col]['original']}).first
|
84
90
|
return if f.nil?
|
85
|
-
return unless f.content_type[/^image\//]
|
86
91
|
src = Tempfile.new('MongoStash_src')
|
87
92
|
src.binmode
|
88
|
-
|
93
|
+
model.gridfs.download_to_stream(@doc[col]['original'], src)
|
94
|
+
return unless f['contentType'].to_s[/^image\//]
|
89
95
|
src.close
|
90
96
|
@temp_attachments ||= {}
|
91
97
|
@temp_attachments[col] ||= {}
|
92
98
|
@temp_attachments[col][:tempfile] = src
|
93
|
-
@temp_attachments[col][:type] = f
|
99
|
+
@temp_attachments[col][:type] = f['contentType']
|
94
100
|
else
|
95
101
|
return unless @temp_attachments[col][:type][/^image\//]
|
96
102
|
src = @temp_attachments[col][:tempfile]
|
@@ -107,9 +113,13 @@ module PopulateMe
|
|
107
113
|
dest.close
|
108
114
|
system "convert \"#{src.path}\" #{convert_steps} \"#{dest.path}\""
|
109
115
|
filename = "#{model.name}/#{self.id}/#{style}"
|
110
|
-
attachment_id = model.gridfs.
|
116
|
+
attachment_id = model.gridfs.upload_from_stream(
|
117
|
+
filename,
|
118
|
+
dest.open,
|
119
|
+
{:content_type=>content_type}
|
120
|
+
)
|
111
121
|
@doc[col] = @doc[col].update({style=>attachment_id})
|
112
|
-
model.collection.
|
122
|
+
model.collection.update_one({'_id'=>@doc['_id']}, @doc)
|
113
123
|
#src.close!
|
114
124
|
dest.close!
|
115
125
|
end
|
@@ -138,7 +148,7 @@ module PopulateMe
|
|
138
148
|
next if old_hash==fixed_hash
|
139
149
|
|
140
150
|
if for_real
|
141
|
-
c.collection.
|
151
|
+
c.collection.update_one({'_id'=>e.id}, {'$set'=>fixed_hash})
|
142
152
|
else
|
143
153
|
puts old_hash.inspect
|
144
154
|
puts fixed_hash.inspect
|
data/populate-me.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'populate-me'
|
3
|
-
s.version =
|
3
|
+
s.version = '0.0.32'
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.summary = "ALPHA !!! Populate Me is relatively complete but simple CMS"
|
6
6
|
s.description = "ALPHA !!! Populate Me is relatively complete but simple CMS. It includes a Rack middleware for putting in your Rack stack, and a bespoke MongoDB ODM. But Populate Me is not really finished yet."
|
@@ -9,7 +9,16 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.author = "Mickael Riga"
|
10
10
|
s.email = "mig@mypeplum.com"
|
11
11
|
s.homepage = "https://github.com/mig-hub/populate-me"
|
12
|
-
s.
|
13
|
-
|
12
|
+
s.licenses = ['MIT']
|
13
|
+
|
14
|
+
s.add_dependency 'rack-golem', '~> 0'
|
15
|
+
s.add_dependency 'json', '~> 2.1'
|
16
|
+
s.add_dependency 'mongo', '~> 2.0'
|
17
|
+
|
18
|
+
s.add_development_dependency 'bundler', '~> 1.13'
|
19
|
+
s.add_development_dependency 'bacon', '~> 1.2'
|
20
|
+
s.add_development_dependency 'rack-test', '~> 0.6'
|
21
|
+
s.add_development_dependency 'racksh', '~> 1.0'
|
22
|
+
|
14
23
|
end
|
15
24
|
|
data/test/spec_ext.rb
CHANGED
data/test/spec_mongo_mutation.rb
CHANGED
@@ -8,12 +8,12 @@ require 'rack/utils'
|
|
8
8
|
$:.unshift './lib'
|
9
9
|
require 'populate_me/mongo'
|
10
10
|
|
11
|
-
MONGO =
|
11
|
+
MONGO = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test-mongo-mutation')
|
12
12
|
class NoDB
|
13
13
|
include PopulateMe::Mongo::Plug
|
14
14
|
def self.human_name; 'No DB'; end
|
15
15
|
end
|
16
|
-
DB = MONGO
|
16
|
+
DB = MONGO.database
|
17
17
|
|
18
18
|
class Naked; include PopulateMe::Mongo::Plug; end
|
19
19
|
|
@@ -54,21 +54,21 @@ describe "PopulateMe::Mongo::Mutation" do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
shared "Empty
|
58
|
-
it "Should be set to an empty
|
59
|
-
@bson.class.should
|
57
|
+
shared "Empty Hash" do
|
58
|
+
it "Should be set to an empty hash by default" do
|
59
|
+
@bson.class.should==Hash
|
60
60
|
@bson.empty?.should==true
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
describe ".schema" do
|
65
65
|
before { @bson = Naked.schema }
|
66
|
-
behaves_like "Empty
|
66
|
+
behaves_like "Empty Hash"
|
67
67
|
end
|
68
68
|
|
69
69
|
describe ".relationships" do
|
70
70
|
before { @bson = Naked.relationships }
|
71
|
-
behaves_like "Empty
|
71
|
+
behaves_like "Empty Hash"
|
72
72
|
end
|
73
73
|
|
74
74
|
describe ".human_name" do
|
@@ -102,9 +102,14 @@ describe "PopulateMe::Mongo::Mutation" do
|
|
102
102
|
BSON::ObjectId.legal?(string_id).should==true
|
103
103
|
Address.ref(string_id).should=={'_id'=>BSON::ObjectId.from_string(string_id)}
|
104
104
|
end
|
105
|
+
it 'Makes a selector for multiple docs if argument is an Array' do
|
106
|
+
Address.ref([]).should=={'_id'=>{'$in'=>[]}}
|
107
|
+
id = BSON::ObjectId.new
|
108
|
+
string_id = '000000000000000000000000'
|
109
|
+
Address.ref([id,string_id]).should=={'_id'=>{'$in'=>[id,BSON::ObjectId.from_string(string_id)]}}
|
110
|
+
end
|
105
111
|
it 'Just put an empty string in selector for any invalid argument' do
|
106
112
|
Address.ref('abc').should=={'_id'=>''}
|
107
|
-
Address.ref([]).should=={'_id'=>''}
|
108
113
|
end
|
109
114
|
end
|
110
115
|
|
@@ -262,11 +267,13 @@ describe "PopulateMe::Mongo::Mutation" do
|
|
262
267
|
describe 'CursorMutation' do
|
263
268
|
it 'Should give the correct class of object on iterations' do
|
264
269
|
Address.new('body'=>'42').save
|
265
|
-
Address.find.
|
270
|
+
Address.find.each do |a|
|
271
|
+
a.model.name.should=='Address'
|
272
|
+
end
|
266
273
|
end
|
267
274
|
end
|
268
275
|
|
269
276
|
end
|
270
277
|
|
271
|
-
|
278
|
+
DB.drop
|
272
279
|
|
metadata
CHANGED
@@ -1,48 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: populate-me
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.32
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mickael Riga
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2020-06-03 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack-golem
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: json
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
33
|
+
version: '2.1'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
40
|
+
version: '2.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mongo
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.13'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.13'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bacon
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.2'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.2'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack-test
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.6'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.6'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: racksh
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.0'
|
46
111
|
description: ALPHA !!! Populate Me is relatively complete but simple CMS. It includes
|
47
112
|
a Rack middleware for putting in your Rack stack, and a bespoke MongoDB ODM. But
|
48
113
|
Populate Me is not really finished yet.
|
@@ -51,6 +116,9 @@ executables: []
|
|
51
116
|
extensions: []
|
52
117
|
extra_rdoc_files: []
|
53
118
|
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- Gemfile
|
121
|
+
- LICENSE
|
54
122
|
- README.md
|
55
123
|
- lib/populate_me/control.rb
|
56
124
|
- lib/populate_me/control/_public/css/main.css
|
@@ -98,27 +166,26 @@ files:
|
|
98
166
|
- test/spec_ext.rb
|
99
167
|
- test/spec_mongo_mutation.rb
|
100
168
|
homepage: https://github.com/mig-hub/populate-me
|
101
|
-
licenses:
|
169
|
+
licenses:
|
170
|
+
- MIT
|
171
|
+
metadata: {}
|
102
172
|
post_install_message:
|
103
173
|
rdoc_options: []
|
104
174
|
require_paths:
|
105
|
-
- ./lib
|
175
|
+
- "./lib"
|
106
176
|
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
177
|
requirements:
|
109
|
-
- -
|
178
|
+
- - ">="
|
110
179
|
- !ruby/object:Gem::Version
|
111
180
|
version: '0'
|
112
181
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
182
|
requirements:
|
115
|
-
- -
|
183
|
+
- - ">="
|
116
184
|
- !ruby/object:Gem::Version
|
117
185
|
version: '0'
|
118
186
|
requirements: []
|
119
|
-
|
120
|
-
rubygems_version: 1.8.23
|
187
|
+
rubygems_version: 3.0.3
|
121
188
|
signing_key:
|
122
|
-
specification_version:
|
189
|
+
specification_version: 4
|
123
190
|
summary: ALPHA !!! Populate Me is relatively complete but simple CMS
|
124
191
|
test_files: []
|