schofield 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,10 +1,10 @@
1
1
  module Schofield
2
-
2
+
3
3
  module Generators
4
-
4
+
5
5
  class Routes
6
-
7
- def self.add_routes levels, depth=2
6
+
7
+ def self.add_routes levels, depth=3
8
8
  childless = []
9
9
  levels.each do |level|
10
10
  if level.join?
@@ -12,35 +12,40 @@ module Schofield
12
12
  elsif level.nests?
13
13
  @routes << route_string([level], depth)
14
14
  add_routes(level.nested_levels, depth+1)
15
- @routes << "#{' ' * depth}end" + (depth == 2 ? "\n" : '')
15
+ @routes << "#{' ' * depth}end" + (depth == 3 ? "\n" : '')
16
16
  else
17
17
  childless << level
18
18
  end
19
19
  end
20
20
  @routes << route_string(childless, depth) if childless.any?
21
21
  end
22
-
22
+
23
23
  def self.route_string levels, depth
24
24
  string = ' ' * depth
25
25
  string += "resources "
26
26
  string += ':' + levels.map{ |level| level.name.tableize }.join(', :')
27
27
  string += ", "
28
- string += ":except => #{depth == 2 ? ':edit' : '[:index, :edit]'}"
28
+ string += ":except => #{depth == 3 ? ':edit' : '[:index, :edit]'}"
29
29
  string += levels.length == 1 && levels.first.nests? ? ', :shallow => true do' : ''
30
30
  end
31
-
31
+
32
32
  def self.generate
33
- @routes = []
33
+ @routes = [
34
+ " namespace :admin do\n",
35
+ " root :to => 'home#index'",
36
+ " match '/:locale' => 'home#index'\n",
37
+ " scope '/:locale', :locale => /\#{I18n.available_locales.join('|')}/, :shallow_path => '/:locale' do\n"
38
+ ]
34
39
  @joins = []
35
40
  add_routes(Levels.all.select(&:routes?))
36
- @routes.push "\n resources :#{@joins.map{ |s| s.name.tableize }.join(', :')}, :only => [:create, :delete]" if @joins.any?
37
- @routes.push "\n resources :#{Levels.sortables.map{ |s| s.tableize }.join(', :')}, :only => [] do\n post :sort, :on => :collection\n end" if Levels.sortables.any?
38
- @routes.unshift ' namespace :admin do'
41
+ @routes.push "\n resources :#{@joins.map{ |s| s.name.tableize }.join(', :')}, :only => [:create, :delete]" if @joins.any?
42
+ @routes.push "\n resources :#{Levels.sortables.map{ |s| s.tableize }.join(', :')}, :only => [] do\n post :sort, :on => :collection\n end" if Levels.sortables.any?
43
+ @routes.push ' end'
39
44
  @routes.push ' end'
40
45
  @routes.join("\n") + "\n\n"
41
46
  end
42
-
47
+
43
48
  end
44
-
49
+
45
50
  end
46
51
  end
@@ -1,24 +1,24 @@
1
1
  require 'rails/generators/base'
2
2
 
3
- %w( levels level responses association routes attributes attribute ).each do |file|
3
+ %w( levels level responses association routes attributes attribute navigation ).each do |file|
4
4
  require File.join(File.dirname(__FILE__), file)
5
5
  end
6
6
 
7
7
 
8
8
 
9
9
  module Schofield
10
-
10
+
11
11
  module Generators
12
-
12
+
13
13
  class Schofield < Rails::Generators::Base
14
14
 
15
15
  source_root File.expand_path(File.join(File.dirname(__FILE__), '../', 'templates'))
16
16
 
17
17
  class_option :tables_to_ignore, :aliases => '-i', :type => :string, :default => '', :desc => 'Indicates which tables to ignore'
18
18
  class_option :ask_questions, :aliases => '-a', :type => :boolean, :desc => 'Indicates whether to ask questions again rather than use recorded answers'
19
-
20
-
21
-
19
+
20
+
21
+
22
22
  def generate
23
23
  Responses.generator = self
24
24
  Responses.re_ask = options[:ask_questions]
@@ -29,11 +29,11 @@ module Schofield
29
29
  Responses.save
30
30
  Association.report
31
31
  end
32
-
32
+
33
33
  def generate_routes
34
34
  inject_into_file(File.join(Rails.root, 'config', 'routes.rb'), Routes.generate, :before => /end\s*\Z/)
35
35
  end
36
-
36
+
37
37
  def generate_controllers
38
38
  Levels.all.select(&:controllers?).each do |level|
39
39
  source = level.join? ? 'join_controller.erb' : 'controller.erb'
@@ -41,11 +41,11 @@ module Schofield
41
41
  template_with_context(source, Proc.new{level}, destination)
42
42
  end
43
43
  end
44
-
44
+
45
45
  def generate_views
46
46
  Levels.all.select(&:views?).each do |level|
47
47
  template_with_context('form.erb', Proc.new{level}, view_path(level, '_form.haml'))
48
- create_file(view_path(level, 'new.haml'), %q(= render :partial => 'form', :layout => 'shared/admin/module_layout'))
48
+ create_file(view_path(level, 'new.haml'), %q(= render :partial => 'form', :layout => 'admin/shared/module_layout'))
49
49
  template_with_context('show.erb', Proc.new{level}, view_path(level, 'show.haml'))
50
50
  if !level.nested?
51
51
  template_with_context('index.erb', Proc.new{level}, view_path(level, 'index.haml'))
@@ -59,12 +59,16 @@ module Schofield
59
59
  template_with_context('model.erb', Proc.new{level}, destination)
60
60
  end
61
61
  end
62
-
62
+
63
+ def generate_navigation
64
+ inject_into_file(File.join(Rails.root, 'app/views/admin/shared', '_navigation.haml'), Navigation.generate, :after => /- if current_user\n/)
65
+ end
66
+
63
67
  def generate_tables
64
68
  tables = []
65
69
  Levels.all.select(&:tables?).each do |level|
66
70
  columns_level = level.subclass? ? level.superclass : level
67
- columns = columns_level.attributes.select{ |a| columns_level.form_field?(a) }.sort{ |a,b| a.weight <=> b.weight }.map(&:to_column)
71
+ columns = columns_level.attributes.select{ |a| columns_level.form_field?(a) && !a.text? }.sort_by(&:weight).map(&:to_column)
68
72
  if level.nested?
69
73
  tables << <<-STRING.gsub(/^ {12}/, '')
70
74
  def #{level.name.pluralize}_table
@@ -76,7 +80,7 @@ module Schofield
76
80
  else
77
81
  tables << <<-STRING.gsub(/^ {12}/, '')
78
82
  def render_#{level.name.pluralize} collection
