Sha256: ac01fbd8fed15ed9f772df8fb6acf1eeb0cdf23058631b712b452dde1ab3d38d

Contents?: true

Size: 903 Bytes

Versions: 2

Compression:

Stored size: 903 Bytes

Contents

module Mixpal
  class User
    attr_reader :properties

    def initialize(properties)
      @properties = properties
    end

    def render
      "mixpanel.people.set(#{properties_as_js_object_for_mixpanel});".html_safe
    end

    def to_store
      {
        properties: properties,
      }
    end

    def self.from_store(data)
      new(data[:properties])
    end

    private

    def properties_as_js_object_for_mixpanel
      Mixpal::Util.hash_to_js_object_string(properties_for_mixpanel)
    end

    # Isolate special properties and rename their keys to align with
    # Mixpanel's naming.
    def properties_for_mixpanel
      Hash[properties.map {|k, v| [mixpanel_special_properties_map[k] || k, v] }]
    end

    def mixpanel_special_properties_map
      {
        name: "$name",
        email: "$email",
        created_at: "$created",
      }.with_indifferent_access
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mixpal-0.0.5 lib/mixpal/user.rb
mixpal-0.0.4 lib/mixpal/user.rb