lucid_works 0.6.29 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -1
- data/Rakefile +25 -0
- data/config/locales/en.yml +171 -83
- data/lib/lucid_works/associations/has_many.rb +2 -2
- data/lib/lucid_works/associations/has_one.rb +1 -1
- data/lib/lucid_works/associations/proxy.rb +3 -3
- data/lib/lucid_works/associations.rb +2 -2
- data/lib/lucid_works/base.rb +21 -48
- data/lib/lucid_works/collection/click.rb +17 -0
- data/lib/lucid_works/collection/settings.rb +0 -1
- data/lib/lucid_works/collection.rb +22 -3
- data/lib/lucid_works/crawler.rb +13 -0
- data/lib/lucid_works/datasource/history.rb +5 -9
- data/lib/lucid_works/datasource/status.rb +8 -11
- data/lib/lucid_works/datasource.rb +67 -32
- data/lib/lucid_works/datasource_property.rb +18 -0
- data/lib/lucid_works/datasource_type.rb +23 -0
- data/lib/lucid_works/exceptions.rb +1 -0
- data/lib/lucid_works/field.rb +43 -2
- data/lib/lucid_works/fieldtype.rb +28 -0
- data/lib/lucid_works/gem_version.rb +1 -1
- data/lib/lucid_works/jdbcdriver.rb +30 -0
- data/lib/lucid_works/role.rb +59 -0
- data/lib/lucid_works/schema/attribute.rb +86 -0
- data/lib/lucid_works/schema/boolean_attribute.rb +34 -0
- data/lib/lucid_works/schema/custom_attribute.rb +15 -0
- data/lib/lucid_works/schema/integer_attribute.rb +32 -0
- data/lib/lucid_works/schema/iso8601_attribute.rb +31 -0
- data/lib/lucid_works/schema/string_attribute.rb +22 -0
- data/lib/lucid_works/schema.rb +66 -97
- data/lib/lucid_works/server.rb +14 -0
- data/lib/lucid_works.rb +12 -0
- data/spec/fixtures/fake_file_ds_to_be_deleted/.gitkeep +0 -0
- data/spec/fixtures/fake_file_ds_to_be_updated/.gitkeep +0 -0
- data/spec/fixtures/fake_file_ds_to_get_index_of/.gitkeep +0 -0
- data/spec/fixtures/fake_file_ds_to_get_schedule_of/.gitkeep +0 -0
- data/spec/fixtures/fake_file_ds_to_get_status_of/.gitkeep +0 -0
- data/spec/fixtures/fake_file_ds_to_mess_with_job_of/.gitkeep +0 -0
- data/spec/fixtures/fake_file_ds_to_test_progress/.gitkeep +0 -0
- data/spec/lib/lucid_works/associations/has_many_spec.rb +4 -3
- data/spec/lib/lucid_works/associations/has_one_spec.rb +4 -3
- data/spec/lib/lucid_works/base_spec.rb +110 -62
- data/spec/lib/lucid_works/collection/activity/history_spec.rb +1 -1
- data/spec/lib/lucid_works/collection_spec.rb +17 -17
- data/spec/lib/lucid_works/datasource/history_spec.rb +4 -4
- data/spec/lib/lucid_works/datasource/status_spec.rb +7 -7
- data/spec/lib/lucid_works/datasource_spec.rb +9 -8
- data/spec/lib/lucid_works/field_spec.rb +101 -2
- data/spec/lib/lucid_works/fieldtype_spec.rb +156 -0
- data/spec/lib/lucid_works/schema/attribute_spec.rb +136 -0
- data/spec/lib/lucid_works/schema_spec.rb +53 -27
- data/spec/spec_helper.rb +3 -50
- data/spec/support/active_model_lint.rb +21 -0
- data/spec/support/lucid_works.rb +52 -0
- metadata +36 -2
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm use 1.9.2-p180@lucidworks
|
1
|
+
rvm use 1.9.2-p180@lucidworks --create
|
data/Rakefile
CHANGED
@@ -11,3 +11,28 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
11
11
|
rdoc.rdoc_files.include('README.rdoc')
|
12
12
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
13
13
|
end
|
14
|
+
|
15
|
+
class Hash
|
16
|
+
def recursively_sort
|
17
|
+
raise "Hash#recursively_sort requires Ruby 1.9" if RUBY_VERSION < "1.9"
|
18
|
+
sorted_array = self.sort
|
19
|
+
sorted_array.map! do |kv|
|
20
|
+
k, v = kv
|
21
|
+
v = v.recursively_sort if v.is_a?(Hash)
|
22
|
+
[k,v]
|
23
|
+
end
|
24
|
+
Hash[sorted_array]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
namespace :l10n do
|
29
|
+
|
30
|
+
desc "Sort the EN locale file"
|
31
|
+
task :sort do
|
32
|
+
en_path = File.join(File.dirname(__FILE__), 'config', 'locales', "en.yml")
|
33
|
+
translations = YAML.load_file(en_path)
|
34
|
+
File.open(en_path, 'w') do |f|
|
35
|
+
YAML.dump translations.recursively_sort, f
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/config/locales/en.yml
CHANGED
@@ -1,51 +1,13 @@
|
|
1
1
|
---
|
2
2
|
en:
|
3
3
|
activemodel:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
other: Activities
|
9
|
-
type:
|
10
|
-
autocomplete: Generate autocomplete index
|
11
|
-
click: Process click logs
|
12
|
-
optimize: Optimize index
|
13
|
-
spelling: Generate spellcheck index
|
14
|
-
collection:
|
15
|
-
one: Collection
|
16
|
-
other: Collections
|
17
|
-
settings:
|
18
|
-
one: Settings
|
19
|
-
other: Settings
|
20
|
-
de_duplication:
|
21
|
-
'off': 'Off'
|
22
|
-
overwrite: Overwrite
|
23
|
-
tag: Tag
|
24
|
-
datasource:
|
25
|
-
one: Data source
|
26
|
-
other: Data sources
|
27
|
-
status:
|
28
|
-
crawlState:
|
29
|
-
ABORTED: Aborted
|
30
|
-
ABORTING: Aborting
|
31
|
-
EXCEPTION: Exception
|
32
|
-
FINISHED: Finished
|
33
|
-
IDLE: Idle
|
34
|
-
RUNNING: Running
|
35
|
-
STOPPED: Stopped
|
36
|
-
STOPPING: Stopping
|
37
|
-
type:
|
38
|
-
external: External
|
39
|
-
file: Local Filesystem
|
40
|
-
jdbc: Database
|
41
|
-
lucidworkslogs: LucidWorks Solr Logs
|
42
|
-
sharepoint: Sharepoint
|
43
|
-
solrxml: Solr XML
|
44
|
-
web: Web Site
|
4
|
+
#
|
5
|
+
# This section is standard ActiveModel
|
6
|
+
# and is used by human_attribute_name
|
7
|
+
#
|
45
8
|
attributes:
|
46
9
|
lucid_works:
|
47
10
|
collection:
|
48
|
-
name: Name
|
49
11
|
info:
|
50
12
|
collection_name: Collection name
|
51
13
|
data_dir: Data directory
|
@@ -65,15 +27,16 @@ en:
|
|
65
27
|
root_dir: Root directory
|
66
28
|
total_disk_bytes: Total disk bytes
|
67
29
|
total_disk_space: Total disk space
|
30
|
+
name: Name
|
68
31
|
settings:
|
69
32
|
auto_complete: Auto complete
|
70
|
-
boosts: Boosts
|
71
33
|
boost_recent: Boost recent
|
34
|
+
boosts: Boosts
|
72
35
|
click_boost_data: Click boost data
|
73
36
|
click_boost_field: Click boost field
|
74
37
|
click_enabled: Click scoring enabled
|
75
|
-
default_sort: Default sort
|
76
38
|
de_duplication: De-duplication
|
39
|
+
default_sort: Default sort
|
77
40
|
display_facets: Display facets
|
78
41
|
elevations: elevations
|
79
42
|
index_time_stopwords: Exclude stop words from index
|
@@ -91,47 +54,172 @@ en:
|
|
91
54
|
unsupervised_feedback_emphasis: Unsupervised feedback emphasis
|
92
55
|
update_server_list: Update server list
|
93
56
|
datasource:
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
deleteAfter: Delete logs after
|
57
|
+
aliases: Site Aliases Mappings
|
58
|
+
auth: Authentication credentials
|
59
|
+
authorization: Authorization
|
98
60
|
bounds: Constrain to
|
99
|
-
|
61
|
+
commit_on_finish: Commit when crawl finishes
|
62
|
+
commit_within: Commit within
|
63
|
+
commit_within_min: Commit within (minutes)
|
64
|
+
connector_type: Connector Type
|
65
|
+
deleteAfter: Delete logs after
|
66
|
+
domain: Domain
|
67
|
+
excluded_urls: Excluded URLs
|
68
|
+
fail_unsupported_file_types: Fail unsupported file types
|
100
69
|
history:
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
70
|
+
crawl_started: Started
|
71
|
+
crawl_state: State
|
72
|
+
crawl_stopped: Stopped
|
73
|
+
num_deleted: Deleted
|
74
|
+
num_failed: Failed
|
75
|
+
num_new: New
|
76
|
+
num_unchanged: Unchanged
|
77
|
+
num_updated: Updated
|
78
|
+
host: Domain Name
|
79
|
+
ignore_robots: Ignore robots.txt
|
80
|
+
include_datasource_metadata: Include data source metadata
|
81
|
+
included_urls: Included URLs
|
82
|
+
kdcserver: Kerberos KDC server
|
83
|
+
log_extra_detail: Log extra detail
|
84
|
+
max_bytes: Skip files larger than (bytes)
|
85
|
+
my_site_base_url: MySite URL
|
86
|
+
no_duplicates: Suppress duplicates
|
87
|
+
password: Password
|
88
|
+
proxy_host: Proxy host
|
89
|
+
proxy_password: Proxy password
|
90
|
+
proxy_port: Proxy port
|
91
|
+
proxy_username: Proxy user name
|
92
|
+
realm: Realm
|
93
|
+
sharepoint_url: SharePoint URL
|
109
94
|
status:
|
110
|
-
|
111
|
-
|
112
|
-
|
95
|
+
crawl_started: Last crawl started
|
96
|
+
crawl_state: State
|
97
|
+
crawl_stopped: Last crawl stopped
|
113
98
|
doc_count: Documents indexed
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
99
|
+
job_id: Job ID
|
100
|
+
num_deleted: Deleted docs
|
101
|
+
num_failed: Failed docs
|
102
|
+
num_new: New docs
|
103
|
+
num_total: Total docs
|
104
|
+
num_unchanged: Unchanged docs
|
105
|
+
num_updated: Updated docs
|
106
|
+
type: Type
|
107
|
+
url: URL
|
108
|
+
use_sp_search_visibility: Use SP Search Visibility
|
124
109
|
username: Username
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
110
|
+
warn_unknown_mime_types: Log warnings for unknown mime types
|
111
|
+
windowsdomain: Windows domain
|
112
|
+
field:
|
113
|
+
copy_fields: Copy this field to fields
|
114
|
+
default_boost: Default boost
|
115
|
+
default_value: Default value
|
116
|
+
dynamic_base: Dynamically generated from
|
117
|
+
editable: Editable
|
118
|
+
facet: Facet
|
119
|
+
field_type: Field type
|
120
|
+
highlight: Highlight
|
121
|
+
include_in_results: Include in results
|
122
|
+
index_for_autocomplete: Index for autocomplete
|
123
|
+
index_for_spellcheck: Index for spell checking
|
124
|
+
index_term_freq_and_pos: Index term frequencies and positions
|
125
|
+
indexed: Indexed
|
126
|
+
multi_valued: Multi-valued
|
127
|
+
name: Name
|
128
|
+
omit_positions: Omit positions
|
129
|
+
omit_tf: Omit term frequencies and positions
|
130
|
+
query_time_stopword_handling: Enable stopword handling
|
131
|
+
search_by_default: Search by default
|
132
|
+
short_field_boost: Short field boost
|
133
|
+
stored: Stored
|
134
|
+
synonym_expasion: Enable synonym expansion
|
135
|
+
term_vectors: Term vectors
|
136
|
+
use_for_deduplication: Use for de-duplication
|
137
|
+
use_in_find_similar: Use in 'find similar'
|
138
|
+
fieldtype:
|
139
|
+
name: Name
|
140
|
+
_class: Class
|
141
|
+
#
|
142
|
+
# This section containts two things:
|
143
|
+
# Model names wich support ActiveModel <model>.model_name.human
|
144
|
+
# Translations for attribute values. This is our own invention,
|
145
|
+
# accessed with LucidWorks::Base#human_attribute_value(attribute)
|
146
|
+
# or from class LucidWorks::Base.human_attribute_value(attribute, value)
|
147
|
+
#
|
148
|
+
models:
|
149
|
+
lucid_works:
|
150
|
+
activity:
|
151
|
+
one: Activity
|
152
|
+
other: Activities
|
153
|
+
type:
|
154
|
+
autocomplete: Generate autocomplete index
|
155
|
+
click: Process click logs
|
156
|
+
optimize: Optimize index
|
157
|
+
spelling: Generate spellcheck index
|
158
|
+
collection:
|
159
|
+
one: Collection
|
160
|
+
other: Collections
|
161
|
+
settings:
|
162
|
+
de_duplication:
|
163
|
+
'off': 'Off'
|
164
|
+
overwrite: Overwrite
|
165
|
+
tag: Tag
|
166
|
+
one: Settings
|
167
|
+
other: Settings
|
168
|
+
datasource:
|
169
|
+
one: Data source
|
170
|
+
other: Data sources
|
171
|
+
status:
|
172
|
+
crawl_state:
|
173
|
+
ABORTED: Aborted
|
174
|
+
ABORTING: Aborting
|
175
|
+
EXCEPTION: Exception
|
176
|
+
FINISHED: Finished
|
177
|
+
IDLE: Idle
|
178
|
+
RUNNING: Running
|
179
|
+
STOPPED: Stopped
|
180
|
+
STOPPING: Stopping
|
181
|
+
type:
|
182
|
+
external: External
|
183
|
+
file: File system
|
184
|
+
ftp: FTP
|
185
|
+
hdfs: Hadoop file system
|
186
|
+
jdbc: Database
|
187
|
+
kfs: Kosmos file system
|
188
|
+
lucidworkslogs: LucidWorks Solr Logs
|
189
|
+
s3: Hadoop S3 Block FS
|
190
|
+
s3n: Hadoop S3 Native FS
|
191
|
+
sharepoint: SharePoint
|
192
|
+
smb: Windows Share
|
193
|
+
solrxml: Solr XML
|
194
|
+
web: Web site
|
195
|
+
field:
|
196
|
+
one: Field
|
197
|
+
other: Fields
|
198
|
+
index_term_freq_and_pos:
|
199
|
+
document_only: none
|
200
|
+
document_termfreq: term frequencies
|
201
|
+
document_termfreq_termpos: term frequencies and positions
|
202
|
+
fieldtype:
|
203
|
+
one: Field type
|
204
|
+
other: Field types
|
205
|
+
jdbcdriver:
|
206
|
+
one: JDBC driver
|
207
|
+
other: JDBC drivers
|
208
|
+
#
|
209
|
+
# These hints appear next to fields in SimpleForm forms
|
210
|
+
#
|
211
|
+
simple_form:
|
212
|
+
hints:
|
213
|
+
collection:
|
214
|
+
name: ! 'Collection names may use the characters: A-Z, a-z, 0-9, dash and
|
215
|
+
underscore'
|
216
|
+
datasource:
|
217
|
+
crawl_depth: Set to -1 to crawl with no depth limit.
|
218
|
+
exclude_paths: A list of regular expressions, one per line, e.g. .*\.pdf will
|
219
|
+
ignore filenames ending in .pdf.
|
220
|
+
include_paths: A list of regular expressions, one per line, e.g. http://example\.com/.*
|
221
|
+
will match everything within the site only.
|
222
|
+
max_bytes: Default = 10 MiB. Set to -1 to indicate no file size limit.
|
223
|
+
url: e.g. http://cnn.com. Please include protocol (http/https).
|
224
|
+
synonym:
|
225
|
+
mapping: ! 'Example: car, automobile, auto'
|
@@ -18,7 +18,7 @@ module LucidWorks
|
|
18
18
|
if target.save
|
19
19
|
target
|
20
20
|
else
|
21
|
-
raise target.errors.full_messages
|
21
|
+
raise LucidWorks::RecordInvalid.new(target.errors.full_messages)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -40,7 +40,7 @@ module LucidWorks
|
|
40
40
|
#
|
41
41
|
# Interestingly for us the cost difference is marginal between the two forms of
|
42
42
|
# the call. Should we just grab all of them and return the one they want?
|
43
|
-
# Probably not. Not
|
43
|
+
# Probably not. Not very elegant and there is some cost to creating models
|
44
44
|
# on our end.
|
45
45
|
#
|
46
46
|
# Okay for now we will just not cache .find()
|
@@ -25,9 +25,9 @@ module LucidWorks
|
|
25
25
|
!!@target
|
26
26
|
end
|
27
27
|
|
28
|
-
# Can targets be retrieved for all owners
|
29
|
-
def
|
30
|
-
@options[:
|
28
|
+
# Can targets be retrieved for all owners of this type, in one step using owner/all/target
|
29
|
+
def retrieveable_en_masse?
|
30
|
+
@options[:retrieveable_en_masse]
|
31
31
|
end
|
32
32
|
|
33
33
|
def reload!
|
@@ -113,7 +113,7 @@ module LucidWorks
|
|
113
113
|
|
114
114
|
class_eval <<-EOF, __FILE__, __LINE__ + 1
|
115
115
|
def #{resource}
|
116
|
-
@#{resource}_association ||= Associations::HasOne.new(self, #{resource_class_name}, #{options.
|
116
|
+
@#{resource}_association ||= Associations::HasOne.new(self, #{resource_class_name}, #{options.inspect})
|
117
117
|
end
|
118
118
|
|
119
119
|
def #{resource}!
|
@@ -137,7 +137,7 @@ module LucidWorks
|
|
137
137
|
|
138
138
|
class_eval <<-EOF, __FILE__, __LINE__ + 1
|
139
139
|
def #{resources}(options={})
|
140
|
-
@#{resources}_association ||= Associations::HasMany.new(self, #{resource_class_name}, #{options.
|
140
|
+
@#{resources}_association ||= Associations::HasMany.new(self, #{resource_class_name}, #{options.inspect})
|
141
141
|
@#{resources}_association.remember_find_options(options) unless options.empty?
|
142
142
|
@#{resources}_association
|
143
143
|
end
|
data/lib/lucid_works/base.rb
CHANGED
@@ -45,8 +45,6 @@ module LucidWorks
|
|
45
45
|
define_model_callbacks :save, :only => [:before, :after]
|
46
46
|
|
47
47
|
class << self
|
48
|
-
include ActionView::Helpers::NumberHelper rescue nil
|
49
|
-
|
50
48
|
attr_accessor :collection_name # :nodoc:
|
51
49
|
attr_accessor_with_default :singleton, false
|
52
50
|
|
@@ -66,7 +64,7 @@ module LucidWorks
|
|
66
64
|
# end
|
67
65
|
|
68
66
|
def schema(&block)
|
69
|
-
@schema ||= LucidWorks::Schema.new
|
67
|
+
@schema ||= LucidWorks::Schema.new(self)
|
70
68
|
if block_given?
|
71
69
|
@schema.instance_eval(&block)
|
72
70
|
@schema.create_accessors_for_attributes(self)
|
@@ -177,7 +175,7 @@ module LucidWorks
|
|
177
175
|
target_class = class_eval(association_info[:class_name]) # get scoping right
|
178
176
|
target_name = association_info[:class_name].underscore
|
179
177
|
|
180
|
-
if kind_of_find == :all && association_info[:
|
178
|
+
if kind_of_find == :all && association_info[:retrieveable_en_masse]
|
181
179
|
all_targets_path = "#{collection_url(parent)}/all/#{target_name}"
|
182
180
|
raw_response = ActiveSupport::Notifications.instrument("lucid_works.request") do |payload|
|
183
181
|
begin
|
@@ -205,9 +203,7 @@ module LucidWorks
|
|
205
203
|
# [{"history":[...history_models...],"id":372},{"history":[...history_models...],"id":371}]
|
206
204
|
JSON.parse(raw_response).each do |group_of_targets|
|
207
205
|
owner_id = group_of_targets['id']
|
208
|
-
|
209
|
-
# but one returns them as strings. There is no plan to fix this brokeness (FOCUS-2359).
|
210
|
-
owner = results_array.detect { |result| result.id == owner_id.to_i }
|
206
|
+
owner = results_array.detect { |result| result.id == owner_id }
|
211
207
|
targets = group_of_targets[target_name].collect do |target_attrs|
|
212
208
|
target_class.new(target_attrs.merge(:parent => owner, :persisted => true))
|
213
209
|
end
|
@@ -215,7 +211,7 @@ module LucidWorks
|
|
215
211
|
association_proxy.target = targets
|
216
212
|
end
|
217
213
|
end
|
218
|
-
else # kind_of_find != :all || !
|
214
|
+
else # kind_of_find != :all || !retrieveable_en_masse
|
219
215
|
results_array.each do |result|
|
220
216
|
result.send("#{association_name}!")
|
221
217
|
end
|
@@ -250,31 +246,14 @@ module LucidWorks
|
|
250
246
|
# If the attributes is listed in the schema as having :values =>, it will be translated.
|
251
247
|
|
252
248
|
def human_attribute_value(attribute, value)
|
253
|
-
|
254
|
-
l10n_scope = %w{activemodel models} + self.name.underscore.split('/') + [attribute]
|
255
|
-
return I18n.t(value, :scope => l10n_scope, :default => value)
|
256
|
-
end
|
257
|
-
|
258
|
-
case schema[attribute][:type]
|
259
|
-
when :boolean
|
260
|
-
value.to_yesno
|
261
|
-
when :integer
|
262
|
-
number_with_delimiter(value)
|
263
|
-
else
|
264
|
-
value.to_s
|
265
|
-
end
|
266
|
-
rescue
|
267
|
-
value.to_s
|
249
|
+
schema[attribute].human_value(value)
|
268
250
|
end
|
269
251
|
|
270
252
|
# For attributes listed in the schema as having :values, this will create an array-of-arrays
|
271
253
|
# suitable for use as options_for_select.
|
272
254
|
|
273
255
|
def to_select(attribute)
|
274
|
-
|
275
|
-
schema[attribute][:values].map do |value|
|
276
|
-
[human_attribute_value(attribute, value), value]
|
277
|
-
end
|
256
|
+
schema[attribute].to_select
|
278
257
|
end
|
279
258
|
|
280
259
|
def collection_name # :nodoc:
|
@@ -332,7 +311,7 @@ module LucidWorks
|
|
332
311
|
rescue RestClient::Conflict, # 409
|
333
312
|
RestClient::UnprocessableEntity, # 422
|
334
313
|
RestClient::InternalServerError => e # 500
|
335
|
-
payload[:
|
314
|
+
payload[:exception] = e
|
336
315
|
attach_errors_to_model(e.response)
|
337
316
|
false
|
338
317
|
rescue RestClient::Exception => exception
|
@@ -358,6 +337,10 @@ module LucidWorks
|
|
358
337
|
payload[:uri] = member_url
|
359
338
|
payload[:options] = options
|
360
339
|
payload[:repsonse] = RestClient.delete(member_url, options)
|
340
|
+
rescue RestClient::Conflict => e
|
341
|
+
payload[:exception] = e
|
342
|
+
attach_errors_to_model(e.response)
|
343
|
+
false
|
361
344
|
rescue RestClient::Exception => exception
|
362
345
|
# Tack on what we were doing when we got the exception, then send it on up
|
363
346
|
exception.message = "#{exception.message} while performing #{payload[:method]} #{payload[:uri]}"
|
@@ -409,6 +392,10 @@ module LucidWorks
|
|
409
392
|
|
410
393
|
private
|
411
394
|
|
395
|
+
def schema
|
396
|
+
self.class.schema
|
397
|
+
end
|
398
|
+
|
412
399
|
def singleton? # :nodoc:
|
413
400
|
self.class.singleton
|
414
401
|
end
|
@@ -418,20 +405,12 @@ module LucidWorks
|
|
418
405
|
end
|
419
406
|
|
420
407
|
def encode # :nodoc:
|
421
|
-
|
422
|
-
omit_attrs += self.class.schema.attrs_to_omit_during_update if persisted?
|
423
|
-
attrs_as_json = @attributes.inject({}) do |memo, kv|
|
408
|
+
attrs_as_json = @attributes.inject({}) do |encoded_attrs, kv|
|
424
409
|
attr, value = kv
|
425
|
-
unless
|
426
|
-
|
427
|
-
case self.class.schema[attr][:type]
|
428
|
-
when :iso8601
|
429
|
-
memo[attr] = value.iso8601 rescue value
|
430
|
-
else
|
431
|
-
memo[attr] = value
|
432
|
-
end
|
410
|
+
unless attr.to_s == 'id'
|
411
|
+
schema[attr].encode_and_insert(value, encoded_attrs, persisted?)
|
433
412
|
end
|
434
|
-
|
413
|
+
encoded_attrs
|
435
414
|
end
|
436
415
|
attrs_as_json.to_json
|
437
416
|
end
|
@@ -445,14 +424,8 @@ module LucidWorks
|
|
445
424
|
elsif self.class.respond_to?(:belongs_to_association_name) && attr.to_sym == self.class.belongs_to_association_name
|
446
425
|
next # Dont overwrite our connection to our parent
|
447
426
|
end
|
448
|
-
|
449
|
-
|
450
|
-
self.class.schema.add_attribute(self.class, attr, :string)
|
451
|
-
else
|
452
|
-
raise "unknown attribute: \"#{attr}\""
|
453
|
-
end
|
454
|
-
end
|
455
|
-
send "#{self.class.schema.sanitize_identifier(attr)}=", value
|
427
|
+
attribute = schema.find_or_create_attribute(attr)
|
428
|
+
send "#{attribute.name}=", value
|
456
429
|
end
|
457
430
|
end
|
458
431
|
|