Sha256: 9609c0f52223415a2021e85056001a8870559a1ced9ed6ae7476911bd785eb18

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require 'active_support/core_ext/module/delegation'
require_relative 'js_generator/version'
require_relative 'js_generator/js_for_view'
require_relative 'js_generator/app_js'
require_relative 'js_generator/view_file'
require 'active_support/inflector'

module JsGenerator
  class Error < StandardError; end
  class SetupJs
    attr_reader :namespace, :model_name, :action_name
    attr_accessor :top_level_js_namespace

    def initialize(namespace: nil, model_name:, action_name:)
      @namespace = namespace
      @model_name = model_name
      @action_name = action_name
      @top_level_js_namespace = ENV['TOP_LEVEL_JS_NAMESPACE']
    end

    def run
      if top_level_js_namespace.nil?
        raise Error.new('Please set TOP_LEVEL_JS_NAMESPACE in .env')
      end

      create_file
      append_script
      append_script_tag

      puts "✨ All done!"
    end

    delegate :create_file, to: :js_for_view
    delegate :append_script, to: :app_js
    delegate :append_script_tag, to: :view_file

    private

    def js_for_view
      JsForView.new(self)
    end

    def app_js
      AppJs.new(syntax_builder)
    end

    def view_file
      ViewFile.new(self, syntax_builder)
    end

    def syntax_builder
      if namespace.present?
        SyntaxBuilder::WithNamespace.new(self)
      else
        SyntaxBuilder::WithoutNamespaced.new(self)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
js_generator-0.1.4 lib/js_generator.rb
js_generator-0.1.3 lib/js_generator.rb