Module: Elasticsearch::Persistence::Model::Rails

Defined in:
lib/elasticsearch/persistence/model/rails.rb

Overview

Make the ‘Persistence::Model` models compatible with Ruby On Rails applications

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/elasticsearch/persistence/model/rails.rb', line 8

def self.included(base)
  base.class_eval do

    # Decorates the passed in `attributes` so they extract the date & time values from Rails forms
    #
    # @example Correctly combine the date and time to a datetime string
    #
    #     params = { "published_on(1i)"=>"2014",
    #                      "published_on(2i)"=>"1",
    #                      "published_on(3i)"=>"1",
    #                      "published_on(4i)"=>"12",
    #                      "published_on(5i)"=>"00"
    #                     }
    #     MyRailsModel.new(params).published_on.iso8601
    #     # => "2014-01-01T12:00:00+00:00"
    #
    def initialize(attributes={})
      day = attributes.select { |p| p =~ /\([1-3]/ }.reduce({}) { |sum, item| (sum[item.first.gsub(/\(.+\)/, '')] ||= '' )<< item.last+'-'; sum  }
      time = attributes.select { |p| p =~ /\([4-6]/ }.reduce({}) { |sum, item| (sum[item.first.gsub(/\(.+\)/, '')] ||= '' )<< item.last+':'; sum  }
      unless day.empty?
        attributes.update day.reduce({}) { |sum, item| sum[item.first] = item.last; sum[item.first] += ' ' + time[item.first] unless time.empty?; sum }
      end

      super(attributes)
    end
  end
end