merb-admin 0.4.9 → 0.5.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.
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: |