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 cells
into the project Gemfile
solved the issue.
Because cells
is a dependency of cells-hamlit
I only listed cells-hamlit
in the Gemfile
. This did indeed cause the cells
gem to be included in the project, which was verified by running bundle list
. But it was not enough to have the gem loaded into the application.
This is a side-effect of Bundler
of which I was previously unaware.