lucid_works 0.7.2 → 0.7.9
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/.gitignore +0 -1
- data/.rvmrc +3 -0
- data/Gemfile +6 -1
- data/Gemfile.lock +83 -0
- data/config/locales/en.yml +3 -2
- data/lib/lucid_works/activity.rb +4 -4
- data/lib/lucid_works/collection/settings.rb +1 -1
- data/lib/lucid_works/collection.rb +65 -15
- data/lib/lucid_works/datasource/schedule.rb +3 -3
- data/lib/lucid_works/datasource.rb +3 -4
- data/lib/lucid_works/datasource_property.rb +6 -4
- data/lib/lucid_works/exceptions.rb +4 -0
- data/lib/lucid_works/field.rb +2 -40
- data/lib/lucid_works/gem_version.rb +1 -1
- data/lib/lucid_works/schema/attribute.rb +1 -1
- data/lib/lucid_works/schema/list_attribute.rb +44 -0
- data/lib/lucid_works.rb +2 -1
- data/spec/lib/lucid_works/collection/acl_config_spec.rb +165 -0
- data/spec/lib/lucid_works/collection/activity_spec.rb +10 -5
- data/spec/lib/lucid_works/collection/prime_activities_spec.rb +4 -8
- data/spec/lib/lucid_works/collection_spec.rb +10 -12
- data/spec/lib/lucid_works/datasource/schedule_spec.rb +10 -5
- data/spec/lib/lucid_works/patch_time_spec.rb +4 -1
- data/spec/lib/lucid_works/schema_spec.rb +31 -0
- metadata +6 -2
data/.gitignore
CHANGED
data/.rvmrc
CHANGED
data/Gemfile
CHANGED
@@ -4,7 +4,12 @@ source "http://rubygems.org"
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :development do
|
7
|
-
|
7
|
+
platforms :ruby_18 do
|
8
|
+
gem 'ruby-debug'
|
9
|
+
end
|
10
|
+
platforms :ruby_19 do
|
11
|
+
gem 'ruby-debug19', :require => 'ruby-debug'
|
12
|
+
end
|
8
13
|
gem 'rspec'
|
9
14
|
gem 'autotest'
|
10
15
|
gem "autotest-fsevent"
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
lucid_works (0.7.7)
|
5
|
+
activemodel (>= 3)
|
6
|
+
activesupport (>= 3)
|
7
|
+
json
|
8
|
+
nokogiri
|
9
|
+
rest-client (>= 1.6.1)
|
10
|
+
rsolr
|
11
|
+
rsolr-ext
|
12
|
+
|
13
|
+
GEM
|
14
|
+
remote: http://rubygems.org/
|
15
|
+
specs:
|
16
|
+
ZenTest (4.5.0)
|
17
|
+
activemodel (3.0.10)
|
18
|
+
activesupport (= 3.0.10)
|
19
|
+
builder (~> 2.1.2)
|
20
|
+
i18n (~> 0.5.0)
|
21
|
+
activesupport (3.0.10)
|
22
|
+
archive-tar-minitar (0.5.2)
|
23
|
+
autotest (4.4.6)
|
24
|
+
ZenTest (>= 4.4.1)
|
25
|
+
autotest-fsevent (0.2.5)
|
26
|
+
sys-uname
|
27
|
+
builder (2.1.2)
|
28
|
+
columnize (0.3.4)
|
29
|
+
diff-lcs (1.1.2)
|
30
|
+
i18n (0.5.0)
|
31
|
+
json (1.5.3)
|
32
|
+
linecache (0.46)
|
33
|
+
rbx-require-relative (> 0.0.4)
|
34
|
+
linecache19 (0.5.12)
|
35
|
+
ruby_core_source (>= 0.1.4)
|
36
|
+
mime-types (1.16)
|
37
|
+
nokogiri (1.5.0)
|
38
|
+
rbx-require-relative (0.0.5)
|
39
|
+
rest-client (1.6.7)
|
40
|
+
mime-types (>= 1.16)
|
41
|
+
rsolr (1.0.2)
|
42
|
+
builder (>= 2.1.2)
|
43
|
+
rsolr-ext (1.0.3)
|
44
|
+
rsolr (>= 1.0.2)
|
45
|
+
rspec (2.5.0)
|
46
|
+
rspec-core (~> 2.5.0)
|
47
|
+
rspec-expectations (~> 2.5.0)
|
48
|
+
rspec-mocks (~> 2.5.0)
|
49
|
+
rspec-core (2.5.1)
|
50
|
+
rspec-expectations (2.5.0)
|
51
|
+
diff-lcs (~> 1.1.2)
|
52
|
+
rspec-mocks (2.5.0)
|
53
|
+
ruby-debug (0.10.4)
|
54
|
+
columnize (>= 0.1)
|
55
|
+
ruby-debug-base (~> 0.10.4.0)
|
56
|
+
ruby-debug-base (0.10.4)
|
57
|
+
linecache (>= 0.3)
|
58
|
+
ruby-debug-base19 (0.11.25)
|
59
|
+
columnize (>= 0.3.1)
|
60
|
+
linecache19 (>= 0.5.11)
|
61
|
+
ruby_core_source (>= 0.1.4)
|
62
|
+
ruby-debug19 (0.11.6)
|
63
|
+
columnize (>= 0.3.1)
|
64
|
+
linecache19 (>= 0.5.11)
|
65
|
+
ruby-debug-base19 (>= 0.11.19)
|
66
|
+
ruby_core_source (0.1.5)
|
67
|
+
archive-tar-minitar (>= 0.5.2)
|
68
|
+
sys-uname (0.8.5)
|
69
|
+
timecop (0.3.5)
|
70
|
+
tzinfo (0.3.27)
|
71
|
+
|
72
|
+
PLATFORMS
|
73
|
+
ruby
|
74
|
+
|
75
|
+
DEPENDENCIES
|
76
|
+
autotest
|
77
|
+
autotest-fsevent
|
78
|
+
lucid_works!
|
79
|
+
rspec
|
80
|
+
ruby-debug
|
81
|
+
ruby-debug19
|
82
|
+
timecop
|
83
|
+
tzinfo
|
data/config/locales/en.yml
CHANGED
@@ -154,7 +154,6 @@ en:
|
|
154
154
|
autocomplete: Generate autocomplete index
|
155
155
|
click: Process click logs
|
156
156
|
optimize: Optimize index
|
157
|
-
spelling: Generate spellcheck index
|
158
157
|
collection:
|
159
158
|
one: Collection
|
160
159
|
other: Collections
|
@@ -214,12 +213,14 @@ en:
|
|
214
213
|
name: ! 'Collection names may use the characters: A-Z, a-z, 0-9, dash and
|
215
214
|
underscore'
|
216
215
|
datasource:
|
217
|
-
crawl_depth:
|
216
|
+
crawl_depth: Leave blank or set to -1 to crawl with no depth limit.
|
218
217
|
exclude_paths: A list of regular expressions, one per line, e.g. .*\.pdf will
|
219
218
|
ignore filenames ending in .pdf.
|
220
219
|
include_paths: A list of regular expressions, one per line, e.g. http://example\.com/.*
|
221
220
|
will match everything within the site only.
|
222
221
|
max_bytes: Default = 10 MiB. Set to -1 to indicate no file size limit.
|
223
222
|
url: e.g. http://cnn.com. Please include protocol (http/https).
|
223
|
+
field:
|
224
|
+
copy_fields: A list of fields separated by spaces.
|
224
225
|
synonym:
|
225
226
|
mapping: ! 'Example: car, automobile, auto'
|
data/lib/lucid_works/activity.rb
CHANGED
@@ -2,7 +2,7 @@ require 'active_support/core_ext/numeric/time.rb'
|
|
2
2
|
module LucidWorks
|
3
3
|
|
4
4
|
class Activity < Base
|
5
|
-
TYPES = %w{ optimize
|
5
|
+
TYPES = %w{ optimize click autocomplete }
|
6
6
|
|
7
7
|
# Unlike Datasource schedules, the API allows multiples of these
|
8
8
|
# So, to be honest with gem users, we can't really say this:
|
@@ -36,9 +36,9 @@ module LucidWorks
|
|
36
36
|
#
|
37
37
|
def frequency=(frequency)
|
38
38
|
self.period = case frequency
|
39
|
-
when 'hourly' then 1.hours.seconds
|
40
|
-
when 'daily' then 1.days.seconds
|
41
|
-
when 'weekly' then 1.weeks.seconds
|
39
|
+
when 'hourly' then 1.hours.seconds.to_i
|
40
|
+
when 'daily' then 1.days.seconds.to_i
|
41
|
+
when 'weekly' then 1.weeks.seconds.to_i
|
42
42
|
else raise "unknown frequency"
|
43
43
|
end
|
44
44
|
end
|
@@ -14,7 +14,7 @@ module LucidWorks
|
|
14
14
|
|
15
15
|
schema do
|
16
16
|
# Indexing Settings
|
17
|
-
attribute :unknown_type_handling, :string
|
17
|
+
attribute :unknown_type_handling, :string
|
18
18
|
attribute :de_duplication, :string, :values => DEDUP_OPTIONS
|
19
19
|
|
20
20
|
# Querying Settings
|
@@ -14,6 +14,12 @@ module LucidWorks
|
|
14
14
|
end
|
15
15
|
|
16
16
|
LOGS_COLLECTION_NAME = 'LucidWorksLogs'
|
17
|
+
AD_FILTERING = 'adfiltering'
|
18
|
+
ROLE_FILTERING = 'filterbyrole'
|
19
|
+
STATIC_ACL_CONFIG = {
|
20
|
+
"filterer.class" => "com.lucid.security.WindowsACLQueryFilterer",
|
21
|
+
"provider.class" => "com.lucid.security.ad.ADACLTagProvider",
|
22
|
+
}
|
17
23
|
|
18
24
|
validates_presence_of :name
|
19
25
|
|
@@ -81,13 +87,13 @@ module LucidWorks
|
|
81
87
|
def prime_activities
|
82
88
|
self.activities!.sort!{|a,b|a.id <=> b.id}
|
83
89
|
num_created = 0
|
84
|
-
activities_to_return =
|
90
|
+
activities_to_return = ::LucidWorks::Activity::TYPES.map do |type|
|
85
91
|
if act = self.activities.detect{|act| act.type == type}
|
86
92
|
act
|
87
93
|
else
|
88
94
|
num_created += 1
|
89
95
|
start_time = Time.now.change(:min => 0) + num_created.hours
|
90
|
-
self.create_activity(:type => type, :active => false, :start_time => start_time, :period => 1.days.seconds)
|
96
|
+
self.create_activity(:type => type, :active => false, :start_time => start_time, :period => 1.days.seconds.to_i)
|
91
97
|
end
|
92
98
|
end
|
93
99
|
self.activities! if num_created > 0
|
@@ -97,20 +103,13 @@ module LucidWorks
|
|
97
103
|
# return the first for each kind of activity
|
98
104
|
# don't use these if you need more than one activity
|
99
105
|
# b/c each forces an API hit
|
100
|
-
def optimize_activity
|
101
|
-
prime_activities.detect{|act| act.type == 'optimize'}
|
102
|
-
end
|
103
|
-
|
104
|
-
def spelling_activity
|
105
|
-
prime_activities.detect{|act| act.type == 'spelling'}
|
106
|
-
end
|
107
|
-
|
108
|
-
def click_activity
|
109
|
-
prime_activities.detect{|act| act.type == 'click'}
|
110
|
-
end
|
111
106
|
|
112
|
-
|
113
|
-
|
107
|
+
::LucidWorks::Activity::TYPES.each do |activity|
|
108
|
+
class_eval <<-EOF
|
109
|
+
def #{activity}_activity # def optimize_activity
|
110
|
+
prime_activities.detect{|act| act.type == '#{activity}'} # prime_activities.detect{|act| act.type == 'optimize'}
|
111
|
+
end # end
|
112
|
+
EOF
|
114
113
|
end
|
115
114
|
|
116
115
|
# URL of Solr's build-in admin page
|
@@ -132,5 +131,56 @@ module LucidWorks
|
|
132
131
|
JSON.parse RestClient.get(uri + "/jdbcdrivers/classes")
|
133
132
|
end
|
134
133
|
|
134
|
+
def components
|
135
|
+
JSON.parse(RestClient.get(uri + "/components/all.json?handlerName=%2Flucid"))
|
136
|
+
end
|
137
|
+
|
138
|
+
def filtering_enabled?
|
139
|
+
# current core implementation requires exactly one of filterbyrole or adfiltering
|
140
|
+
assert_components_include_ad_xor_role
|
141
|
+
return self.components.include?(AD_FILTERING)
|
142
|
+
end
|
143
|
+
|
144
|
+
def assert_components_include_ad_xor_role
|
145
|
+
# require 'ruby-debug'; debugger
|
146
|
+
raise "conflicting filtering components" if self.components.include?(AD_FILTERING) && self.components.include?(ROLE_FILTERING)
|
147
|
+
raise "missing filtering components" if ! self.components.include?(AD_FILTERING) && ! self.components.include?(ROLE_FILTERING)
|
148
|
+
end
|
149
|
+
|
150
|
+
def filtering_settings
|
151
|
+
JSON.parse(RestClient.get(uri + "/filtering"))['adfiltering'] || {}
|
152
|
+
end
|
153
|
+
|
154
|
+
def compute_component_set(acl_filtering_enabled)
|
155
|
+
new_component_set = self.components.clone
|
156
|
+
new_component_set.delete(ROLE_FILTERING)
|
157
|
+
new_component_set.delete(AD_FILTERING)
|
158
|
+
new_component_set.unshift acl_filtering_enabled == 'true' ? AD_FILTERING : ROLE_FILTERING
|
159
|
+
end
|
160
|
+
|
161
|
+
def configure_filtering(opts)
|
162
|
+
if ! opts[:config]['java.naming.provider.url'].blank? && opts[:config]['java.naming.provider.url'] !~ %r(://)
|
163
|
+
opts[:config]['java.naming.provider.url'] = "ldap://#{opts[:config]['java.naming.provider.url']}"
|
164
|
+
end
|
165
|
+
filtering_settings = STATIC_ACL_CONFIG.merge('provider.config' => opts[:config])
|
166
|
+
|
167
|
+
errors = {}
|
168
|
+
method = RestClient.send(:get, uri+'/filtering')['adfiltering'] ? :put : :post
|
169
|
+
begin
|
170
|
+
response = RestClient.send(method, uri+'/filtering/adfiltering', filtering_settings.to_json, :content_type => :json)
|
171
|
+
rescue => exception
|
172
|
+
JSON.parse(exception.response)['errors'].each {|e| errors[e['code']] = e['message']}
|
173
|
+
end
|
174
|
+
|
175
|
+
new_component_set = compute_component_set(opts[:enabled])
|
176
|
+
if new_component_set.sort != self.components.sort
|
177
|
+
begin
|
178
|
+
response = RestClient.send(:put, uri+'/components/components?handlerName=/lucid', new_component_set.to_json, :content_type => :json)
|
179
|
+
rescue => exception
|
180
|
+
JSON.parse(exception.response)['errors'].each {|e| errors[e['code']] = e['message']}
|
181
|
+
end
|
182
|
+
end
|
183
|
+
raise LucidWorks::AclConfigInvalid.new(errors) unless errors.empty?
|
184
|
+
end
|
135
185
|
end
|
136
186
|
end
|
@@ -44,9 +44,9 @@ module LucidWorks
|
|
44
44
|
#
|
45
45
|
def frequency=(frequency)
|
46
46
|
self.period = case frequency
|
47
|
-
when 'hourly' then 1.hours.seconds
|
48
|
-
when 'daily' then 1.days.seconds
|
49
|
-
when 'weekly' then 1.weeks.seconds
|
47
|
+
when 'hourly' then 1.hours.seconds.to_i
|
48
|
+
when 'daily' then 1.days.seconds.to_i
|
49
|
+
when 'weekly' then 1.weeks.seconds.to_i
|
50
50
|
else raise "unknown frequency"
|
51
51
|
end
|
52
52
|
end
|
@@ -32,12 +32,12 @@ module LucidWorks
|
|
32
32
|
# common
|
33
33
|
attributes :name, :crawler
|
34
34
|
attribute :type, :string, :values => TYPES
|
35
|
-
|
35
|
+
attribute :crawl_depth, :integer, :nil_when_blank => true
|
36
|
+
attribute :max_docs, :integer
|
36
37
|
attributes :max_bytes, :commit_within, :type => :integer, :omit_when_blank => true
|
37
38
|
attribute :commit_within_min, :custom
|
38
39
|
attribute :commit_on_finish, :boolean
|
39
|
-
|
40
|
-
attribute :exclude_paths
|
40
|
+
attributes :include_paths, :exclude_paths, :type => :list, :separator => "\n"
|
41
41
|
attribute :mapping, :string, :omit_when_blank => true # Hash
|
42
42
|
attribute :bounds, :string, :values => BOUNDS
|
43
43
|
# web
|
@@ -95,7 +95,6 @@ module LucidWorks
|
|
95
95
|
end
|
96
96
|
|
97
97
|
validates_presence_of :type, :crawler, :name
|
98
|
-
validates_presence_of :crawl_depth, :if => lambda { |d| %w{web file}.include?(d.type) }
|
99
98
|
validates_numericality_of :max_bytes, :allow_blank => true
|
100
99
|
validates_presence_of :url, :if => lambda { |d| d.type == 'web' }
|
101
100
|
|
@@ -2,17 +2,19 @@ module LucidWorks
|
|
2
2
|
|
3
3
|
class DatasourceProperty
|
4
4
|
|
5
|
-
attr_reader :description, :name, :allowed_values, :type, :default_value, :required, :read_only
|
5
|
+
attr_reader :description, :name, :allowed_values, :type, :default_value, :required, :read_only, :advanced
|
6
6
|
alias :read_only? :read_only
|
7
|
+
alias :advanced? :advanced
|
7
8
|
|
8
9
|
def initialize(attributes = {})
|
9
10
|
@description = attributes['description']
|
10
11
|
@name = attributes['name']
|
11
|
-
@allowed_values = attributes['
|
12
|
+
@allowed_values = attributes['allowed_values']
|
12
13
|
@type = attributes['type']
|
13
|
-
@default_value = attributes['
|
14
|
+
@default_value = attributes['default_value']
|
14
15
|
@required = attributes['required']
|
15
16
|
@read_only = attributes['read_only']
|
17
|
+
@advanced = attributes['advanced']
|
16
18
|
end
|
17
19
|
end
|
18
|
-
end
|
20
|
+
end
|
data/lib/lucid_works/field.rb
CHANGED
@@ -22,50 +22,12 @@ module LucidWorks
|
|
22
22
|
:use_in_find_similar,
|
23
23
|
:type => :boolean
|
24
24
|
attribute :default_boost, :integer
|
25
|
-
attributes :field_type, :short_field_boost, :term_vectors, :default_value, :
|
25
|
+
attributes :field_type, :short_field_boost, :term_vectors, :default_value, :type => :string
|
26
|
+
attribute :copy_fields, :list
|
26
27
|
|
27
28
|
attribute :index_term_freq_and_pos, :custom, :values => INDEXING_OPTIONS
|
28
29
|
end
|
29
30
|
|
30
|
-
TYPES = [
|
31
|
-
'string',
|
32
|
-
'boolean',
|
33
|
-
'binary',
|
34
|
-
'int',
|
35
|
-
'float',
|
36
|
-
'long',
|
37
|
-
'double',
|
38
|
-
'tint',
|
39
|
-
'tfloat',
|
40
|
-
'tlong',
|
41
|
-
'tdouble',
|
42
|
-
'uri',
|
43
|
-
'date',
|
44
|
-
'tdate',
|
45
|
-
'text_ws',
|
46
|
-
'text_en',
|
47
|
-
'text_porter_en',
|
48
|
-
'textTight',
|
49
|
-
'text_cjk',
|
50
|
-
'text_da',
|
51
|
-
'text_de',
|
52
|
-
'text_es',
|
53
|
-
'text_fr',
|
54
|
-
'text_it',
|
55
|
-
'text_nl',
|
56
|
-
'text_pt',
|
57
|
-
'text_ru',
|
58
|
-
'text_se',
|
59
|
-
'text_fi',
|
60
|
-
'random',
|
61
|
-
'comma-separated',
|
62
|
-
'textSpell',
|
63
|
-
'payloads',
|
64
|
-
'point',
|
65
|
-
'location',
|
66
|
-
'geohash'
|
67
|
-
]
|
68
|
-
|
69
31
|
BOOST_VALUES = [
|
70
32
|
'none',
|
71
33
|
'moderate',
|
@@ -2,7 +2,7 @@ module LucidWorks
|
|
2
2
|
class Schema
|
3
3
|
|
4
4
|
class Attribute
|
5
|
-
ATTRIBUTES_TYPES = [ :string, :integer, :boolean, :iso8601, :custom ]
|
5
|
+
ATTRIBUTES_TYPES = [ :string, :integer, :boolean, :iso8601, :custom, :list ]
|
6
6
|
RESERVED_ATTRIBUTE_NAMES = %{ class nil? send caller object_id }
|
7
7
|
|
8
8
|
attr_reader :schema, :name, :values, :origin
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module LucidWorks
|
2
|
+
class Schema
|
3
|
+
|
4
|
+
class ListAttribute < Attribute
|
5
|
+
|
6
|
+
attr_reader :separator
|
7
|
+
|
8
|
+
def initialize(schema, name, options={})
|
9
|
+
@separator = options[:separator] || " "
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
def type
|
14
|
+
:list
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_accessors_for_attribute(klass) # :nodoc:
|
18
|
+
super
|
19
|
+
|
20
|
+
klass.class_eval <<-EOF, __FILE__, __LINE__+1
|
21
|
+
def #{name}
|
22
|
+
list = @attributes[:#{name}]
|
23
|
+
list.nil? ? "" : list.join(self.class.schema[:#{name}].separator)
|
24
|
+
end
|
25
|
+
|
26
|
+
def #{name}=(new_value)
|
27
|
+
if new_value.kind_of?(Array)
|
28
|
+
@attributes[:#{name}] = new_value
|
29
|
+
elsif new_value.kind_of?(String)
|
30
|
+
separator = self.class.schema[:#{name}].separator
|
31
|
+
separator = /[\\r\\n]+/ if separator == "\n" # Special case
|
32
|
+
@attributes[:#{name}] = new_value.split(separator)
|
33
|
+
elsif new_value.nil?
|
34
|
+
@attributes[:#{name}] = []
|
35
|
+
else
|
36
|
+
raise "Can't interpret \#{new_value.inspect} as a #{name}"
|
37
|
+
end
|
38
|
+
@attributes[:#{name}]
|
39
|
+
end
|
40
|
+
EOF
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/lucid_works.rb
CHANGED
@@ -30,14 +30,15 @@ require 'lucid_works/schema/boolean_attribute'
|
|
30
30
|
require 'lucid_works/schema/custom_attribute'
|
31
31
|
require 'lucid_works/schema/integer_attribute'
|
32
32
|
require 'lucid_works/schema/iso8601_attribute'
|
33
|
+
require 'lucid_works/schema/list_attribute'
|
33
34
|
require 'lucid_works/schema/string_attribute'
|
34
35
|
|
36
|
+
require 'lucid_works/activity'
|
35
37
|
require 'lucid_works/collection'
|
36
38
|
require 'lucid_works/collection/info'
|
37
39
|
require 'lucid_works/collection/index'
|
38
40
|
require 'lucid_works/collection/settings'
|
39
41
|
require 'lucid_works/collection/click'
|
40
|
-
require 'lucid_works/activity'
|
41
42
|
require 'lucid_works/activity/status'
|
42
43
|
require 'lucid_works/activity/history'
|
43
44
|
require 'lucid_works/crawler'
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "LucidWorks::Collection ACL configuration utility methods" do
|
4
|
+
before :all do
|
5
|
+
@server = connect_to_live_server
|
6
|
+
@server.reset_collections!
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "ACL filtering configuration" do
|
10
|
+
before :all do
|
11
|
+
@collection = @server.create_collection(:name => 'collection_for_acl_config_testing', :parent => @server)
|
12
|
+
@initial_components = [
|
13
|
+
"filterbyrole",
|
14
|
+
"query",
|
15
|
+
"mlt",
|
16
|
+
"stats",
|
17
|
+
"feedback",
|
18
|
+
"highlight",
|
19
|
+
"facet",
|
20
|
+
"spellcheck",
|
21
|
+
"debug"
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#assert_components_include_ad_xor_role' do
|
26
|
+
before do
|
27
|
+
@collection_for_xor = @server.collection('collection_for_acl_config_testing')
|
28
|
+
end
|
29
|
+
it "should not raise an exception for a new collection" do
|
30
|
+
lambda {@collection_for_xor.assert_components_include_ad_xor_role}.should_not raise_error
|
31
|
+
end
|
32
|
+
it "should raise an exception if both are present" do;
|
33
|
+
@collection_for_xor.stub(:components).and_return(@initial_components + [LucidWorks::Collection::AD_FILTERING])
|
34
|
+
lambda {@collection_for_xor.assert_components_include_ad_xor_role}.should raise_error
|
35
|
+
end
|
36
|
+
it "should raise an exception if neither are present" do
|
37
|
+
@collection_for_xor.stub(:components).and_return(@initial_components[1..-1])
|
38
|
+
lambda {@collection_for_xor.assert_components_include_ad_xor_role}.should raise_error
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#filtering_enabled?" do
|
43
|
+
before do
|
44
|
+
@collection_for_enabled = @server.collection('collection_for_acl_config_testing')
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should be false on a new collection" do
|
48
|
+
@collection_for_enabled.filtering_enabled?.should be_false
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be true if AD_FILTERING is in the list" do
|
52
|
+
@collection_for_enabled.stub(:components).and_return(@initial_components[1..-1]+[LucidWorks::Collection::AD_FILTERING])
|
53
|
+
@collection_for_enabled.filtering_enabled?.should be_true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "LucidWorks::Collection#components" do
|
58
|
+
it "should return a list of installed components" do
|
59
|
+
@collection.components.should be_a(Array)
|
60
|
+
@collection.components.sort.should == @initial_components.sort
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#filtering_settings' do
|
65
|
+
before do
|
66
|
+
@collection_for_settings = @server.collection('collection_for_acl_config_testing')
|
67
|
+
end
|
68
|
+
it "should return an empty hash for a new collection" do
|
69
|
+
@collection_for_settings.filtering_settings.should == {}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#compute_component_set' do
|
74
|
+
before do
|
75
|
+
@collection_for_component_set = @server.collection('collection_for_acl_config_testing')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should put ACL_FILTERING at the front if enabling" do
|
79
|
+
initial_components = @initial_components.clone
|
80
|
+
enabled = 'true'
|
81
|
+
@collection_for_component_set.stub(:components).and_return(initial_components)
|
82
|
+
initial_components.first.should_not == LucidWorks::Collection::AD_FILTERING
|
83
|
+
@collection_for_component_set.compute_component_set(enabled).first.should == LucidWorks::Collection::AD_FILTERING
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should remove ROLE_FILTERING if enabling" do
|
87
|
+
initial_components = @initial_components.clone
|
88
|
+
enabled = 'true'
|
89
|
+
@collection_for_component_set.stub(:components).and_return(initial_components)
|
90
|
+
initial_components.include?(LucidWorks::Collection::ROLE_FILTERING).should be_true
|
91
|
+
@collection_for_component_set.compute_component_set(enabled).include?(LucidWorks::Collection::ROLE_FILTERING).should be_false
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should put ROLE_FILTERING at the front if disabling" do
|
95
|
+
initial_components = @initial_components.clone
|
96
|
+
initial_components.delete(LucidWorks::Collection::ROLE_FILTERING)
|
97
|
+
initial_components.unshift(LucidWorks::Collection::AD_FILTERING)
|
98
|
+
enabled = 'false'
|
99
|
+
@collection_for_component_set.stub(:components).and_return(initial_components)
|
100
|
+
initial_components.first.should == LucidWorks::Collection::AD_FILTERING
|
101
|
+
@collection_for_component_set.compute_component_set(enabled).first.should == LucidWorks::Collection::ROLE_FILTERING
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should remove ACL_FILTERING if disabling" do
|
105
|
+
initial_components = @initial_components.clone
|
106
|
+
enabled = 'false'
|
107
|
+
initial_components.delete(LucidWorks::Collection::ROLE_FILTERING)
|
108
|
+
initial_components.unshift(LucidWorks::Collection::AD_FILTERING)
|
109
|
+
@collection_for_component_set.stub(:components).and_return(initial_components)
|
110
|
+
initial_components.include?(LucidWorks::Collection::AD_FILTERING).should be_true
|
111
|
+
@collection_for_component_set.compute_component_set(enabled).include?(LucidWorks::Collection::AD_FILTERING).should be_false
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe '#configure_filtering' do
|
116
|
+
before :all do
|
117
|
+
@collection_for_configure = @server.collection('collection_for_acl_config_testing')
|
118
|
+
@settings = {
|
119
|
+
"java.naming.provider.url"=>"ldap://184.72.197.18/",
|
120
|
+
"java.naming.security.principal"=>"wma@corp.lucid.com",
|
121
|
+
"java.naming.security.credentials"=>"secret",
|
122
|
+
}
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should merge in the static settings and store all of the settings" do
|
126
|
+
final_settings = {
|
127
|
+
"provider.class"=>"com.lucid.security.ad.ADACLTagProvider",
|
128
|
+
"filterer.class"=>"com.lucid.security.WindowsACLQueryFilterer",
|
129
|
+
"provider.config"=>
|
130
|
+
{
|
131
|
+
"java.naming.provider.url"=>"ldap://184.72.197.18/",
|
132
|
+
"java.naming.security.principal"=>"wma@corp.lucid.com"
|
133
|
+
},
|
134
|
+
"filterer.config"=>{}
|
135
|
+
}
|
136
|
+
|
137
|
+
@collection_for_configure.filtering_settings.should be_blank
|
138
|
+
@collection_for_configure.configure_filtering(:config => @settings, :enabled => 'true')
|
139
|
+
@collection_for_configure.filtering_settings.should == final_settings
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should work again after the settings have been saved once and a PUT is now required" do
|
143
|
+
@collection_for_configure.filtering_settings.should_not be_blank
|
144
|
+
lambda {
|
145
|
+
@collection_for_configure.configure_filtering(:config => @settings, :enabled => 'true')
|
146
|
+
}.should_not raise_error
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should add ldap:// to url if protocol not specified" do
|
150
|
+
settings = @settings.clone
|
151
|
+
settings['java.naming.provider.url'] = 'foo.com'
|
152
|
+
@collection_for_configure.configure_filtering(:config => settings, :enabled => 'true')
|
153
|
+
@collection_for_configure.filtering_settings['provider.config']['java.naming.provider.url'].should == 'ldap://foo.com'
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should not add ldap:// to url if blank" do
|
157
|
+
settings = @settings.clone
|
158
|
+
settings['java.naming.provider.url'] = ''
|
159
|
+
lambda {
|
160
|
+
@collection_for_configure.configure_filtering(:config => settings, :enabled => 'true')
|
161
|
+
}.should raise_error {|e| e.messages.keys.first.should =~ /url\.no_url/} # because url is required
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -17,8 +17,13 @@ require 'spec_helper'
|
|
17
17
|
describe LucidWorks::Activity do
|
18
18
|
context "Functionality shared with Datasource scheduling" do
|
19
19
|
before :all do
|
20
|
+
@system_tz = ENV['TZ']
|
20
21
|
ENV['TZ'] = 'UTC'
|
21
22
|
end
|
23
|
+
|
24
|
+
after :all do
|
25
|
+
ENV['TZ'] = @system_tz
|
26
|
+
end
|
22
27
|
|
23
28
|
before do
|
24
29
|
@server = connect_to_live_server
|
@@ -278,7 +283,7 @@ describe LucidWorks::Activity do
|
|
278
283
|
context 'sub-time convenience accessors' do
|
279
284
|
describe '#hour' do
|
280
285
|
it 'should return the hour component of the time' do
|
281
|
-
@schedule.start_time = Time.
|
286
|
+
@schedule.start_time = Time.parse("2011-04-15 13:11:56")
|
282
287
|
@schedule.hour.should == 13
|
283
288
|
end
|
284
289
|
|
@@ -290,7 +295,7 @@ describe LucidWorks::Activity do
|
|
290
295
|
|
291
296
|
describe '#min' do
|
292
297
|
it 'should return the minute component of the time' do
|
293
|
-
@schedule.start_time = Time.
|
298
|
+
@schedule.start_time = Time.parse("2011-04-15 13:11:56")
|
294
299
|
@schedule.min.should == 11
|
295
300
|
end
|
296
301
|
|
@@ -302,7 +307,7 @@ describe LucidWorks::Activity do
|
|
302
307
|
|
303
308
|
describe '#day_of_week' do
|
304
309
|
it 'should return the week component of the time' do
|
305
|
-
@schedule.start_time = Time.
|
310
|
+
@schedule.start_time = Time.parse("2011-04-15 13:11:56")
|
306
311
|
@schedule.day_of_week.should == 4
|
307
312
|
end
|
308
313
|
|
@@ -321,7 +326,7 @@ describe LucidWorks::Activity do
|
|
321
326
|
end
|
322
327
|
|
323
328
|
it 'should be true if period is standard but start_time is > 1 period from now' do
|
324
|
-
some_random_time = Time.
|
329
|
+
some_random_time = Time.parse("2011-04-15 13:11:56")
|
325
330
|
more_than_a_day_later = some_random_time.advance(:days => 2)
|
326
331
|
|
327
332
|
Timecop.freeze some_random_time do
|
@@ -347,7 +352,7 @@ describe LucidWorks::Activity do
|
|
347
352
|
end
|
348
353
|
|
349
354
|
it 'should be false if period is standard and start time is > 1 period in the past' do
|
350
|
-
some_random_time = Time.
|
355
|
+
some_random_time = Time.parse("2011-04-15 13:11:56")
|
351
356
|
more_than_a_day_ago = some_random_time.advance(:days => -2)
|
352
357
|
Timecop.freeze some_random_time do
|
353
358
|
@schedule.frequency = 'daily'
|
@@ -22,8 +22,6 @@ describe "LucidWorks::Collection#prime_activities" do
|
|
22
22
|
it "should produce activities of the appropriate type" do
|
23
23
|
@collection.optimize_activity.should be_a LucidWorks::Activity
|
24
24
|
@collection.optimize_activity.type.should == 'optimize'
|
25
|
-
@collection.spelling_activity.should be_a LucidWorks::Activity
|
26
|
-
@collection.spelling_activity.type.should == 'spelling'
|
27
25
|
@collection.click_activity.should be_a LucidWorks::Activity
|
28
26
|
@collection.click_activity.type.should == 'click'
|
29
27
|
@collection.autocomplete_activity.should be_a LucidWorks::Activity
|
@@ -36,14 +34,14 @@ describe "LucidWorks::Collection#prime_activities" do
|
|
36
34
|
context "there are already some activities" do
|
37
35
|
before :all do
|
38
36
|
@collection = @server.create_collection(:name => 'collection_with_no_activities_2', :parent => @server)
|
39
|
-
|
40
|
-
|
37
|
+
optimize_activity = @collection.create_activity(:type => 'optimize', :start_time => 3600, :active => true)
|
38
|
+
optimize_activity.should be_a LucidWorks::Activity
|
41
39
|
end
|
42
40
|
|
43
41
|
it "should not create duplicates for existing types" do
|
44
42
|
lambda {
|
45
43
|
@collection.prime_activities
|
46
|
-
}.should change(@collection, :activities_count).by
|
44
|
+
}.should change(@collection, :activities_count).by (LucidWorks::Activity::TYPES.size - 1)
|
47
45
|
end
|
48
46
|
end
|
49
47
|
|
@@ -60,11 +58,9 @@ describe "LucidWorks::Collection#prime_activities" do
|
|
60
58
|
end
|
61
59
|
|
62
60
|
it "should have a virtual attribute for each activity type" do
|
63
|
-
@collection.activities!.count.should ==
|
61
|
+
@collection.activities!.count.should == LucidWorks::Activity::TYPES.size
|
64
62
|
@collection.optimize_activity.should be_a LucidWorks::Activity
|
65
63
|
@collection.optimize_activity.type.should == 'optimize'
|
66
|
-
@collection.spelling_activity.should be_a LucidWorks::Activity
|
67
|
-
@collection.spelling_activity.type.should == 'spelling'
|
68
64
|
@collection.click_activity.should be_a LucidWorks::Activity
|
69
65
|
@collection.click_activity.type.should == 'click'
|
70
66
|
@collection.autocomplete_activity.should be_a LucidWorks::Activity
|
@@ -116,7 +116,7 @@ describe LucidWorks::Collection do
|
|
116
116
|
)
|
117
117
|
activity.should be_persisted
|
118
118
|
activity = LucidWorks::Activity.create(
|
119
|
-
:type => '
|
119
|
+
:type => 'click',
|
120
120
|
:start_time => 8600,
|
121
121
|
:collection => @collection
|
122
122
|
)
|
@@ -155,7 +155,7 @@ describe LucidWorks::Collection do
|
|
155
155
|
LucidWorks::Activity.create(activity_params.merge(:parent => c))
|
156
156
|
c.activities.size.should == 1
|
157
157
|
c.prime_activities
|
158
|
-
c.activities.size.should ==
|
158
|
+
c.activities.size.should == LucidWorks::Activity::TYPES.size
|
159
159
|
end
|
160
160
|
|
161
161
|
context "with a new collection with no activities" do
|
@@ -167,11 +167,11 @@ describe LucidWorks::Collection do
|
|
167
167
|
|
168
168
|
@collection2.activities.size.should == 0
|
169
169
|
@collection2.prime_activities
|
170
|
-
@collection2.activities.size.should ==
|
170
|
+
@collection2.activities.size.should == LucidWorks::Activity::TYPES.size
|
171
171
|
end
|
172
172
|
|
173
173
|
it "should ensure at least one of each activity" do
|
174
|
-
%w(optimize
|
174
|
+
%w(optimize click autocomplete).each do |type|
|
175
175
|
@collection2.activities.find_all{|a| a.type == type}.size.should == 1
|
176
176
|
end
|
177
177
|
end
|
@@ -394,10 +394,9 @@ describe LucidWorks::Collection do
|
|
394
394
|
end
|
395
395
|
|
396
396
|
it "should pass thru pagination variables" do
|
397
|
-
@mock_rsolr_client.should_receive(:find)
|
398
|
-
|
399
|
-
|
400
|
-
.and_return({})
|
397
|
+
@mock_rsolr_client.should_receive(:find).
|
398
|
+
with('/fake_access_path/solr/collection_to_search/select', :q => 'fake_query', :wt => :ruby, :page => 33, :per_page => 44).
|
399
|
+
and_return({})
|
401
400
|
|
402
401
|
@collection.search(:q => 'fake_query', :wt => :ruby, :page => 33, :per_page => 44)
|
403
402
|
end
|
@@ -408,10 +407,9 @@ describe LucidWorks::Collection do
|
|
408
407
|
end
|
409
408
|
|
410
409
|
it "should call RSolr.get to perform the search" do
|
411
|
-
@mock_rsolr_client.should_receive(:find)
|
412
|
-
|
413
|
-
|
414
|
-
.and_return(@good_xml)
|
410
|
+
@mock_rsolr_client.should_receive(:find).
|
411
|
+
with('/fake_access_path/solr/collection_to_search/select', :q => 'fake_query', :wt => :xml, :page => 1, :per_page => 10).
|
412
|
+
and_return(@good_xml)
|
415
413
|
|
416
414
|
@collection.search(:q => 'fake_query', :wt => :xml)
|
417
415
|
end
|
@@ -15,9 +15,14 @@ require 'spec_helper'
|
|
15
15
|
|
16
16
|
describe LucidWorks::Datasource::Schedule do
|
17
17
|
before :all do
|
18
|
+
@system_tz = ENV['TZ']
|
18
19
|
ENV['TZ'] = 'UTC'
|
19
20
|
end
|
20
21
|
|
22
|
+
after :all do
|
23
|
+
ENV['TZ'] = @system_tz
|
24
|
+
end
|
25
|
+
|
21
26
|
before do
|
22
27
|
@server = connect_to_live_server
|
23
28
|
@schedule = LucidWorks::Datasource::Schedule.new(:parent => @server)
|
@@ -271,7 +276,7 @@ describe LucidWorks::Datasource::Schedule do
|
|
271
276
|
context 'sub-time convenience accessors' do
|
272
277
|
describe '#hour' do
|
273
278
|
it 'should return the hour component of the time' do
|
274
|
-
@schedule.start_time = Time.
|
279
|
+
@schedule.start_time = Time.parse("2011-04-15 13:11:56")
|
275
280
|
@schedule.hour.should == 13
|
276
281
|
end
|
277
282
|
|
@@ -283,7 +288,7 @@ describe LucidWorks::Datasource::Schedule do
|
|
283
288
|
|
284
289
|
describe '#min' do
|
285
290
|
it 'should return the minute component of the time' do
|
286
|
-
@schedule.start_time = Time.
|
291
|
+
@schedule.start_time = Time.parse("2011-04-15 13:11:56")
|
287
292
|
@schedule.min.should == 11
|
288
293
|
end
|
289
294
|
|
@@ -295,7 +300,7 @@ describe LucidWorks::Datasource::Schedule do
|
|
295
300
|
|
296
301
|
describe '#day_of_week' do
|
297
302
|
it 'should return the week component of the time' do
|
298
|
-
@schedule.start_time = Time.
|
303
|
+
@schedule.start_time = Time.parse("2011-04-15 13:11:56")
|
299
304
|
@schedule.day_of_week.should == 4
|
300
305
|
end
|
301
306
|
|
@@ -314,7 +319,7 @@ describe LucidWorks::Datasource::Schedule do
|
|
314
319
|
end
|
315
320
|
|
316
321
|
it 'should be true if period is standard but start_time is > 1 period from now' do
|
317
|
-
some_random_time = Time.
|
322
|
+
some_random_time = Time.parse("2011-04-15 13:11:56")
|
318
323
|
more_than_a_day_later = some_random_time.advance(:days => 2)
|
319
324
|
|
320
325
|
Timecop.freeze some_random_time do
|
@@ -340,7 +345,7 @@ describe LucidWorks::Datasource::Schedule do
|
|
340
345
|
end
|
341
346
|
|
342
347
|
it 'should be false if period is standard and start time is > 1 period in the past' do
|
343
|
-
some_random_time = Time.
|
348
|
+
some_random_time = Time.parse("2011-04-15 13:11:56")
|
344
349
|
more_than_a_day_ago = some_random_time.advance(:days => -2)
|
345
350
|
Timecop.freeze some_random_time do
|
346
351
|
@schedule.frequency = 'daily'
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'time'
|
2
3
|
|
3
4
|
describe Time do
|
4
5
|
describe ".iso8601" do
|
@@ -16,7 +17,9 @@ describe Time do
|
|
16
17
|
|
17
18
|
context "when time is non-UTC" do
|
18
19
|
it "should generate a time with a 4 digit timezone" do
|
19
|
-
|
20
|
+
# In Ruby 1.8.7, the Time class only lets you use your local (system) time, or UTC.
|
21
|
+
# Use the Time stdlib's parse method to pass a time zone.
|
22
|
+
Time.parse("2011-04-15 13:11:56 -07:00").iso8601.should == "2011-04-15T13:11:56-0700"
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
@@ -10,6 +10,8 @@ describe LucidWorks::Schema do
|
|
10
10
|
attributes :anint, :baz, :type => :integer
|
11
11
|
attribute :nullstring, :string, :nil_when_blank => true
|
12
12
|
attribute :time, :iso8601
|
13
|
+
attribute :space_list, :list
|
14
|
+
attribute :comma_list, :list, :separator => ','
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
@@ -169,6 +171,35 @@ describe LucidWorks::Schema do
|
|
169
171
|
@model.time.should == 12345678
|
170
172
|
end
|
171
173
|
end
|
174
|
+
|
175
|
+
context "for a list attribute with the default separator" do
|
176
|
+
it "setter should just store an array" do
|
177
|
+
@model.space_list = ['one', 'two']
|
178
|
+
@model.attributes[:space_list].should == ['one', 'two']
|
179
|
+
end
|
180
|
+
|
181
|
+
it "setter should convert a string to an array" do
|
182
|
+
@model.space_list = "three four"
|
183
|
+
@model.attributes[:space_list].should == ['three', 'four']
|
184
|
+
end
|
185
|
+
|
186
|
+
it "getter should convert array to space separated string" do
|
187
|
+
@model.attributes[:space_list] = ['seven', 'eight']
|
188
|
+
@model.space_list.should == 'seven eight'
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
context "for a list attribute with a , separator" do
|
193
|
+
it "setter should convert a string to an array" do
|
194
|
+
@model.comma_list = "five,six"
|
195
|
+
@model.attributes[:comma_list].should == ['five', 'six']
|
196
|
+
end
|
197
|
+
|
198
|
+
it "getter should convert array to , separated string" do
|
199
|
+
@model.attributes[:comma_list] = ['nine', 'ten']
|
200
|
+
@model.comma_list.should == 'nine,ten'
|
201
|
+
end
|
202
|
+
end
|
172
203
|
end
|
173
204
|
|
174
205
|
describe "#has_attribute?" do
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: lucid_works
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.7.
|
5
|
+
version: 0.7.9
|
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-
|
13
|
+
date: 2011-09-02 00:00:00 -04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- .rspec
|
106
106
|
- .rvmrc
|
107
107
|
- Gemfile
|
108
|
+
- Gemfile.lock
|
108
109
|
- LICENSE
|
109
110
|
- NOTICE
|
110
111
|
- README.rdoc
|
@@ -153,6 +154,7 @@ files:
|
|
153
154
|
- lib/lucid_works/schema/custom_attribute.rb
|
154
155
|
- lib/lucid_works/schema/integer_attribute.rb
|
155
156
|
- lib/lucid_works/schema/iso8601_attribute.rb
|
157
|
+
- lib/lucid_works/schema/list_attribute.rb
|
156
158
|
- lib/lucid_works/schema/string_attribute.rb
|
157
159
|
- lib/lucid_works/server.rb
|
158
160
|
- lib/lucid_works/simple_naming.rb
|
@@ -171,6 +173,7 @@ files:
|
|
171
173
|
- spec/lib/lucid_works/associations/has_one_spec.rb
|
172
174
|
- spec/lib/lucid_works/associations_spec.rb
|
173
175
|
- spec/lib/lucid_works/base_spec.rb
|
176
|
+
- spec/lib/lucid_works/collection/acl_config_spec.rb
|
174
177
|
- spec/lib/lucid_works/collection/activity/history_spec.rb
|
175
178
|
- spec/lib/lucid_works/collection/activity/status_spec.rb
|
176
179
|
- spec/lib/lucid_works/collection/activity_spec.rb
|
@@ -231,6 +234,7 @@ test_files:
|
|
231
234
|
- spec/lib/lucid_works/associations/has_one_spec.rb
|
232
235
|
- spec/lib/lucid_works/associations_spec.rb
|
233
236
|
- spec/lib/lucid_works/base_spec.rb
|
237
|
+
- spec/lib/lucid_works/collection/acl_config_spec.rb
|
234
238
|
- spec/lib/lucid_works/collection/activity/history_spec.rb
|
235
239
|
- spec/lib/lucid_works/collection/activity/status_spec.rb
|
236
240
|
- spec/lib/lucid_works/collection/activity_spec.rb
|