dilute 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -34,8 +34,27 @@ With a class set up you can:
34
34
  note = Note.new({data: "whatever"})
35
35
  note.save # Stored to ElasticSearch
36
36
  Note.find(note.id) # fetches that stored record
37
- Note.all # gets a bunch of notes
38
- Note.all({}, 7) # gets noes, limited to 7 instead of the default 10.
37
+ Note.all # returns a query object, use an enumerable method to get actual records
38
+ Note.all.each { |n| n.data }
39
+ # Search with "match"
40
+ Note.all.match(data: "whatever").each {|n| ... }
41
+
42
+ ActiveModel stuff: You can do callbacks on save and use ActiveModel validations.
43
+
44
+ class Note
45
+ include Dilute::Modelize
46
+
47
+ validates_presense_of :data
48
+ before_save :hi
49
+
50
+ def hi
51
+ puts "Hi, you're about to save a note!"
52
+ end
53
+
54
+ define_type do
55
+ attribute(:data).not_indexed
56
+ end
57
+ end
39
58
 
40
59
  ## Contributing
41
60
 
@@ -1,16 +1,27 @@
1
1
  require "active_support/concern"
2
2
  require "active_model/naming"
3
- require 'active_support/core_ext/string'
3
+ require "active_support/core_ext/string"
4
+ require "active_model/callbacks"
5
+ require "active_model/validations"
6
+ require "active_model/translation"
7
+
4
8
 
5
9
  module Dilute::Modelize
6
10
  extend ActiveSupport::Concern
7
11
 
8
12
  included do
9
13
  attr_reader :attributes
10
- extend ActiveModel::Naming
14
+ extend ActiveModel::Naming
15
+ extend ActiveModel::Callbacks
16
+ include ActiveModel::Validations
17
+ define_model_callbacks :save
11
18
  end
12
19
 
13
20
  module ClassMethods
21
+ def refresh
22
+ type.server.refresh
23
+ end
24
+
14
25
  def name
15
26
  super || "DefaultDilutedModel"
16
27
  end
@@ -72,15 +83,19 @@ module Dilute::Modelize
72
83
  end
73
84
 
74
85
  def save
75
- if id
76
- type.put(id, attributes_without_elasticsearch_vars)
77
- else
78
- results = type.post(attributes_without_elasticsearch_vars)
79
- if results["ok"] == true
80
- attributes.merge!(results)
81
- else
82
- puts "Something went wrong!"
83
- puts "attributes: #{attributes}"
86
+ run_callbacks :save do
87
+ if valid?
88
+ if id
89
+ type.put(id, attributes_without_elasticsearch_vars)
90
+ else
91
+ results = type.post(attributes_without_elasticsearch_vars)
92
+ if results["ok"] == true
93
+ attributes.merge!(results)
94
+ else
95
+ puts "Something went wrong!"
96
+ puts "attributes: #{attributes}"
97
+ end
98
+ end
84
99
  end
85
100
  end
86
101
  end
@@ -1,3 +1,3 @@
1
1
  module Dilute
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -7,6 +7,9 @@ describe Dilute::Modelize do
7
7
  Class.new do
8
8
  include Dilute::Modelize
9
9
 
10
+ before_save :a_callback
11
+ def a_callback ; true ; end
12
+
10
13
  define_type(type_name: :abstract) do
11
14
  attribute(:data).not_indexed
12
15
  attribute(:header).not_indexed
@@ -20,6 +23,29 @@ describe Dilute::Modelize do
20
23
  let(:new_diluted) { dilute_class.new({data: test_data}) }
21
24
  let(:saved) { new_diluted.save ; new_diluted }
22
25
 
26
+ context "validations" do
27
+ let(:dilute_class) do
28
+ Class.new do
29
+ include Dilute::Modelize
30
+
31
+ validates_presence_of :data
32
+
33
+ define_type(type_name: :abstract) do
34
+ attribute(:data).not_indexed
35
+ end
36
+ end
37
+ end
38
+
39
+ it "should validate" do
40
+ expect(dilute_class.new).not_to be_valid
41
+ end
42
+
43
+ it "should not save invalid record" do
44
+ destroy_test_index!
45
+ expect(dilute_class.new.save).to be_false
46
+ end
47
+ end
48
+
23
49
  it "should have accessors for new object" do
24
50
  expect(new_diluted.data).to eq(test_data)
25
51
  end
@@ -36,15 +62,13 @@ describe Dilute::Modelize do
36
62
 
37
63
  it "I have no idea what I'm doing." do
38
64
  true
39
- # That's why you see the sleep 1s and such.
40
65
  end
41
66
 
42
67
  context "searching" do
43
68
  before { destroy_test_index! }
44
69
  it "should find docs" do
45
- destroy_test_index!
46
70
  saved
47
- sleep 1
71
+ dilute_class.refresh
48
72
  all = dilute_class.all
49
73
  expect(all.to_a).to have(1).item
50
74
  expect(all.first.data).to eq(test_data)
@@ -53,7 +77,7 @@ describe Dilute::Modelize do
53
77
  it "should find docs matching pattern" do
54
78
  dilute_class.new({keys: %w(taga tagb tagc)}).save
55
79
  dilute_class.new({keys: %w(tagb tagc)}).save
56
- sleep 1
80
+ dilute_class.refresh
57
81
  search = dilute_class.all.match(keys: "taga")
58
82
  expect(search.to_a).to have(1).item
59
83
  end
@@ -61,7 +85,7 @@ describe Dilute::Modelize do
61
85
  it "should find docs matching very short word" do
62
86
  dilute_class.new({keys: %w(a)}).save
63
87
  dilute_class.new({keys: %w(b)}).save
64
- sleep 1
88
+ dilute_class.refresh
65
89
  search = dilute_class.all.match(keys: "a")
66
90
  expect(search.to_a).to have(1).item
67
91
  end
@@ -89,4 +113,13 @@ describe Dilute::Modelize do
89
113
  end
90
114
  end
91
115
 
116
+ context "callbacks" do
117
+ it "should not save when callback is false" do
118
+ destroy_test_index!
119
+ def new_diluted.a_callback ; false ; end
120
+ expect(new_diluted.save).to be_false
121
+ dilute_class.refresh
122
+ expect(dilute_class.all.first).to be_nil
123
+ end
124
+ end
92
125
  end
@@ -19,12 +19,26 @@ end
19
19
  require "dilute"
20
20
 
21
21
  def destroy_test_index!
22
+ refresh_server!
23
+ all = all_records
24
+ test_index.bulk_delete(all) if all.any?
25
+ refresh_server!
26
+ end
27
+
28
+ def refresh_server!
29
+ test_server.refresh
30
+ end
31
+
32
+ def all_records
33
+ test_index.search(query: {match_all: {}}).results
34
+ end
35
+
36
+ def test_server
22
37
  require "stretcher"
23
- server = Stretcher::Server.new("http://localhost:9200", log_level: :info)
24
- index = server.index("default_dilute_index_name")
25
- begin
26
- index.delete
27
- rescue Stretcher::RequestError::NotFound
28
- # Index didn't exist to begin with.
29
- end
38
+ @server ||= Stretcher::Server.new("http://localhost:9200", log_level: :info)
39
+ end
40
+
41
+ def test_index
42
+ return @index if @index
43
+ @index = test_server.index("default_dilute_index_name")
30
44
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dilute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-25 00:00:00.000000000 Z
12
+ date: 2013-06-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: stretcher
@@ -163,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
163
163
  version: '0'
164
164
  segments:
165
165
  - 0
166
- hash: 3890611216473297716
166
+ hash: 2531018883342757898
167
167
  required_rubygems_version: !ruby/object:Gem::Requirement
168
168
  none: false
169
169
  requirements:
@@ -172,10 +172,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  version: '0'
173
173
  segments:
174
174
  - 0
175
- hash: 3890611216473297716
175
+ hash: 2531018883342757898
176
176
  requirements: []
177
177
  rubyforge_project:
178
- rubygems_version: 1.8.23
178
+ rubygems_version: 1.8.25
179
179
  signing_key:
180
180
  specification_version: 3
181
181
  summary: An ActiveRecord-ish thing for using ElasticSearch through Stretcher.