Environment:
CentOS-6.7 / OSX-10.9.5
Ruby 2.2.3p173
Rails 4.2.5.1
Trailblazer 1.1.0
I am working through the examples in the Trailblazer book mapping them to a current project. I had things working more or less as expected up to the point when I switched from ActionView to Cells. I moved the templates into app/concepts/ar_invoice/views and created app/concepts/ar_invoice/cell.rb. Following this change when I start the rails server I get this error:
app/concepts/ar_invoice/cell.rb:1:in `<top (required)>':
uninitialized constant Cell::Concept (NameError)
The code involved is this:
The Gemfile:
Gems included by the bundle:
* ISO3166P2 (0.0.1)
* actionmailer (4.2.5.1)
* actionpack (4.2.5.1)
* actionview (4.2.5.1)
* activejob (4.2.5.1)
* activemodel (4.2.5.1)
* activerecord (4.2.5.1)
* activesupport (4.2.5.1)
* addressable (2.4.0)
* annotate (2.7.0)
* ansi (1.5.0)
* arel (6.0.3)
* autoprefixer-rails (6.3.1)
* axiom-types (0.1.1)
* bcrypt (3.1.10)
* bootstrap-sass (3.3.6)
* bootstrap3-datetimepicker-rails (4.17.37)
* builder (3.2.2)
* bundler (1.11.2)
* byebug (8.2.2)
* capistrano (3.4.0)
* capistrano-bundler (1.1.4)
* capistrano-rails (1.1.6)
* capybara (2.6.2)
* cells (4.0.4)
* cells-hamlit (0.1.1)
* coercible (1.0.0)
* coffee-rails (4.1.1)
* coffee-script (2.4.1)
* coffee-script-source (1.10.0)
* concurrent-ruby (1.0.0)
* cucumber (2.3.2)
* cucumber-core (1.4.0)
* cucumber-rails (1.4.3)
* cucumber-wire (0.0.1)
* daemons (1.2.3)
* database_cleaner (1.5.1)
* debug_inspector (0.0.2)
* declarative (0.0.5)
* declarative_authorization (0.5.7)
* descendants_tracker (0.0.4)
* devise (3.5.6)
* devise-encryptable (0.2.0)
* devise_security_extension (0.9.2)
* diff-lcs (1.2.5)
* disposable (0.2.5)
* equalizer (0.0.11)
* erubis (2.7.0)
* eventmachine (1.0.9.1)
* execjs (2.6.0)
* gherkin (3.2.0)
* globalid (0.3.6)
* hamlit (2.2.1)
* hamlit-block (0.3.0)
* hamlit-rails (0.1.0)
* humanize (1.1.0)
* i18n (0.7.0)
* ice_nine (0.11.2)
* jbuilder (2.4.0)
* jquery-rails (4.1.0)
* json (1.8.3)
* loofah (2.0.3)
* mail (2.6.3)
* mime-types (2.99)
* mini_portile2 (2.0.0)
* minitest (5.8.4)
* minitest-capybara (0.7.2)
* minitest-metadata (0.5.3)
* minitest-rails (2.2.0)
* minitest-rails-capybara (2.1.1)
* minitest-reporters (1.1.7)
* modernizr-rails (2.7.1)
* momentjs-rails (2.11.0)
* multi_json (1.11.2)
* multi_test (0.1.2)
* net-scp (1.2.1)
* net-ssh (3.0.2)
* nokogiri (1.6.7)
* orm_adapter (0.5.0)
* paper_trail (4.1.0)
* partially_useful (0.2.2)
* pg (0.18.4)
* rack (1.6.4)
* rack-test (0.6.3)
* rails (4.2.5.1)
* rails-deprecated_sanitizer (1.0.3)
* rails-dom-testing (1.0.7)
* rails-html-sanitizer (1.0.3)
* railties (4.2.5.1)
* rake (10.5.0)
* rdoc (4.2.1)
* reform (2.1.0)
* representable (3.0.0)
* request_store (1.3.0)
* responders (2.1.1)
* ruby-progressbar (1.7.5)
* sass (3.4.21)
* sass-rails (5.0.4)
* sdoc (0.4.1)
* smarter_csv (1.1.0)
* spring (1.6.2)
* sprockets (3.5.2)
* sprockets-rails (3.0.1)
* sqlite3 (1.3.10)
* sshkit (1.8.1)
* temple (0.7.6)
* thin (1.6.4)
* thor (0.19.1)
* thread_safe (0.3.5)
* tilt (2.0.2)
* trailblazer (1.1.0)
* trailblazer-loader (0.0.9)
* trailblazer-rails (0.2.4)
* turbolinks (2.5.3)
* tzinfo (1.2.2)
* uber (0.0.15)
* uglifier (2.7.2)
* virtus (1.0.5)
* warden (1.2.6)
* web-console (3.1.1)
* xpath (2.0.0)
The application.rb:
#config/application.rb
require File.expand_path('../boot', __FILE__)
require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "action_view/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module HllThMain
class Application < Rails::Application
# Use the responders controller from the responders gem
config.app_generators.scaffold_controller :responders_controller
. . .
# Do not swallow errors in after_commit/after_rollback callbacks.
config.active_record.raise_in_transactional_callbacks = true
end
require( "hll_th_main" )
end
# For trailBlazer
# railties have to be loaded here.
require 'trailblazer/rails/railtie'
The controller (ar_invoices_controller.rb):
class ARInvoicesController < ApplicationController
def create
run( ARInvoice::Create )
end
# route => ar_invoices#new
def new
form( ARInvoice::Create )
end
end
The operation.rb:
class ARInvoice < GLTransaction
class Create < Trailblazer::Operation
include( Model )
model( ARInvoice, :create )
contract() do
property( :invoice_number )
property( :currency_code )
property( :forex_rate )
property( :gl_account_id )
property( :effective_from )
validates( :invoice_number, :presence => true )
validates( :currency_code, :presence => true )
end
def process( params )
# must use instance variable @model
@model = ARInvoice.new
validate( params[ :ar_invoice ], @model ) do |f|
f.save
end
end
end
end
The cell.rb:
class ARInvoice::Cell < Cell::Concept
def new()
render
end
def show()
render
end
private
def body()
model.body
end
end
And the view (new.haml):
= simple_form_for( @form ) do |f|
= f.input( :invoice_number )
= f.input( :currency_code )
= f.input( :forex_rate )
= f.input( :gl_account_id )
= f.submit
I do not use any Trailblazer/Cells initializers. Can someone point out my error that is causing the exception reported above?
Explicitly adding the gem
cellsinto the projectGemfilesolved the issue.Because
cellsis a dependency ofcells-hamlitI only listedcells-hamlitin theGemfile. This did indeed cause thecellsgem to be included in the project, which was verified by runningbundle list. But it was not enough to have the gem loaded into the application.This is a side-effect of
Bundlerof which I was previously unaware.