A slice is just a gem so we can create and manage our slice by starting with jeweler.
gem sources -a http://gems.github.com
sudo gem install technicalpickles-jeweler
git config --global user.email johndoe@example.com
git config --global user.name 'John Doe'
git config --global github.user johndoe
git config --global github.token 55555555555555
jeweler --create-repo --summary "Sandy Koufax Slice" sandy_koufax_slice
Because jeweler is a bit opinionated and creates a structure for us, create your slice in a tmp directory and then copy the app, config, spec, etc files over to our sand_koufax_slice jeweler structure. Yep, a bit sloppy, and there is a more elegant way, but for now copy and paste worked well for me.
Be careful with the Rakefile. It should look something like this:
Once you’ve got standard files copied over let’s start creating the slice. To do so, we first need to set the slice up to work in development mode (this bit of hackery will eventually go away in Merb 1.2 with embeddable apps. I’m excited for that.).
1. Add the following to config/init.rb
require 'config/dependencies.rb' use_orm :datamapper use_test :rspec use_template_engine :erb
2. Create config/dependencies.rb
# dependencies are generated using a strict version, don't forget to edit the dependency versions when upgrading. merb_gems_version = "1.0.10" dm_gems_version = "0.9.10" do_gems_version = "0.9.11" # For more information about each component, please read http://wiki.merbivore.com/faqs/merb_components dependency "merb-core", merb_gems_version dependency "merb-action-args", merb_gems_version dependency "merb-assets", merb_gems_version dependency("merb-cache", merb_gems_version) do Merb::Cache.setup do register(Merb::Cache::FileStore) unless Merb.cache end end dependency "merb-helpers", merb_gems_version dependency "merb-mailer", merb_gems_version dependency "merb-slices", merb_gems_version dependency "merb-auth-core", merb_gems_version dependency "merb-auth-more", merb_gems_version dependency "merb-auth-slice-password", merb_gems_version dependency "merb-param-protection", merb_gems_version dependency "merb-exceptions", merb_gems_version dependency "data_objects", do_gems_version dependency "do_mysql", do_gems_version # If using another database, replace this dependency "dm-core", dm_gems_version dependency "dm-aggregates", dm_gems_version dependency "dm-migrations", dm_gems_version dependency "dm-timestamps", dm_gems_version dependency "dm-types", dm_gems_version dependency "dm-validations", dm_gems_version dependency "dm-serializer", dm_gems_version dependency "merb_datamapper", merb_gems_version
3. Bundle the dependencies
This turned out to be a big headache when it came to installing the gem. Just use the gems on your machine and install with sudo gem install merb as necessary.
Bundling our dependencies makes development easier – especially if we want someone else to work on our slice. But the only way to bundle is to get thor in our slice, and it is not there by default like in a merb app. So let’s add it.
To get the thor tasks go into a tmp directory and generate a fresh merb application, then just use copy and paste to move /tasks folder and its contents into your slice. It should look something like this:
- tasks/
doc.thor
merb.thor/
app_script.rb
common.rb
gem_ext.rb
main.thor
ops.rb
utils.rb
thor merb:gem:install
Now you should be able to run bin/slice and bin/rake to run and test your slice.
4. Development and Test Database
Create config/database.yml and put in the following content
development:
adapter: sqlite3
database: sample_development.db
test:
adapter: sqlite3
database: sample_test.db
production:
adapter: sqlite3
database: production.db
development:
adapter: sqlite3
database: sample_development.db
test:
adapter: sqlite3
database: sample_test.db
production:
adapter: sqlite3
database: production.db
Create a model and then rake the database
slice -i
DataMapper.auto_migrate!
slice -i
DataMapper.auto_migrate!
In spec_helper.rb add the before(:all) auto_migrate line for datamapper
Spec::Runner.configure do |config|
config.include(Merb::Test::ViewHelper)
config.include(Merb::Test::RouteHelper)
config.include(Merb::Test::ControllerHelper)
config.include(Merb::Test::SliceHelper
Spec::Runner.configure do |config|
config.include(Merb::Test::ViewHelper)
config.include(Merb::Test::RouteHelper)
config.include(Merb::Test::ControllerHelper)
config.include(Merb::Test::SliceHelper)
config.before(:all) do
DataMapper.auto_migrate! if Merb.orm == :datamapper
end
end
Then you just have to start building your slice – which is tricky. That’s all I’ve got for now.
Spitfire Sky
|
github
|
archives
|
resume