snfn 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -12,4 +12,4 @@ group :development do
12
12
  # gem "rcov", ">= 0"
13
13
  end
14
14
 
15
- gem "thor"
15
+ gem "thor", "~> 0.14.6"
data/Gemfile.lock CHANGED
@@ -15,4 +15,4 @@ PLATFORMS
15
15
  DEPENDENCIES
16
16
  bundler (~> 1.0.0)
17
17
  jeweler (~> 1.6.4)
18
- thor
18
+ thor (~> 0.14.6)
data/README.mdown CHANGED
@@ -3,11 +3,11 @@
3
3
  Snfn is an opinionated generator for Sinatra projects. It
4
4
  can be configured using the following options:
5
5
 
6
- * -d : Database. Options are "postgres," "mysql," "sqlite",
6
+ * `-d` Database. Options are "postgres," "mysql," "sqlite",
7
7
  and "mongo." Default is "sqlite."
8
- * --redis : Include Redis configuration options.
9
- * --no-database : Don't include any database config options.
10
- * --no-heroku : Don't include Heroku config options.
8
+ * `--redis` Include Redis configuration options.
9
+ * `--no-database` Don't include any database config options.
10
+ * `--no-heroku` Don't include Heroku config options.
11
11
 
12
12
  ## Installation
13
13
 
@@ -30,19 +30,30 @@ The template autoloads files in config/initializers and
30
30
  /lib. Database configuration options are stored in `config/db.yml`
31
31
  and are loaded via `config/initializers/database.rb`.
32
32
 
33
- Right now Snfn only supports Unicorn as a server, with the config
34
- stored at config/unicorn.rb.
33
+ Right now Snfn only comes out of the box with support for Unicorn, (the
34
+ config file is stored at config/unicorn.rb), but changing it out for
35
+ thin or mongrel is pretty trivial.
35
36
 
36
37
  ## DB Setup
37
38
 
