naranya_ecm-sdk 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/naranya_ecm/behaviors/localizable.rb +27 -31
- data/lib/naranya_ecm/behaviors/mediable.rb +25 -0
- data/lib/naranya_ecm/behaviors/timestampable.rb +18 -15
- data/lib/naranya_ecm/cache/key.rb +32 -56
- data/lib/naranya_ecm/cache/methods.rb +50 -63
- data/lib/naranya_ecm/lifecycles/content_lifecycle.rb +39 -16
- data/lib/naranya_ecm/models/category.rb +11 -30
- data/lib/naranya_ecm/models/content.rb +73 -73
- data/lib/naranya_ecm/models/content_version.rb +50 -29
- data/lib/naranya_ecm/models/download_authorization.rb +22 -26
- data/lib/naranya_ecm/models/media_resource.rb +49 -15
- data/lib/naranya_ecm/rest/associations.rb +156 -0
- data/lib/naranya_ecm/rest/client.rb +4 -0
- data/lib/naranya_ecm/rest/errors.rb +53 -0
- data/lib/naranya_ecm/rest/finder_methods.rb +50 -0
- data/lib/naranya_ecm/rest/model.rb +215 -0
- data/lib/naranya_ecm/rest/persistence.rb +122 -0
- data/lib/naranya_ecm/rest/relation.rb +54 -0
- data/lib/naranya_ecm/search/hit.rb +19 -14
- data/lib/naranya_ecm/search/methods.rb +18 -20
- data/lib/naranya_ecm/search/query.rb +229 -230
- data/lib/naranya_ecm/search/results.rb +136 -139
- data/lib/naranya_ecm-sdk/version.rb +1 -1
- data/lib/naranya_ecm-sdk.rb +54 -13
- data/naranya_ecm-sdk.gemspec +1 -1
- data/spec/models/category_spec.rb +7 -2
- data/spec/models/content_spec.rb +11 -2
- data/spec/models/media_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/support/naranya_ecms_shared_specs.rb +0 -12
- metadata +15 -19
- data/lib/naranya_ecm/behaviors/resourceable.rb +0 -22
- data/lib/naranya_ecm/behaviors.rb +0 -10
- data/lib/naranya_ecm/cache.rb +0 -9
- data/lib/naranya_ecm/has_many_patch.rb +0 -105
- data/lib/naranya_ecm/lifecycles/lifecycleable.rb +0 -43
- data/lib/naranya_ecm/lifecycles/version_lifecycle.rb +0 -75
- data/lib/naranya_ecm/lifecycles.rb +0 -10
- data/lib/naranya_ecm/models/embedded_hash.rb +0 -10
- data/lib/naranya_ecm/models/embedded_localized_hash.rb +0 -38
- data/lib/naranya_ecm/models/lifecycle.rb +0 -34
- data/lib/naranya_ecm/models.rb +0 -15
- data/lib/naranya_ecm/search.rb +0 -14
@@ -1,170 +1,167 @@
|
|
1
|
-
|
2
|
-
module Search
|
3
|
-
class Results
|
4
|
-
|
5
|
-
DEFAULT_MATERIALIZER = Proc.new do |resource_class, hits|
|
6
|
-
|
7
|
-
# Extract the object ids for ActiveResource loading:
|
8
|
-
unloaded_resource_ids = hits.map(&:id)
|
9
|
-
|
10
|
-
materialized_elements = []
|
11
|
-
|
12
|
-
# Load from cache any matching element caching_key:
|
13
|
-
hits.each do |hit|
|
14
|
-
cached_element = resource_class.find_cached(resource_class.cache_key_for id: hit.id, timestamp: hit.updated_at)
|
15
|
-
if cached_element.present?
|
16
|
-
cached_element.merge_search_hit_data(hit)
|
17
|
-
materialized_elements << cached_element
|
18
|
-
unloaded_resource_ids.delete cached_element.id
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# Load from server all elements not in cache:
|
23
|
-
resource_class.find(:all, params: { id: unloaded_resource_ids }).each do |element|
|
24
|
-
hit = hits.detect { |hit| hit.id == element.id }
|
25
|
-
|
26
|
-
# Add the hit score and order to each element:
|
27
|
-
element.merge_search_hit_data(hit)
|
28
|
-
|
29
|
-
# Add it to the loaded_elements:
|
30
|
-
materialized_elements << element
|
31
|
-
end unless unloaded_resource_ids.empty?
|
32
|
-
|
33
|
-
materialized_elements
|
34
|
-
end
|
1
|
+
require 'naranya_ecm/rest/relation'
|
35
2
|
|
36
|
-
|
37
|
-
|
3
|
+
module NaranyaEcm::Search
|
4
|
+
class Results < NaranyaEcm::Rest::Relation
|
38
5
|
|
39
|
-
|
40
|
-
|
6
|
+
include HTTParty
|
7
|
+
base_uri NaranyaEcm.options[:site]
|
41
8
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
9
|
+
DEFAULT_MATERIALIZER = Proc.new do |search_results|
|
10
|
+
|
11
|
+
# Duplicate the hits array - we'll replace each element with the
|
12
|
+
# resource:
|
13
|
+
result_elements = search_results.hits.dup
|
14
|
+
|
15
|
+
# Load from cache any matching element caching_key:
|
16
|
+
result_elements.each_index do |index|
|
17
|
+
hit_data = result_elements[index].dup
|
18
|
+
fetched_data = result_elements[index].cache_key.read
|
19
|
+
if fetched_data.present?
|
20
|
+
puts "===== Cache READ: '#{result_elements[index].cache_key}'"
|
21
|
+
result_elements[index] = hit_data.klass.load(fetched_data)
|
22
|
+
result_elements[index].merge_search_hit_data(hit_data)
|
23
|
+
end
|
46
24
|
end
|
47
25
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
]
|
61
|
-
end
|
26
|
+
# Load from server all elements yet to materialize:
|
27
|
+
pending_hits = result_elements.select { |e| e.is_a? NaranyaEcm::Search::Hit }
|
28
|
+
pending_hits.map(&:klass).uniq.each do |hit_klass|
|
29
|
+
# Obtain the ids for this hit_klass:
|
30
|
+
hit_ids = pending_hits.select { |e| e.klass == hit_klass }.map(&:id)
|
31
|
+
|
32
|
+
# Fetch the data from server:
|
33
|
+
hit_klass.where(id: hit_ids).fetch_from_server.each do |fetched_data|
|
34
|
+
r = hit_klass.load fetched_data
|
35
|
+
|
36
|
+
hit_data = result_elements.detect { |e| e.is_a?(NaranyaEcm::Search::Hit) && e.klass == r.class && e.id == r.id }
|
37
|
+
hit_index = result_elements.find_index hit_data
|
62
38
|
|
63
|
-
|
64
|
-
|
65
|
-
|
39
|
+
puts "===== Cache WRITE: '#{r.cache_key}'"
|
40
|
+
r.cache_key.write fetched_data
|
41
|
+
r.merge_search_hit_data hit_data
|
42
|
+
result_elements[hit_index] = r
|
43
|
+
end
|
66
44
|
end
|
67
45
|
|
68
|
-
|
69
|
-
|
70
|
-
end
|
46
|
+
result_elements
|
47
|
+
end
|
71
48
|
|
72
|
-
|
73
|
-
count > 0
|
74
|
-
end
|
49
|
+
attr_accessor :materializer
|
75
50
|
|
76
|
-
|
77
|
-
|
78
|
-
|
51
|
+
def total_hits
|
52
|
+
do_search! unless @total_hits
|
53
|
+
@total_hits
|
54
|
+
end
|
55
|
+
alias_method :total_count, :total_hits
|
56
|
+
|
57
|
+
def digest
|
58
|
+
[
|
59
|
+
'naranya_ecm',
|
60
|
+
'search',
|
61
|
+
'results',
|
62
|
+
Digest::MD5.hexdigest(@dsl.to_s)
|
63
|
+
]
|
64
|
+
end
|
79
65
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
end
|
66
|
+
def cache_keys
|
67
|
+
hits.map(&:cache_key)
|
68
|
+
end
|
84
69
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
70
|
+
def hits
|
71
|
+
do_search! unless @hits
|
72
|
+
@hits
|
73
|
+
end
|
89
74
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
75
|
+
def count
|
76
|
+
hits.count
|
77
|
+
end
|
94
78
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
end
|
79
|
+
def any?
|
80
|
+
count > 0
|
81
|
+
end
|
99
82
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
def to_a
|
105
|
-
materialize! unless @elements
|
106
|
-
elements
|
107
|
-
end
|
83
|
+
def empty?
|
84
|
+
count < 1
|
85
|
+
end
|
108
86
|
|
109
|
-
|
87
|
+
def facts
|
88
|
+
do_search! unless @facts
|
89
|
+
@facts
|
90
|
+
end
|
110
91
|
|
111
|
-
|
92
|
+
def max_score
|
93
|
+
do_search! unless @max_score
|
94
|
+
@max_score
|
95
|
+
end
|
112
96
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
search_path += '/_search'
|
97
|
+
def query_process_time
|
98
|
+
do_search! unless @query_process_time
|
99
|
+
@query_process_time
|
100
|
+
end
|
118
101
|
|
119
|
-
|
102
|
+
def query_total_time
|
103
|
+
do_search! unless @query_total_time
|
104
|
+
@query_total_time
|
105
|
+
end
|
120
106
|
|
121
|
-
|
107
|
+
def materializer
|
108
|
+
@materializer || DEFAULT_MATERIALIZER
|
109
|
+
end
|
110
|
+
|
111
|
+
def to_a
|
112
|
+
materialize! unless @elements
|
113
|
+
elements
|
114
|
+
end
|
122
115
|
|
123
|
-
|
116
|
+
private
|
124
117
|
|
125
|
-
|
126
|
-
search_request.body = ActiveSupport::JSON.encode @dsl
|
118
|
+
def do_search!
|
127
119
|
|
128
|
-
|
120
|
+
start_time = Time.now
|
121
|
+
|
122
|
+
# Strip '.json' from collection path:
|
123
|
+
search_path = klass.present? ? klass.path : ''
|
124
|
+
search_path += '/_search'
|
129
125
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
126
|
+
# Use the class connection to get the search results,
|
127
|
+
# using any authentication / headers configured:
|
128
|
+
#search_response = connection.get(search_path, headers)
|
129
|
+
search_body = ActiveSupport::JSON.encode(conditions)
|
130
|
+
search_response = self.class.get search_path, body: search_body
|
131
|
+
|
132
|
+
puts "curl -XGET '#{NaranyaEcm.options[:site]}#{search_path}?pretty=true' -d '#{search_body}'"
|
133
|
+
|
134
|
+
# Parse the search results:
|
135
|
+
@facts = search_response.to_hash.with_indifferent_access
|
138
136
|
|
139
|
-
|
140
|
-
|
137
|
+
# Obtain the query processing time, which is given in miliseconds as 'took' key:
|
138
|
+
@query_process_time = (Float(@facts.delete(:took)) / 1000)
|
141
139
|
|
142
|
-
|
140
|
+
result_hits = @facts.delete :hits
|
143
141
|
|
144
|
-
|
145
|
-
|
142
|
+
@total_hits = result_hits.delete :total
|
143
|
+
@max_score = result_hits.delete :max_score
|
146
144
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
145
|
+
@hits = result_hits[:hits].each_with_index.map { |ht, o| Hit.new(ht.merge(order: o)) }
|
146
|
+
|
147
|
+
@hits.freeze
|
148
|
+
@facts.freeze
|
151
149
|
|
152
|
-
|
153
|
-
|
154
|
-
|
150
|
+
@query_total_time = (Time.now - start_time)
|
151
|
+
|
152
|
+
end
|
155
153
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
end
|
154
|
+
def materialize!
|
155
|
+
# Call the materializer and:
|
156
|
+
# - Filter out elements that materialized as nulls
|
157
|
+
# - Order the elements by relevance
|
158
|
+
@elements = materializer.call(self)
|
159
|
+
.select { |materialized_element| materialized_element.present? }
|
160
|
+
.sort_by do |element|
|
161
|
+
element.search_order
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
169
166
|
end
|
170
|
-
end
|
167
|
+
end
|
data/lib/naranya_ecm-sdk.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
require
|
1
|
+
require 'naranya_ecm-sdk/version'
|
2
2
|
|
3
3
|
require 'active_support/time'
|
4
4
|
require 'active_support/configurable'
|
5
5
|
require 'active_support/dependencies/autoload'
|
6
|
+
require 'active_support/core_ext/hash/indifferent_access.rb'
|
6
7
|
require 'yaml'
|
7
8
|
|
8
9
|
require 'fog'
|
@@ -11,17 +12,57 @@ require 'fog'
|
|
11
12
|
module NaranyaEcm
|
12
13
|
|
13
14
|
extend ActiveSupport::Autoload
|
14
|
-
|
15
|
-
autoload :Cache
|
16
|
-
autoload :Search
|
17
|
-
autoload :Lifecycles
|
18
15
|
|
19
|
-
|
20
|
-
|
16
|
+
autoload_under 'rest' do
|
17
|
+
autoload :Client
|
18
|
+
end
|
21
19
|
|
22
|
-
|
20
|
+
module Rest
|
21
|
+
extend ActiveSupport::Autoload
|
22
|
+
autoload :Client
|
23
|
+
autoload :Persistence
|
24
|
+
autoload :Associations
|
25
|
+
autoload :Model
|
26
|
+
autoload :FinderMethods
|
27
|
+
autoload :Relation
|
28
|
+
end
|
29
|
+
|
30
|
+
autoload_under 'models' do
|
31
|
+
autoload :Category
|
32
|
+
autoload :Content
|
33
|
+
autoload :ContentVersion
|
34
|
+
autoload :DownloadAuthorization
|
35
|
+
autoload :MediaResource
|
36
|
+
end
|
37
|
+
|
38
|
+
module Behaviors
|
39
|
+
extend ActiveSupport::Autoload
|
40
|
+
autoload :Localizable
|
41
|
+
autoload :Timestampable
|
42
|
+
autoload :Mediable
|
43
|
+
end
|
44
|
+
|
45
|
+
module Cache
|
46
|
+
extend ActiveSupport::Autoload
|
47
|
+
autoload :Key
|
48
|
+
autoload :Methods
|
49
|
+
end
|
23
50
|
|
24
|
-
|
51
|
+
autoload_under 'lifecycles' do
|
52
|
+
autoload :ContentLifecycle
|
53
|
+
end
|
54
|
+
|
55
|
+
module Search
|
56
|
+
extend ActiveSupport::Autoload
|
57
|
+
autoload :Hit
|
58
|
+
autoload :Methods
|
59
|
+
autoload :Query
|
60
|
+
autoload :Results
|
61
|
+
end
|
62
|
+
|
63
|
+
autoload :ActiveResourceBasePatch
|
64
|
+
|
65
|
+
include ActiveSupport::Configurable
|
25
66
|
|
26
67
|
DEFAULT_CONFIG = {
|
27
68
|
site: "http://ecm.naranya.net:5000",
|
@@ -41,15 +82,15 @@ module NaranyaEcm
|
|
41
82
|
yield config
|
42
83
|
end
|
43
84
|
|
85
|
+
def document_module
|
86
|
+
NaranyaEcm::Rest::Model
|
87
|
+
end
|
88
|
+
|
44
89
|
def options
|
45
90
|
auto_conf unless config.present?
|
46
91
|
config
|
47
92
|
end
|
48
93
|
|
49
|
-
def cache_key_for(attributes = {})
|
50
|
-
Cache::Key.new attributes
|
51
|
-
end
|
52
|
-
|
53
94
|
def load_config_from_yml(yml_path, env="production")
|
54
95
|
raise "YAML file doesn't extst" unless File.exist?(yml_path)
|
55
96
|
yml_config = DEFAULT_CONFIG.merge(YAML::load(ERB.new(File.read(yml_path)).result)[env])
|
data/naranya_ecm-sdk.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.add_dependency 'activesupport', '>= 4.0.4'
|
23
23
|
spec.add_dependency 'activemodel', '>= 4.0.4'
|
24
|
-
spec.add_dependency '
|
24
|
+
spec.add_dependency 'httparty'
|
25
25
|
spec.add_dependency 'state_machine'
|
26
26
|
spec.add_dependency 'fog'
|
27
27
|
|
@@ -4,8 +4,13 @@ describe NaranyaEcm::Category, vcr: true do
|
|
4
4
|
|
5
5
|
it_behaves_like "a NaranyaEcm resource"
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
describe "#name" do
|
8
|
+
it "responds to #name" do
|
9
|
+
expect(subject).to respond_to :name
|
10
|
+
end
|
11
|
+
it "responds to #name_translations" do
|
12
|
+
expect(subject).to respond_to :name_translations
|
13
|
+
end
|
9
14
|
end
|
10
15
|
|
11
16
|
end
|
data/spec/models/content_spec.rb
CHANGED
@@ -4,8 +4,17 @@ describe NaranyaEcm::Content, vcr: true do
|
|
4
4
|
|
5
5
|
it_behaves_like "a NaranyaEcm resource"
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
describe "localized title" do
|
8
|
+
it "responds to #title" do
|
9
|
+
expect(subject).to respond_to :title
|
10
|
+
end
|
11
|
+
it "responds to #title_translations" do
|
12
|
+
expect(subject).to respond_to :title_translations
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
it "responds to #description" do
|
17
|
+
expect(subject).to respond_to :title
|
9
18
|
end
|
10
19
|
|
11
20
|
end
|
data/spec/models/media_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -6,18 +6,6 @@ shared_examples "a NaranyaEcm resource" do
|
|
6
6
|
|
7
7
|
subject { described_class }
|
8
8
|
|
9
|
-
it "responds to #site" do
|
10
|
-
expect(subject).to respond_to :site
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "#site" do
|
14
|
-
subject { described_class.site }
|
15
|
-
|
16
|
-
it "has the same URL as in the configuration options" do
|
17
|
-
expect(subject.to_s).to eq NaranyaEcm.options.site
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
9
|
it "responds to #find" do
|
22
10
|
expect(subject).to respond_to :find
|
23
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: naranya_ecm-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Quintanilla
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 4.0.4
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: httparty
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: state_machine
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,28 +168,24 @@ files:
|
|
168
168
|
- dev/search.rb
|
169
169
|
- lib/naranya_ecm-sdk.rb
|
170
170
|
- lib/naranya_ecm-sdk/version.rb
|
171
|
-
- lib/naranya_ecm/behaviors.rb
|
172
171
|
- lib/naranya_ecm/behaviors/localizable.rb
|
173
|
-
- lib/naranya_ecm/behaviors/
|
172
|
+
- lib/naranya_ecm/behaviors/mediable.rb
|
174
173
|
- lib/naranya_ecm/behaviors/timestampable.rb
|
175
|
-
- lib/naranya_ecm/cache.rb
|
176
174
|
- lib/naranya_ecm/cache/key.rb
|
177
175
|
- lib/naranya_ecm/cache/methods.rb
|
178
|
-
- lib/naranya_ecm/has_many_patch.rb
|
179
|
-
- lib/naranya_ecm/lifecycles.rb
|
180
176
|
- lib/naranya_ecm/lifecycles/content_lifecycle.rb
|
181
|
-
- lib/naranya_ecm/lifecycles/lifecycleable.rb
|
182
|
-
- lib/naranya_ecm/lifecycles/version_lifecycle.rb
|
183
|
-
- lib/naranya_ecm/models.rb
|
184
177
|
- lib/naranya_ecm/models/category.rb
|
185
178
|
- lib/naranya_ecm/models/content.rb
|
186
179
|
- lib/naranya_ecm/models/content_version.rb
|
187
180
|
- lib/naranya_ecm/models/download_authorization.rb
|
188
|
-
- lib/naranya_ecm/models/embedded_hash.rb
|
189
|
-
- lib/naranya_ecm/models/embedded_localized_hash.rb
|
190
|
-
- lib/naranya_ecm/models/lifecycle.rb
|
191
181
|
- lib/naranya_ecm/models/media_resource.rb
|
192
|
-
- lib/naranya_ecm/
|
182
|
+
- lib/naranya_ecm/rest/associations.rb
|
183
|
+
- lib/naranya_ecm/rest/client.rb
|
184
|
+
- lib/naranya_ecm/rest/errors.rb
|
185
|
+
- lib/naranya_ecm/rest/finder_methods.rb
|
186
|
+
- lib/naranya_ecm/rest/model.rb
|
187
|
+
- lib/naranya_ecm/rest/persistence.rb
|
188
|
+
- lib/naranya_ecm/rest/relation.rb
|
193
189
|
- lib/naranya_ecm/search/hit.rb
|
194
190
|
- lib/naranya_ecm/search/methods.rb
|
195
191
|
- lib/naranya_ecm/search/query.rb
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# estoy loco...
|
2
|
-
|
3
|
-
module NaranyaEcm::Behaviors
|
4
|
-
module Resourceable
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
self.site = NaranyaEcm.options.site
|
9
|
-
before_save :normalize_attributes
|
10
|
-
after_save :reload
|
11
|
-
end
|
12
|
-
|
13
|
-
def normalize_attributes
|
14
|
-
# Remove associated objects; Keep only the ID's:
|
15
|
-
self.reflections
|
16
|
-
.select { |key, val| val.class.name == "ActiveResource::Reflection::AssociationReflection" }
|
17
|
-
.keys.each { |attribute_name| self.attributes.delete attribute_name }
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|