Sha256: 53074094fa92102423cf93b5f91d2a7cc7f3d221939507d65dc7c2e699adfe82

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

require 'action_view/helpers'
require 'angular_sprinkles/mixins/js_transformable'
require 'angular_sprinkles/mixins/initializable'
require 'angular_sprinkles/data/bind'

module AngularSprinkles
  module Helpers
    module BindHelper
      include ::ActionView::Helpers
      include Mixins::JsTransformable
      include Mixins::Initializable

      def bind(*input)
        input = input.flatten.compact

        raise ArgumentError if input.empty?

        yield_to_sprinkles(AngularSprinkles::CONSTRUCTOR_DEFINITION) unless app_initialized?

        build_chain(input).
          select(&method(:is_uninitialized?)).
          map(&method(:convert_to_empty_js_object_string)).
          tap(&method(:yield_if_any))

        AngularSprinkles::Data::Bind.new(*input)
      end

      private

      def build_chain(input)
        # [:a, :b, :c, :d] => [[:a], [:a, :b], [:a, :b, :c]]
        (1...input.count).inject([]) { |acc,i| acc << input.first(i) }
      end

      def is_uninitialized?(var)
        !var_initialized?(var)
      end

      def convert_to_empty_js_object_string(var)
        set_prototype_variable(var.join('.'), {})
      end

      def yield_if_any(chain)
        yield_to_sprinkles(chain.join(";\n") + ';') if chain.any?
      end

      def yield_to_sprinkles(content)
        content_for(:sprinkles) do
          content_tag(:script, content.html_safe)
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
angular_sprinkles-0.0.2 lib/angular_sprinkles/helpers/bind_helper.rb
angular_sprinkles-0.0.1 lib/angular_sprinkles/helpers/bind_helper.rb