naranya_ecm-sdk 0.0.14 → 0.0.15
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.
- 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
|