infopark_cloud_connector 6.8.0.72.d18d096 → 6.8.0.110.6570b45
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/lib/rails_connector/cms_api_search_request.rb +1 -1
- data/lib/rails_connector/cms_backend.rb +5 -3
- data/lib/rails_connector/connector_service.rb +16 -0
- data/lib/rails_connector/dynamo_cms_backend.rb +2 -1
- data/lib/rails_connector/obj.rb +2 -2
- data/lib/rails_connector/obj_data.rb +6 -0
- data/lib/rails_connector/obj_data_from_service.rb +50 -0
- data/lib/rails_connector/revision.rb +2 -11
- data/lib/rails_connector/service_cms_backend.rb +48 -0
- data/lib/rails_connector/workspace.rb +24 -0
- data/lib/rails_connector/workspace_selection_middleware.rb +13 -5
- metadata +23 -22
@@ -3,7 +3,9 @@ module RailsConnector
|
|
3
3
|
class CmsBackend
|
4
4
|
|
5
5
|
def self.current
|
6
|
-
@current ||=
|
6
|
+
@current ||=
|
7
|
+
DynamoCmsBackend.new
|
8
|
+
# ServiceCmsBackend.new
|
7
9
|
end
|
8
10
|
|
9
11
|
def self.begin_caching
|
@@ -14,8 +16,8 @@ module RailsConnector
|
|
14
16
|
current.end_caching
|
15
17
|
end
|
16
18
|
|
17
|
-
def self.find_obj_data_by(
|
18
|
-
current.find_obj_data_by(
|
19
|
+
def self.find_obj_data_by(workspace, index, keys)
|
20
|
+
current.find_obj_data_by(workspace, index, keys)
|
19
21
|
end
|
20
22
|
|
21
23
|
def self.caching?
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class ConnectorService
|
2
|
+
|
3
|
+
def self.query(path, payload)
|
4
|
+
MultiJson.load(RestClient::Request.execute(
|
5
|
+
:method => :post,
|
6
|
+
# FIXME
|
7
|
+
:url => "localhost:3001/#{path}",
|
8
|
+
:headers => {
|
9
|
+
:content_type => :json,
|
10
|
+
:accept => :json,
|
11
|
+
},
|
12
|
+
:payload => MultiJson.dump(payload)
|
13
|
+
))
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -12,7 +12,8 @@ module RailsConnector
|
|
12
12
|
@editable_cache = @read_only_cache = nil
|
13
13
|
end
|
14
14
|
|
15
|
-
def find_obj_data_by(
|
15
|
+
def find_obj_data_by(workspace, index, keys)
|
16
|
+
revision = workspace.revision
|
16
17
|
raw_data =
|
17
18
|
if caching?
|
18
19
|
find_obj_data_from_cache_or_database_by(revision, index, keys)
|
data/lib/rails_connector/obj.rb
CHANGED
@@ -99,7 +99,7 @@ module RailsConnector
|
|
99
99
|
# accepts the name of an "obj_by" - view and a list of keys.
|
100
100
|
# returns a list of lists of Objs: a list of Objs for each given keys.
|
101
101
|
def self.find_objs_by(view, keys) # :nodoc:
|
102
|
-
CmsBackend.find_obj_data_by(
|
102
|
+
CmsBackend.find_obj_data_by(Workspace.current, view, keys).map do |list|
|
103
103
|
list.map { |obj_data| Obj.instantiate(obj_data) }
|
104
104
|
end
|
105
105
|
end
|
@@ -434,7 +434,7 @@ module RailsConnector
|
|
434
434
|
# Notice that the ruby class of this Obj instance will NOT change,
|
435
435
|
# even if the obj_class in the database has changed.
|
436
436
|
def reload
|
437
|
-
obj_data = CmsBackend.find_obj_data_by(
|
437
|
+
obj_data = CmsBackend.find_obj_data_by(Workspace.current, :id, [id.to_s]).first.first
|
438
438
|
update_data(obj_data)
|
439
439
|
end
|
440
440
|
|
@@ -6,6 +6,10 @@ module RailsConnector
|
|
6
6
|
value_and_type_of(attribute_name).first
|
7
7
|
end
|
8
8
|
|
9
|
+
def type_of(attribute_name)
|
10
|
+
value_and_type_of(attribute_name).second
|
11
|
+
end
|
12
|
+
|
9
13
|
def value_and_type_of(attribute_name)
|
10
14
|
raise "implement in subclass"
|
11
15
|
end
|
@@ -28,6 +32,8 @@ module RailsConnector
|
|
28
32
|
"date"
|
29
33
|
when "title"
|
30
34
|
"html"
|
35
|
+
else
|
36
|
+
nil
|
31
37
|
end
|
32
38
|
end
|
33
39
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module RailsConnector
|
2
|
+
|
3
|
+
class ObjDataFromService < ObjData
|
4
|
+
def initialize(data)
|
5
|
+
@data = data
|
6
|
+
end
|
7
|
+
|
8
|
+
def value_and_type_of(attribute_name)
|
9
|
+
value_and_type = @data[attribute_name]
|
10
|
+
|
11
|
+
if value_and_type.blank?
|
12
|
+
if INTERNAL_KEYS.include?(attribute_name)
|
13
|
+
type = type_of_internal(attribute_name)
|
14
|
+
[default_attribute_value(type), type]
|
15
|
+
else
|
16
|
+
raise "Illegal attribute name #{attribute_name}"
|
17
|
+
end
|
18
|
+
elsif value_and_type.length == 1
|
19
|
+
[value_and_type.first, type_of_internal(attribute_name)]
|
20
|
+
else
|
21
|
+
value_and_type
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def has_custom_attribute?(attribute_name)
|
26
|
+
!!@data[attribute_name]
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
internal_key_list = %w[
|
32
|
+
last_changed
|
33
|
+
sort_key1
|
34
|
+
sort_key2
|
35
|
+
sort_key3
|
36
|
+
sort_order
|
37
|
+
sort_type1
|
38
|
+
sort_type2
|
39
|
+
sort_type3
|
40
|
+
suppress_export
|
41
|
+
text_links
|
42
|
+
valid_from
|
43
|
+
valid_until
|
44
|
+
]
|
45
|
+
|
46
|
+
INTERNAL_KEYS = Set.new(internal_key_list.map { |name| "_#{name}" } )
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -10,17 +10,12 @@ module RailsConnector
|
|
10
10
|
property :content_cache_id
|
11
11
|
property :editable
|
12
12
|
|
13
|
-
# Selects the revision with the given id as current revision
|
14
13
|
def self.current=(revision_or_proc)
|
15
|
-
|
14
|
+
raise "Do not use Revision.current=, use Workspace.current= instead."
|
16
15
|
end
|
17
16
|
|
18
17
|
def self.current
|
19
|
-
|
20
|
-
@current = @current.call
|
21
|
-
else
|
22
|
-
@current || default
|
23
|
-
end
|
18
|
+
raise "Do not use Revision.current, use Workspace.current instead."
|
24
19
|
end
|
25
20
|
|
26
21
|
def self.find_by_label(label_name)
|
@@ -28,10 +23,6 @@ module RailsConnector
|
|
28
23
|
find(workspace.revision_id)
|
29
24
|
end
|
30
25
|
|
31
|
-
def self.default
|
32
|
-
find_by_label("published")
|
33
|
-
end
|
34
|
-
|
35
26
|
def chain
|
36
27
|
@chain ||= Chain.build_for(self, content_cache)
|
37
28
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
|
3
|
+
module RailsConnector
|
4
|
+
|
5
|
+
# connects the cloud connector to the connector service
|
6
|
+
class ServiceCmsBackend < CmsBackend
|
7
|
+
|
8
|
+
def begin_caching
|
9
|
+
# TODO
|
10
|
+
end
|
11
|
+
|
12
|
+
def end_caching
|
13
|
+
# TODO
|
14
|
+
end
|
15
|
+
|
16
|
+
def caching?
|
17
|
+
# TODO
|
18
|
+
end
|
19
|
+
|
20
|
+
def find_obj_data_by(workspace, index, keys)
|
21
|
+
raw_data = ConnectorService.query(
|
22
|
+
"objs/query",
|
23
|
+
:queries => keys.map do |key|
|
24
|
+
{ :type => index, :param => key }
|
25
|
+
end,
|
26
|
+
:workspace => workspace.id,
|
27
|
+
:revision => workspace.revision.id
|
28
|
+
)
|
29
|
+
|
30
|
+
objs = {}
|
31
|
+
raw_data["objs"].each do |obj|
|
32
|
+
objs[obj["_id"].first] = obj
|
33
|
+
end
|
34
|
+
|
35
|
+
raw_data["results"].map do |query|
|
36
|
+
query["refs"].map do |obj_ref|
|
37
|
+
id = obj_ref["id"]
|
38
|
+
|
39
|
+
# TODO fetch missing ObjData from Service
|
40
|
+
raw_obj_data = objs[id] or raise "Data for Obj with id #{id} missing!"
|
41
|
+
ObjDataFromService.new(raw_obj_data)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -6,6 +6,30 @@ class Workspace < CmsBaseModel
|
|
6
6
|
|
7
7
|
property :revision_id
|
8
8
|
|
9
|
+
def self.current=(workspace_or_proc)
|
10
|
+
@current = workspace_or_proc
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.current
|
14
|
+
if @current.respond_to? :call
|
15
|
+
@current = @current.call
|
16
|
+
else
|
17
|
+
@current || default
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.default
|
22
|
+
find("published")
|
23
|
+
end
|
24
|
+
|
25
|
+
def revision
|
26
|
+
@revision ||= Revision.find(revision_id)
|
27
|
+
end
|
28
|
+
|
29
|
+
def content_cache_id=(cc)
|
30
|
+
revision.content_cache_id = cc
|
31
|
+
end
|
32
|
+
|
9
33
|
end
|
10
34
|
|
11
35
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
module RailsConnector
|
3
3
|
|
4
4
|
class WorkspaceSelectionMiddleware
|
5
|
-
CURRENT_WORKSPACE_SESSION_KEY =
|
6
|
-
CURRENT_WORKSPACE_PARAMS_KEY =
|
5
|
+
CURRENT_WORKSPACE_SESSION_KEY = '_rc-ws'
|
6
|
+
CURRENT_WORKSPACE_PARAMS_KEY = '_rc-ws'
|
7
7
|
|
8
8
|
def initialize(app)
|
9
9
|
@app = app
|
@@ -11,9 +11,17 @@ class WorkspaceSelectionMiddleware
|
|
11
11
|
|
12
12
|
def call(env)
|
13
13
|
handle_workspace_parameter(env)
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
workspace_id = session(env)[CURRENT_WORKSPACE_SESSION_KEY]
|
15
|
+
Workspace.current = proc do
|
16
|
+
if workspace_id
|
17
|
+
begin
|
18
|
+
Workspace.find(workspace_id)
|
19
|
+
rescue Kvom::NotFound
|
20
|
+
Workspace.default
|
21
|
+
end
|
22
|
+
else
|
23
|
+
Workspace.default
|
24
|
+
end
|
17
25
|
end
|
18
26
|
@app.call(env)
|
19
27
|
end
|
metadata
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: infopark_cloud_connector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 910834687
|
5
|
+
prerelease: 14
|
6
6
|
segments:
|
7
7
|
- 6
|
8
8
|
- 8
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
-
|
12
|
-
-
|
13
|
-
-
|
14
|
-
|
15
|
-
version: 6.8.0.72.d18d096
|
10
|
+
- 110
|
11
|
+
- 6570
|
12
|
+
- b
|
13
|
+
- 45
|
14
|
+
version: 6.8.0.110.6570b45
|
16
15
|
platform: ruby
|
17
16
|
authors:
|
18
17
|
- Infopark AG
|
@@ -20,11 +19,10 @@ autorequire:
|
|
20
19
|
bindir: bin
|
21
20
|
cert_chain: []
|
22
21
|
|
23
|
-
date: 2012-10-
|
22
|
+
date: 2012-10-26 00:00:00 +02:00
|
24
23
|
default_executable:
|
25
24
|
dependencies:
|
26
25
|
- !ruby/object:Gem::Dependency
|
27
|
-
type: :runtime
|
28
26
|
requirement: &id001 !ruby/object:Gem::Requirement
|
29
27
|
none: false
|
30
28
|
requirements:
|
@@ -36,11 +34,11 @@ dependencies:
|
|
36
34
|
- 3
|
37
35
|
- 6
|
38
36
|
version: 1.3.6
|
39
|
-
name: aws-sdk
|
40
37
|
version_requirements: *id001
|
38
|
+
name: aws-sdk
|
41
39
|
prerelease: false
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
40
|
type: :runtime
|
41
|
+
- !ruby/object:Gem::Dependency
|
44
42
|
requirement: &id002 !ruby/object:Gem::Requirement
|
45
43
|
none: false
|
46
44
|
requirements:
|
@@ -51,30 +49,30 @@ dependencies:
|
|
51
49
|
- 1
|
52
50
|
- 6
|
53
51
|
version: "1.6"
|
54
|
-
name: rest-client
|
55
52
|
version_requirements: *id002
|
53
|
+
name: rest-client
|
56
54
|
prerelease: false
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
55
|
type: :runtime
|
56
|
+
- !ruby/object:Gem::Dependency
|
59
57
|
requirement: &id003 !ruby/object:Gem::Requirement
|
60
58
|
none: false
|
61
59
|
requirements:
|
62
60
|
- - "="
|
63
61
|
- !ruby/object:Gem::Version
|
64
|
-
hash:
|
62
|
+
hash: 910834687
|
65
63
|
segments:
|
66
64
|
- 6
|
67
65
|
- 8
|
68
66
|
- 0
|
69
|
-
-
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
|
74
|
-
version: 6.8.0.72.d18d096
|
75
|
-
name: kvom
|
67
|
+
- 110
|
68
|
+
- 6570
|
69
|
+
- b
|
70
|
+
- 45
|
71
|
+
version: 6.8.0.110.6570b45
|
76
72
|
version_requirements: *id003
|
73
|
+
name: kvom
|
77
74
|
prerelease: false
|
75
|
+
type: :runtime
|
78
76
|
description: The Cloud Connector for Infopark CMS Fiona enables you to develop modern, dynamic Web 2.0 applications using Ruby on Rails and at the same time display CMS managed content.
|
79
77
|
email: info@infopark.de
|
80
78
|
executables: []
|
@@ -92,6 +90,7 @@ files:
|
|
92
90
|
- lib/rails_connector/cms_api_search_request.rb
|
93
91
|
- lib/rails_connector/cms_backend.rb
|
94
92
|
- lib/rails_connector/cms_base_model.rb
|
93
|
+
- lib/rails_connector/connector_service.rb
|
95
94
|
- lib/rails_connector/content_cache.rb
|
96
95
|
- lib/rails_connector/controller_runtime.rb
|
97
96
|
- lib/rails_connector/date_attribute.rb
|
@@ -108,11 +107,13 @@ files:
|
|
108
107
|
- lib/rails_connector/obj_data.rb
|
109
108
|
- lib/rails_connector/obj_data_from_database.rb
|
110
109
|
- lib/rails_connector/obj_data_from_hash.rb
|
110
|
+
- lib/rails_connector/obj_data_from_service.rb
|
111
111
|
- lib/rails_connector/path_conversion.rb
|
112
112
|
- lib/rails_connector/permission.rb
|
113
113
|
- lib/rails_connector/rack_middlewares.rb
|
114
114
|
- lib/rails_connector/revision.rb
|
115
115
|
- lib/rails_connector/s3_blob.rb
|
116
|
+
- lib/rails_connector/service_cms_backend.rb
|
116
117
|
- lib/rails_connector/version.rb
|
117
118
|
- lib/rails_connector/workspace.rb
|
118
119
|
- lib/rails_connector/workspace_selection_middleware.rb
|