merb-admin 0.4.9 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -16,7 +16,7 @@ At the command prompt, type:
16
16
 
17
17
  In your app, add the following dependency to `config/dependencies.rb`:
18
18
 
19
- dependency "merb-admin", "0.4.9"
19
+ dependency "merb-admin", "0.5.0"
20
20
 
21
21
  Add the following route to `config/router.rb`:
22
22
 
data/Rakefile CHANGED
@@ -7,9 +7,9 @@ require "merb-core/tasks/merb"
7
7
  GEM_NAME = "merb-admin"
8
8
  AUTHOR = "Erik Michaels-Ober"
9
9
  EMAIL = "sferik@gmail.com"
10
- HOMEPAGE = "http://twitter.com/sferik"
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.4.9"
12
+ GEM_VERSION = "0.5.0"
13
13
 
14
14
  spec = Gem::Specification.new do |s|
15
15
  s.rubyforge_project = "merb"
@@ -25,6 +25,7 @@ spec = Gem::Specification.new do |s|
25
25
  s.homepage = HOMEPAGE
26
26
  s.add_dependency("merb-slices", ">= 1.0.12")
27
27
  s.add_dependency("builder", ">= 2.1.2")
28
+ s.add_dependency("mlb", ">= 0.0.1")
28
29
  s.require_path = "lib"
29
30
  s.files = %w(LICENSE README.markdown Rakefile) + Dir.glob("{app,lib,public,schema,spec,stubs}/**/*")
30
31
  s.post_install_message = <<-POST_INSTALL_MESSAGE
@@ -1,13 +1,13 @@
1
1
  namespace :slices do
2
2
  namespace :"merb-admin" do
3
-
3
+
4
4
  desc "Install MerbAdmin"
5
5
  task :install => [:preflight, :setup_directories, :copy_assets, :migrate]
6
-
6
+
7
7
  desc "Test for any dependencies"
8
8
  task :preflight do # see slicetasks.rb
9
9
  end
10
-
10
+
11
11
  desc "Setup directories"
12
12
  task :setup_directories do
13
13
  puts "Creating directories for host application"
@@ -21,7 +21,7 @@ namespace :slices do
21
21
  end
22
22
  end
23
23
  end
24
-
24
+
25
25
  # desc "Copy stub files to host application"
26
26
  # task :stubs do
27
27
  # puts "Copying stubs for MerbAdmin - resolves any collisions"
@@ -30,10 +30,10 @@ namespace :slices do
30
30
  # copied.each { |f| puts "- copied #{f}" }
31
31
  # preserved.each { |f| puts "! preserved override as #{f}" }
32
32
  # end
33
-
33
+
34
34
  # desc "Copy stub files and views to host application"
35
35
  # task :patch => [ "stubs", "freeze:views" ]
36
-
36
+
37
37
  desc "Copy public assets to host application"
38
38
  task :copy_assets do
39
39
  puts "Copying assets for MerbAdmin - resolves any collisions"
@@ -42,22 +42,22 @@ namespace :slices do
42
42
  copied.each { |f| puts "- copied #{f}" }
43
43
  preserved.each { |f| puts "! preserved override as #{f}" }
44
44
  end
45
-
45
+
46
46
  desc "Migrate the database"
47
47
  task :migrate do # see slicetasks.rb
48
48
  end
49
-
49
+
50
50
  desc "Freeze MerbAdmin into your app (only merb-admin/app)"
51
51
  task :freeze => [ "freeze:app" ]
52
52
 
53
53
  namespace :freeze do
54
-
54
+
55
55
  # desc "Freezes MerbAdmin by installing the gem into application/gems"
56
56
  # task :gem do
57
57
  # ENV["GEM"] ||= "merb-admin"
58
58
  # Rake::Task['slices:install_as_gem'].invoke
59
59
  # end
60
-
60
+
61
61
  desc "Freezes MerbAdmin by copying all files from merb-admin/app to your application"
62
62
  task :app do
63
63
  puts "Copying all merb-admin/app files to your application - resolves any collisions"
@@ -66,7 +66,7 @@ namespace :slices do
66
66
  copied.each { |f| puts "- copied #{f}" }
67
67
  preserved.each { |f| puts "! preserved override as #{f}" }
68
68
  end
69
-
69
+
70
70
  desc "Freeze all views into your application for easy modification"
71
71
  task :views do
72
72
  puts "Copying all view templates to your application - resolves any collisions"
@@ -75,7 +75,7 @@ namespace :slices do
75
75
  copied.each { |f| puts "- copied #{f}" }
76
76
  preserved.each { |f| puts "! preserved override as #{f}" }
77
77
  end
78
-
78
+
79
79
  desc "Freeze all models into your application for easy modification"
80
80
  task :models do
81
81
  puts "Copying all models to your application - resolves any collisions"
@@ -84,10 +84,10 @@ namespace :slices do
84
84
  copied.each { |f| puts "- copied #{f}" }
85
85
  preserved.each { |f| puts "! preserved override as #{f}" }
86
86
  end
87
-
87
+
88
88
  desc "Freezes MerbAdmin as a gem and copies over merb-admin/app"
89
89
  task :app_with_gem => [:gem, :app]
90
-
90
+
91
91
  desc "Freezes MerbAdmin by unpacking all files into your application"
92
92
  task :unpack do
93
93
  puts "Unpacking MerbAdmin files to your application - resolves any collisions"
@@ -96,8 +96,8 @@ namespace :slices do
96
96
  copied.each { |f| puts "- copied #{f}" }
97
97
  preserved.each { |f| puts "! preserved override as #{f}" }
98
98
  end
99
-
99
+
100
100
  end
101
-
101
+
102
102
  end
103
103
  end
@@ -1,8 +1,37 @@
1
+ require 'mlb'
2
+ require 'abstract_model'
3
+
1
4
  namespace :slices do
2
- namespace :"merb-admin" do
3
-
5
+ namespace :"merb-admin" do
6
+
7
+ desc "Loads sample DataMapper models and data"
8
+ task :load_sample => ["load_sample:datamapper"]
9
+
10
+ namespace :load_sample do
11
+
12
+ desc "Loads sample ActiveRecord models"
13
+ task :activerecord do
14
+ puts "Copying sample ActiveRecord models into host application - resolves any collisions"
15
+ copy_models(:activerecord)
16
+ puts "Copying sample ActiveRecord migrations into host application - resolves any collisions"
17
+ copy_migrations
18
+ Rake::Task["db:migrate"].reenable
19
+ Rake::Task["db:migrate"].invoke
20
+ load_data
21
+ end
22
+
23
+ desc "Loads sample DataMapper models"
24
+ task :datamapper do
25
+ puts "Copying sample DataMapper models into host application - resolves any collisions"
26
+ copy_models(:datamapper)
27
+ Rake::Task["db:automigrate"].reenable
28
+ Rake::Task["db:automigrate"].invoke
29
+ load_data
30
+ end
31
+ end
32
+
4
33
  # add your own merb-admin tasks here
5
-
34
+
6
35
  # # Uncomment the following lines and edit the pre defined tasks
7
36
  #
8
37
  # # implement this to test for structural/code dependencies
@@ -10,11 +39,93 @@ namespace :slices do
10
39
  # desc "Test for any dependencies"
11
40
  # task :preflight do
12
41
  # end
13
- #
42
+ #
14
43
  # # implement this to perform any database related setup steps
15
44
  # desc "Migrate the database"
16
45
  # task :migrate do
17
46
  # end
18
-
47
+
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def load_data
54
+ puts "Loading current MLB leagues, divisions, mlb_teams, and players"
55
+ MLB.teams.each do |mlb_team|
56
+ unless league = MerbAdmin::AbstractModel.new("League").first(:conditions => ["name = ?", mlb_team['league']['name']])
57
+ league = MerbAdmin::AbstractModel.new("League").create(:name => mlb_team['league']['name'])
58
+ end
59
+ unless division = MerbAdmin::AbstractModel.new("Division").first(:conditions => ["name = ?", mlb_team['division']['name']])
60
+ division = MerbAdmin::AbstractModel.new("Division").create(:name => mlb_team['division']['name'], :league => league)
61
+ end
62
+ unless team = MerbAdmin::AbstractModel.new("Team").first(:conditions => ["name = ?", mlb_team['name']])
63
+ team = MerbAdmin::AbstractModel.new("Team").create(:name => mlb_team['name'], :division => division, :league => league)
64
+ end
65
+ mlb_team['current_roster'].each do |player|
66
+ MerbAdmin::AbstractModel.new("Player").create(:name => player['player'], :number => player['number'], :position => player['position'], :team => team)
67
+ end
68
+ end
69
+ end
70
+
71
+ def copy_models(orm = nil)
72
+ orm ||= set_orm
73
+ seen, copied, duplicated = [], [], []
74
+ Dir.glob(File.dirname(__FILE__) / ".." / ".." / "spec" / "models" / orm.to_s.downcase / MerbAdmin.glob_for(:model)).each do |source_filename|
75
+ destination_filename = Merb.dir_for(:model) / File.basename(source_filename)
76
+ next if seen.include?(source_filename)
77
+ mirror_file(source_filename, destination_filename, copied, duplicated)
78
+ seen << source_filename
79
+ end
80
+ copied.each { |f| puts "- copied #{f}" }
81
+ duplicated.each { |f| puts "! duplicated override as #{f}" }
82
+ end
83
+
84
+ def copy_migrations
85
+ seen, copied, duplicated = [], [], []
86
+ Dir.glob(File.dirname(__FILE__) / ".." / ".." / "schema" / "migrations" / "*.rb").each do |source_filename|
87
+ destination_filename = Merb.root / "schema" / "migrations" / File.basename(source_filename)
88
+ next if seen.include?(source_filename)
89
+ mirror_file(source_filename, destination_filename, copied, duplicated)
90
+ seen << source_filename
19
91
  end
92
+ copied.each { |f| puts "- copied #{f}" }
93
+ duplicated.each { |f| puts "! duplicated override as #{f}" }
94
+ end
95
+
96
+ def require_models(orm = nil)
97
+ orm ||= set_orm
98
+ Dir.glob(File.dirname(__FILE__) / "models" / orm.to_s.downcase / Merb.glob_for(:model)).each do |model_filename|
99
+ require model_filename
100
+ end
101
+ end
102
+
103
+ def set_orm(orm = nil)
104
+ orm || ENV['MERB_ORM'] || (Merb.orm != :none ? Merb.orm : nil) || :datamapper
105
+ end
106
+
107
+ def mirror_file(source, dest, copied = [], duplicated = [], postfix = '_override')
108
+ base, rest = split_name(source)
109
+ dst_dir = File.dirname(dest)
110
+ dup_path = dst_dir / "#{base}#{postfix}.#{rest}"
111
+ if File.file?(source)
112
+ FileUtils.mkdir_p(dst_dir) unless File.directory?(dst_dir)
113
+ if File.exists?(dest) && !File.exists?(dup_path) && !FileUtils.identical?(source, dest)
114
+ # copy app-level override to *_override.ext
115
+ FileUtils.copy_entry(dest, dup_path, false, false, true)
116
+ duplicated << dup_path.relative_path_from(Merb.root)
117
+ end
118
+ # copy gem-level original to location
119
+ if !File.exists?(dest) || (File.exists?(dest) && !FileUtils.identical?(source, dest))
120
+ FileUtils.copy_entry(source, dest, false, false, true)
121
+ copied << dest.relative_path_from(Merb.root)
122
+ end
123
+ end
124
+ end
125
+
126
+ def split_name(name)
127
+ file_name = File.basename(name)
128
+ mres = /^([^\/\.]+)\.(.+)$/i.match(file_name)
129
+ mres.nil? ? [file_name, ''] : [mres[1], mres[2]]
20
130
  end
131
+
@@ -1,20 +1,20 @@
1
1
  namespace :slices do
2
2
  namespace :"merb-admin" do
3
-
3
+
4
4
  desc "Run slice specs within the host application context"
5
5
  task :spec => [ "spec:explain", "spec:default" ]
6
-
6
+
7
7
  namespace :spec do
8
-
8
+
9
9
  slice_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
10
-
10
+
11
11
  task :explain do
12
12
  puts "\nNote: By running MerbAdmin specs inside the application context any\n" +
13
13
  "overrides could break existing specs. This isn't always a problem,\n" +
14
14
  "especially in the case of views. Use these spec tasks to check how\n" +
15
15
  "well your application conforms to the original slice implementation."
16
16
  end
17
-
17
+
18
18
  Spec::Rake::SpecTask.new('default') do |t|
19
19
  t.spec_opts = ["--format", "specdoc", "--colour"]
20
20
  t.spec_files = Dir["#{slice_root}/spec/**/*_spec.rb"].sort
@@ -46,8 +46,8 @@ namespace :slices do
46
46
  t.libs = ['lib', 'server/lib' ]
47
47
  t.spec_files = Dir["#{slice_root}/spec/**/*_spec.rb"].sort
