Class: Spree::SubscriberGenerator
- Inherits:
-
Rails::Generators::NamedBase
- Object
- Rails::Generators::NamedBase
- Spree::SubscriberGenerator
- Defined in:
- lib/generators/spree/subscriber/subscriber_generator.rb
Overview
spree:subscriber — scaffold an event subscriber and register it.
bin/rails g spree:subscriber OmsOrderSync order.completed order.canceled
bin/rails g spree:subscriber MyApp::BrandSync brand.created brand.updated
bin/rails g spree:subscriber CriticalSync order.completed --sync
Subscribers are not auto-discovered — they must be appended to the Spree.subscribers array. Forgetting that step produces a silent no-op, so this generator also maintains the registration in config/initializers/spree.rb with an idempotent line per subscriber.
Constant Summary collapse
- INITIALIZER_PATH =
Every Spree app ships config/initializers/spree.rb (created by spree:install) — registrations go there rather than into a second initializer file.
'config/initializers/spree.rb'- REGISTRATION_ANCHOR =
"Rails.application.config.after_initialize do\n"
Class Method Summary collapse
Instance Method Summary collapse
- #create_spec_file ⇒ Object
- #create_subscriber_file ⇒ Object
- #register_subscriber ⇒ Object
- #warn_about_missing_events ⇒ Object
Class Method Details
.source_paths ⇒ Object
35 36 37 |
# File 'lib/generators/spree/subscriber/subscriber_generator.rb', line 35 def self.source_paths [File.('templates', __dir__), *superclass.source_paths] end |
Instance Method Details
#create_spec_file ⇒ Object
58 59 60 61 62 |
# File 'lib/generators/spree/subscriber/subscriber_generator.rb', line 58 def create_spec_file return if [:skip_spec] template 'subscriber_spec.rb.tt', File.join('spec/subscribers', class_path, "#{subscriber_file_name}_spec.rb") end |
#create_subscriber_file ⇒ Object
39 40 41 |
# File 'lib/generators/spree/subscriber/subscriber_generator.rb', line 39 def create_subscriber_file template 'subscriber.rb.tt', File.join('app/subscribers', class_path, "#{subscriber_file_name}.rb") end |
#register_subscriber ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/generators/spree/subscriber/subscriber_generator.rb', line 43 def register_subscriber if File.exist?(destination_path(INITIALIZER_PATH)) content = File.read(destination_path(INITIALIZER_PATH)) if content.include?(registration_line.strip) say_status :identical, "#{INITIALIZER_PATH} (#{subscriber_class_name} already registered)", :blue elsif content.include?(REGISTRATION_ANCHOR) inject_into_file INITIALIZER_PATH, registration_line, after: REGISTRATION_ANCHOR else append_to_file INITIALIZER_PATH, registration_block end else create_file INITIALIZER_PATH, registration_block.lstrip end end |
#warn_about_missing_events ⇒ Object
64 65 66 67 68 |
# File 'lib/generators/spree/subscriber/subscriber_generator.rb', line 64 def warn_about_missing_events return if events.any? say_status :note, "no events given — edit `subscribes_to` in the generated subscriber (e.g. 'order.completed')", :yellow end |