cambium 0.2.2 → 0.3.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/cambium.gemspec +25 -23
  3. data/lib/cambium/version.rb +1 -1
  4. data/lib/generators/cambium/helpers/_autoloader.rb +12 -0
  5. data/lib/generators/cambium/helpers/dependencies_helper.rb +58 -0
  6. data/lib/generators/cambium/helpers/generators_helper.rb +227 -0
  7. data/lib/generators/cambium/install/admin_generator.rb +68 -74
  8. data/lib/generators/cambium/install/app_generator.rb +86 -95
  9. data/lib/generators/cambium/install/config_generator.rb +98 -108
  10. data/lib/generators/cambium/install/utilities_generator.rb +2 -50
  11. data/lib/generators/cambium/model/image_generator.rb +67 -0
  12. data/lib/generators/cambium/model/page_generator.rb +131 -0
  13. data/lib/generators/cambium/model/post_generator.rb +71 -0
  14. data/lib/generators/cambium/model/tag_generator.rb +40 -0
  15. data/lib/generators/cambium/model/user_generator.rb +78 -0
  16. data/lib/generators/cambium/templates/Gemfile +43 -0
  17. data/lib/generators/cambium/templates/_partials/pages/admin_icon.rb +6 -0
  18. data/lib/generators/cambium/templates/app/assets/javascripts/admin/admin.js.coffee +3 -1
  19. data/lib/generators/cambium/templates/app/assets/javascripts/admin/models/image.js.coffee +14 -0
  20. data/lib/generators/cambium/templates/app/assets/javascripts/admin/models/tag.js.coffee +14 -0
  21. data/lib/generators/cambium/templates/app/assets/javascripts/admin/parser_rules/custom.js +552 -0
  22. data/lib/generators/cambium/templates/app/assets/javascripts/admin/routers/router.js.coffee +21 -0
  23. data/lib/generators/cambium/templates/app/assets/javascripts/admin/tag.jst.ejs +7 -0
  24. data/lib/generators/cambium/templates/app/assets/javascripts/admin/templates/image.jst.ejs +3 -0
  25. data/lib/generators/cambium/templates/app/assets/javascripts/admin/templates/post_tag.jst.ejs +1 -0
  26. data/lib/generators/cambium/templates/app/assets/javascripts/admin/views/image_upload.js.coffee +28 -0
  27. data/lib/generators/cambium/templates/app/assets/javascripts/admin/views/tags.js.coffee +158 -0
  28. data/lib/generators/cambium/templates/app/assets/javascripts/admin/views/wysiwyg.js.coffee +77 -0
  29. data/lib/generators/cambium/templates/app/controllers/admin/images_controller.rb +45 -0
  30. data/lib/generators/cambium/templates/app/controllers/admin/pages_controller.rb +42 -0
  31. data/lib/generators/cambium/templates/app/controllers/admin/posts_controller.rb +39 -0
  32. data/lib/generators/cambium/templates/app/controllers/admin/taggings_controller.rb +69 -0
  33. data/lib/generators/cambium/templates/app/controllers/admin/tags_controller.rb +11 -0
  34. data/lib/generators/cambium/templates/app/controllers/admin_controller.rb +11 -2
  35. data/lib/generators/cambium/templates/app/controllers/application_controller.rb +2 -2
  36. data/lib/generators/cambium/templates/app/controllers/images_controller.rb +45 -0
  37. data/lib/generators/cambium/templates/app/controllers/pages_controller.rb +12 -0
  38. data/lib/generators/cambium/templates/app/controllers/posts_controller.rb +11 -0
  39. data/lib/generators/cambium/templates/app/helpers/admin/pages_controller.rb +47 -0
  40. data/lib/generators/cambium/templates/app/helpers/admin_helper.rb +1 -1
  41. data/lib/generators/cambium/templates/app/models/concerns/image_cropper.rb +24 -0
  42. data/lib/generators/cambium/templates/app/models/concerns/publishable.rb +32 -4
  43. data/lib/generators/cambium/templates/app/models/concerns/slug.rb +4 -0
  44. data/lib/generators/cambium/templates/app/models/concerns/tags.rb +6 -1
  45. data/lib/generators/cambium/templates/app/models/image.rb +43 -0
  46. data/lib/generators/cambium/templates/app/models/page.rb +81 -0
  47. data/lib/generators/cambium/templates/app/models/post.rb +45 -0
  48. data/lib/generators/cambium/templates/app/models/tag.rb +33 -0
  49. data/lib/generators/cambium/templates/app/models/tagging.rb +20 -0
  50. data/lib/generators/cambium/templates/app/uploaders/image_uploader.rb +91 -0
  51. data/lib/generators/cambium/templates/app/views/admin/images/_image.html.erb +1 -0
  52. data/lib/generators/cambium/templates/app/views/admin/images/create.js.erb +7 -0
  53. data/lib/generators/cambium/templates/app/views/admin/images/index.json.jbuilder +4 -0
  54. data/lib/generators/cambium/templates/app/views/admin/pages/_form.html.erb +26 -0
  55. data/lib/generators/cambium/templates/app/views/admin/posts/_form.html.erb +40 -0
  56. data/lib/generators/cambium/templates/app/views/admin/shared/_insert_image.html.erb +12 -0
  57. data/lib/generators/cambium/templates/app/views/admin/shared/forms/_editor.html.erb +3 -3
  58. data/lib/generators/cambium/templates/app/views/admin/shared/forms/_form_page.html.erb +5 -1
  59. data/lib/generators/cambium/templates/app/views/home/index.html.erb +7 -0
  60. data/lib/generators/cambium/templates/app/views/page_templates/default.html.erb +2 -0
  61. data/lib/generators/cambium/templates/app/views/posts/_post.html.erb +4 -0
  62. data/lib/generators/cambium/templates/app/views/posts/index.html.erb +1 -0
  63. data/lib/generators/cambium/templates/app/views/posts/show.html.erb +10 -0
  64. data/lib/generators/cambium/templates/config/app_routes.rb +77 -0
  65. data/lib/generators/cambium/templates/config/routes.rb.erb +11 -2
  66. data/lib/generators/cambium/templates/db/migrate/create_pages.rb.erb +24 -0
  67. data/lib/generators/cambium/templates/db/migrate/create_posts.rb +19 -0
  68. data/lib/generators/cambium/templates/gitignore +1 -0
  69. metadata +52 -256
  70. data/lib/generators/cambium/install/users_generator.rb +0 -104
  71. data/lib/generators/cambium/templates/app/assets/stylesheets/admin/partials/_icons.scss +0 -5194
@@ -1,5 +1,6 @@
1
1
  require 'rake'
2
2
  require 'rails/generators'
3
+ require File.expand_path('../../helpers/_autoloader.rb', __FILE__)
3
4
 
4
5
  module Cambium
5
6
  module Install
@@ -8,27 +9,34 @@ module Cambium
8
9
 
9
10
  source_root File.expand_path('../../templates', __FILE__)
10
11
 
11
- # ------------------------------------------ Default Public Controller
12
-
12
+ # Add a default public controller, so we have a working home page when
13
+ # we're done.
14
+ #
13
15
  def add_home_controller
14
- run_cmd "#{g} controller home index"
16
+ generate "controller home index"
17
+ gsub_file("config/routes.rb", /\ \ get\ \'home\/index\'\n\n/, '')
15
18
  end
16
19
 
17
- # ------------------------------------------ Routes
18
-
20
+ # Add our default routes, ommitting admin routes (which are added via the
21
+ # admin generator)
22
+ #
19
23
  def add_default_routes
20
- remove_file "config/routes.rb"
21
- template "config/routes.rb.erb", "config/routes.rb"
24
+ insert_into_file(
25
+ "config/routes.rb",
26
+ file_contents("config/app_routes.rb"),
27
+ :after => "Rails.application.routes.draw do"
28
+ )
22
29
  end
23
30
 
24
- # ------------------------------------------ Public Views
25
-
31
+ # Add our default public views
32
+ #
26
33
  def add_public_views
27
- directory "app/views/application", "app/views/application"
34
+ directory "app/views/application"
35
+ directory "app/views/home", :force => true
28
36
  end
29
37
 
30
- # ------------------------------------------ Layouts
31
-
38
+ # Our layouts are templated so we can start with some custom information.
39
+ #
32
40
  def add_layouts
33
41
  @site_title = Rails.application.class.parent_name.humanize.titleize
34
42
  site_title = ask "\n#{set_color('App Title:', :green, :bold)} [default: #{@site_title}]"
@@ -39,117 +47,100 @@ module Cambium
39
47
  template app, app
40
48
  end
41
49
 
42
- # ------------------------------------------ Public Setup
43
-
50
+ # Backbone.js is our default javascript framework. We don't yet have an
51
+ # option to ignore, so here we automatically install it.
52
+ #
44
53
  def install_backbone
45
54
  directory "app/assets/javascripts/backbone",
46
55
  "app/assets/javascripts"
47
56
  end
48
57
 
58
+ # Next, we need to replace our application.js file to add backbone and its
59
+ # dependencies, along with our default scripts.
60
+ #
49
61
  def default_application_js
50
62
  app_js = "app/assets/javascripts/application.js"
51
63
  remove_file app_js
52
64
  template app_js, app_js
53
65
  end
54
66
 
55
- def rename_backbone_root
56
- app_name = Rails.application.class.parent_name.underscore.downcase
57
- remove_file "app/assets/javascripts/backbone/#{app_name}.js.coffee"
58
- template "app/assets/javascripts/backbone/app.js.coffee",
59
- "app/assets/javascripts/backbone/app.js.coffee"
60
- end
61
-
62
- # ------------------------------------------ Public Files
63
-
64
- def add_public_router
65
- remove_file "app/assets/javascripts/backbone/routers/.gitkeep"
66
- template "app/assets/javascripts/backbone/routers/router.js.coffee",
67
- "app/assets/javascripts/backbone/routers/router.js.coffee"
68
- end
69
-
70
- def add_default_view
71
- remove_file "app/assets/javascripts/backbone/views/.gitkeep"
72
- template "app/assets/javascripts/backbone/views/default_helpers.js.coffee",
73
- "app/assets/javascripts/backbone/views/default_helpers.js.coffee"
74
- end
75
-
76
- # ------------------------------------------ Add Modernizr
77
-
78
- def add_modernizr
67
+ # Don't forget about modernizr! This is where all the other vendor scripts
68
+ # should be added, although today we only use Modernizr.
69
+ #
70
+ # Modernizr is called from the application layout since it is
71
+ # automatically added.
72
+ #
73
+ def add_other_vendor_javascripts
79
74
  modernizr = "vendor/assets/javascripts/modernizr.js"
80
75
  copy_file modernizr, modernizr
81
76
  end
82
77
 
83
- # ------------------------------------------ Public Styles
78
+ # Now we need to add our styles. We begin here by adding our vendor styles
79
+ # that are not already available via a gem.
80
+ #
81
+ def add_vendor_styles
82
+ normalize = "vendor/assets/stylesheets/normalize.scss"
83
+ template normalize, normalize
84
+ end
84
85
 
86
+ # Once we have the files and gems we need, we can add our public manifest
87
+ # file. We ask the user if they are ok with us deleting theirs.
88
+ #
89
+ # Note: Injecting seems easier here, and it would be, but we can't predict
90
+ # the name of this file, which is why we don't do it. It could be done
91
+ # with a longer method.
92
+ #
85
93
  def add_public_manifest
86
- ['css','scss','scss.css'].each { |ext| remove_file "app/assets/stylesheets/application.#{ext}" }
94
+ q = "\nWe're going to add our default application.scss file and remove yours. Is that ok?"
95
+ if yes? q
96
+ ['css','scss','scss.css'].each { |ext| remove_file "app/assets/stylesheets/application.#{ext}" }
97
+ end
87
98
  template "app/assets/stylesheets/application.scss",
88
99
  "app/assets/stylesheets/application.scss"
89
100
  end
90
101
 
91
- # ------------------------------------------ Add Modernizr
92
-
93
- def add_normalize
94
- normalize = "vendor/assets/stylesheets/normalize.scss"
95
- template normalize, normalize
102
+ # If we have the user model generated, then we will try to create a
103
+ # default user.
104
+ #
105
+ def add_default_user
106
+ if class_exists?('User')
107
+ create_user
108
+ else
109
+ msg = "\nUser model does not exist yet. If you want to use Cambium "
110
+ msg += "to add a user model, then you can run:\n"
111
+ say set_color(msg, :yellow, :bold)
112
+ say " $ bundle exec rake cambium:model:user\n\n"
113
+ msg = "and Cambium will handle the installation of Devise.\n"
114
+ say set_color(msg, :yellow, :bold)
115
+ end
96
116
  end
97
117
 
98
- # ------------------------------------------ Create Default User
99
-
100
- def add_default_user
101
- create_user
118
+ # Add some gems to the gemfile, but don't install (we've been running into
119
+ # dependency issues)
120
+ #
121
+ def add_application_gems
122
+ gems = [
123
+ 'unicorn-rails',
124
+ 'jquery-rails',
125
+ 'uglifier',
126
+ 'sass-rails',
127
+ 'bourbon',
128
+ 'coffee-rails',
129
+ 'backbone-on-rails'
130
+ ]
131
+ add_gems_to_gemfile(gems)
132
+ added_gems = []
133
+ gems.each { |g| added_gems << g unless gem_exists?(g) }
134
+ gemfile_update_notification(added_gems)
102
135
  end
103
136
 
104
137
  # ------------------------------------------ Private Methods
105
138
 
106
139
  private
107
140
 
108
- def run_cmd(cmd, options = {})
109
- print_table(
110
- [
111
- [set_color("run", :green, :bold), cmd]
112
- ],
113
- :indent => 9
114
- )
115
- if options[:quiet] == true
116
- `#{cmd}`
117
- else
118
- system(cmd)
119
- end
120
- end
121
-
122
- def template_file(name)
123
- File.expand_path("../../templates/#{name}", __FILE__)
124
- end
125
-
126
- def file_contents(template)
127
- File.read(template_file(template))
128
- end
129
-
130
- def be
131
- "bundle exec"
132
- end
133
-
134
- def g
135
- "#{be} rails g"
136
- end
137
-
138
- def rake
139
- "#{be} rake"
140
- end
141
-
142
- def confirm_ask(question)
143
- answer = ask("\n#{question}")
144
- match = ask("CONFIRM #{question}")
145
- if answer == match
146
- answer
147
- else
148
- say set_color("Did not match.", :red)
149
- confirm_ask(question)
150
- end
151
- end
152
-
141
+ # create_user is down here because it can then keep looping until a
142
+ # valid record is created.
143
+ #
153
144
  def create_user
154
145
  email = confirm_ask "#{set_color('Default User Email', :green, :bold)}:"
155
146
  password = confirm_ask "#{set_color('Default User Password', :green, :bold)}:"
@@ -157,8 +148,8 @@ module Cambium
157
148
  :email => email,
158
149
  :password => password,
159
150
  :password_confirmation => password,
160
- :is_admin => true
161
151
  )