48
48
  end
49
-
49
+
50
50
  end
51
-
51
+
52
52
  end
53
53
  end
data/lib/merb-admin.rb CHANGED
@@ -11,19 +11,19 @@ if defined?(Merb::Plugins)
11
11
  # Slice configuration - set this in a before_app_loads callback.
12
12
  # By default a Slice uses its own layout, so you can swicht to
13
13
  # the main application layout or no layout at all if needed.
14
- #
14
+ #
15
15
  # Configuration options:
16
16
  # :layout - the layout to use; defaults to :merb-admin
17
17
  # :mirror - which path component types to use on copy operations; defaults to all
18
18
  Merb::Slices::config[:merb_admin][:layout] ||= :merb_admin
19
19
  Merb::Slices::config[:merb_admin][:per_page] ||= 100
20
-
20
+
21
21
  # All Slice code is expected to be namespaced inside a module
22
22
  module MerbAdmin
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.4.9"
26
+ self.version = "0.5.0"
27
27
  self.author = "Erik Michaels-Ober"
28
28
 
29
29
  # Stub classes loaded hook - runs before LoadClasses BootLoader
@@ -13,6 +13,7 @@ class CreateDraftsMigration < ActiveRecord::Migration
13
13
  end
14
14
  add_index :drafts, :player_id
15
15
  add_index :drafts, :team_id
16
+ add_index :drafts, :college
16
17
  end
17
18
 
18
19
  def self.down
@@ -12,6 +12,9 @@ class CreatePlayersMigration < ActiveRecord::Migration
12
12
  t.date :born_on
13
13
  t.text :notes
14
14
  end
15
+ add_index :players, :team_id
16
+ add_index :players, :name
17
+ add_index :players, :position
15
18
  end
16
19
 
17
20
  def self.down
@@ -18,6 +18,8 @@ class CreateTeamsMigration < ActiveRecord::Migration
18
18
  add_index :teams, :league_id
19
19
  add_index :teams, :name
20
20
  add_index :teams, :manager
21
+ add_index :teams, :ballpark
22
+ add_index :teams, :mascot
21
23
  end
22
24
 
23
25
  def self.down
@@ -10,7 +10,7 @@ class Draft
10
10
  property :round, Integer, :nullable => false
11
11
  property :pick, Integer, :nullable => false
12
12
  property :overall, Integer, :nullable => false
13
- property :college, String, :length => 100
13
+ property :college, String, :length => 100, :index => true
14
14
  property :notes, Text
15
15
 
16
16
  belongs_to :team
@@ -5,9 +5,9 @@ class Player
5
5
  property :created_at, DateTime
6
6
  property :updated_at, DateTime
7
7
  property :deleted_at, ParanoidDateTime
8
- property :team_id, Integer
8
+ property :team_id, Integer, :index => true
9
9
  property :name, String, :length => 100, :nullable => false, :index => true
10
- property :position, String
10
+ property :position, String, :index => true
11
11
  property :number, Integer, :nullable => false
12
12
  property :retired, Boolean, :default => false
13
13
  property :injured, Boolean, :default => false
@@ -9,8 +9,8 @@ class Team
9
9
  property :name, String, :nullable => false, :index => true
10
10
  property :logo_image_url, String, :length => 255
11
11
  property :manager, String, :length => 100, :nullable => false, :index => true
12
- property :ballpark, String, :length => 100
13
- property :mascot, String, :length => 100
12
+ property :ballpark, String, :length => 100, :index => true
13
+ property :mascot, String, :length => 100, :index => true
14
14
  property :founded, Integer, :nullable => false
15
15
  property :wins, Integer, :nullable => false
16
16
  property :losses, Integer, :nullable => false
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.4.9
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Michaels-Ober
@@ -32,6 +32,16 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.1.2
34
34
  version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: mlb
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.0.1
44
+ version:
35
45
  description: MerbAdmin is a Merb plugin that provides an easy-to-use interface for managing your data.
36
46
  email: sferik@gmail.com
37
47
  executables: []
@@ -171,7 +181,7 @@ files:
171
181
  - spec/requests/main_spec.rb
172
182
  - spec/spec_helper.rb
173
183
  has_rdoc: true
174
- homepage: http://twitter.com/sferik
184
+ homepage: http://github.com/sferik/merb-admin
175
185
  licenses: []
176
186
 
177
187
  post_install_message: |