populate-me 0.9.1 → 0.12.0
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 +4 -4
- data/lib/populate_me/admin.rb +2 -2
- data/lib/populate_me/admin/__assets__/css/main.css +15 -0
- data/lib/populate_me/admin/__assets__/js/main.js +24 -0
- data/lib/populate_me/admin/views/page.erb +4 -3
- data/lib/populate_me/document_mixins/admin_adapter.rb +7 -1
- data/lib/populate_me/document_mixins/schema.rb +10 -3
- data/lib/populate_me/mongo.rb +36 -2
- data/lib/populate_me/version.rb +1 -1
- data/populate-me.gemspec +1 -1
- data/test/test_admin.rb +15 -5
- data/test/test_document_outcasting.rb +16 -0
- data/test/test_document_schema.rb +23 -5
- data/test/test_mongo.rb +23 -3
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2770ba89bcfa96ad56baafdf141c67891317044051f44b117a8e6b438f7c432
|
4
|
+
data.tar.gz: f076278f23d91e5c59c141b39698c34a9083c5861ba01f41a3692d587bc0b73b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f952a4160015147d54bab9a504f189613521e33342561e95ae33710cb2c3929a9a9512a96d6b0ed2812571a3faa7c972f3b550556884e44c9c0cd7df19922ed0
|
7
|
+
data.tar.gz: cd10b6ec3d88432f6255803150c6c1b129b0ffab6a6736d92243238976cfbf295413ea5a1cd9251029edfd798cdead3ac98fcbf51cd3f415a0011702ada41c5b
|
data/lib/populate_me/admin.rb
CHANGED
@@ -62,10 +62,10 @@ class PopulateMe::Admin < Sinatra::Base
|
|
62
62
|
end
|
63
63
|
items = current_level.map do |l|
|
64
64
|
href = l[1].is_a?(String) ? l[1] : "#{request.script_name}/menu#{levels.map{|level|'/'+level}.join}/#{slugify(l[0])}"
|
65
|
-
{ title: l[0], href: href }
|
65
|
+
{ title: l[0], href: href, new_page: (not href.start_with?('/')) }
|
66
66
|
end
|
67
67
|
if request.path_info=='/menu'
|
68
|
-
items.push({title: '?', href: "#{request.script_name}/help"})
|
68
|
+
items.push({title: '?', href: "#{request.script_name}/help", new_page: false})
|
69
69
|
end
|
70
70
|
{
|
71
71
|
template: 'template_menu',
|
@@ -140,10 +140,25 @@ button.admin-delete:focus, button.admin-delete-nested:focus, .handle-button:focu
|
|
140
140
|
-ms-user-select: none;
|
141
141
|
user-select: none;
|
142
142
|
}
|
143
|
+
.documents.grid {
|
144
|
+
width: 90%; width: 90vw;
|
145
|
+
}
|
143
146
|
.documents > li, .nested-documents > li {
|
144
147
|
display: block;
|
145
148
|
margin-bottom: 1em;
|
146
149
|
}
|
150
|
+
.documents.grid > li {
|
151
|
+
display: inline-block;
|
152
|
+
vertical-align: top;
|
153
|
+
width: 200px;
|
154
|
+
margin-right: 1em;
|
155
|
+
}
|
156
|
+
.documents.grid > li > a {
|
157
|
+
word-break: break-word;
|
158
|
+
}
|
159
|
+
.documents.grid > li img {
|
160
|
+
width: 200px;
|
161
|
+
}
|
147
162
|
.documents > li:hover, .nested-documents > li:hover {
|
148
163
|
background-color: #eee8d5;
|
149
164
|
outline: 0.5em solid #eee8d5;
|
@@ -195,6 +195,30 @@ PopulateMe.init_column = function(c) {
|
|
195
195
|
// Init multiple select with asmSelect
|
196
196
|
$('select[multiple]', c).asmSelect({ sortable: true, removeLabel: '×' });
|
197
197
|
|
198
|
+
// Select with preview
|
199
|
+
$('select:not([multiple])', c).change(function() {
|
200
|
+
var $this = $(this);
|
201
|
+
var container;
|
202
|
+
if ($this.data('preview-container')) {
|
203
|
+
container = $($this.data('preview-container'), c);
|
204
|
+
} else {
|
205
|
+
container = $this.next('.preview-container');
|
206
|
+
}
|
207
|
+
if (container.size() == 0) return;
|
208
|
+
var path = $this.find(':selected:first').data('preview');
|
209
|
+
if (path) {
|
210
|
+
var img = container.find('img:first');
|
211
|
+
if (img.size() < 1) {
|
212
|
+
img = $("<img src='' alt='Preview' title='Preview' width='250' />");
|
213
|
+
container.html(img);
|
214
|
+
}
|
215
|
+
img.attr('src', path);
|
216
|
+
} else {
|
217
|
+
container.html('');
|
218
|
+
}
|
219
|
+
});
|
220
|
+
$('option:selected[data-preview]').parent().change();
|
221
|
+
|
198
222
|
// Polymorphic selector
|
199
223
|
$('select.polymorphic_type_values').change(function() {
|
200
224
|
var $this = $(this);
|
@@ -26,7 +26,7 @@
|
|
26
26
|
<h1>{{page_title}}</h1>
|
27
27
|
<ol class='menu'>
|
28
28
|
{{#items}}
|
29
|
-
<li><a href="{{href}}" class='column-push' title='Open'>{{title}}</a></li>
|
29
|
+
<li><a href="{{href}}" {{#new_page}}target='_blank'{{/new_page}}{{^new_page}}class='column-push'{{/new_page}} title='Open'>{{title}}</a></li>
|
30
30
|
{{/items}}
|
31
31
|
</ol>
|
32
32
|
</script>
|
@@ -46,7 +46,7 @@
|
|
46
46
|
{{/is_polymorphic}}
|
47
47
|
<a href="<%= request.script_name %>/form/{{dasherized_class_name}}{{#new_data}}?{{new_data}}{{/new_data}}" class='column-push new-document-btn' title='Create'>+</a>
|
48
48
|
</p>
|
49
|
-
<ol class='documents' data-sort-field='{{sort_field}}' data-sort-url='<%= request.script_name %>/api/{{dasherized_class_name}}'>
|
49
|
+
<ol class='documents {{#grid_view}}grid{{/grid_view}}' data-sort-field='{{sort_field}}' data-sort-url='<%= request.script_name %>/api/{{dasherized_class_name}}'>
|
50
50
|
{{#items}}{{#custom_partial_or_default}}template_document{{/custom_partial_or_default}}{{/items}}
|
51
51
|
</ol>
|
52
52
|
</script>
|
@@ -134,9 +134,10 @@
|
|
134
134
|
{{/multiple}}
|
135
135
|
<select name='{{input_name}}' {{#multiple}}multiple title='?'{{/multiple}}{{{build_input_attributes}}}>
|
136
136
|
{{#select_options}}
|
137
|
-
<option value='{{value}}' {{#selected}}selected{{/selected}}>{{description}}</option>
|
137
|
+
<option value='{{value}}' {{#selected}}selected{{/selected}} {{#preview_uri}}data-preview='{{preview_uri}}'{{/preview_uri}}>{{description}}</option>
|
138
138
|
{{/select_options}}
|
139
139
|
</select>
|
140
|
+
<div class='preview-container'></div>
|
140
141
|
</script>
|
141
142
|
|
142
143
|
<script id="template-attachment-field" type="x-tmpl-mustache">
|
@@ -76,11 +76,16 @@ module PopulateMe
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def admin_get id
|
79
|
+
return self.admin_get_multiple(id) if id.is_a?(Array)
|
79
80
|
self.cast do
|
80
|
-
documents.find{|doc| doc[id_string_key]==id }
|
81
|
+
documents.find{|doc| doc[id_string_key] == id }
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
85
|
+
def admin_get_multiple ids, o={sort: nil}
|
86
|
+
self.admin_find(o.merge(query: {id_string_key => {'$in' => ids.uniq.compact}}))
|
87
|
+
end
|
88
|
+
|
84
89
|
def admin_find o={}
|
85
90
|
o[:query] ||= {}
|
86
91
|
docs = self.cast{documents}.find_all do |d|
|
@@ -121,6 +126,7 @@ module PopulateMe
|
|
121
126
|
end
|
122
127
|
{
|
123
128
|
template: 'template_list',
|
129
|
+
grid_view: self.settings[:grid_view]==true,
|
124
130
|
page_title: self.to_s_short_plural,
|
125
131
|
dasherized_class_name: WebUtils.dasherize_class_name(self.name),
|
126
132
|
new_data: new_data,
|
@@ -160,13 +160,20 @@ module PopulateMe
|
|
160
160
|
|
161
161
|
def to_select_options o={}
|
162
162
|
proc do
|
163
|
-
items = self.admin_find(
|
163
|
+
items = self.admin_find({
|
164
|
+
query: (o[:query]||{}),
|
165
|
+
fields: [self.id_string_key, self.label_field, self.admin_image_field].compact.uniq
|
166
|
+
})
|
164
167
|
output = items.sort_by do |i|
|
165
168
|
i.to_s.downcase
|
166
169
|
end.map do |i|
|
167
|
-
|
170
|
+
item = { description: i.to_s, value: i.id }
|
171
|
+
unless self.admin_image_field.nil?
|
172
|
+
item.merge! preview_uri: i.admin_image_url
|
173
|
+
end
|
174
|
+
item
|
168
175
|
end
|
169
|
-
output.unshift(
|
176
|
+
output.unshift(description: '?', value: '') if o[:allow_empty]
|
170
177
|
output
|
171
178
|
end
|
172
179
|
end
|
data/lib/populate_me/mongo.rb
CHANGED
@@ -6,17 +6,43 @@ module PopulateMe
|
|
6
6
|
class MissingMongoDBError < StandardError; end
|
7
7
|
|
8
8
|
class Mongo < Document
|
9
|
+
|
10
|
+
self.settings.instance_eval do
|
11
|
+
def collection_name
|
12
|
+
puts 'yo'
|
13
|
+
if self[:collection_name].respond_to? :call
|
14
|
+
self[:collection_name].call
|
15
|
+
else
|
16
|
+
self[:collection_name]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
9
20
|
|
10
21
|
class << self
|
11
22
|
|
12
23
|
def inherited sub
|
13
24
|
super
|
14
|
-
|
25
|
+
# self.inherited is not useful anymore because we use ::collection_name
|
26
|
+
# so that the class name exist when this is run.
|
27
|
+
# Which is not the case with dynamically created classes.
|
28
|
+
#
|
29
|
+
# But we'll keep it for legacy code in the meantime.
|
30
|
+
# Decide if we want to keep it.
|
31
|
+
#
|
32
|
+
# If statment is here for dynamically created classes,
|
33
|
+
# because Class.new.name==nil and then it breaks (see tests).
|
34
|
+
unless sub.name.nil?
|
35
|
+
sub.set :collection_name, WebUtils.dasherize_class_name(sub.name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def collection_name
|
40
|
+
self.settings.collection_name || WebUtils.dasherize_class_name(self.name)
|
15
41
|
end
|
16
42
|
|
17
43
|
def collection
|
18
44
|
raise MissingMongoDBError, "Document class #{self.name} does not have a Mongo database." if settings.db.nil?
|
19
|
-
settings.db[
|
45
|
+
settings.db[self.collection_name]
|
20
46
|
end
|
21
47
|
|
22
48
|
def set_id_field
|
@@ -62,11 +88,19 @@ module PopulateMe
|
|
62
88
|
end
|
63
89
|
|
64
90
|
def admin_get theid
|
91
|
+
return self.admin_get_multiple(theid) if theid.is_a?(Array)
|
65
92
|
theid = string_or_object_id theid
|
66
93
|
self.cast{ collection.find({id_string_key => theid}).first }
|
67
94
|
end
|
68
95
|
alias_method :[], :admin_get
|
69
96
|
|
97
|
+
def admin_get_multiple theids, o={sort: nil}
|
98
|
+
theids = theids.uniq.compact.map{|theid| string_or_object_id(theid) }
|
99
|
+
self.admin_find(o.merge({
|
100
|
+
query: {id_string_key => {'$in' => theids} }
|
101
|
+
}))
|
102
|
+
end
|
103
|
+
|
70
104
|
def admin_find o={}
|
71
105
|
query = o.delete(:query) || {}
|
72
106
|
o[:sort] ||= @current_sort
|
data/lib/populate_me/version.rb
CHANGED
data/populate-me.gemspec
CHANGED
@@ -29,6 +29,6 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.add_development_dependency 'rack-grid-serve', '~> 0.0.8'
|
30
30
|
s.add_development_dependency 'aws-sdk-s3', '~> 1'
|
31
31
|
s.add_development_dependency 'racksh', '~> 1.0'
|
32
|
-
s.add_development_dependency 'rake', '
|
32
|
+
s.add_development_dependency 'rake', '>= 12.3.3'
|
33
33
|
end
|
34
34
|
|
data/test/test_admin.rb
CHANGED
@@ -124,6 +124,10 @@ describe PopulateMe::Admin do
|
|
124
124
|
|
125
125
|
describe 'Handlers' do
|
126
126
|
|
127
|
+
let(:help_item) {
|
128
|
+
{ 'title' => '?', 'href' => '/help', 'new_page' => false }
|
129
|
+
}
|
130
|
+
|
127
131
|
describe '/menu' do
|
128
132
|
|
129
133
|
describe 'when url is root' do
|
@@ -133,18 +137,22 @@ describe PopulateMe::Admin do
|
|
133
137
|
assert_json last_response
|
134
138
|
assert_for_view json, 'template_menu', 'Menu'
|
135
139
|
expected_h = {
|
136
|
-
'title'=> 'Home Details',
|
140
|
+
'title' => 'Home Details',
|
141
|
+
'href' => '/admin/form/home-details/0',
|
142
|
+
'new_page' => false
|
137
143
|
}
|
138
144
|
assert_equal expected_h, json['items'][0]
|
139
145
|
expected_h = {
|
140
|
-
'title'=> 'Project Page',
|
146
|
+
'title' => 'Project Page',
|
147
|
+
'href' => '/menu/project-page',
|
148
|
+
'new_page' => false
|
141
149
|
}
|
142
150
|
assert_equal expected_h, json['items'][1]
|
143
151
|
end
|
144
152
|
it 'Adds help link' do
|
145
153
|
get '/menu'
|
146
154
|
assert_equal 3, json['items'].size
|
147
|
-
assert_equal(
|
155
|
+
assert_equal(help_item, json['items'].last)
|
148
156
|
end
|
149
157
|
end
|
150
158
|
describe 'when url is nested' do
|
@@ -155,13 +163,15 @@ describe PopulateMe::Admin do
|
|
155
163
|
assert_for_view json, 'template_menu', 'Checks'
|
156
164
|
assert_equal 2, json['items'].size
|
157
165
|
expected_h = {
|
158
|
-
'title'=> 'Check 1',
|
166
|
+
'title' => 'Check 1',
|
167
|
+
'href' => '/check/1',
|
168
|
+
'new_page' => false
|
159
169
|
}
|
160
170
|
assert_equal expected_h, json['items'][0]
|
161
171
|
end
|
162
172
|
it 'Does not add help link' do
|
163
173
|
get '/menu/project-page/checks'
|
164
|
-
refute_equal(
|
174
|
+
refute_equal(help_item, json['items'].last)
|
165
175
|
end
|
166
176
|
end
|
167
177
|
|
@@ -11,6 +11,11 @@ class Outcasted < PopulateMe::Document
|
|
11
11
|
{description: 'medium', value: 'm'},
|
12
12
|
{description: 'large', value: 'l'}
|
13
13
|
]
|
14
|
+
field :availability, type: :select, select_options: [
|
15
|
+
{description: 'Available', value: 'yes', preview_uri: 'http://www.example.org/yes.jpg' },
|
16
|
+
{description: 'On offer', value: 'almost', preview_uri: 'http://www.example.org/almost.jpg' },
|
17
|
+
{description: 'Sold', value: 'no', preview_uri: 'http://www.example.org/no.jpg' }
|
18
|
+
]
|
14
19
|
field :tags, type: :select, select_options: ['art','sport','science'], multiple: true
|
15
20
|
field :related_properties, type: :select, select_options: ['prop1','prop2','prop3'], multiple: true
|
16
21
|
field :pdf, type: :attachment
|
@@ -98,6 +103,17 @@ describe PopulateMe::Document, 'Outcasting' do
|
|
98
103
|
formated_options?(original, output)
|
99
104
|
end
|
100
105
|
|
106
|
+
it 'Can have more fields when they are already formated' do
|
107
|
+
# Mainly for adding a preview_uri but also future tweaks
|
108
|
+
original = Outcasted.fields[:availability]
|
109
|
+
output = Outcasted.new.outcast(:availability, original, {input_name_prefix: 'data'})
|
110
|
+
assert(output[:select_options].all?{|o| o.key?(:preview_uri)})
|
111
|
+
last = output[:select_options].last
|
112
|
+
assert_equal 'Sold', last[:description]
|
113
|
+
assert_equal 'no', last[:value]
|
114
|
+
assert_equal 'http://www.example.org/no.jpg', last[:preview_uri]
|
115
|
+
end
|
116
|
+
|
101
117
|
it 'Formats the options when it is a 2 strings array' do
|
102
118
|
original = Outcasted.fields[:size].dup
|
103
119
|
original[:select_options] = [
|
@@ -85,12 +85,22 @@ describe PopulateMe::Document, 'Schema' do
|
|
85
85
|
label :slug
|
86
86
|
end
|
87
87
|
|
88
|
+
class Selectpreviewable < PopulateMe::Document
|
89
|
+
set :default_attachment_class, PopulateMe::Attachment
|
90
|
+
field :name
|
91
|
+
field :img, type: :attachment, variations: [
|
92
|
+
PopulateMe::Variation.default
|
93
|
+
]
|
94
|
+
end
|
95
|
+
|
88
96
|
before do
|
89
97
|
Selectoptionable.documents = []
|
90
98
|
Selectoptionable.new(id: '1', name: 'Joe', slug: 'joe').save
|
91
99
|
Selectoptionable.new(id: '2', name: 'William', slug: 'william').save
|
92
100
|
Selectoptionable.new(id: '3', name: 'Jack', slug: 'jack').save
|
93
101
|
Selectoptionable.new(id: '4', name: 'Averell', slug: 'averell').save
|
102
|
+
Selectpreviewable.documents = []
|
103
|
+
Selectpreviewable.new(id: '1', name: 'Project', img: 'project.jpg').save
|
94
104
|
end
|
95
105
|
|
96
106
|
after do
|
@@ -102,19 +112,27 @@ describe PopulateMe::Document, 'Schema' do
|
|
102
112
|
assert output_proc.is_a?(Proc)
|
103
113
|
output = output_proc.call
|
104
114
|
assert_equal 4, output.size
|
105
|
-
assert output.all?{|o| o.is_a?(
|
106
|
-
assert_equal '1', output.find{|o|o
|
115
|
+
assert output.all?{|o| o.is_a?(Hash) and o.size==2}
|
116
|
+
assert_equal '1', output.find{|o|o.fetch(:description)=='joe'}.fetch(:value)
|
107
117
|
end
|
108
118
|
|
109
119
|
it 'Puts items in alphabetical order of their label' do
|
110
120
|
output= Selectoptionable.to_select_options.call
|
111
|
-
assert_equal
|
121
|
+
assert_equal({description: 'averell', value: '4'}, output[0])
|
112
122
|
end
|
113
123
|
|
114
124
|
it 'Has an option for prepending empty choice' do
|
115
125
|
output= Selectoptionable.to_select_options(allow_empty: true).call
|
116
|
-
assert_equal
|
117
|
-
assert_equal
|
126
|
+
assert_equal({description: '?', value: ''}, output[0])
|
127
|
+
assert_equal({description: 'averell', value: '4'}, output[1])
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'Adds a :preview_uri when there is a thumbnail' do
|
131
|
+
output= Selectpreviewable.to_select_options.call
|
132
|
+
assert output[0].key?(:preview_uri)
|
133
|
+
assert_equal 'Project', output[0][:description]
|
134
|
+
assert_equal '1', output[0][:value]
|
135
|
+
assert_equal '/attachment/selectpreviewable/project.populate_me_thumb.jpg', output[0][:preview_uri]
|
118
136
|
end
|
119
137
|
|
120
138
|
end
|
data/test/test_mongo.rb
CHANGED
@@ -65,14 +65,21 @@ describe 'PopulateMe::Mongo' do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'Should set DB collection to dasherized full class name by default' do
|
68
|
-
assert_equal "cat-fish", CatFish.
|
69
|
-
assert_equal "paradise--cat-fish", Paradise::CatFish.
|
68
|
+
assert_equal "cat-fish", CatFish.collection_name
|
69
|
+
assert_equal "paradise--cat-fish", Paradise::CatFish.collection_name
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'Finds collection in DB' do
|
73
73
|
assert_equal DB['cat-fish'].name, CatFish.collection.name
|
74
74
|
end
|
75
75
|
|
76
|
+
it 'Should set DB and collection name even for dynamically created classes' do
|
77
|
+
# Happens when an included module automatically happens a class.
|
78
|
+
# e.g. Slides for a Slideshow
|
79
|
+
CatFish.const_set("Item", Class.new(CatFish.superclass))
|
80
|
+
assert_equal "cat-fish--item", CatFish::Item.collection.name
|
81
|
+
end
|
82
|
+
|
76
83
|
end
|
77
84
|
|
78
85
|
describe 'Low level CRUD' do
|
@@ -119,6 +126,19 @@ describe 'PopulateMe::Mongo' do
|
|
119
126
|
assert_equal "regular", LowFish.admin_get(regular_fish_id).name
|
120
127
|
end
|
121
128
|
|
129
|
+
it "Should get multiple items" do
|
130
|
+
# Order is not respected
|
131
|
+
alpha_id = LowFish.new(name: "alpha").perform_create
|
132
|
+
beta_id = LowFish.new(name: "beta").perform_create
|
133
|
+
gamma_id = LowFish.new(name: "gamma").perform_create
|
134
|
+
items = LowFish.admin_get([alpha_id, beta_id, nil, alpha_id])
|
135
|
+
assert items.is_a?(Array)
|
136
|
+
assert_equal 2, items.count
|
137
|
+
refute_nil items.find{|i| i.id == alpha_id}
|
138
|
+
refute_nil items.find{|i| i.id == beta_id}
|
139
|
+
assert_nil items.find{|i| i.id == gamma_id}
|
140
|
+
end
|
141
|
+
|
122
142
|
it 'Should have the [] shortcut for admin_get' do
|
123
143
|
LowFish.collection.insert_one(_id: 42, name: "H2G2")
|
124
144
|
assert_equal LowFish[42], LowFish.admin_get(42)
|
@@ -131,7 +151,7 @@ describe 'PopulateMe::Mongo' do
|
|
131
151
|
LowFish.collection.insert_one(_id: 40, name: "Bran")
|
132
152
|
items = LowFish.admin_find
|
133
153
|
assert items.is_a?(Array)
|
134
|
-
|
154
|
+
assert_equal 4, items.count
|
135
155
|
assert_equal 10, items[0].id
|
136
156
|
items = LowFish.admin_find query: {name: 'Bran'}
|
137
157
|
assert items.is_a?(Array)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: populate-me
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mickael Riga
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: web-utils
|
@@ -168,16 +168,16 @@ dependencies:
|
|
168
168
|
name: rake
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- - "
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
173
|
+
version: 12.3.3
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- - "
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
180
|
+
version: 12.3.3
|
181
181
|
description: PopulateMe is an admin system for managing structured content of web
|
182
182
|
applications. It is built on top of the Sinatra framework, but can be used along
|
183
183
|
any framework using Rack.
|
@@ -256,7 +256,7 @@ homepage: https://github.com/mig-hub/populate-me
|
|
256
256
|
licenses:
|
257
257
|
- MIT
|
258
258
|
metadata: {}
|
259
|
-
post_install_message:
|
259
|
+
post_install_message:
|
260
260
|
rdoc_options: []
|
261
261
|
require_paths:
|
262
262
|
- lib
|
@@ -271,8 +271,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
271
|
- !ruby/object:Gem::Version
|
272
272
|
version: '0'
|
273
273
|
requirements: []
|
274
|
-
rubygems_version: 3.0.
|
275
|
-
signing_key:
|
274
|
+
rubygems_version: 3.0.3
|
275
|
+
signing_key:
|
276
276
|
specification_version: 4
|
277
277
|
summary: PopulateMe is an admin system for web applications.
|
278
278
|
test_files:
|