152
+ u.is_admin = true if u.respond_to?(:is_admin)
162
153
  if u.save
163
154
  say "User created successfully!"
164
155
  else
@@ -1,21 +1,23 @@
1
1
  require 'rake'
2
2
  require 'rails/generators'
3
+ require File.expand_path('../../helpers/_autoloader.rb', __FILE__)
3
4
 
4
5
  module Cambium
5
6
  module Install
6
7
  class ConfigGenerator < Rails::Generators::Base
7
8
  desc "Setup config files for new rails project"
8
9
 
9
- # ------------------------------------------ Class Methods
10
-
11
10
  source_root File.expand_path('../../templates', __FILE__)
12
11
 
13
- # ------------------------------------------ Config
14
-
12
+ # Initialize git repository. If repo was already initialized, repo is
13
+ # reinitialized, but that shouldn't hurt anything.
14
+ #
15
15
  def git_init
16
16
  run_cmd "git init"
17
17
  end
18
18
 
19
+ # Set vars to use throughout this generator
20
+ #
19
21
  def cambium_setup
20
22
  @config = {
21
23
  :db => {},
@@ -23,11 +25,13 @@ module Cambium
23
25
  }
24
26
  end
25
27
 
28
+ # Read existing project files to set default config values
29
+ #
26
30
  def auto_config
27
- # Read Gemfile
31
+ # read Gemfile
28
32
  File.open("#{Rails.root}/Gemfile") do |f|
29
33
  f.each_line do |line|
30
- # Database
34
+ # find database adapter
31
35
  if line.include?("'mysql2'")
32
36
  @config[:db][:adapter] = "mysql2"
33
37
  elsif line.include?("'pg'")
@@ -35,157 +39,143 @@ module Cambium
35
39
  elsif line.include?("'sqlite3'")
36
40
  @config[:db][:adapter] = "sqlite3"
37
41
  end
38
- # Rails Version
42
+ # find rails version
39
43
  if line.match(/gem\ \'rails\'/)
40
44
  @config[:app][:version] = line.gsub(/gem\ \'rails\'\,/, '').gsub(/\'/, '').strip
41
45
  end
42
46
  end
43
47
  end
44
- # Application Class Name
48
+ # Find the application class name
45
49
  @config[:app][:name] = Rails.application.class.parent_name
46
50
  end
47
51
 
48
- def user_config
49
- # Database
50
- if @config[:db][:adapter].present? && yes?("\nCambium, in all its wisdom, thinks your database adapter as #{set_color(@config[:db][:adapter], :green, :bold)}. Is this correct? [yes, no]")
51
- say("Oh, goodie! Moving on...")
52
- else
53
- new_adapter = ask("What would you prefer?", :limited_to => ['mysql2','pg','sqlite3'])
54
- unless new_adapter == @config[:db][:adapter]
55
- say set_color("\nPlease add:", :red, :bold)
56
- say "\n gem '#{new_adapter}'"
57
- say set_color("\nto your Gemfile. Then run `bundle install` and `bundle exec cambium setup`.", :red, :bold)
58
- exit
52
+ # These next few methods let the user adjust the default config if they
53
+ # wish. Otherwise, we use default values from the previous method.
54
+ #
55
+ # --------
56
+ #
57
+ # Set correct database adapter.
58
+ #
59
+ # Note: If the user wants to change the adapter, we *could* change the
60
+ # adapter on the fly and install the new one here. Instead, we tell the
61
+ # user what to do and exit. This make absolutely sure we've gotten rid of
62
+ # the original adapter in the Gemfile and added the new one.
63
+ #
64
+ def set_database_adapter
65
+ if @config[:db][:adapter].present?
66
+ if yes?("\nCambium, in all its wisdom, thinks your database adapter as #{set_color(@config[:db][:adapter], :green, :bold)}. Is this correct? [yes, no]")
67
+ say("Oh, goodie! Moving on...")
68
+ else
69
+ new_adapter = ask("What would you prefer?", :limited_to => ['mysql2','pg','sqlite3'])
70
+ unless new_adapter == @config[:db][:adapter]
71
+ say set_color("\nPlease add:", :red, :bold)
72
+ say "\n gem '#{new_adapter}'"
73
+ say set_color("\nto your Gemfile. Then run `bundle install` and `bundle exec cambium setup`.", :red, :bold)
74
+ exit
75
+ end
59
76
  end
60
77
  end
78
+ end
61
79
 
62
- # Database Name
80
+ # Set the database base name (where we append "_#{stage}" to each stage)
81
+ #
82
+ def set_database_name
63
83
  @config[:db][:name] = @config[:app][:name].underscore.downcase
64
84
  db_name = ask "\n#{set_color('Database Base Name:', :green, :bold)} [default: #{@config[:db][:name]}]"
65
85
  @config[:db][:name] = db_name unless db_name.blank?
86
+ end
66
87
 
67
- # Database Credentials
88
+ # Set database credentials
89
+ #
90
+ def set_database_creds
68
91
  @config[:db][:user] = confirm_ask("#{set_color('Database User', :green, :bold)}: [leave blank for no user]")
69
92
  if @config[:db][:user].present?
70
93
  @config[:db][:password] = confirm_ask("#{set_color('Database Password', :green, :bold)}: [leave blank for no password]")
71
94
  else
72
95
  @config[:db][:password] = ''
73
96
  end
97
+ end
74
98
 
75
- # Root URL (for mailers)
99
+ # Set root URL (for mailers)
100
+ #
101
+ def set_root_url
102
+ # development
76
103
  @config[:app][:dev_url] = ask("\n#{set_color('Development URL', :green, :bold)}: [leave blank for localhost:3000]")
77
104
  @config[:app][:dev_url] = 'localhost:3000' if @config[:app][:dev_url].blank?
105
+ environment(
106
+ "config.action_mailer.default_url_options = { :host => '#{@config[:app][:dev_url]}' }",
107
+ :env => "development"
108
+ )
109
+ # production
78
110
  @config[:app][:prod_url] = ask("#{set_color('Production URL', :green, :bold)}: [leave blank for localhost:3000]")
79
111
  @config[:app][:prod_url] = 'localhost:3000' if @config[:app][:prod_url].blank?
80
- end
81
-
82
- # ------------------------------------------ Gems & Gemfile
83
-
84
- def install_gemfile
85
- remove_file "Gemfile"
86
- template "Gemfile.erb", "Gemfile"
87
- run_cmd "bundle clean"
88
- end
89
-
90
- # ------------------------------------------ Application Settings & Config
91
-
92
- def add_application_config
93
- insert_into_file(
94
- "config/application.rb",
95
- file_contents("config/application.rb"),
96
- :after => "class Application < Rails::Application"
112
+ environment(
113
+ "config.action_mailer.default_url_options = { :host => '#{@config[:app][:prod_url]}' }",
114
+ :env => "production"
115
+ )
116
+ environment(
117
+ "config.assets.precompile += %w( admin/admin.css admin/admin.js admin/wysihtml5.css modernizr.js )",
118
+ :env => "production"
97
119
  )
98
120
  end
99
121
 
100
- # ------------------------------------------ Environment Settings
101
-
102
- def add_env_settings
103
- insert_into_file "config/environments/development.rb",
104
- :after => "Rails.application.configure do" do
105
- "\n\n config.action_mailer.default_url_options = { :host => '#{@config[:app][:dev_url]}' }\n"
106
- end
107
- insert_into_file "config/environments/production.rb",
108
- :after => "Rails.application.configure do" do
109
- output = ''
110
- output += "\n\n config.action_mailer.default_url_options = { :host => '#{@config[:app][:prod_url]}' }"
111
- output += "\n\n config.assets.precompile += %w( admin/admin.css admin/admin.js admin/wysihtml5.css modernizr.js )\n"
112
- output
113
- end
122
+ # Add settings to application config file (config/application.rb)
123
+ #
124
+ def add_application_config
125
+ environment { file_contents("config/application.rb") }
114
126
  end
115
127
 
116
- # ------------------------------------------ Assets Initializer
117
-
128
+ # Assets initializer for Rails 4.1+
129
+ #
118
130
  def add_assets_initializer
119
131
  template "config/initializers/assets.rb",
120
132
  "config/initializers/assets.rb"
121
133
  end
122
134
 
123
- # ------------------------------------------ Database Setup
124
-
135
+ # Create database based on custom config
136
+ #
125
137
  def setup_database
126
138
  copy_file "#{Rails.root}/config/database.yml", "config/database.sample.yml"
127
139
  remove_file "config/database.yml"
128
140
  template "config/database.#{@config[:db][:adapter]}.yml.erb", "config/database.yml"
129
- run_cmd "#{rake} db:drop", :quiet => true
130
- run_cmd "#{rake} db:create"
131
- run_cmd "#{rake} db:migrate"
141
+ rake "db:create"
142
+ rake "db:migrate"
132
143
  end
133
144
 
134
- # ------------------------------------------ .gitignore
135
-
145
+ # Add custom gitignore file
146
+ #
136
147
  def add_gitignore
137
148
  remove_file ".gitignore"
138
149
  template "gitignore", ".gitignore"
139
150
  end
140
151
 
141
- # ------------------------------------------ Private Methods
142
-
143
- private
144
-
145
- def run_cmd(cmd, options = {})
146
- print_table(
147
- [
148
- [set_color("run", :green, :bold), cmd]
149
- ],
150
- :indent => 9
151
- )
152
- if options[:quiet] == true
153
- `#{cmd}`
154
- else
155
- system(cmd)
156
- end
157
- end
158
-
159
- def template_file(name)
160
- File.expand_path("../../templates/#{name}", __FILE__)
161
- end
162
-
163
- def file_contents(template)
164
- File.read(template_file(template))
165
- end
166
-
167
- def be
168
- "bundle exec"
169
- end
170
-
171
- def g
172
- "#{be} rails g"
173
- end
174
-
175
- def rake
176
- "#{be} rake"
152
+ # We used to start the user out by installing all the gems we will need
153
+ # throughout the project. Now, we're going to ask the user if they want to
154
+ # replace their Gemfile with our custom file. If they say "no," then we
155
+ # will install the gems we need at a later step.
156
+ #
157
+ def add_recommended_gems
158
+ msg = "\nWe have a set of gems we recommend by default. You can \n"
159
+ msg += "start with this Gemfile if you'd like. Of course, we'll \n"
160
+ msg += "install gems for you when we need them."
161
+ say msg
162
+ if yes? "\nWould you like to replace your existing Gemfile with our default?"
163
+ remove_file "Gemfile"
164
+ template "Gemfile.erb", "Gemfile"
165
+ say "\nYour Gemfile has been updated, but now you need to run:"
166
+ say "\n $ bundle install"
167
+ say "\nto install all your gems. Feel free to any gems you don't want, "
168
+ say "\nsince we will add gems to your project as we need them."
169
+ else
170
+ say "You got it!"
177
171
  end
172
+ end
178
173
 
179
- def confirm_ask(question)
180
- answer = ask("\n#{question}")
181
- match = ask("CONFIRM #{question}")
182
- if answer == match
183
- answer
184
- else
185
- say set_color("Did not match.", :red)
186
- confirm_ask(question)
187
- end
188
- end
174
+ # Outgoing message
175
+ #
176
+ def tell_user_we_are_done
177
+ say "\n#{set_color('Config completed!', :green, :bold)}"
178
+ end
189
179
 
190
180
  end
191
181
  end
@@ -1,5 +1,7 @@
1
1
  require 'rake'
2
2
  require 'rails/generators'
3
+ require "#{Gem::Specification.find_by_name("cambium").gem_dir}/lib/generators/cambium/helpers/generators_helper.rb"
4
+ include Cambium::GeneratorsHelper
3
5
 
4
6
  module Cambium
5
7
  module Install
@@ -18,7 +20,6 @@ module Cambium
18
20
  'name',
19
21
  'publishable',
20
22
  'slug',
21
- 'tags',
22
23
  'title',
23
24
  ].each do |concern|
24
25
  copy_file "app/models/concerns/#{concern}.rb",
@@ -51,55 +52,6 @@ module Cambium
51
52
  end
52
53
  end
53
54
 
54
- # ------------------------------------------ Private Methods
55
-
56
- private
57
-
58
- def run_cmd(cmd, options = {})
59
- print_table(
60
- [
61
- [set_color("run", :green, :bold), cmd]
62
- ],
63
- :indent => 9
64
- )
65
- if options[:quiet] == true
66
- `#{cmd}`
67
- else
68
- system(cmd)
69
- end
70
- end
71
-
72
- def template_file(name)
73
- File.expand_path("../../templates/#{name}", __FILE__)
74
- end
75
-
76
- def file_contents(template)
77
- File.read(template_file(template))
78
- end
79
-
80
- def be
81
- "bundle exec"
82
- end
83
-
84
- def g
85
- "#{be} rails g"
86
- end
87
-
88
- def rake
89
- "#{be} rake"
90
- end
91
-
92
- def confirm_ask(question)
93
- answer = ask("\n#{question}")
94
- match = ask("Confirm: #{question}")
95
- if answer == match
96
- answer
97
- else
98
- say set_color("Did not match.", :red)
99
- confirm_ask(question)
100
- end
101
- end
102
-
103
55
  end
104
56
  end
105
57
  end
@@ -0,0 +1,67 @@
1
+ require 'rake'
2
+ require 'rails/generators'
3
+ require File.expand_path('../../helpers/_autoloader.rb', __FILE__)
4
+
5
+ module Cambium
6
+ module Model
7
+ class ImageGenerator < Rails::Generators::Base
8
+ desc "Create a simple image model"
9
+
10
+ source_root File.expand_path('../../templates', __FILE__)
11
+
12
+ # Let's make sure we have the admin setup already.
13
+ #
14
+ def set_dependencies
15
+ check_dependencies(['cambium:install:admin'])
16
+ end
17
+
18
+ # Install gems we need for images
19
+ #
20
+ def install_gem_dependencies
21
+ install_gem 'carrierwave'
22
+ install_gem 'rmagick', :require => 'RMagick'
23
+ end
24
+
25
+ # Since the Image model is so simple, we can generate it from the command
26
+ # line instead of copying templates.
27
+ #
28
+ def generate_model
29
+ generate "model Image filename"
30
+ end
31
+
32
+ # Add our pre-built model file
33
+ #
34
+ def add_model_files
35
+ copy_file("app/models/image.rb", "app/models/image.rb", :force => true)
36
+ end
37
+
38
+ # Add our image uploader, which uses CarrierWave
39
+ #
40
+ def add_uploaders
41
+ generate "uploader Image"
42
+ uploader_path = "app/uploaders/image_uploader.rb"
43
+ copy_file uploader_path, uploader_path, :force => true
44
+ end
45
+
46
+ # Add our image cropper model concern. Currently, we don't have the
47
+ # cropping tool functional within the admin.
48
+ #
49
+ def add_model_concerns
50
+ add_model_concern 'image_cropper'
51
+ end
52
+
53
+ # Before we finish up, we need to add our admin files.
54
+ #
55
+ def add_admin_files
56
+ template("app/controllers/admin/images_controller.rb",
57
+ "app/controllers/admin/images_controller.rb")
58
+ directory("app/views/admin/images", "app/views/admin/images")
59
+ end
60
+
61
+ def finish_up
62
+ migrate_and_annotate
63
+ end
64
+
65
+ end
66
+ end
67
+ end