38
- Sequel is used as an ORM for relational databases,
39
- and migrations are stored in db/migrate. Migrations can be
40
- run using the rake command `rake migrate`.
39
+ [Sequel](http://sequel.rubyforge.org) is used as an ORM for
40
+ relational databases, and migrations are stored in db/migrate.
41
+ Migrations can be run using the rake command `rake rb:migrate`.
41
42
 
42
43
  MongoMapper is used for Mongo apps, with the config options
43
44
  stored in the same files as relational databases (`config/db.yml`
44
45
  and `config/initializers/database.rb`).
45
46
 
47
+ ### More information
48
+
49
+ * [Sequel Migrations](http://sequel.rubyforge.org/rdoc/files/doc/migration_rdoc.html)
50
+ * [Sequel Models](http://sequel.rubyforge.org/rdoc/classes/Sequel/Model.html)
51
+ * [MongoMapper](http://mongomapper.com)
52
+
53
+ If there is any interest in supporting other ORMs like DataMapper or
54
+ ActiveRecord, either please let me know or implement it yourself and
55
+ send a pull request.
56
+
46
57
  ## Set up on Heroku
47
58
 
48
59
  By default, Snfn creates an app with the proper options for deployment
@@ -59,8 +70,8 @@ on Heroku. To get Snfn up and running on Heroku:
59
70
  To use PostgreSQL, MongoDB, or Redis on Heroku, you'll need to add
60
71
  the proper Heroku add-ons. The commands to do this are, respectively:
61
72
 
62
- heroku addons:add shared_database # PostgreSQL
63
- heroku addons:add mongolab:starter: # MongoDB
73
+ heroku addons:add shared-database # PostgreSQL
74
+ heroku addons:add mongolab:starter # MongoDB
64
75
  heroku addons:add redistogo:nano # Redis
65
76
 
66
77
  ## Contributing to snfn
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
data/bin/snfn CHANGED
@@ -9,7 +9,7 @@ class SnfnGenerator < Thor
9
9
  include Thor::Actions
10
10
 
11
11
  desc "new NAME", "Creates new Snfn application"
12
- method_option :database, :aliases => "-d", :default => "postgres", :desc => "The type of database to use. Values are \"sqlite\", \"postgres\", \"mysql\", and \"mongo\". Default is \"postgres\"."
12
+ method_option :database, :aliases => "-d", :default => "sqlite", :desc => "The type of database to use. Values are \"sqlite\", \"postgres\", \"mysql\", and \"mongo\". Default is \"postgres\"."
13
13
  method_option :no_heroku, :type => :boolean, :desc => "Include Heroku configuration options."
14
14
  method_option :no_database, :type => :boolean, :desc => "Do not use any database."
15
15
  method_option :redis, :type => :boolean, :desc => "Include Redis configuration options."
@@ -2,9 +2,9 @@ module Snfn
2
2
  module Extensions
3
3
  module String
4
4
  def camel_case
5
- return self if !match(/_/)
6
- altered_self = self.capitalize
7
- altered_self.scan(/_[a-zA-Z]/).each do |match|
5
+ return self.gsub(/^./) { |l| l.capitalize } if !match(/[_-]/)
6
+ altered_self = self.downcase.capitalize
7
+ altered_self.scan(/[_-][a-zA-Z]/).each do |match|
8
8
  altered_self.gsub!(match, match[1].upcase)
9
9
  end
10
10
 
@@ -16,13 +16,14 @@ module Snfn
16
16
  end
17
17
 
18
18
  def file_name
19
- return self if !match(/[A-Z]/)
19
+ return self.gsub(/-/, "_") if !match(/[A-Z]/)
20
20
  altered_self = self.strip
21
+
21
22
  altered_self.scan(/[A-Z]/).each do |match|
22
23
  altered_self.gsub!(match, "_#{match.downcase}")
23
24
  end
24
25
 
25
- altered_self.sub(/^_/, "")
26
+ altered_self.sub(/^_/, "").gsub(/_{2,}+/, "_").downcase
26
27
  end
27
28
 
28
29
  def file_name!
@@ -3,11 +3,15 @@
3
3
  Snfn is an opinionated generator for Sinatra projects. It
4
4
  can be configured using the following options:
5
5
 
6
- * -d : Database. Options are "postgres," "mysql," "sqlite",
6
+ * `-d` Database. Options are "postgres," "mysql," "sqlite",
7
7
  and "mongo." Default is "sqlite."
8
- * --redis : Include Redis configuration options.
9
- * --no-database : Don't include any database config options.
10
- * --no-heroku : Don't include Heroku config options.
8
+ * `--redis` Include Redis configuration options.
9
+ * `--no-database` Don't include any database config options.
10
+ * `--no-heroku` Don't include Heroku config options.
11
+
12
+ ## Installation
13
+
14
+ gem install snfn
11
15
 
12
16
  ## Example
13
17
 
@@ -26,19 +30,30 @@ The template autoloads files in config/initializers and
26
30
  /lib. Database configuration options are stored in `config/db.yml`
27
31
  and are loaded via `config/initializers/database.rb`.
28
32
 
29
- Right now Snfn only supports Unicorn as a server, with the config
30
- stored at config/unicorn.rb.
33
+ Right now Snfn only comes out of the box with support for Unicorn, (the
34
+ config file is stored at config/unicorn.rb), but changing it out for
35
+ thin or mongrel is pretty trivial.
31
36
 
32
37
  ## DB Setup
33
38
 
34
- Sequel is used as an ORM for relational databases,
35
- and migrations are stored in db/migrate. Migrations can be
36
- run using the rake command `rake migrate`.
39
+ [Sequel](http://sequel.rubyforge.org) is used as an ORM for
40
+ relational databases, and migrations are stored in db/migrate.
41
+ Migrations can be run using the rake command `rake rb:migrate`.
37
42
 
38
43
  MongoMapper is used for Mongo apps, with the config options
39
44
  stored in the same files as relational databases (`config/db.yml`
40
45
  and `config/initializers/database.rb`).
41
46
 
47
+ ### More information
48
+
49
+ * [Sequel Migrations](http://sequel.rubyforge.org/rdoc/files/doc/migration_rdoc.html)
50
+ * [Sequel Models](http://sequel.rubyforge.org/rdoc/classes/Sequel/Model.html)
51
+ * [MongoMapper](http://mongomapper.com)
52
+
53
+ If there is any interest in supporting other ORMs like DataMapper or
54
+ ActiveRecord, either please let me know or implement it yourself and
55
+ send a pull request.
56
+
42
57
  ## Set up on Heroku
43
58
 
44
59
  By default, Snfn creates an app with the proper options for deployment
@@ -55,6 +70,7 @@ on Heroku. To get Snfn up and running on Heroku:
55
70
  To use PostgreSQL, MongoDB, or Redis on Heroku, you'll need to add
56
71
  the proper Heroku add-ons. The commands to do this are, respectively:
57
72
 
58
- heroku addons:add shared_database # PostgreSQL
59
- heroku addons:add mongolab:starter: # MongoDB
73
+ heroku addons:add shared-database # PostgreSQL
74
+ heroku addons:add mongolab:starter # MongoDB
60
75
  heroku addons:add redistogo:nano # Redis
76
+
@@ -15,6 +15,8 @@ end
15
15
  task :environment, [:env] do |cmd, args|
16
16
  Bundler.require
17
17
  ENV['RACK_ENV'] = args[:env] || "development"
18
- Find.find("lib") { |f| require f unless f.match(/\/\..+$/) || File.directory?(f) }
18
+ %w{ ./config/initializers ./lib }.each do
19
+ Find.find(lib) { |f| require f unless f.match(/\/\..+$/) || File.directory?(f) }
20
+ end
19
21
  end
20
22
 
data/snfn.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{snfn}
8
- s.version = "0.1.2"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Zach Pendleton}]
@@ -46,6 +46,7 @@ Gem::Specification.new do |s|
46
46
  "lib/templates/views/welcome.erb",
47
47
  "snfn.gemspec",
48
48
  "test/helper.rb",
49
+ "test/test_extension_string.rb",
49
50
  "test/test_snfn.rb",
50
51
  "vendor/cache/git-1.2.5.gem",
51
52
  "vendor/cache/jeweler-1.6.4.gem",
@@ -62,16 +63,16 @@ Gem::Specification.new do |s|
62
63
  s.specification_version = 3
63
64
 
64
65
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
65
- s.add_runtime_dependency(%q<thor>, [">= 0"])
66
+ s.add_runtime_dependency(%q<thor>, ["~> 0.14.6"])
66
67
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
67
68
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
68
69
  else
69
- s.add_dependency(%q<thor>, [">= 0"])
70
+ s.add_dependency(%q<thor>, ["~> 0.14.6"])
70
71
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
71
72
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
72
73
  end
73
74
  else
74
- s.add_dependency(%q<thor>, [">= 0"])
75
+ s.add_dependency(%q<thor>, ["~> 0.14.6"])
75
76
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
76
77
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
77
78
  end
data/test/helper.rb CHANGED
@@ -8,11 +8,11 @@ rescue Bundler::BundlerError => e
8
8
  exit e.status_code
9
9
  end
10
10
  require 'test/unit'
11
- require 'shoulda'
12
11
 
13
12
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
13
  $LOAD_PATH.unshift(File.dirname(__FILE__))
15
14
  require 'snfn'
15
+ require 'extensions/string'
16
16
 
17
17
  class Test::Unit::TestCase
18
18
  end
@@ -0,0 +1,47 @@
1
+ require 'helper'
2
+
3
+ class TestExtensionString < Test::Unit::TestCase
4
+ def test_should_ignore_an_already_camel_cased_string
5
+ assert_equal "MyApp", "MyApp".camel_case
6
+ end
7
+
8
+ def test_should_capitalize_an_all_lower_case_string
9
+ assert_equal "Myapp", "myapp".camel_case
10
+ end
11
+
12
+ def test_should_camel_case_a_lower_case_string_with_underscores
13
+ assert_equal "MyApp", "my_app".camel_case
14
+ end
15
+
16
+ def test_should_camel_case_a_lower_case_string_with_hyphens
17
+ assert_equal "MyApp", "my-app".camel_case
18
+ end
19
+
20
+ def test_should_camel_case_an_uppercase_string_with_underscores
21
+ assert_equal "MyApp", "MY_APP".camel_case
22
+ end
23
+
24
+ def test_should_camel_case_an_uppercase_string_with_hyphens
25
+ assert_equal "MyApp", "MY-APP".camel_case
26
+ end
27
+
28
+ def test_should_camel_case_a_string_with_a_hyphen_preceding_a_capital_letter
29
+ assert_equal "MyApp", "my_App".camel_case
30
+ end
31
+
32
+ def test_should_underscore_a_camel_cased_string
33
+ assert_equal "my_app", "MyApp".file_name
34
+ end
35
+
36
+ def test_should_underscore_a_hypenated_string
37
+ assert_equal "my_app", "my-app".file_name
38
+ end
39
+
40
+ def test_should_ignore_an_already_underscored_string
41
+ assert_equal "my_app", "my_app".file_name
42
+ end
43
+
44
+ def test_should_underscore_a_string_with_a_hyphen_preceding_a_capital_letter
45
+ assert_equal "my_app", "my_App".file_name
46
+ end
47
+ end
data/test/test_snfn.rb CHANGED
@@ -1,7 +1,4 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestSnfn < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snfn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,18 +13,18 @@ date: 2011-08-15 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &70142122282040 !ruby/object:Gem::Requirement
16
+ requirement: &70096437864820 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 0.14.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70142122282040
24
+ version_requirements: *70096437864820
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70142122279780 !ruby/object:Gem::Requirement
27
+ requirement: &70096437861960 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70142122279780
35
+ version_requirements: *70096437861960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &70142122276320 !ruby/object:Gem::Requirement
38
+ requirement: &70096437859720 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 1.6.4
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70142122276320
46
+ version_requirements: *70096437859720
47
47
  description: An app generator for Sinatra apps with an eye towards easy Heroku setup
48
48
  and deployment.
49
49
  email: zachpendleton@gmail.com
@@ -82,6 +82,7 @@ files:
82
82
  - lib/templates/views/welcome.erb
83
83
  - snfn.gemspec
84
84
  - test/helper.rb
85
+ - test/test_extension_string.rb
85
86
  - test/test_snfn.rb
86
87
  - vendor/cache/git-1.2.5.gem
87
88
  - vendor/cache/jeweler-1.6.4.gem
@@ -102,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
103
  version: '0'
103
104
  segments:
104
105
  - 0
105
- hash: -1680689362822137794
106
+ hash: 1803279801753176280
106
107
  required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  none: false
108
109
  requirements: