lucid_works 0.6.4 → 0.6.5

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.rdoc CHANGED
@@ -261,7 +261,7 @@ A class may have a schema defined as follows:
261
261
  end
262
262
 
263
263
  Classes with a schema may have validations applied to its attributes.
264
- The default attribute type is :string.
264
+ The default attribute type is :string. See LucidWorks::Schema for more details.
265
265
 
266
266
  == Rationale
267
267
 
@@ -93,7 +93,7 @@ en:
93
93
  datasource:
94
94
  type: Type
95
95
  commitWithin: Commit within
96
- deleteAfter: Delete after
96
+ deleteAfter: Delete logs after
97
97
  bounds: Constrain to
98
98
  max_bytes: Skip files larger than
99
99
  history:
@@ -265,11 +265,10 @@ module LucidWorks
265
265
  end
266
266
 
267
267
  # For attributes listed in the schema as having :values, this will create an array-of-arrays
268
- # suitable for use as options_for_select. The
268
+ # suitable for use as options_for_select.
269
269
 
270
270
  def to_select(attribute)
271
271
  raise "Can't to_select for #{attribute} as it has no values" unless schema[attribute][:values]
272
- l10n_scope = %w{activemodel models} + self.name.underscore.split('/') + [attribute]
273
272
  schema[attribute][:values].map do |value|
274
273
  [human_attribute_value(attribute, value), value]
275
274
  end
@@ -421,10 +420,11 @@ module LucidWorks
421
420
  omit_attrs += self.class.schema.attrs_to_omit_during_update if persisted?
422
421
  attrs_as_json = @attributes.inject({}) do |memo, kv|
423
422
  attr, value = kv
424
- unless omit_attrs.include?(attr.to_s)
423
+ unless (value.blank? && self.class.schema[attr][:omit_when_blank]) ||
424
+ omit_attrs.include?(attr.to_s)
425
425
  case self.class.schema[attr][:type]
426
- when :iso8601
427
- memo[attr] = value.iso8601
426
+ when :iso8601
427
+ memo[attr] = value.iso8601 rescue value
428
428
  else
429
429
  memo[attr] = value
430
430
  end
@@ -7,7 +7,7 @@ module LucidWorks
7
7
 
8
8
  schema do
9
9
  attribute :period
10
- attribute :start_time
10
+ attribute :start_time, :iso8601
11
11
  attribute :active
12
12
  attribute :type
13
13
  end
@@ -22,15 +22,24 @@ module LucidWorks
22
22
  end
23
23
  end
24
24
 
25
+ def frequency=(frequency)
26
+ self.period = case frequency
27
+ when 'hourly' then 1.hours.seconds
28
+ when 'daily' then 1.days.seconds
29
+ when 'weekly' then 1.weeks.seconds
30
+ else raise "unknown frequency"
31
+ end
32
+ end
33
+
25
34
  def time_of_day
26
35
  Time.now
27
36
  end
28
37
 
29
38
  # predict when action will occur next if active at that time
30
39
  def next_start
31
- return start_at if reference_time <= start_at
40
+ return start_time if reference_time <= start_time
32
41
  # require 'ruby-debug'; debugger
33
- time_since_start = reference_time - start_at
42
+ time_since_start = reference_time - start_time
34
43
  last_interval_num = (time_since_start / period).to_i
35
44
  next_interval_num = if (time_since_start % period) == 0
36
45
  # this is sort of a stupid condition b/c time precision is millisecond or less
@@ -40,19 +49,9 @@ module LucidWorks
40
49
  else
41
50
  last_interval_num + 1
42
51
  end
43
- start_at + period * next_interval_num
44
- end
45
-
46
- # Ruby Time objects for start_time
47
- def start_at
48
- Time.iso8601(start_time)
52
+ start_time + period * next_interval_num
49
53
  end
50
-
51
- def start_at=(time)
52
-
53
- self.start_time = time.iso8601
54
- end
55
-
54
+
56
55
  # Provide ability to override "now" explicitly for testing purposes
57
56
  def reference_time=(time); @reference_time = time; end
58
57
  def reference_time; @reference_time || Time.now.utc; end
@@ -63,7 +62,8 @@ module LucidWorks
63
62
  all_attributes['start'].to_options!
64
63
  all_attributes['start'].each{|k,v| all_attributes['start'][k]=v.to_i}
65
64
 
66
- self.start_at =
65
+ self.frequency = all_attributes['frequency']
66
+ self.start_time =
67
67
  case all_attributes['frequency']
68
68
  when 'weekly'
69
69
  # require 'ruby-debug'; debugger
@@ -10,8 +10,9 @@ module LucidWorks
10
10
  schema do
11
11
  # common
12
12
  attributes :name, :type, :crawler
13
- attributes :crawl_depth, :max_bytes, :max_docs, :commitWithin, :type => :integer
14
- #attribute :commitWithin, :integer
13
+ attributes :crawl_depth, :max_docs, :type => :integer
14
+ attributes :max_bytes, :commitWithin, :type => :integer, :omit_when_blank => true
15
+ attribute :commit_within_min, :custom
15
16
  attribute :include_paths
16
17
  attribute :exclude_paths
17
18
  attribute :mapping # Hash
@@ -39,7 +40,8 @@ module LucidWorks
39
40
  attribute :source
40
41
  attribute :source_type
41
42
  # lwelogs
42
- attribute :deleteAfter, :integer
43
+ attribute :deleteAfter, :integer, :omit_when_blank => true
44
+ attribute :delete_after_days, :custom
43
45
  end
44
46
 
45
47
  validates_presence_of :type, :crawler, :name
@@ -47,8 +49,6 @@ module LucidWorks
47
49
  validates_numericality_of :max_bytes, :allow_blank => true
48
50
  validates_presence_of :url, :if => lambda { |d| d.type == 'web' }
49
51
 
50
- before_save :remove_blank_max_bytes
51
-
52
52
  TYPES = %w{ external file lwelogs web solrxml jdbc sharepoint }
53
53
  BOUNDS = %w{ tree none }
54
54
  CRAWLERS = {
@@ -64,6 +64,20 @@ module LucidWorks
64
64
  }.with_indifferent_access
65
65
 
66
66
 
67
+ # Fake attributes to ease UI implementation
68
+ def commit_within_min
69
+ commitWithin.blank? ? nil : commitWithin / 1.second.milliseconds / 1.minute.seconds
70
+ end
71
+ def commit_within_min=(mins)
72
+ self.commitWithin = mins.blank? ? nil : mins.to_i.minutes.milliseconds
73
+ end
74
+ def delete_after_days
75
+ deleteAfter.blank? ? nil : deleteAfter / 1.second.milliseconds / 1.day.seconds
76
+ end
77
+ def delete_after_days=(days)
78
+ self.deleteAfter = days.blank? ? nil : days.to_i.days.milliseconds
79
+ end
80
+
67
81
  def empty!
68
82
  build_index.destroy
69
83
  end
@@ -94,12 +108,5 @@ module LucidWorks
94
108
  def t_type
95
109
  I18n.t(type, :scope => 'activemodel.models.lucid_works.datasource.type')
96
110
  end
97
-
98
- private
99
-
100
- def remove_blank_max_bytes # :nodoc:
101
- # API can't handle a blank max_bytes. Send nothing to select 'unlimited'
102
- @attributes.delete :max_bytes if self.max_bytes.blank?
103
- end
104
111
  end
105
112
  end
@@ -12,8 +12,20 @@ class Time #:nodoc:
12
12
  end
13
13
 
14
14
  def iso8601_with_support_for_timezones_without_colons
15
- self.iso8601_without_support_for_timezones_without_colons.gsub /([+-])(\d\d):(\d\d)$/, '\1\2\3'
15
+ unfixed_string = self.iso8601_without_support_for_timezones_without_colons
16
+ if unfixed_string =~ /Z$/
17
+ unfixed_string.gsub /Z$/, '+0000'
18
+ else
19
+ unfixed_string.gsub /([+-])(\d\d):(\d\d)$/, '\1\2\3'
20
+ end
16
21
  end
17
22
 
18
23
  alias_method_chain :iso8601, :support_for_timezones_without_colons
19
24
  end
25
+
26
+ class Fixnum
27
+ def milliseconds
28
+ # so we can say 1.second.milliseconds
29
+ self * 1000
30
+ end
31
+ end
@@ -1,9 +1,27 @@
1
1
  module LucidWorks
2
2
 
3
- # Specify an attributes for a model.
3
+ # Schema is used to delare attributes for a model.
4
+
4
5
  class Schema < ActiveSupport::HashWithIndifferentAccess
5
- ATTRIBUTES_TYPES = [ :string, :integer, :boolean, :iso8601 ]
6
+ ATTRIBUTES_TYPES = [ :string, :integer, :boolean, :iso8601, :custom ]
6
7
 
8
+ # Initializes the schema, taking a block of schema declarations.
9
+ # Typically it is called from LucidWorks::Base, e.g.:
10
+ #
11
+ # class MyModel < LucidWorks::Base
12
+ # schema do
13
+ # attribute :string1, :string
14
+ # attribute :bool1, :boolean
15
+ # attribute :integer1, :integer
16
+ # attributes :string2, :string3, :string4
17
+ # attributes :bool2, :bool3, :type => :boolean
18
+ # attributes :int2, :int3, :type => :integer
19
+ # attribute :string_with_values, :values => ['one', 'two']
20
+ # attribute :dontsendme, :omit_during_update => true
21
+ # attribute :sendnull, :string, :nil_when_blank => true
22
+ # end
23
+ # end
24
+ #
7
25
  def initialize
8
26
  @primary_key = :id
9
27
  @dynamic_attributes = true
@@ -14,16 +32,39 @@ module LucidWorks
14
32
  @primary_key
15
33
  end
16
34
 
17
- # Specify whether attributes unrecognized during retrieval should raise an error (false)
18
- # or cause a new attribute to be added to the schema (true) [default].
19
- #
35
+ # If called with _true_ (the default), attributes will be added to the schema
36
+ # when the model is first retrieved from the server. If set to _false_
37
+ # only the attributes defined in the schema will be allowed and anything
38
+ # else will raise an exception.
39
+
20
40
  def dynamic_attributes(on=nil)
21
41
  @dynamic_attributes = !!on unless on.nil?
22
42
  @dynamic_attributes
23
43
  end
24
44
 
25
45
  alias :dynamic_attributes? :dynamic_attributes
26
-
46
+
47
+ # Declare a single attribute.
48
+ #
49
+ # Attributes may be of the following types:
50
+ #
51
+ # [:string ] The default type, incurrs no special processing.
52
+ # [:integer] Setter will attempt cast to_i. Will be sent to server as integer.
53
+ # [:boolean] Besides true/false, the setter will accept 0, 1 and strings true, false, t, f, 0, 1, yes and no.
54
+ # [:iso8601] An ISO 8601 formatted datetime. Automatically converts to/from strings when sent / received.
55
+ # [:custom] Developer will write their own setter/getter.
56
+ #
57
+ # Attributes behavior may also be modified using the following options:
58
+ #
59
+ # [:type => _type_] Use to set the type of a group of attributes when using \#attributes.
60
+ # [:values => \[array\]] Provides a set of values that to_select will use to generate options_for_select.
61
+ # [:omit_during_update => true] Some resources have attributes that may be set during creation,
62
+ # but will cause an error if sent during an update.
63
+ # Setting the <em>option</em> to true will skip the attribute when saving
64
+ # the model during update.
65
+ # [:nil_when_blank => true] When this attribute is blank?, send nil (actually JSON null) during save.
66
+ # [:omit_when_blank => true] When this attribute is blank?, don't send it to the server during save.
67
+
27
68
  def attribute(name, type=:string, options={})
28
69
  raise "Unknown attribute type: #{type.inspect}" unless ATTRIBUTES_TYPES.include?(type)
29
70
  primary_key name if options.delete(:primary_key)
@@ -37,10 +78,11 @@ module LucidWorks
37
78
  # end
38
79
  #
39
80
  def attributes(*attributes_and_options)
40
- options = attributes_and_options.last.is_a?(Hash) ? attributes_and_options.pop : {}
81
+ options = attributes_and_options.last.is_a?(Hash) ? attributes_and_options.pop : {}
41
82
  attributes = attributes_and_options
83
+ type = options.delete(:type) || :string
42
84
  attributes.each do |name|
43
- self[name] = { :type => options[:type] || :string }
85
+ attribute name, type, options
44
86
  end
45
87
  end
46
88
 
@@ -96,8 +138,13 @@ module LucidWorks
96
138
  when :integer
97
139
  klass.class_eval <<-EOF, __FILE__, __LINE__+1
98
140
  def #{attribute}=(new_value)
99
- new_value = nil if new_value.blank? && self.class.schema[:#{attribute}][:nil_when_blank]
100
- @attributes[:#{attribute}] = new_value.to_i
141
+ if new_value.blank? && (self.class.schema[:#{attribute}][:nil_when_blank] ||
142
+ self.class.schema[:#{attribute}][:omit_when_blank])
143
+ new_value = nil
144
+ else
145
+ new_value = new_value.to_i
146
+ end
147
+ @attributes[:#{attribute}] = new_value
101
148
  end
102
149
  EOF
103
150
  when :iso8601
@@ -105,13 +152,13 @@ module LucidWorks
105
152
  def #{attribute}=(new_value)
106
153
  if new_value.kind_of?(String)
107
154
  @attributes[:#{attribute}] = Time.iso8601(new_value)
108
- elsif new_value.kind_of?(Time)
109
- @attributes[:#{attribute}] = new_value
110
155
  else
111
- raise "iso8601 attribute= only accepts String or Time"
156
+ @attributes[:#{attribute}] = new_value
112
157
  end
113
158
  end
114
159
  EOF
160
+ when :custom
161
+ # Do nothing. Developer will provide own accessors.
115
162
  else
116
163
  klass.class_eval <<-EOF, __FILE__, __LINE__+1
117
164
  def #{attribute}=(new_value) # def foo=(new_value)
@@ -1,3 +1,3 @@
1
1
  module LucidWorks
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.5"
3
3
  end
@@ -709,15 +709,26 @@ describe LucidWorks::Base do
709
709
 
710
710
  describe "#encode" do
711
711
  before do
712
- # reuse ModelWithTimeAttr
713
- # Yes this will fail if we start running tests in random order or bottom up
712
+ class ModelToBeEncoded < LucidWorks::Base
713
+ schema do
714
+ attribute :time, :iso8601
715
+ attribute :blanktime, :iso8601, :omit_when_blank => true
716
+ end
717
+ end
714
718
  end
715
719
 
716
720
  describe "for a model with an attr described as :iso8601" do
717
721
  it "should convert :iso8601 attributes to strings" do
718
- time = Time.utc(2011,12,13,14,15,16)
719
- model = ModelWithTimeAttr.new(:parent => @server, :time => time)
720
- model.send(:encode).should == '{"time":"2011-12-13T14:15:16Z"}'
722
+ time = Time.local(2011,12,13,14,15,16)
723
+ model = ModelToBeEncoded.new(:parent => @server, :time => time)
724
+ model.send(:encode).should =~ /"time":"2011-12-13T14:15:16-\d\d\d\d"/
725
+ end
726
+ end
727
+
728
+ describe "for a model with an attr with option :omit_when_blank" do
729
+ it "should not encode the attribute" do
730
+ model = ModelToBeEncoded.new(:parent => @server, :time => 123, :blanktime => nil)
731
+ model.send(:encode).should == '{"time":123}'
721
732
  end
722
733
  end
723
734
  end
@@ -89,7 +89,7 @@ describe LucidWorks::Collection do
89
89
 
90
90
  describe "#activities" do
91
91
  before do
92
- @collection = LucidWorks::Collection.first(:parent => @server)
92
+ @collection = @server.collection('collection1')
93
93
  end
94
94
 
95
95
  context "for a collection with some activities" do
@@ -179,7 +179,7 @@ describe LucidWorks::Collection do
179
179
  # Schedule a crawl to create some history
180
180
  @schedule = @ds1.build_schedule
181
181
  @schedule.period = '0'
182
- @schedule.start_time = '0'
182
+ @schedule.start_time = 0
183
183
  @schedule.active = true
184
184
  @schedule.type = 'index'
185
185
  @schedule.save
@@ -44,8 +44,8 @@ describe LucidWorks::Datasource::Schedule do
44
44
  describe 'start_time is in the future' do
45
45
  it 'should return start_time' do
46
46
  @schedule.reference_time = Time.now.utc
47
- @schedule.start_time = (@schedule.reference_time + 30.minutes).iso8601
48
- @schedule.next_start.should == Time.iso8601(@schedule.start_time)
47
+ @schedule.start_time = @schedule.reference_time + 30.minutes
48
+ @schedule.next_start.should == @schedule.start_time
49
49
  end
50
50
  end
51
51
 
@@ -64,7 +64,7 @@ describe LucidWorks::Datasource::Schedule do
64
64
  it 'should return now' do
65
65
  # get current time after rounding error
66
66
  @schedule.reference_time = @now
67
- @schedule.start_time = (@now - 30.minutes).iso8601
67
+ @schedule.start_time = @now - 30.minutes
68
68
  @schedule.period = 10.minutes
69
69
  @schedule.next_start.should == @now
70
70
  end
@@ -73,7 +73,7 @@ describe LucidWorks::Datasource::Schedule do
73
73
  context 'Time since self.start_time is not even multiple of self.period' do
74
74
  describe 'one interval has passed' do
75
75
  before do
76
- @schedule.start_time = (@now - 11.minutes).iso8601
76
+ @schedule.start_time = @now - 11.minutes
77
77
  @schedule.period = 10.minutes
78
78
  end
79
79
 
@@ -88,12 +88,12 @@ describe LucidWorks::Datasource::Schedule do
88
88
 
89
89
  describe 'several (e.g. 4) intervals have passed' do
90
90
  before do
91
- @schedule.start_time = (@now - 45.minutes).iso8601
91
+ @schedule.start_time = @now - 45.minutes
92
92
  @schedule.period = 10.minutes
93
93
  end
94
94
 
95
- it 'should return a time between 4 and 6 intervals from start_at' do
96
- @schedule.next_start.should > @schedule.start_at + (4 * @schedule.period)
95
+ it 'should return a time between 4 and 6 intervals from start_time' do
96
+ @schedule.next_start.should > @schedule.start_time + (4 * @schedule.period)
97
97
  end
98
98
 
99
99
  it 'should return a start time within 1 period from now' do
@@ -111,7 +111,7 @@ describe LucidWorks::Datasource::Schedule do
111
111
  it "should advance the start time" do
112
112
  half_past_midnight = Time.iso8601("2011-05-09T00:30:00Z")
113
113
  hourly_at_quarter_past = {"frequency"=>"hourly", "start"=>{"minutes"=>"15"}}
114
- quarter_past_1_am = '2011-05-09T01:15:00Z'
114
+ quarter_past_1_am = Time.iso8601('2011-05-09T01:15:00Z')
115
115
 
116
116
  @schedule.reference_time = half_past_midnight
117
117
  @schedule.start_time.should_not == quarter_past_1_am
@@ -123,7 +123,7 @@ describe LucidWorks::Datasource::Schedule do
123
123
  describe 'with daily frequency' do
124
124
  it "should advance the start time" do
125
125
  today_at_noon = Time.iso8601("2011-05-09T12:00:00Z")
126
- tomorrow_at_eleven_am = '2011-05-10T11:00:00Z'
126
+ tomorrow_at_eleven_am = Time.iso8601('2011-05-10T11:00:00Z')
127
127
  daily_at_11_am = {"frequency"=>"daily", "start"=>{"hours" => "11", "minutes"=>"00"}}
128
128
 
129
129
  @schedule.reference_time = today_at_noon
@@ -137,7 +137,7 @@ describe LucidWorks::Datasource::Schedule do
137
137
  it "should advance the start time" do
138
138
  # note: Rails week starts on Monday
139
139
  friday_of_this_week = Time.iso8601("2011-05-13T00:00:00Z")
140
- wednesday_of_next_week = '2011-05-18T00:00:00Z'
140
+ wednesday_of_next_week = Time.iso8601('2011-05-18T00:00:00Z')
141
141
  weekly_on_wednesday = {"frequency"=>"weekly", "start"=>{"days" => "2", "hours" => "0", "minutes"=>"00"}}
142
142
 
143
143
  # just make sure I'm not on crack
@@ -156,27 +156,33 @@ describe LucidWorks::Datasource::Schedule do
156
156
  describe 'with hourly frequency' do
157
157
  it "should not advance the start time" do
158
158
  half_past_midnight = Time.iso8601("2011-05-09T00:30:00Z")
159
- three_quarters_past_midnight = '2011-05-09T00:45:00Z'
159
+ three_quarters_past_midnight = Time.iso8601('2011-05-09T00:45:00Z')
160
160
  hourly_at_three_quarters_past = {"frequency"=>"hourly", "start"=>{"minutes"=>"45"}}
161
161
 
162
162
  @schedule.reference_time = half_past_midnight
163
163
 
164
164
  @schedule.start_time.should_not == three_quarters_past_midnight
165
+ @schedule.frequency.should_not == 'hourly'
166
+
165
167
  @schedule.schedule = hourly_at_three_quarters_past
166
168
  @schedule.start_time.should == three_quarters_past_midnight
169
+ @schedule.frequency.should == 'hourly'
167
170
  end
168
171
  end
169
172
 
170
173
  describe 'with daily frequency' do
171
174
  it "should not advance the start time" do
172
175
  today_at_noon = Time.iso8601("2011-05-09T12:00:00Z")
173
- today_at_1pm = '2011-05-09T13:00:00Z'
176
+ today_at_1pm = Time.iso8601('2011-05-09T13:00:00Z')
174
177
  daily_at_1pm = {"frequency"=>"daily", "start"=>{"hours" => "13", "minutes"=>"00"}}
175
178
 
176
179
  @schedule.reference_time = today_at_noon
177
180
  @schedule.start_time.should_not == today_at_1pm
181
+ @schedule.frequency.should_not == 'daily'
182
+
178
183
  @schedule.schedule = daily_at_1pm
179
184
  @schedule.start_time.should == today_at_1pm
185
+ @schedule.frequency.should == 'daily'
180
186
  end
181
187
  end
182
188
 
@@ -184,7 +190,7 @@ describe LucidWorks::Datasource::Schedule do
184
190
  it "should not advance the start time" do
185
191
  # note: Rails week starts on Monday
186
192
  wednesday_of_this_week = Time.iso8601("2011-05-11T00:00:00Z")
187
- thursday_of_this_week = '2011-05-12T00:00:00Z'
193
+ thursday_of_this_week = Time.iso8601('2011-05-12T00:00:00Z')
188
194
  weekly_on_thursday = {"frequency"=>"weekly", "start"=>{"days" => "3", "hours" => "0", "minutes"=>"00"}}
189
195
 
190
196
  # just make sure I'm not on crack
@@ -193,8 +199,11 @@ describe LucidWorks::Datasource::Schedule do
193
199
 
194
200
  @schedule.reference_time = wednesday_of_this_week
195
201
  @schedule.start_time.should_not == thursday_of_this_week
202
+ @schedule.frequency.should_not == 'weekly'
203
+
196
204
  @schedule.schedule = weekly_on_thursday
197
205
  @schedule.start_time.should == thursday_of_this_week
206
+ @schedule.frequency.should == 'weekly'
198
207
  end
199
208
  end
200
209
  end
@@ -4,7 +4,7 @@ describe LucidWorks::Datasource do
4
4
  before :all do
5
5
  @server = connect_to_live_server
6
6
  @server.reset_collections!
7
- @collection = @server.collections!.first
7
+ @collection = @server.collection('collection1')
8
8
  end
9
9
 
10
10
  describe "CRUD" do
@@ -60,7 +60,7 @@ describe LucidWorks::Datasource do
60
60
  :crawler => LucidWorks::Datasource::CRAWLERS['web'],
61
61
  :type => 'web',
62
62
  :url => "invalid url",
63
- :crawl_depth => "invalid crawl depth"
63
+ :crawl_depth => 1
64
64
  }
65
65
  end
66
66
 
@@ -70,7 +70,6 @@ describe LucidWorks::Datasource do
70
70
  d = LucidWorks::Datasource.create(@parameters)
71
71
  }.should_not change(self, :datasource_count)
72
72
  d.errors[:url].should_not be_empty
73
- d.errors[:crawl_depth].should_not be_empty
74
73
  d.errors[:base].should be_blank
75
74
  end
76
75
  end
@@ -8,8 +8,16 @@ describe Time do
8
8
  end
9
9
 
10
10
  describe "#iso8601" do
11
- it "should generate a time with a 4 digit timezone" do
12
- Time.new(2011, 4, 15, 13, 11, 56, "-07:00").iso8601.should == "2011-04-15T13:11:56-0700"
11
+ context "when time is a UTC time" do
12
+ it "should end in +0000" do
13
+ Time.utc(2011, 4, 15, 13, 11, 56).iso8601.should == "2011-04-15T13:11:56+0000"
14
+ end
15
+ end
16
+
17
+ context "when time is non-UTC" do
18
+ it "should generate a time with a 4 digit timezone" do
19
+ Time.new(2011, 4, 15, 13, 11, 56, "-07:00").iso8601.should == "2011-04-15T13:11:56-0700"
20
+ end
13
21
  end
14
22
  end
15
23
  end
@@ -144,6 +144,23 @@ describe LucidWorks::Schema do
144
144
  end
145
145
  end
146
146
  end
147
+
148
+ context "for an iso8601 attribute" do
149
+ it "setter should just store a Time" do
150
+ @model.time = Time.utc(2011)
151
+ @model.time.should be_a(Time)
152
+ end
153
+
154
+ it "setter should assume string is ISO8601 and convert to Time" do
155
+ @model.time = "2011-05-12T13:33:55-0500"
156
+ @model.time.should == Time.utc(2011,05,12,18,33,55)
157
+ end
158
+
159
+ it "setter should just store an integer" do
160
+ @model.time = 12345678
161
+ @model.time.should == 12345678
162
+ end
163
+ end
147
164
  end
148
165
 
149
166
  describe "#has_attribute?" do
data/spec/spec_helper.rb CHANGED
@@ -36,8 +36,12 @@ class LucidWorks::Server
36
36
  end
37
37
 
38
38
  collections.each do |c|
39
- c.destroy
40
- notes << "Deleted collection '#{c.name}'"
39
+ # TODO: figure out how to delete and recreate lwelogs
40
+ # For now just don't delete it
41
+ unless c.name == 'lwelogs'
42
+ c.destroy
43
+ notes << "Deleted collection '#{c.name}'"
44
+ end
41
45
  end
42
46
 
43
47
  default_collection = self.create_collection(:name => DEFAULT_COLLECTION_NAME)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: lucid_works
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.6.4
5
+ version: 0.6.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Sam Pierson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-13 00:00:00 -07:00
13
+ date: 2011-05-16 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency