jackdempsey-beet 0.0.3 → 0.0.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/beet.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{beet}
5
- s.version = "0.0.3"
5
+ s.version = "0.0.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Jack Dempsey"]
9
- s.date = %q{2009-05-20}
9
+ s.date = %q{2009-05-21}
10
10
  s.default_executable = %q{beet}
11
11
  s.email = %q{jack.dempsey@gmail.com}
12
12
  s.executables = ["beet"]
@@ -28,13 +28,14 @@ Gem::Specification.new do |s|
28
28
  "lib/beet/executor.rb",
29
29
  "lib/beet/file_system.rb",
30
30
  "lib/beet/interaction.rb",
31
- "lib/beet/logging.rb",
31
+ "lib/beet/logger.rb",
32
32
  "lib/beet/rails.rb",
33
33
  "lib/beet/scm.rb",
34
34
  "lib/beet/scm/git.rb",
35
35
  "lib/beet/scm/svn.rb",
36
36
  "lib/beet/templates/rails/authlogic.rb",
37
37
  "lib/beet/templates/rails/clean_files.rb",
38
+ "lib/beet/templates/rails/db/mysql.rb",
38
39
  "lib/beet/templates/rails/git.rb",
39
40
  "lib/beet/templates/rails/jquery.rb",
40
41
  "spec/beet_spec.rb",
data/lib/beet/executor.rb CHANGED
@@ -1,22 +1,23 @@
1
1
  require 'open-uri'
2
+ require 'beet/logger'
2
3
  module Beet
3
4
  class Executor
4
5
  include Beet::Execution
5
6
  include Beet::FileSystem
6
7
  include Beet::Interaction
7
- include Beet::Logging
8
8
 
9
9
  # TODO create a better way to mixin things from rails/whatever as needed
10
10
  include Beet::Rails
11
11
  include Beet::Capistrano
12
12
  include Beet::SCM
13
13
 
14
- attr_reader :root
15
- attr_writer :logger
16
- attr_accessor :templates, :app_name
14
+ attr_reader :root, :logger
15
+ attr_accessor :templates, :project_name
17
16
 
18
- def initialize(templates, app_name) # :nodoc:
19
- @root = File.expand_path(File.join(Dir.pwd, app_name))
17
+ def initialize(templates, project_name) # :nodoc:
18
+ @root = File.expand_path(File.join(Dir.pwd, project_name))
19
+ @project_name = project_name
20
+ @logger = Beet::Logger.new
20
21
  @templates = []
21
22
  templates.split(/[\s,]+/).each do |template|
22
23
  if file = template_location(template)
@@ -36,13 +37,17 @@ module Beet
36
37
  end
37
38
  end
38
39
 
40
+ def log(*args)
41
+ logger.log(*args)
42
+ end
43
+
39
44
  private
40
45
 
41
46
  def template_location(template)
42
47
  return template if File.exists?(template) or template.include?('http://')
43
48
  locations = []
44
- locations << File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
45
49
  locations << File.expand_path(ENV['BEET_TEMPLATES_DIR']) if ENV['BEET_TEMPLATES_DIR']
50
+ locations << File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
46
51
  locations.each do |location|
47
52
  filename = File.join(location, "#{template}.rb")
48
53
  return filename if File.exists?(filename)
@@ -0,0 +1,44 @@
1
+ module Beet
2
+ class Logger # :nodoc:
3
+ attr_reader :out
4
+ attr_accessor :quiet
5
+
6
+ def initialize(out = $stdout)
7
+ @out = out
8
+ @quiet = false
9
+ @level = 0
10
+ end
11
+
12
+ def log(status, message, &block)
13
+ @out.print("%12s %s%s\n" % [status, ' ' * @level, message]) unless quiet
14
+ indent(&block) if block_given?
15
+ end
16
+
17
+ def indent(&block)
18
+ @level += 1
19
+ if block_given?
20
+ begin
21
+ block.call
22
+ ensure
23
+ outdent
24
+ end
25
+ end
26
+ end
27
+
28
+ def outdent
29
+ @level -= 1
30
+ if block_given?
31
+ begin
32
+ block.call
33
+ ensure
34
+ indent
35
+ end
36
+ end
37
+ end
38
+
39
+ private
40
+ def method_missing(method, *args, &block)
41
+ log(method.to_s, args.first, &block)
42
+ end
43
+ end
44
+ end
@@ -1,8 +1,289 @@
1
- # app/models/user_session.rb
2
1
  file "app/models/user_session.rb" do
3
- %q{
4
- class UserSession < Authlogic::Session::Base
5
- # configuration here, see documentation for sub modules of Authlogic::Session
2
+ %{
3
+ class UserSession < Authlogic::Session::Base
4
+ logout_on_timeout true # default is false
5
+ end
6
+ }
7
+ end
8
+
9
+ file "app/models/user.rb" do
10
+ %{
11
+ class User < ActiveRecord::Base
12
+ acts_as_authentic do |c|
13
+ c.logged_in_timeout = 10.minutes # default is 10.minutes
14
+ end
15
+ end
16
+ }
17
+ end
18
+
19
+ file "app/controllers/user_sessions_controller.rb" do
20
+ %{
21
+ class UserSessionsController < ApplicationController
22
+ before_filter :require_no_user, :only => [:new, :create]
23
+ before_filter :require_user, :only => :destroy
24
+
25
+ def new
26
+ @user_session = UserSession.new
27
+ end
28
+
29
+ def create
30
+ @user_session = UserSession.new(params[:user_session])
31
+ if @user_session.save
32
+ flash[:notice] = "Login successful!"
33
+ redirect_back_or_default account_url
34
+ else
35
+ render :action => :new
36
+ end
37
+ end
38
+
39
+ def destroy
40
+ current_user_session.destroy
41
+ flash[:notice] = "Logout successful!"
42
+ redirect_back_or_default new_user_session_url
43
+ end
44
+ end
45
+ }
46
+ end
47
+
48
+
49
+ file "app/views/user_sessions/new.html.erb" do
50
+ %{
51
+ <h1>Login</h1>
52
+
53
+ <% form_for @user_session, :url => user_session_path do |f| %>
54
+ <%= f.error_messages %>
55
+ <%= f.label :email %><br />
56
+ <%= f.text_field :email %><br />
57
+ <br />
58
+ <%= f.label :password %><br />
59
+ <%= f.password_field :password %><br />
60
+ <br />
61
+ <%= f.check_box :remember_me %><%= f.label :remember_me %><br />
62
+ <br />
63
+ <%= f.submit "Login" %>
64
+ <% end %>
65
+ }
66
+ end
67
+
68
+ # Setup some routes
69
+ route 'map.resource :user_session'
70
+ route 'map.resource :account, :controller => "users"'
71
+ route 'map.resources :users'
72
+ route 'map.register "/register", :controller => "users", :action => "new"'
73
+ route 'map.login "/login", :controller => "user_sessions", :action => "new"'
74
+ route 'map.logout "/logout", :controller => "user_sessions", :action => "destroy"'
75
+
76
+ file "app/controllers/application_controller.rb" do
77
+ %{
78
+ # Filters added to this controller apply to all controllers in the application.
79
+ # Likewise, all the methods added will be available for all controllers.
80
+
81
+ class ApplicationController < ActionController::Base
82
+ helper :all
83
+ helper_method :current_user_session, :current_user
84
+ filter_parameter_logging :password, :password_confirmation
85
+
86
+ private
87
+ def current_user_session
88
+ return @current_user_session if defined?(@current_user_session)
89
+ @current_user_session = UserSession.find
90
+ end
91
+
92
+ def current_user
93
+ return @current_user if defined?(@current_user)
94
+ @current_user = current_user_session && current_user_session.record
95
+ end
96
+
97
+ def require_user
98
+ unless current_user
99
+ store_location
100
+ flash[:notice] = "You must be logged in to access this page"
101
+ redirect_to new_user_session_url
102
+ return false
103
+ end
104
+ end
105
+
106
+ def require_no_user
107
+ if current_user
108
+ store_location
109
+ flash[:notice] = "You must be logged out to access this page"
110
+ redirect_to account_url
111
+ return false
112
+ end
113
+ end
114
+
115
+ def store_location
116
+ session[:return_to] = request.request_uri
117
+ end
118
+
119
+ def redirect_back_or_default(default)
120
+ redirect_to(session[:return_to] || default)
121
+ session[:return_to] = nil
6
122
  end
7
- }
8
123
  end
124
+ }
125
+ end
126
+
127
+ file "app/controllers/users_controller.rb" do
128
+ %{
129
+ class UsersController < ApplicationController
130
+ before_filter :require_no_user, :only => [:new, :create]
131
+ before_filter :require_user, :only => [:show, :edit, :update]
132
+
133
+ def new
134
+ @user = User.new
135
+ end
136
+
137
+ def create
138
+ @user = User.new(params[:user])
139
+ if @user.save
140
+ flash[:notice] = "Account registered!"
141
+ redirect_back_or_default account_url
142
+ else
143
+ render :action => :new
144
+ end
145
+ end
146
+
147
+ def show
148
+ @user = @current_user
149
+ end
150
+
151
+ def edit
152
+ @user = @current_user
153
+ end
154
+
155
+ def update
156
+ @user = @current_user # makes our views "cleaner" and more consistent
157
+ if @user.update_attributes(params[:user])
158
+ flash[:notice] = "Account updated!"
159
+ redirect_to account_url
160
+ else
161
+ render :action => :edit
162
+ end
163
+ end
164
+ end
165
+ }
166
+ end
167
+
168
+ file "app/views/users/_form.html.erb" do
169
+ %{
170
+ <%= form.label :email %><br />
171
+ <%= form.text_field :email %><br />
172
+ <br />
173
+ <%= form.label :password, form.object.new_record? ? nil : "Change password" %><br />
174
+ <%= form.password_field :password %><br />
175
+ <br />
176
+ <%= form.label :password_confirmation %><br />
177
+ <%= form.password_field :password_confirmation %><br />
178
+ }
179
+ end
180
+
181
+ file "app/views/users/edit.html.erb" do
182
+ %{
183
+ <h1>Edit My Account</h1>
184
+
185
+ <% form_for @user, :url => account_path do |f| %>
186
+ <%= f.error_messages %>
187
+ <%= render :partial => "form", :object => f %>
188
+ <%= f.submit "Update" %>
189
+ <% end %>
190
+
191
+ <br /><%= link_to "My Profile", account_path %>
192
+ }
193
+ end
194
+
195
+ file "app/views/users/new.html.erb" do
196
+ %{
197
+ <h1>Register</h1>
198
+
199
+ <% form_for @user, :url => account_path do |f| %>
200
+ <%= f.error_messages %>
201
+ <%= render :partial => "form", :object => f %>
202
+ <%= f.submit "Register" %>
203
+ <% end %>
204
+ }
205
+ end
206
+
207
+ file "app/views/users/show.html.erb" do
208
+ %{
209
+ <p>
210
+ <b>Email:</b>
211
+ <%=h @user.email %>
212
+ </p>
213
+
214
+ <p>
215
+ <b>Login count:</b>
216
+ <%=h @user.login_count %>
217
+ </p>
218
+
219
+ <p>
220
+ <b>Last request at:</b>
221
+ <%=h @user.last_request_at %>
222
+ </p>
223
+
224
+ <p>
225
+ <b>Last login at:</b>
226
+ <%=h @user.last_login_at %>
227
+ </p>
228
+
229
+ <p>
230
+ <b>Current login at:</b>
231
+ <%=h @user.current_login_at %>
232
+ </p>
233
+
234
+ <p>
235
+ <b>Last login ip:</b>
236
+ <%=h @user.last_login_ip %>
237
+ </p>
238
+
239
+ <p>
240
+ <b>Current login ip:</b>
241
+ <%=h @user.current_login_ip %>
242
+ </p>
243
+
244
+
245
+ <%= link_to 'Edit', edit_account_path %>
246
+ }
247
+ end
248
+
249
+ # can't rely on internal rails migration generation, so we do it this way
250
+ run "script/generate migration beet_authlogic_create_user"
251
+
252
+ #now open it
253
+ file(Dir.glob('db/migrate/*beet_authlogic_create_user*').first) do
254
+ %{
255
+ class BeetAuthlogicCreateUser < ActiveRecord::Migration
256
+ def self.up
257
+ unless table_exists?(:users)
258
+ create_table :users do |t|
259
+ t.string :email, :null => false # optional, you can use login instead, or both
260
+ t.string :crypted_password, :null => false # optional, see below
261
+ t.string :password_salt, :null => false # optional, but highly recommended
262
+ t.string :persistence_token, :null => false # required
263
+ t.string :single_access_token, :null => false # optional, see Authlogic::Session::Params
264
+ t.string :perishable_token, :null => false # optional, see Authlogic::Session::Perishability
265
+
266
+ # Magic columns, just like ActiveRecord's created_at and updated_at. These are automatically maintained by Authlogic if they are present.
267
+ t.integer :login_count, :null => false, :default => 0 # optional, see Authlogic::Session::MagicColumns
268
+ t.integer :failed_login_count, :null => false, :default => 0 # optional, see Authlogic::Session::MagicColumns
269
+ t.datetime :last_request_at # optional, see Authlogic::Session::MagicColumns
270
+ t.datetime :current_login_at # optional, see Authlogic::Session::MagicColumns
271
+ t.datetime :last_login_at # optional, see Authlogic::Session::MagicColumns
272
+ t.string :current_login_ip # optional, see Authlogic::Session::MagicColumns
273
+ t.string :last_login_ip # optional, see Authlogic::Session::MagicColumns
274
+ end
275
+ end
276
+ end
277
+
278
+ def self.down
279
+ drop_table :users
280
+ end
281
+ end
282
+ }
283
+ end
284
+
285
+ gem 'authlogic'
286
+
287
+ rake "gems:install", :sudo => true
288
+ rake "db:create:all"
289
+ rake "db:migrate"
@@ -0,0 +1,43 @@
1
+ file 'config/database.yml' do
2
+ %{
3
+ # MySQL. Versions 4.1 and 5.0 are recommended.
4
+ #
5
+ # Install the MySQL driver:
6
+ # gem install mysql
7
+ # On Mac OS X:
8
+ # sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
9
+ # On Mac OS X Leopard:
10
+ # sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
11
+ # This sets the ARCHFLAGS environment variable to your native architecture
12
+ # On Windows:
13
+ # gem install mysql
14
+ # Choose the win32 build.
15
+ # Install MySQL and put its /bin directory on your path.
16
+ #
17
+ # And be sure to use new-style password hashing:
18
+ # http://dev.mysql.com/doc/refman/5.0/en/old-client.html
19
+ ---
20
+ development: &defaults
21
+ adapter: mysql
22
+ encoding: utf8
23
+ reconnect: false
24
+ database: #{project_name}_development
25
+ pool: 5
26
+ username: root
27
+ password:
28
+ socket: /tmp/mysql.sock
29
+
30
+ # Warning: The database defined as "test" will be erased and
31
+ # re-generated from your development database when you run "rake".
32
+ # Do not set this db to the same as development or production.
33
+ test:
34
+ <<: *defaults
35
+ database: #{project_name}_test
36
+
37
+ production:
38
+ <<: *defaults
39
+ database: #{project_name}_production
40
+ }
41
+ end
42
+
43
+ FileUtils.copy "config/database.yml", "config/database.yml.example"
data/lib/beet.rb CHANGED
@@ -2,7 +2,6 @@
2
2
  require 'beet/execution'
3
3
  require 'beet/file_system'
4
4
  require 'beet/interaction'
5
- require 'beet/logging'
6
5
  require 'beet/capistrano'
7
6
  require 'beet/rails'
8
7
  require 'beet/scm'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jackdempsey-beet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Dempsey
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-20 00:00:00 -07:00
12
+ date: 2009-05-21 00:00:00 -07:00
13
13
  default_executable: beet
14
14
  dependencies: []
15
15
 
@@ -36,13 +36,14 @@ files:
36
36
  - lib/beet/executor.rb
37
37
  - lib/beet/file_system.rb
38
38
  - lib/beet/interaction.rb
39
- - lib/beet/logging.rb
39
+ - lib/beet/logger.rb
40
40
  - lib/beet/rails.rb
41
41
  - lib/beet/scm.rb
42
42
  - lib/beet/scm/git.rb
43
43
  - lib/beet/scm/svn.rb
44
44
  - lib/beet/templates/rails/authlogic.rb
45
45
  - lib/beet/templates/rails/clean_files.rb
46
+ - lib/beet/templates/rails/db/mysql.rb
46
47
  - lib/beet/templates/rails/git.rb
47
48
  - lib/beet/templates/rails/jquery.rb
48
49
  - spec/beet_spec.rb
data/lib/beet/logging.rb DELETED
@@ -1,14 +0,0 @@
1
- require 'logger'
2
- module Beet
3
- module Logging
4
-
5
- def log(action, message = '')
6
- logger.debug("#{action}: #{message}")
7
- end
8
-
9
- def logger
10
- @logger ||= Logger.new(STDOUT)
11
- end
12
-
13
- end
14
- end