79
- table_renderer(collection).render(
83
+ table_renderer(:#{level.name.pluralize}, collection).render(
80
84
  #{columns.join(",\n ")}
81
85
  )
82
86
  end
@@ -87,15 +91,15 @@ module Schofield
87
91
  "module Admin::TableDefinitionsHelper\n\n#{tables.join("\n\n")}\nend"
88
92
  end
89
93
  end
90
-
91
-
92
-
94
+
95
+
96
+
93
97
  private
94
98
 
95
99
  def tables_to_ignore
96
100
  @tables_to_ignore ||= %w( schema_migrations ) + options[:tables_to_ignore].split(',').map{ |e| e.strip.tableize }
97
101
  end
98
-
102
+
99
103
  def view_path level, file_name
100
104
  File.join('app/views/admin', level.name.tableize, file_name)
101
105
  end
@@ -107,7 +111,7 @@ module Schofield
107
111
  def tables
108
112
  ActiveRecord::Base.connection.tables - tables_to_ignore
109
113
  end
110
-
114
+
111
115
  def template_with_context(source, context, destination=nil, config={}, &block)
112
116
  destination ||= source
113
117
  source = File.expand_path(find_in_source_paths(source.to_s))
@@ -1,23 +1,23 @@
1
1
  class Admin::<%= level.name.tableize.camelize %>Controller < Admin::AdminController
2
-
2
+
3
3
  include InheritResources
4
4
  <%- if level.sortable? -%>
5
5
  include SortAction
6
-
6
+
7
7
  <%- end -%>
8
-
8
+
9
9
  actions :new, :create, :update, :destroy, :show<%= ', :index' unless level.nested? %>
10
-
10
+
11
11
  <%- if level.nests? -%>
12
12
  drill_down_on_create
13
-
13
+
14
14
  <%- end -%>
15
15
  <%- if level.nested? -%>
16
16
  <%= level.polymorphic? ? 'polymorphic_' : '' %>belongs_to :<%= level.parent_associations.select(&:nest?).map(&:parent_name).join(', :') %>, :optional => true
17
-
17
+
18
18
  <%- end -%>
19
19
  private
20
-
20
+
21
21
  def titles
22
22
  generate_titles :<%= level.ancestry.join(', :') %>
23
23
  end
@@ -3,13 +3,13 @@
3
3
  = semantic_form_for <%= level.nested? ? 'parent? ? [:admin, parent, resource] : ' : '' %>[:admin, resource]<%= level.multipart? ? ', :html => { :multipart => true }' : '' %> do |f|
4
4
 
5
5
  = f.inputs do
6
-
6
+
7
7
  <%- level.attributes.each do |attribute| -%>
8
8
  <%- if level.form_field?(attribute) -%>
9
9
  <%- if attribute.attachment? -%>
10
- = f.input :<%= attribute.name.gsub(/_file_name$/, '') %>, :as => :image
10
+ = f.input :<%= attribute.name.gsub(/_file_name$/, '') %>, :as => :<%= attribute.image? ? 'image' : 'attachment' %><%= attribute.required_attachment? ? ', :required => true' : '' %>
11
11
  <%- else -%>
12
- = f.input :<%= attribute.actual_name %><%= attribute.text? ? %q(, :input_html => { :class => 'medium previewable' }) : '' %>
12
+ = f.input :<%= attribute.actual_name %><%= attribute.text? ? %q(, :input_html => { :class => 'medium wysiwyg' }) : '' %>
13
13
  <%- end -%>
14
14
  <%- end -%>
15
15
  <%- end -%>
@@ -19,13 +19,17 @@
19
19
  <%- child.attributes.each do |attribute| -%>
20
20
  <%- if child.form_field?(attribute) && attribute.actual_name != level.name -%>
21
21
  <%- if attribute.attachment? -%>
22
- = <%= child.name %>.input :<%= attribute.name.gsub(/_file_name$/, '') %>, :as => :image
22
+ = <%= child.name %>.input :<%= attribute.name.gsub(/_file_name$/, '') %>, :as => :<%= attribute.image? ? 'image' : 'attachment' %><%= attribute.required_attachment? ? ', :required => true' : '' %>
23
23
  <%- else -%>
24
- = <%= child.name %>.input :<%= attribute.actual_name %><%= attribute.text? ? %q(, :input_html => { :class => 'medium previewable' }) : '' %>
24
+ = <%= child.name %>.input :<%= attribute.actual_name %><%= attribute.text? ? %q(, :input_html => { :class => 'medium wysiwyg' }) : '' %>
25
25
  <%- end -%>
26
26
  <%- end -%>
27
27
  <%- end -%>
28
28
  = <%= child.name %>.input :nested, :as => :hidden
29
29
  <%- end -%>
30
-
31
- = f.buttons
30
+
31
+ = f.buttons
32
+ <%- if level.multipart? -%>
33
+
34
+ = render :partial => 'admin/shared/progress_bar'
35
+ <%- end -%>
@@ -1,5 +1,5 @@
1
1
  .module
2
2
  .add
3
- %p= link_to('Add new <%= level.name.gsub('_', ' ') %>', new_admin_<%= level.name %>_path)
4
-
3
+ %p= link_to('Add new <%= level.name.gsub('_', ' ') %>', new_admin_<%= level.name %>_path)
4
+
5
5
  = render_<%= level.name.pluralize %> collection
@@ -5,7 +5,7 @@ class Admin::<%= level.name.tableize.camelize %>Controller < Admin::AdminControl
5
5
  <%= level.name %>.save
6
6
  redirect_to_form_referer
7
7
  end
8
-
8
+
9
9
  def destroy
10
10
  <%= level.name %> = <%= level.name.camelize %>.find(params[:id])
11
11
  <%= level.name %>.destroy
@@ -1,11 +1,8 @@
1
1
  class <%= level.name.camelize %> < <%= level.subclass? ? level.superclass.name.camelize : 'ActiveRecord::Base' %>
2
-
2
+
3
3
  strip_attributes!
4
- <%- if level.has_manies? -%>
5
- prevent_destroy_if_has_children :<%= level.has_manies.map{ |l| l.name.pluralize }.join(', :') %>
6
- <%- end -%>
7
4
  <%- if level.sortable? -%>
8
- acts_as_list<%=
5
+ acts_as_list<%=
9
6
  if level.polymorphic?
10
7
  " :scope => [:#{level.polymorphic_name}_type, :#{level.polymorphic_name}_id]"
11
8
  elsif level.nested?
@@ -13,28 +10,29 @@ class <%= level.name.camelize %> < <%= level.subclass? ? level.superclass.name.c
13
10
  end
14
11
  %>
15
12
  <%- end -%>
16
- <%- if level.acts_as_markdowns? -%>
17
- <%= level.acts_as_markdowns %>
18
- <%- end -%>
19
-
20
-
13
+
14
+
21
15
  # ATTRIBUTES
22
- <%- if level.attr_protecteds? -%>
23
-
24
- <%= level.attr_protecteds %>
16
+ <%- if level.attr_accessors? -%>
17
+
18
+ <%= level.attr_accessors %>
19
+ <%- end -%>
20
+ <%- if level.attr_accessibles? -%>
21
+
22
+ <%= level.attr_accessibles %>
25
23
  <%- end -%>
26
24
  <%- if level.belongs_to_one? -%>
27
-
25
+
28
26
  attr_accessor :nested
29
27
  <%- end -%>
30
-
31
-
28
+
29
+
32
30
  # FILTERS
33
-
34
-
31
+
32
+
35
33
  # ASSOCIATIONS
36
34
  <%- if level.parent_associations.find(&:non_polymorphic?) -%>
37
-
35
+
38
36
  <%- level.parent_associations.select(&:non_polymorphic?).each do |association| -%>
39
37
  belongs_to :<%= association.parent_name %>
40
38
  <%- end -%>
@@ -45,7 +43,7 @@ class <%= level.name.camelize %> < <%= level.subclass? ? level.superclass.name.c
45
43
  <%- end -%>
46
44
  <%- end -%>
47
45
  <%- if level.child_associations.find(&:non_polymorphic_one_to_many?) -%>
48
-
46
+
49
47
  <%- level.child_associations.select(&:non_polymorphic_one_to_many?).map(&:child).each do |child| -%>
50
48
  has_many :<%= child.name.pluralize %>, :dependent => :destroy
51
49
  <%- if child.join? -%>
@@ -54,56 +52,56 @@ class <%= level.name.camelize %> < <%= level.subclass? ? level.superclass.name.c
54
52
  <%- end -%>
55
53
  <%- end -%>
56
54
  <%- if level.child_associations.find(&:non_polymorphic_one_to_one?) -%>
57
-
55
+
58
56
  <%- level.child_associations.select(&:non_polymorphic_one_to_one?).each do |association| -%>
59
57
  has_one :<%= association.child_name %>, :dependent => :destroy
60
58
  <%- end -%>
61
59
  <%- end -%>
62
60
  <%- if level.child_associations.find(&:polymorphic_one_to_many?) -%>
63
-
61
+
64
62
  <%- level.child_associations.select(&:polymorphic_one_to_many?).each do |association| -%>
65
63
  has_many :<%= association.child_name.pluralize %>, :as => :<%= association.polymorphic_name %>, :dependent => :destroy
66
64
  <%- end -%>
67
65
  <%- end -%>
68
66
  <%- if level.child_associations.find(&:polymorphic_one_to_one?) -%>
69
-
67
+
70
68
  <%- level.child_associations.select(&:polymorphic_one_to_one?).each do |association| -%>
71
69
  has_one :<%= association.child_name %>, :as => :<%= association.polymorphic_name %>, :dependent => :destroy
72
70
  <%- end -%>
73
71
  <%- end -%>
74
-
75
-
72
+
73
+
76
74
  # NESTING
77
75
  <%- if level.child_associations.find(&:one_to_one?) %>
78
-
76
+
79
77
  <%- level.child_associations.select(&:one_to_one?).each do |association| -%>
80
78
  accepts_nested_attributes_for :<%= association.child_name %>
81
79
  <%- end -%>
82
80
  <%- end -%>
83
-
84
-
81
+
82
+
85
83
  # ATTACHMENTS
86
84
  <%- if level.attachments? -%>
87
- <%= level.attached_files %>
85
+ <%= level.attached_files %>
88
86
  <%- end -%>
89
-
90
-
87
+
88
+
91
89
  # VALIDATIONS
92
90
  <%- if !level.subclass? && level.validations? -%>
93
-
91
+
94
92
  <%= level.validations.join("\n ") %>
95
93
  <%- end -%>
96
-
97
-
94
+
95
+
98
96
  # SCOPES
99
-
97
+
100
98
  scope :collection
101
-
102
-
99
+
100
+
103
101
  # METHODS
104
-
102
+
105
103
  def to_s
106
104
  <%= level.to_s_string || (level.join? && level.nested? && level.parent_associations.find(&:nest?).parent_name) || '"##{id}"' %>
107
105
  end
108
-
106
+
109
107
  end
@@ -1,4 +1,4 @@
1
- = render :partial => 'form', :layout => 'shared/admin/module_layout'
1
+ = render :partial => 'form', :layout => 'admin/shared/module_layout'
2
2
  <%- level.nested_levels.each do |child| -%>
3
3
 
4
4
  <%- if child.join? -%>
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{schofield}
8
- s.version = "0.2.2"
7
+ s.name = "schofield"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Marc Tauber"]
12
- s.date = %q{2010-12-15}
13
- s.description = %q{longer description of your gem}
14
- s.email = %q{marc@marctauber.com}
12
+ s.date = "2012-01-04"
13
+ s.description = "longer description of your gem"
14
+ s.email = "marc@marctauber.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.rdoc"
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".bundle/config",
21
21
  ".document",
22
+ ".rvmrc",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "LICENSE.txt",
@@ -30,6 +31,7 @@ Gem::Specification.new do |s|
30
31
  "lib/generators/schofield/attributes.rb",
31
32
  "lib/generators/schofield/level.rb",
32
33
  "lib/generators/schofield/levels.rb",
34
+ "lib/generators/schofield/navigation.rb",
33
35
  "lib/generators/schofield/responses.rb",
34
36
  "lib/generators/schofield/routes.rb",
35
37
  "lib/generators/schofield/schofield_generator.rb",
@@ -44,18 +46,17 @@ Gem::Specification.new do |s|
44
46
  "spec/spec.opts",
45
47
  "spec/spec_helper.rb"
46
48
  ]
47
- s.homepage = %q{http://github.com/sauberia/schofield}
49
+ s.homepage = "http://github.com/sauberia/schofield"
48
50
  s.licenses = ["MIT"]
49
51
  s.require_paths = ["lib"]
50
- s.rubygems_version = %q{1.3.7}
51
- s.summary = %q{one-line summary of your gem}
52
+ s.rubygems_version = "1.8.10"
53
+ s.summary = "one-line summary of your gem"
52
54
  s.test_files = [
53
55
  "spec/schofield_spec.rb",
54
56
  "spec/spec_helper.rb"
55
57
  ]
56
58
 
57
59
  if s.respond_to? :specification_version then
58
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
59
60
  s.specification_version = 3
60
61
 
61
62
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then