merb-admin 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -1
- data/Rakefile +2 -2
- data/app/controllers/main.rb +86 -77
- data/app/views/main/_belongs_to.html.erb +1 -2
- data/app/views/main/_has_one.html.erb +1 -2
- data/app/views/main/_properties.html.erb +1 -3
- data/app/views/main/delete.html.erb +1 -2
- data/lib/abstract_model.rb +18 -25
- data/lib/datamapper_support.rb +4 -0
- data/lib/merb-admin/slicetasks.rb +4 -5
- data/lib/merb-admin.rb +1 -1
- metadata +5 -5
data/README.rdoc
CHANGED
@@ -11,7 +11,7 @@ http://github.com/sferik/merb-admin/raw/master/screenshots/edit.png
|
|
11
11
|
== Installation
|
12
12
|
$ gem install merb-admin -s http://gemcutter.org
|
13
13
|
In your app, add the following dependency to <tt>config/dependencies.rb</tt>:
|
14
|
-
dependency "merb-admin", "0.6.
|
14
|
+
dependency "merb-admin", "0.6.3"
|
15
15
|
Add the following route to <tt>config/router.rb</tt>:
|
16
16
|
add_slice(:merb_admin, :path_prefix => "admin")
|
17
17
|
Then, run the following rake task:
|
@@ -37,6 +37,7 @@ There are many ways to contribute:
|
|
37
37
|
* by writing documentation
|
38
38
|
* by writing specifications
|
39
39
|
* by writing code (no patch is too small: fix typos in comments or inconsistent whitespace)
|
40
|
+
* by refactoring code
|
40
41
|
* by reviewing patches
|
41
42
|
* financially[http://pledgie.com/campaigns/5428]
|
42
43
|
|
data/Rakefile
CHANGED
@@ -9,8 +9,8 @@ AUTHOR = "Erik Michaels-Ober"
|
|
9
9
|
EMAIL = "sferik@gmail.com"
|
10
10
|
HOMEPAGE = "http://github.com/sferik/merb-admin"
|
11
11
|
SUMMARY = "MerbAdmin is a Merb plugin that provides an easy-to-use interface for managing your data."
|
12
|
-
GEM_VERSION = "0.6.
|
13
|
-
MERB_GEM_VERSION = "1.0.
|
12
|
+
GEM_VERSION = "0.6.3"
|
13
|
+
MERB_GEM_VERSION = "1.0.15"
|
14
14
|
|
15
15
|
spec = Gem::Specification.new do |s|
|
16
16
|
s.rubyforge_project = "merb"
|
data/app/controllers/main.rb
CHANGED
@@ -3,9 +3,10 @@ require File.join( File.dirname(__FILE__), '..', '..', 'lib', 'abstract_model' )
|
|
3
3
|
class MerbAdmin::Main < MerbAdmin::Application
|
4
4
|
include Merb::MerbAdmin::MainHelper
|
5
5
|
|
6
|
-
before :
|
7
|
-
before :
|
8
|
-
before :
|
6
|
+
before :get_models, :only => ['index']
|
7
|
+
before :get_model, :exclude => ['index']
|
8
|
+
before :get_object, :only => ['edit', 'update', 'delete', 'destroy']
|
9
|
+
before :get_attributes, :only => ['create', 'update']
|
9
10
|
|
10
11
|
def index
|
11
12
|
render(:layout => 'dashboard')
|
@@ -13,29 +14,25 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
13
14
|
|
14
15
|
def list
|
15
16
|
options = {}
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
options.merge!(sort)
|
18
|
+
options.merge!(sort_reverse)
|
19
|
+
options.merge!(query(options))
|
20
|
+
options.merge!(filter(options))
|
21
|
+
# merge_query!(options)
|
22
|
+
# merge_filter!(options)
|
23
|
+
per_page = MerbAdmin[:per_page]
|
21
24
|
if params[:all]
|
22
|
-
options
|
23
|
-
:limit => MerbAdmin[:per_page] * 2,
|
24
|
-
}.merge(options)
|
25
|
+
options.merge!(:limit => per_page * 2)
|
25
26
|
@objects = @abstract_model.all(options).reverse
|
26
27
|
else
|
27
28
|
@current_page = (params[:page] || 1).to_i
|
28
|
-
options
|
29
|
-
:page => @current_page,
|
30
|
-
:per_page => MerbAdmin[:per_page],
|
31
|
-
}.merge(options)
|
29
|
+
options.merge!(:page => @current_page, :per_page => per_page)
|
32
30
|
@page_count, @objects = @abstract_model.paginated(options)
|
33
31
|
options.delete(:page)
|
34
32
|
options.delete(:per_page)
|
35
33
|
options.delete(:offset)
|
36
34
|
options.delete(:limit)
|
37
35
|
end
|
38
|
-
|
39
36
|
@record_count = @abstract_model.count(options)
|
40
37
|
render(:layout => 'list')
|
41
38
|
end
|
@@ -50,47 +47,19 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
50
47
|
end
|
51
48
|
|
52
49
|
def create
|
53
|
-
object =
|
54
|
-
|
55
|
-
|
56
|
-
object[key] = nil if value.blank?
|
57
|
-
end
|
58
|
-
has_one_associations = @abstract_model.has_one_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
59
|
-
has_many_associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
60
|
-
@object = @abstract_model.new(object)
|
61
|
-
if @object.save && has_one_associations.each{|association, id| update_association(association, id)} && has_many_associations.each{|association, ids| update_associations(association, ids.to_a)}
|
62
|
-
if params[:_continue]
|
63
|
-
redirect(url(:merb_admin_edit, :model_name => @abstract_model.singular_name, :id => @object.id), :message => {:notice => "#{@abstract_model.pretty_name} was successfully created"})
|
64
|
-
elsif params[:_add_another]
|
65
|
-
redirect(url(:merb_admin_new, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name} was successfully created"})
|
66
|
-
else
|
67
|
-
redirect(url(:merb_admin_list, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name} was successfully created"})
|
68
|
-
end
|
50
|
+
@object = @abstract_model.new(@attributes)
|
51
|
+
if @object.save && update_all_associations
|
52
|
+
redirect_on_success
|
69
53
|
else
|
70
|
-
|
71
|
-
render(:new, :layout => 'form')
|
54
|
+
render_error
|
72
55
|
end
|
73
56
|
end
|
74
57
|
|
75
58
|
def update
|
76
|
-
|
77
|
-
|
78
|
-
object.each do |key, value|
|
79
|
-
object[key] = nil if value.blank?
|
80
|
-
end
|
81
|
-
has_one_associations = @abstract_model.has_one_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
82
|
-
has_many_associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
83
|
-
if @object.update_attributes(object) && has_one_associations.each{|association, id| update_association(association, id)} && has_many_associations.each{|association, ids| update_associations(association, ids.to_a)}
|
84
|
-
if params[:_continue]
|
85
|
-
redirect(url(:merb_admin_edit, :model_name => @abstract_model.singular_name, :id => @object.id), :message => {:notice => "#{@abstract_model.pretty_name} was successfully updated"})
|
86
|
-
elsif params[:_add_another]
|
87
|
-
redirect(url(:merb_admin_new, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name} was successfully updated"})
|
88
|
-
else
|
89
|
-
redirect(url(:merb_admin_list, :model_name => @abstract_model.singular_name), :message => {:notice => "#{@abstract_model.pretty_name} was successfully updated"})
|
90
|
-
end
|
59
|
+
if @object.update_attributes(@attributes) && update_all_associations
|
60
|
+
redirect_on_success
|
91
61
|
else
|
92
|
-
|
93
|
-
render(:edit, :layout => 'form')
|
62
|
+
render_error
|
94
63
|
end
|
95
64
|
end
|
96
65
|
|
@@ -108,70 +77,91 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
108
77
|
|
109
78
|
private
|
110
79
|
|
111
|
-
def
|
80
|
+
def get_models
|
112
81
|
@abstract_models = MerbAdmin::AbstractModel.all
|
113
82
|
end
|
114
83
|
|
115
|
-
def
|
84
|
+
def get_model
|
116
85
|
model_name = params[:model_name].camel_case
|
117
86
|
@abstract_model = MerbAdmin::AbstractModel.new(model_name)
|
118
|
-
|
87
|
+
get_properties
|
119
88
|
end
|
120
89
|
|
121
|
-
def
|
90
|
+
def get_properties
|
122
91
|
@properties = @abstract_model.properties
|
123
92
|
end
|
124
93
|
|
125
|
-
def
|
94
|
+
def get_object
|
126
95
|
@object = @abstract_model.get(params[:id])
|
127
96
|
raise NotFound unless @object
|
128
97
|
end
|
129
98
|
|
130
|
-
def
|
131
|
-
|
99
|
+
def sort
|
100
|
+
sort = params[:sort]
|
101
|
+
sort ? {:sort => sort} : {}
|
102
|
+
end
|
103
|
+
|
104
|
+
def sort_reverse
|
105
|
+
sort_reverse = params[:sort_reverse]
|
106
|
+
sort_reverse ? {:sort_reverse => sort_reverse == "true"} : {}
|
107
|
+
end
|
108
|
+
|
109
|
+
def query(options)
|
110
|
+
query = params[:query]
|
111
|
+
return {} unless query
|
132
112
|
statements = []
|
133
113
|
values = []
|
134
114
|
conditions = options[:conditions] || [""]
|
135
|
-
|
136
|
-
|
115
|
+
|
116
|
+
@properties.select{|property| property[:type] == :string}.each do |property|
|
137
117
|
statements << "#{property[:name]} LIKE ?"
|
138
|
-
values << "%#{
|
118
|
+
values << "%#{query}%"
|
139
119
|
end
|
120
|
+
|
140
121
|
conditions[0] += " AND " unless conditions == [""]
|
141
122
|
conditions[0] += statements.join(" OR ")
|
142
123
|
conditions += values
|
143
|
-
|
124
|
+
conditions != [""] ? {:conditions => conditions} : {}
|
144
125
|
end
|
145
126
|
|
146
|
-
def
|
147
|
-
|
127
|
+
def filter(options)
|
128
|
+
filter = params[:filter]
|
129
|
+
return {} unless filter
|
148
130
|
statements = []
|
149
131
|
values = []
|
150
132
|
conditions = options[:conditions] || [""]
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
next unless property[:type] == :boolean
|
133
|
+
|
134
|
+
filter.each_pair do |key, value|
|
135
|
+
@properties.select{|property| property[:type] == :boolean && property[:name] == key.to_sym}.each do |property|
|
155
136
|
statements << "#{key} = ?"
|
156
137
|
values << (value == "true")
|
157
138
|
end
|
158
139
|
end
|
140
|
+
|
159
141
|
conditions[0] += " AND " unless conditions == [""]
|
160
142
|
conditions[0] += statements.join(" AND ")
|
161
143
|
conditions += values
|
162
|
-
|
144
|
+
conditions != [""] ? {:conditions => conditions} : {}
|
163
145
|
end
|
164
146
|
|
165
|
-
def
|
166
|
-
|
167
|
-
|
168
|
-
|
147
|
+
def get_attributes
|
148
|
+
@attributes = params[@abstract_model.singular_name] || {}
|
149
|
+
# Delete fields that are blank
|
150
|
+
@attributes.each do |key, value|
|
151
|
+
@attributes[key] = nil if value.blank?
|
152
|
+
end
|
169
153
|
end
|
170
154
|
|
171
|
-
def
|
172
|
-
|
173
|
-
|
174
|
-
|
155
|
+
def update_all_associations
|
156
|
+
@abstract_model.associations.each do |association|
|
157
|
+
ids = (params[:associations] || {}).delete(association[:name])
|
158
|
+
case association[:type]
|
159
|
+
when :has_one
|
160
|
+
update_association(association, ids)
|
161
|
+
when :has_many
|
162
|
+
update_associations(association, ids.to_a)
|
163
|
+
end
|
164
|
+
end
|
175
165
|
end
|
176
166
|
|
177
167
|
def update_association(association, id = nil)
|
@@ -190,4 +180,23 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
190
180
|
end
|
191
181
|
end
|
192
182
|
|
183
|
+
def redirect_on_success
|
184
|
+
singular_name = @abstract_model.singular_name
|
185
|
+
pretty_name = @abstract_model.pretty_name
|
186
|
+
action = params[:action]
|
187
|
+
if params[:_continue]
|
188
|
+
redirect(url(:merb_admin_edit, :model_name => singular_name, :id => @object.id), :message => {:notice => "#{pretty_name} was successfully #{action}d"})
|
189
|
+
elsif params[:_add_another]
|
190
|
+
redirect(url(:merb_admin_new, :model_name => singular_name), :message => {:notice => "#{pretty_name} was successfully #{action}d"})
|
191
|
+
else
|
192
|
+
redirect(url(:merb_admin_list, :model_name => singular_name), :message => {:notice => "#{pretty_name} was successfully #{action}d"})
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def render_error
|
197
|
+
action = params[:action]
|
198
|
+
message[:error] = "#{@abstract_model.pretty_name} failed to be #{action}d"
|
199
|
+
render(:new, :layout => 'form')
|
200
|
+
end
|
201
|
+
|
193
202
|
end
|
@@ -5,8 +5,7 @@
|
|
5
5
|
label = association[:pretty_name]
|
6
6
|
required = false
|
7
7
|
errors_exist = !(@object.errors[child_key].nil? || @object.errors[child_key].empty?)
|
8
|
-
@properties.each do |property|
|
9
|
-
next unless property[:name] == child_key
|
8
|
+
@properties.select{|property| property[:name] == child_key}.each do |property|
|
10
9
|
required = true unless property[:nullable?]
|
11
10
|
end
|
12
11
|
%>
|
@@ -6,8 +6,7 @@
|
|
6
6
|
label = association[:pretty_name]
|
7
7
|
required = false
|
8
8
|
errors_exist = !(@object.errors[child_key].nil? || @object.errors[child_key].empty?)
|
9
|
-
@properties.each do |property|
|
10
|
-
next unless property[:name] == child_key
|
9
|
+
@properties.select{|property| property[:name] == child_key}.each do |property|
|
11
10
|
required = true unless property[:nullable?]
|
12
11
|
end
|
13
12
|
%>
|
@@ -1,11 +1,9 @@
|
|
1
1
|
<fieldset class="module aligned">
|
2
2
|
<% belongs_to_keys = @abstract_model.belongs_to_associations.map{|b| b[:child_key].first} %>
|
3
|
-
<% properties.each do |property| %>
|
3
|
+
<% properties.reject{|property| [:id, :created_at, :created_on, :deleted_at, :updated_at, :updated_on, :deleted_on].include?(property[:name]) || belongs_to_keys.include?(property[:name])}.each do |property| %>
|
4
4
|
<% property_name = property[:name] %>
|
5
5
|
<% property_type = property[:type] %>
|
6
6
|
<% errors_exist = !(@object.errors[property_name].nil? || @object.errors[property_name].empty?) %>
|
7
|
-
<% next if [:id, :created_at, :created_on, :deleted_at, :updated_at, :updated_on, :deleted_on].include?(property_name) %>
|
8
|
-
<% next if belongs_to_keys.include?(property_name) %>
|
9
7
|
<div class="<%= errors_exist ? "form-row errors" : "form-row" %>">
|
10
8
|
<% if errors_exist %>
|
11
9
|
<ul class="errorlist">
|
@@ -4,8 +4,7 @@
|
|
4
4
|
<%= @abstract_model.pretty_name %>: <%= link_to(object_name(@object), url(:merb_admin_edit, :model_name => @abstract_model.singular_name, :id => @object.id)) %>
|
5
5
|
<ul>
|
6
6
|
<% @abstract_model.has_many_associations.each do |association| %>
|
7
|
-
<% @object.send(association[:name]).each do |child| %>
|
8
|
-
<% next if child.nil? %>
|
7
|
+
<% @object.send(association[:name]).reject{|child| child.nil?}.each do |child| %>
|
9
8
|
<li>
|
10
9
|
One or more <%= @abstract_model.pretty_name.pluralize.downcase %> in <%= association[:pretty_name].downcase %>: <%= link_to(object_name(child), url(:merb_admin_edit, :model_name => association[:name].to_s.singularize.to_sym, :id => child.id)) %>
|
11
10
|
</li>
|
data/lib/abstract_model.rb
CHANGED
@@ -6,36 +6,27 @@ module MerbAdmin
|
|
6
6
|
def self.all
|
7
7
|
return @models if @models
|
8
8
|
@models ||= []
|
9
|
-
|
10
|
-
|
9
|
+
orm = Merb.orm
|
10
|
+
case orm
|
11
|
+
when :activerecord, :sequel
|
11
12
|
Dir.glob(Merb.dir_for(:model) / Merb.glob_for(:model)).each do |filename|
|
12
|
-
|
13
|
-
|
14
|
-
model = lookup(m.to_s.to_sym)
|
13
|
+
File.read(filename).scan(/class ([\w\d_\-:]+)/).flatten.each do |model_name|
|
14
|
+
model = lookup(model_name.to_sym)
|
15
15
|
@models << new(model) if model
|
16
16
|
end
|
17
17
|
end
|
18
|
-
@models.sort!{|a, b| a.model.to_s <=> b.model.to_s}
|
19
18
|
when :datamapper
|
20
|
-
|
19
|
+
@models = []
|
20
|
+
DataMapper::Model.descendants.each do |model_name|
|
21
21
|
# Remove DataMapperSessionStore because it's included by default
|
22
22
|
next if m == Merb::DataMapperSessionStore if Merb.const_defined?(:DataMapperSessionStore)
|
23
|
-
model = lookup(
|
23
|
+
model = lookup(model_name.to_s.to_sym)
|
24
24
|
@models << new(model) if model
|
25
25
|
end
|
26
|
-
@models.sort!{|a, b| a.model.to_s <=> b.model.to_s}
|
27
|
-
when :sequel
|
28
|
-
Dir.glob(Merb.dir_for(:model) / Merb.glob_for(:model)).each do |filename|
|
29
|
-
# FIXME: This heuristic for finding Sequel models could be too strict
|
30
|
-
File.read(filename).scan(/^class ([\w\d_\-:]+) < Sequel::Model$/).flatten.each do |m|
|
31
|
-
model = lookup(m.to_s.to_sym)
|
32
|
-
@models << new(model) if model
|
33
|
-
end
|
34
|
-
end
|
35
|
-
@models.sort!{|a, b| a.model.to_s <=> b.model.to_s}
|
36
26
|
else
|
37
|
-
raise "MerbAdmin does not support the #{
|
27
|
+
raise "MerbAdmin does not support the #{orm} ORM"
|
38
28
|
end
|
29
|
+
@models.sort!{|x, y| x.model.to_s <=> y.model.to_s}
|
39
30
|
end
|
40
31
|
|
41
32
|
# Given a symbol +model_name+, finds the corresponding model class
|
@@ -48,22 +39,24 @@ module MerbAdmin
|
|
48
39
|
|
49
40
|
case Merb.orm
|
50
41
|
when :activerecord
|
51
|
-
|
42
|
+
model if superclasses(model).include?(ActiveRecord::Base)
|
52
43
|
when :datamapper
|
53
|
-
|
44
|
+
model if model.include?(DataMapper::Resource)
|
54
45
|
when :sequel
|
55
|
-
|
46
|
+
model if superclasses(model).include?(Sequel::Model)
|
47
|
+
else
|
48
|
+
nil
|
56
49
|
end
|
57
|
-
nil
|
58
50
|
end
|
59
51
|
|
60
52
|
attr_accessor :model
|
61
53
|
|
62
54
|
def initialize(model)
|
63
55
|
model = self.class.lookup(model.to_s.camel_case) unless model.is_a?(Class)
|
56
|
+
orm = Merb.orm
|
64
57
|
@model = model
|
65
58
|
self.extend(GenericSupport)
|
66
|
-
case
|
59
|
+
case orm
|
67
60
|
when :activerecord
|
68
61
|
require 'activerecord_support'
|
69
62
|
self.extend(ActiverecordSupport)
|
@@ -74,7 +67,7 @@ module MerbAdmin
|
|
74
67
|
require 'sequel_support'
|
75
68
|
self.extend(SequelSupport)
|
76
69
|
else
|
77
|
-
raise "MerbAdmin does not support the #{
|
70
|
+
raise "MerbAdmin does not support the #{orm} ORM"
|
78
71
|
end
|
79
72
|
end
|
80
73
|
|
data/lib/datamapper_support.rb
CHANGED
@@ -92,7 +92,7 @@ def load_data
|
|
92
92
|
end
|
93
93
|
|
94
94
|
puts "Loading current MLB leagues, divisions, teams, and players"
|
95
|
-
MLB::
|
95
|
+
MLB::Team.all.each do |mlb_team|
|
96
96
|
unless league = MerbAdmin::AbstractModel.new("League").first(:conditions => ["name = ?", mlb_team.league])
|
97
97
|
league = MerbAdmin::AbstractModel.new("League").create(:name => mlb_team.league)
|
98
98
|
end
|
@@ -102,8 +102,7 @@ def load_data
|
|
102
102
|
unless team = MerbAdmin::AbstractModel.new("Team").first(:conditions => ["name = ?", mlb_team.name])
|
103
103
|
team = MerbAdmin::AbstractModel.new("Team").create(:name => mlb_team.name, :logo_url => mlb_team.logo_url, :manager => mlb_team.manager, :ballpark => mlb_team.ballpark, :mascot => mlb_team.mascot, :founded => mlb_team.founded, :wins => mlb_team.wins, :losses => mlb_team.losses, :win_percentage => ("%.3f" % (mlb_team.wins.to_f / (mlb_team.wins + mlb_team.losses))).to_f, :division => division, :league => league)
|
104
104
|
end
|
105
|
-
mlb_team.players.each do |player|
|
106
|
-
next if player.number.nil?
|
105
|
+
mlb_team.players.reject{|player| player.number.nil?}.each do |player|
|
107
106
|
MerbAdmin::AbstractModel.new("Player").create(:name => player.name, :number => player.number, :position => player.position, :team => team)
|
108
107
|
end
|
109
108
|
end
|
@@ -114,8 +113,8 @@ def copy_models(orm = nil)
|
|
114
113
|
puts "Copying sample #{orm} models into host application - resolves any collisions"
|
115
114
|
seen, copied, duplicated = [], [], []
|
116
115
|
Dir.glob(File.dirname(__FILE__) / ".." / ".." / "spec" / "models" / orm.to_s.downcase / MerbAdmin.glob_for(:model)).each do |source_filename|
|
117
|
-
destination_filename = Merb.dir_for(:model) / File.basename(source_filename)
|
118
116
|
next if seen.include?(source_filename)
|
117
|
+
destination_filename = Merb.dir_for(:model) / File.basename(source_filename)
|
119
118
|
mirror_file(source_filename, destination_filename, copied, duplicated)
|
120
119
|
seen << source_filename
|
121
120
|
end
|
@@ -128,8 +127,8 @@ def copy_migrations(orm = nil)
|
|
128
127
|
puts "Copying sample #{orm} migrations into host application - resolves any collisions"
|
129
128
|
seen, copied, duplicated = [], [], []
|
130
129
|
Dir.glob(File.dirname(__FILE__) / ".." / ".." / "spec" / "migrations" / orm.to_s.downcase / "*.rb").each do |source_filename|
|
131
|
-
destination_filename = Merb.root / "schema" / "migrations" / File.basename(source_filename)
|
132
130
|
next if seen.include?(source_filename)
|
131
|
+
destination_filename = Merb.root / "schema" / "migrations" / File.basename(source_filename)
|
133
132
|
mirror_file(source_filename, destination_filename, copied, duplicated)
|
134
133
|
seen << source_filename
|
135
134
|
end
|
data/lib/merb-admin.rb
CHANGED
@@ -23,7 +23,7 @@ if defined?(Merb::Plugins)
|
|
23
23
|
|
24
24
|
# Slice metadata
|
25
25
|
self.description = "MerbAdmin is a Merb plugin that provides an easy-to-use interface for managing your data."
|
26
|
-
self.version = "0.6.
|
26
|
+
self.version = "0.6.3"
|
27
27
|
self.author = "Erik Michaels-Ober"
|
28
28
|
|
29
29
|
# Stub classes loaded hook - runs before LoadClasses BootLoader
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: merb-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Michaels-Ober
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-05 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.0.
|
23
|
+
version: 1.0.15
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: merb-assets
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.
|
33
|
+
version: 1.0.15
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: merb-helpers
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.0.
|
43
|
+
version: 1.0.15
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: builder
|