lucid_works 0.6.22 → 0.6.23
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/lucid_works/base.rb +23 -24
- data/lib/lucid_works/field.rb +5 -1
- data/lib/lucid_works/gem_version.rb +1 -1
- data/spec/lib/lucid_works/base_spec.rb +44 -21
- data/spec/lib/lucid_works/field_spec.rb +62 -46
- metadata +83 -76
data/lib/lucid_works/base.rb
CHANGED
@@ -314,30 +314,29 @@ module LucidWorks
|
|
314
314
|
|
315
315
|
def save
|
316
316
|
_run_save_callbacks do
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
end
|
317
|
+
return false unless valid?
|
318
|
+
ActiveSupport::Notifications.instrument("lucid_works.request") do |payload|
|
319
|
+
method, uri = persisted? ? [:put, member_url] : [:post, collection_url]
|
320
|
+
data = encode
|
321
|
+
payload[:method] = method
|
322
|
+
payload[:uri] = uri
|
323
|
+
payload[:data] = data
|
324
|
+
begin
|
325
|
+
response = RestClient.send(method, uri, data, :content_type => :json)
|
326
|
+
payload[:response] = response
|
327
|
+
@persisted = true
|
328
|
+
load_attributes_from_json_string(response)
|
329
|
+
true
|
330
|
+
rescue RestClient::Conflict, # 409
|
331
|
+
RestClient::UnprocessableEntity, # 422
|
332
|
+
RestClient::InternalServerError => e # 500
|
333
|
+
payload[:exceptionion] = e
|
334
|
+
attach_errors_to_model(e.response)
|
335
|
+
false
|
336
|
+
rescue RestClient::Exception => exception
|
337
|
+
# Tack on what we were doing when we got the exception, then send it on up
|
338
|
+
exception.message = "#{exception.message} while performing #{payload[:method]} #{payload[:uri]}"
|
339
|
+
raise exception
|
341
340
|
end
|
342
341
|
end
|
343
342
|
end
|
data/lib/lucid_works/field.rb
CHANGED
@@ -64,7 +64,7 @@ module LucidWorks
|
|
64
64
|
]
|
65
65
|
|
66
66
|
validates_presence_of :name
|
67
|
-
validates_each :name, :allow_blank => true do |model, attr, value|
|
67
|
+
validates_each :name, :unless => :persisted?, :allow_blank => true do |model, attr, value|
|
68
68
|
model.errors.add(attr, 'must be unique') if model.collection.fields.any? {|f| f.name == value }
|
69
69
|
end
|
70
70
|
validates_each :short_field_boost do |model, attr, value|
|
@@ -90,5 +90,9 @@ module LucidWorks
|
|
90
90
|
def self.t_field_type(type)
|
91
91
|
I18n.translate(type, :scope => 'activemodel.models.lucid_works.collection.field.field_type')
|
92
92
|
end
|
93
|
+
|
94
|
+
def initialize(options)
|
95
|
+
super(options.reverse_merge(:omit_tf => false, :short_field_boost => 'high'))
|
96
|
+
end
|
93
97
|
end
|
94
98
|
end
|
@@ -426,6 +426,10 @@ describe LucidWorks::Base do
|
|
426
426
|
|
427
427
|
describe "#save" do
|
428
428
|
context "for a new model" do
|
429
|
+
before(:each) do
|
430
|
+
RestClient.stub(:post)
|
431
|
+
end
|
432
|
+
|
429
433
|
context "with valid attributes" do
|
430
434
|
before do
|
431
435
|
@widget_attrs = { :name => 'widget4', :size => 'extra medium' }
|
@@ -440,53 +444,68 @@ describe LucidWorks::Base do
|
|
440
444
|
end
|
441
445
|
|
442
446
|
it "should set persisted" do
|
443
|
-
RestClient.should_receive(:post)
|
444
447
|
@widget.save
|
445
448
|
@widget.should be_persisted
|
446
449
|
end
|
450
|
+
|
451
|
+
it "returns true" do
|
452
|
+
@widget.save
|
453
|
+
@widget.should be_true
|
454
|
+
end
|
447
455
|
end
|
448
456
|
|
449
|
-
context "with
|
450
|
-
before
|
451
|
-
@widget_attrs = { :name => '', :size => ''}
|
452
|
-
ERROR_422_RESPONSE = '{"errors":[{"message":"name is a required key","key":"name"},{"message":"name must consist of only A-Z a-z 0-9 - _","key":"name"}],"http_status_name":"Unprocessable Entity","http_status_code":422}'
|
457
|
+
context "with an API error" do
|
458
|
+
before do
|
453
459
|
RestClient.stub(:post) {
|
454
460
|
e = RestClient::UnprocessableEntity.new
|
455
|
-
e.response =
|
461
|
+
e.response = '{"errors":[{"message":"name is a required key","key":"name"},{"message":"name must consist of only A-Z a-z 0-9 - _","key":"name"}],"http_status_name":"Unprocessable Entity","http_status_code":422}'
|
456
462
|
raise e
|
457
463
|
}
|
458
|
-
|
459
|
-
@widget = Widget.new @widget_attrs.merge(:parent => @server)
|
460
|
-
@returncode = @widget.save
|
464
|
+
@widget = Widget.new(:name => '', :size => '', :parent => @server)
|
461
465
|
end
|
462
|
-
|
466
|
+
|
463
467
|
it "should set errors on the model" do
|
468
|
+
@widget.save
|
464
469
|
@widget.errors.should_not be_empty
|
465
470
|
@widget.errors['name'].should_not be_empty
|
466
471
|
end
|
467
472
|
|
468
473
|
it "should not set persisted" do
|
474
|
+
@widget.save
|
469
475
|
@widget.should_not be_persisted
|
470
476
|
end
|
471
477
|
|
472
|
-
it "
|
473
|
-
@
|
478
|
+
it "returns false" do
|
479
|
+
@widget.save.should be_false
|
474
480
|
end
|
475
481
|
end
|
476
482
|
|
477
|
-
describe "
|
483
|
+
describe "with invalid attributes" do
|
484
|
+
class WidgetRequiringName < LucidWorks::Base
|
485
|
+
validates_presence_of :name
|
486
|
+
end
|
487
|
+
|
478
488
|
before do
|
479
|
-
|
480
|
-
|
481
|
-
|
489
|
+
@widget = WidgetRequiringName.new(:parent => @server)
|
490
|
+
end
|
491
|
+
|
492
|
+
it "is invalid" do
|
493
|
+
@widget.save
|
494
|
+
@widget.should_not be_valid
|
495
|
+
end
|
496
|
+
|
497
|
+
it "returns the validation errors" do
|
498
|
+
@widget.save
|
499
|
+
@widget.errors[:name].should == ["can't be blank"]
|
482
500
|
end
|
483
501
|
|
484
|
-
it "
|
485
|
-
widget = WidgetRequiringName.new(:parent => @server)
|
502
|
+
it "doesn't post to the REST API" do
|
486
503
|
RestClient.should_not_receive(:post)
|
487
|
-
widget.
|
488
|
-
|
489
|
-
|
504
|
+
@widget.save
|
505
|
+
end
|
506
|
+
|
507
|
+
it "returns false" do
|
508
|
+
@widget.save.should be_false
|
490
509
|
end
|
491
510
|
end
|
492
511
|
end
|
@@ -615,6 +634,10 @@ describe LucidWorks::Base do
|
|
615
634
|
widget.name.should == 'new_name'
|
616
635
|
widget.size.should == 'new_size'
|
617
636
|
end
|
637
|
+
|
638
|
+
it "returns false" do
|
639
|
+
|
640
|
+
end
|
618
641
|
end
|
619
642
|
|
620
643
|
describe "#destroy" do
|
@@ -11,68 +11,84 @@ describe LucidWorks::Field do
|
|
11
11
|
LucidWorks::Field.new(:parent => @collection).should be_a(LucidWorks::Base)
|
12
12
|
end
|
13
13
|
|
14
|
+
describe "default attribute values" do
|
15
|
+
subject { LucidWorks::Field.new(:parent => @collection) }
|
16
|
+
|
17
|
+
it { subject.omit_tf.should be_false }
|
18
|
+
it { subject.short_field_boost.should == 'high' }
|
19
|
+
end
|
20
|
+
|
14
21
|
describe "validations" do
|
15
|
-
context
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
context "for a new field" do
|
23
|
+
context :name do
|
24
|
+
it "is required" do
|
25
|
+
field = LucidWorks::Field.new(:parent => @collection)
|
26
|
+
field.should_not be_valid
|
27
|
+
field.errors[:name].should == ["can't be blank"]
|
28
|
+
end
|
29
|
+
|
30
|
+
it "needs to be unique" do
|
31
|
+
field = LucidWorks::Field.new(:parent => @collection, :name => 'data_source')
|
32
|
+
field.should_not be_valid
|
33
|
+
field.errors[:name].should == ["must be unique"]
|
34
|
+
end
|
20
35
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
36
|
+
|
37
|
+
context :short_field_boost do
|
38
|
+
it "cannot be set to 'none' for a non-indexed field" do
|
39
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => false, :short_field_boost => 'none').tap do |field|
|
40
|
+
field.should_not be_valid
|
41
|
+
field.errors[:short_field_boost].should == ['cannot be set to "none" for a non-indexed field']
|
42
|
+
end
|
43
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => true, :short_field_boost => true).should be_valid
|
44
|
+
end
|
26
45
|
end
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
46
|
+
|
47
|
+
context :include_in_results do
|
48
|
+
it "requires the field to be stored" do
|
49
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :stored => false, :include_in_results => true).tap do |field|
|
50
|
+
field.should_not be_valid
|
51
|
+
field.errors[:include_in_results].should == ["a field must be stored to be included in results"]
|
52
|
+
end
|
53
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :stored => true, :include_in_results => true).should be_valid
|
34
54
|
end
|
35
|
-
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => true, :short_field_boost => true).should be_valid
|
36
55
|
end
|
37
|
-
end
|
38
56
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
57
|
+
context :highlight do
|
58
|
+
it "requires the field to be stored" do
|
59
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :stored => false, :highlight => true).tap do |field|
|
60
|
+
field.should_not be_valid
|
61
|
+
field.errors[:highlight].should == ["a field must be stored to be highlighted"]
|
62
|
+
end
|
63
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :stored => true, :highlighted => true).should be_valid
|
44
64
|
end
|
45
|
-
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :stored => true, :include_in_results => true).should be_valid
|
46
65
|
end
|
47
|
-
end
|
48
66
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
67
|
+
context :facet do
|
68
|
+
it "requires the field to be indexed" do
|
69
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => false, :facet => true).tap do |field|
|
70
|
+
field.should_not be_valid
|
71
|
+
field.errors[:facet].should == ["a field must be indexed to be facetable"]
|
72
|
+
end
|
73
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => true, :facet => true).should be_valid
|
54
74
|
end
|
55
|
-
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :stored => true, :highlighted => true).should be_valid
|
56
75
|
end
|
57
|
-
end
|
58
76
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
77
|
+
context :use_in_find_similar do
|
78
|
+
it "requires the field to be indexed" do
|
79
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => false, :use_in_find_similar => true).tap do |field|
|
80
|
+
field.should_not be_valid
|
81
|
+
field.errors[:use_in_find_similar].should == ["a field must be indexed for it to be used for find-similar"]
|
82
|
+
end
|
83
|
+
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => true, :use_in_find_similar => true).should be_valid
|
64
84
|
end
|
65
|
-
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => true, :facet => true).should be_valid
|
66
85
|
end
|
67
86
|
end
|
68
87
|
|
69
|
-
context
|
70
|
-
it "
|
71
|
-
LucidWorks::Field.
|
72
|
-
|
73
|
-
field.errors[:use_in_find_similar].should == ["a field must be indexed for it to be used for find-similar"]
|
74
|
-
end
|
75
|
-
LucidWorks::Field.new(:parent => @collection, :name => 'my_field', :indexed => true, :use_in_find_similar => true).should be_valid
|
88
|
+
context "for an existing field" do
|
89
|
+
it "doesn't validate the name's uniqueness" do
|
90
|
+
field = LucidWorks::Field.find('body', :parent => @collection)
|
91
|
+
field.should be_valid
|
76
92
|
end
|
77
93
|
end
|
78
94
|
end
|
metadata
CHANGED
@@ -1,101 +1,105 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: lucid_works
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.22
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.6.23
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Sam Pierson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
12
|
+
|
13
|
+
date: 2011-06-28 00:00:00 -07:00
|
13
14
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
16
17
|
name: activesupport
|
17
|
-
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
20
|
none: false
|
19
|
-
requirements:
|
20
|
-
- -
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version:
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "3"
|
23
25
|
type: :runtime
|
24
|
-
|
25
|
-
|
26
|
-
- !ruby/object:Gem::Dependency
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
27
28
|
name: activemodel
|
28
|
-
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
29
31
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version:
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "3"
|
34
36
|
type: :runtime
|
35
|
-
|
36
|
-
|
37
|
-
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
38
39
|
name: rest-client
|
39
|
-
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
42
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
44
46
|
version: 1.6.1
|
45
47
|
type: :runtime
|
46
|
-
|
47
|
-
|
48
|
-
- !ruby/object:Gem::Dependency
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
49
50
|
name: json
|
50
|
-
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
51
53
|
none: false
|
52
|
-
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version:
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
56
58
|
type: :runtime
|
57
|
-
|
58
|
-
|
59
|
-
- !ruby/object:Gem::Dependency
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
60
61
|
name: rsolr
|
61
|
-
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
62
64
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version:
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
67
69
|
type: :runtime
|
68
|
-
|
69
|
-
|
70
|
-
- !ruby/object:Gem::Dependency
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
71
72
|
name: rsolr-ext
|
72
|
-
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
73
75
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version:
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
78
80
|
type: :runtime
|
79
|
-
|
80
|
-
|
81
|
-
- !ruby/object:Gem::Dependency
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
82
83
|
name: nokogiri
|
83
|
-
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
84
86
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version:
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "0"
|
89
91
|
type: :runtime
|
90
|
-
|
91
|
-
version_requirements: *2161724140
|
92
|
+
version_requirements: *id007
|
92
93
|
description: Ruby wrapper for the LucidWorks REST API
|
93
|
-
email:
|
94
|
+
email:
|
94
95
|
- sam.pierson@lucidimagination.com
|
95
96
|
executables: []
|
97
|
+
|
96
98
|
extensions: []
|
99
|
+
|
97
100
|
extra_rdoc_files: []
|
98
|
-
|
101
|
+
|
102
|
+
files:
|
99
103
|
- .autotest
|
100
104
|
- .gitignore
|
101
105
|
- .rspec
|
@@ -165,31 +169,34 @@ files:
|
|
165
169
|
- spec/lib/lucid_works/utils_spec.rb
|
166
170
|
- spec/spec_helper.rb
|
167
171
|
has_rdoc: true
|
168
|
-
homepage:
|
172
|
+
homepage: ""
|
169
173
|
licenses: []
|
174
|
+
|
170
175
|
post_install_message:
|
171
176
|
rdoc_options: []
|
172
|
-
|
177
|
+
|
178
|
+
require_paths:
|
173
179
|
- lib
|
174
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
180
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
175
181
|
none: false
|
176
|
-
requirements:
|
177
|
-
- -
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
version:
|
180
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - ">="
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: "0"
|
186
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
187
|
none: false
|
182
|
-
requirements:
|
183
|
-
- -
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
version:
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: "0"
|
186
192
|
requirements: []
|
193
|
+
|
187
194
|
rubyforge_project: lucid_works
|
188
195
|
rubygems_version: 1.6.2
|
189
196
|
signing_key:
|
190
197
|
specification_version: 3
|
191
198
|
summary: Ruby wrapper for the LucidWorks REST API
|
192
|
-
test_files:
|
199
|
+
test_files:
|
193
200
|
- spec/lib/lucid_works/associations/has_many_spec.rb
|
194
201
|
- spec/lib/lucid_works/associations/has_one_spec.rb
|
195
202
|
- spec/lib/lucid_works/associations_spec.rb
|