infopark_reactor 1.10.0.beta → 1.11.0.beta2
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/app/models/rails_connector/abstract_model.rb +7 -0
- data/app/models/rails_connector/abstract_obj.rb +31 -0
- data/app/models/rails_connector/attribute.rb +94 -0
- data/app/models/rails_connector/blob_mapping.rb +12 -0
- data/app/models/rails_connector/channel.rb +41 -0
- data/app/models/rails_connector/content.rb +12 -0
- data/app/models/rails_connector/meta/eager_loader.rb +41 -0
- data/app/models/rails_connector/obj_class.rb +143 -0
- data/app/models/rails_connector/object_with_meta_data.rb +18 -0
- data/infopark_reactor.gemspec +4 -4
- data/lib/generators/cm/migration/USAGE +8 -0
- data/lib/generators/cm/migration/migration_generator.rb +16 -0
- data/lib/generators/cm/migration/templates/template.rb +8 -0
- data/lib/infopark_reactor.rb +35 -1
- data/lib/reactor/attributes.rb +2 -4
- data/lib/reactor/cm/attribute.rb +91 -0
- data/lib/reactor/cm/bridge.rb +50 -0
- data/lib/reactor/cm/channel.rb +18 -0
- data/lib/reactor/cm/editorial_group.rb +23 -0
- data/lib/reactor/cm/group.rb +241 -0
- data/lib/reactor/cm/language.rb +57 -0
- data/lib/reactor/cm/link.rb +136 -0
- data/lib/reactor/cm/live_group.rb +23 -0
- data/lib/reactor/cm/log_entry.rb +64 -0
- data/lib/reactor/cm/missing_credentials.rb +8 -0
- data/lib/reactor/cm/multi_xml_request.rb +102 -0
- data/lib/reactor/cm/obj.rb +544 -0
- data/lib/reactor/cm/obj_class.rb +187 -0
- data/lib/reactor/cm/object_base.rb +165 -0
- data/lib/reactor/cm/permissions.rb +44 -0
- data/lib/reactor/cm/user.rb +139 -0
- data/lib/reactor/cm/workflow.rb +41 -0
- data/lib/reactor/cm/xml_attribute.rb +36 -0
- data/lib/reactor/cm/xml_markup.rb +86 -0
- data/lib/reactor/cm/xml_multi_request_error.rb +10 -0
- data/lib/reactor/cm/xml_request.rb +83 -0
- data/lib/reactor/cm/xml_request_error.rb +11 -0
- data/lib/reactor/cm/xml_response.rb +43 -0
- data/lib/reactor/cm/xml_single_request_error.rb +21 -0
- data/lib/reactor/configuration.rb +8 -0
- data/lib/{engine.rb → reactor/engine.rb} +16 -1
- data/lib/reactor/legacy.rb +3 -3
- data/lib/reactor/link/temporary_link.rb +8 -4
- data/lib/reactor/migration.rb +87 -0
- data/lib/reactor/permission.rb +2 -2
- data/lib/reactor/persistence.rb +14 -12
- data/lib/reactor/plans/common_attribute.rb +33 -0
- data/lib/reactor/plans/common_channel.rb +32 -0
- data/lib/reactor/plans/common_group.rb +45 -0
- data/lib/reactor/plans/common_obj_class.rb +70 -0
- data/lib/reactor/plans/create_attribute.rb +33 -0
- data/lib/reactor/plans/create_channel.rb +24 -0
- data/lib/reactor/plans/create_group.rb +35 -0
- data/lib/reactor/plans/create_obj.rb +49 -0
- data/lib/reactor/plans/create_obj_class.rb +29 -0
- data/lib/reactor/plans/delete_attribute.rb +24 -0
- data/lib/reactor/plans/delete_channel.rb +22 -0
- data/lib/reactor/plans/delete_group.rb +29 -0
- data/lib/reactor/plans/delete_obj.rb +23 -0
- data/lib/reactor/plans/delete_obj_class.rb +23 -0
- data/lib/reactor/plans/prepared.rb +16 -0
- data/lib/reactor/plans/rename_group.rb +33 -0
- data/lib/reactor/plans/rename_obj_class.rb +25 -0
- data/lib/reactor/plans/update_attribute.rb +24 -0
- data/lib/reactor/plans/update_group.rb +31 -0
- data/lib/reactor/plans/update_obj.rb +31 -0
- data/lib/reactor/plans/update_obj_class.rb +27 -0
- data/lib/reactor/rails_connector_meta.rb +144 -0
- data/lib/reactor/tools/migrator.rb +136 -0
- data/lib/reactor/tools/response_handler/base.rb +23 -0
- data/lib/reactor/tools/response_handler/string.rb +20 -0
- data/lib/reactor/tools/response_handler/xml_attribute.rb +53 -0
- data/lib/reactor/tools/smart_xml_logger.rb +70 -0
- data/lib/reactor/tools/sower.rb +90 -0
- data/lib/reactor/tools/uploader.rb +134 -0
- data/lib/reactor/tools/versioner.rb +121 -0
- data/lib/reactor/tools/workflow_generator.rb +1 -1
- data/lib/reactor/tools/xml_attributes.rb +71 -0
- data/lib/reactor/version.rb +1 -1
- data/lib/tasks/cm_migrate.rake +8 -0
- data/lib/tasks/cm_seeds.rake +41 -0
- metadata +82 -13
- data/README.md +0 -186
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'reactor/plans/common_group'
|
3
|
+
|
4
|
+
module Reactor
|
5
|
+
|
6
|
+
module Plans
|
7
|
+
|
8
|
+
class CreateGroup < CommonGroup
|
9
|
+
|
10
|
+
def initialize(*args)
|
11
|
+
super()
|
12
|
+
|
13
|
+
(name, _), options = separate_arguments(*args)
|
14
|
+
|
15
|
+
@name = name || options[:name]
|
16
|
+
|
17
|
+
set(:name, @name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def prepare!
|
21
|
+
error('name is nil') if @name.nil?
|
22
|
+
error("group #{@name} already exists") if Reactor::Cm::Group.exists?(@name)
|
23
|
+
|
24
|
+
prepare_params!(nil)
|
25
|
+
end
|
26
|
+
|
27
|
+
def migrate!
|
28
|
+
Reactor::Cm::Group.create(@params)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class CreateObj
|
5
|
+
|
6
|
+
def set(key, value)
|
7
|
+
@attrs[key.to_sym] = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(opts={})
|
11
|
+
@name = opts[:name]
|
12
|
+
@parent = opts[:parent]
|
13
|
+
@objClass = opts[:objClass]
|
14
|
+
@attrs = {}
|
15
|
+
@ignoreExisting = opts[:ignoreExisting]
|
16
|
+
end
|
17
|
+
|
18
|
+
def prepare!
|
19
|
+
raise "#{self.class.name}: name is nil" if @name.nil?
|
20
|
+
raise "#{self.class.name}: parent is nil" if @parent.nil?
|
21
|
+
raise "#{self.class.name}: objClass is nil" if @objClass.nil?
|
22
|
+
raise "#{self.class.name}: parent does not exist" if not Reactor::Cm::Obj.exists?(@parent)
|
23
|
+
raise "#{self.class.name}: obj with name #{@name} already exists" if (!@ignoreExisting) && Reactor::Cm::Obj.exists?(path)
|
24
|
+
=begin
|
25
|
+
raise "#{self.class.name}: objClass #{@objClass} not found" if not Reactor::Cm::ObjClass.exists?(@objClass)
|
26
|
+
@attrs.keys.each do |attr|
|
27
|
+
raise "#{self.class.name}: attr #{attr} not found for objClass #{@objClass}" if not Reactor::Cm::ObjClass.has_attribute?(attr)
|
28
|
+
end
|
29
|
+
=end
|
30
|
+
# ...?
|
31
|
+
end
|
32
|
+
|
33
|
+
def migrate!
|
34
|
+
return true if (@ignoreExisting) && Reactor::Cm::Obj.exists?(path)
|
35
|
+
@obj = Cm::Obj.create(@name, @parent, @objClass)
|
36
|
+
@attrs.each do |key,value|
|
37
|
+
@obj.set(key,value)
|
38
|
+
end
|
39
|
+
@obj.save!
|
40
|
+
@obj.release!
|
41
|
+
end
|
42
|
+
|
43
|
+
def path
|
44
|
+
File.join(@parent, @name)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'reactor/plans/common_obj_class'
|
3
|
+
|
4
|
+
module Reactor
|
5
|
+
module Plans
|
6
|
+
class CreateObjClass < CommonObjClass
|
7
|
+
def initialize(*args)
|
8
|
+
super()
|
9
|
+
(name, type), options = separate_arguments(*args)
|
10
|
+
@name = name || options[:name]
|
11
|
+
@type = type || options[:objType] || options[:type]
|
12
|
+
end
|
13
|
+
|
14
|
+
def prepare!
|
15
|
+
error("name is nil") if @name.nil?
|
16
|
+
error("type is nil") if @type.nil?
|
17
|
+
error("objClass #{@name} already exists") if Reactor::Cm::ObjClass.exists?(@name)
|
18
|
+
prepare_attrs!(nil)
|
19
|
+
prepare_params!(nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
def migrate!
|
23
|
+
klass = Reactor::Cm::ObjClass.create(@name, @type)
|
24
|
+
migrate_attrs!(klass)
|
25
|
+
migrate_params!(klass)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class DeleteAttribute < CommonAttribute
|
5
|
+
def initialize(*args)
|
6
|
+
super()
|
7
|
+
(name, x), options = separate_arguments(*args)
|
8
|
+
@name = name || options[:name]
|
9
|
+
end
|
10
|
+
|
11
|
+
def prepare!
|
12
|
+
error("name is nil") if @name.nil?
|
13
|
+
error("attribute #{@name} does not exist") if not Reactor::Cm::Attribute.exists?(@name)
|
14
|
+
# TODO: check used..
|
15
|
+
end
|
16
|
+
|
17
|
+
def migrate!
|
18
|
+
attrib = Reactor::Cm::Attribute.get(@name)
|
19
|
+
attrib.delete!
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class DeleteChannel < CommonAttribute
|
5
|
+
def initialize(*args)
|
6
|
+
super()
|
7
|
+
(name, x), options = separate_arguments(*args)
|
8
|
+
@name = name || options[:name]
|
9
|
+
end
|
10
|
+
|
11
|
+
def prepare!
|
12
|
+
error("name is nil") if @name.nil?
|
13
|
+
error("channel #{@name} does not exist") if not Reactor::Cm::Channel.exists?(@name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def migrate!
|
17
|
+
Reactor::Cm::Channel.get(@name).delete!
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
|
4
|
+
module Plans
|
5
|
+
|
6
|
+
class DeleteGroup < CommonGroup
|
7
|
+
|
8
|
+
def initialize(*args)
|
9
|
+
super()
|
10
|
+
|
11
|
+
(name, _), options = separate_arguments(*args)
|
12
|
+
@name = name || options[:name]
|
13
|
+
end
|
14
|
+
|
15
|
+
def prepare!
|
16
|
+
error('name is nil') if @name.nil?
|
17
|
+
error("group #{@name} does not exist") unless Reactor::Cm::Group.exists?(@name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def migrate!
|
21
|
+
group = Reactor::Cm::Group.get(@name)
|
22
|
+
group.delete!
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'reactor/plans/prepared'
|
3
|
+
|
4
|
+
module Reactor
|
5
|
+
module Plans
|
6
|
+
class DeleteObj
|
7
|
+
include Prepared
|
8
|
+
|
9
|
+
def initialize(opts={})
|
10
|
+
@key = opts[:obj_id] || opts[:path]
|
11
|
+
end
|
12
|
+
|
13
|
+
def prepare!
|
14
|
+
error("object (key=#{@key}) not found") if not Reactor::Cm::Obj.exists?(@key)
|
15
|
+
end
|
16
|
+
|
17
|
+
def migrate!
|
18
|
+
obj = Reactor::Cm::Obj.get(@key)
|
19
|
+
obj.delete!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class DeleteObjClass < CommonObjClass
|
5
|
+
include Prepared
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
super()
|
9
|
+
(name, x), options = separate_arguments(*args)
|
10
|
+
@name = name || options[:name]
|
11
|
+
end
|
12
|
+
|
13
|
+
def prepare!
|
14
|
+
error("objClass #{@name} not found") if not Reactor::Cm::ObjClass.exists?(@name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def migrate!
|
18
|
+
klass = Reactor::Cm::ObjClass.get(@name)
|
19
|
+
klass.delete!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
module Prepared
|
5
|
+
def error(message)
|
6
|
+
"#{self.class.name}: #{message}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def separate_arguments(*args)
|
10
|
+
array_args = args.select {|a| !a.is_a?(Hash) }
|
11
|
+
hash_args = args.select {|a| a.is_a?(Hash) }.reduce({}, &:merge)
|
12
|
+
return array_args, hash_args
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
|
4
|
+
module Plans
|
5
|
+
|
6
|
+
class RenameGroup
|
7
|
+
|
8
|
+
include Prepared
|
9
|
+
|
10
|
+
def initialize(*args)
|
11
|
+
(from, to), options = separate_arguments(*args)
|
12
|
+
|
13
|
+
@from = from || options[:from]
|
14
|
+
@to = to || options[:to]
|
15
|
+
end
|
16
|
+
|
17
|
+
def prepare!
|
18
|
+
error('from is nil') if @from.nil?
|
19
|
+
error('to is nil') if @to.nil?
|
20
|
+
error('from does not exist') unless Reactor::Cm::Group.exists?(@from)
|
21
|
+
error('to does exist') if Reactor::Cm::Group.exists?(@to)
|
22
|
+
end
|
23
|
+
|
24
|
+
def migrate!
|
25
|
+
group = Reactor::Cm::Group.get(@from)
|
26
|
+
group.rename!(@to)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class RenameObjClass
|
5
|
+
include Prepared
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
(from, to), options = separate_arguments(*args)
|
9
|
+
@from = from || options[:from]
|
10
|
+
@to = to || options[:to]
|
11
|
+
end
|
12
|
+
|
13
|
+
def prepare!
|
14
|
+
error("from is nil") if @from.nil?
|
15
|
+
error("to is nil") if @to.nil?
|
16
|
+
error("from does not exist") if not Reactor::Cm::ObjClass.exists?(@from)
|
17
|
+
error("to does exist") if Reactor::Cm::ObjClass.exists?(@to)
|
18
|
+
end
|
19
|
+
|
20
|
+
def migrate!
|
21
|
+
Reactor::Cm::ObjClass.rename(@from, @to)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class UpdateAttribute < CommonAttribute
|
5
|
+
def initialize(*args)
|
6
|
+
super()
|
7
|
+
(name, x), options = separate_arguments(*args)
|
8
|
+
@name = name || options[:name]
|
9
|
+
end
|
10
|
+
|
11
|
+
def prepapre!
|
12
|
+
error("name is nil") if @name.nil?
|
13
|
+
error("attribute #{@name} not found") if not Reactor::Cm::Attribute.exists?(@name)
|
14
|
+
prepare_params!(nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
def migrate!
|
18
|
+
attrib = Reactor::Cm::Attribute.get(@name)
|
19
|
+
migrate_params!(attrib)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
|
4
|
+
module Plans
|
5
|
+
|
6
|
+
class UpdateGroup < CommonGroup
|
7
|
+
|
8
|
+
def initialize(*args)
|
9
|
+
super()
|
10
|
+
|
11
|
+
(name, _), options = separate_arguments(*args)
|
12
|
+
@name = name || options[:name]
|
13
|
+
end
|
14
|
+
|
15
|
+
def prepapre!
|
16
|
+
error('name is nil') if @name.nil?
|
17
|
+
error("group #{@name} not found") unless Reactor::Cm::Group.exists?(@name)
|
18
|
+
|
19
|
+
prepare_params!(nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
def migrate!
|
23
|
+
group = Reactor::Cm::Group.get(@name)
|
24
|
+
migrate_params!(group)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class UpdateObj
|
5
|
+
include Prepared
|
6
|
+
|
7
|
+
def initialize(opts={})
|
8
|
+
@key = opts[:obj_id] || opts[:path]
|
9
|
+
@attrs = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def set(key, value)
|
13
|
+
@attrs[key.to_sym] = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def prepare!
|
17
|
+
error("object (key=#{@key}) not found") if not Reactor::Cm::Obj.exists?(@key)
|
18
|
+
#TODO: attribute check
|
19
|
+
end
|
20
|
+
|
21
|
+
def migrate!
|
22
|
+
obj = Reactor::Cm::Obj.get(@key)
|
23
|
+
@attrs.each do |key,value|
|
24
|
+
@obj.set(key,value)
|
25
|
+
end
|
26
|
+
@obj.save!
|
27
|
+
@obj.release!
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
module Plans
|
4
|
+
class UpdateObjClass < CommonObjClass
|
5
|
+
include Prepared
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
super()
|
9
|
+
(name, x), options = separate_arguments(*args)
|
10
|
+
@name = name || options[:name]
|
11
|
+
end
|
12
|
+
|
13
|
+
def prepare!
|
14
|
+
error("objClass #{@name} not found") if Reactor::Cm::ObjClass.exists?(@name)
|
15
|
+
@klass = Reactor::Cm::ObjClass.get(@name)
|
16
|
+
prepare_attrs!(@klass)
|
17
|
+
prepare_params!(@klass)
|
18
|
+
end
|
19
|
+
|
20
|
+
def migrate!
|
21
|
+
migrate_attrs!(@klass)
|
22
|
+
migrate_params!(@klass)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module RailsConnector
|
3
|
+
|
4
|
+
module Meta
|
5
|
+
|
6
|
+
# This method is an equivalent of Rails.logger.silence, which has been deprecated
|
7
|
+
def self.hello_im_rails_and_im_retarted_so_please_be_patient(&block)
|
8
|
+
begin
|
9
|
+
old_logger_level, Rails.logger.level = Rails.logger.level, Logger::ERROR
|
10
|
+
yield self
|
11
|
+
ensure
|
12
|
+
Rails.logger.level = old_logger_level
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.included(base) #:nodoc:
|
17
|
+
# Class enhancements
|
18
|
+
base.extend(ClassMethods)
|
19
|
+
end
|
20
|
+
|
21
|
+
# The RailsConnector::ObjClass object for this file format.
|
22
|
+
# This will always return a proper object, even if no custom
|
23
|
+
# Ruby class exists.
|
24
|
+
def obj_class_definition
|
25
|
+
@obj_class_definition ||= RailsConnector::Meta::EagerLoader.instance.obj_class(self.obj_class)
|
26
|
+
end
|
27
|
+
alias_method :obj_class_def, :obj_class_definition
|
28
|
+
|
29
|
+
# Returns true, if there is a custom Ruby class defined for the object
|
30
|
+
# or false, if it is represented by RailsConnector::Obj
|
31
|
+
def has_custom_ruby_class?
|
32
|
+
self.class.is_custom_ruby_class?
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the custom attributes in the form of a Hash.
|
36
|
+
def custom_attributes
|
37
|
+
self.obj_class_definition.custom_attributes
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns true, if the file format has an attribute of the given name.
|
41
|
+
def custom_attribute?(attr)
|
42
|
+
self.obj_class_definition.custom_attribute?(attr)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns an Array of String of all mandatory attributes, no mather if it's
|
46
|
+
# custom or built-in. Built-in attributes are underscored (valid_from,
|
47
|
+
# not validFrom).
|
48
|
+
# Possible +options+ are:
|
49
|
+
# <tt>:only_custom_attributes</tt>:: Return only custom attributes, omit
|
50
|
+
# built-in attributes like content_type or valid_from.
|
51
|
+
def mandatory_attribute_names(options = {})
|
52
|
+
self.obj_class_definition.mandatory_attribute_names(options)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns true, if the file format has an mandatory attribute of the given name.
|
56
|
+
def mandatory_attribute?(attr)
|
57
|
+
self.obj_class_definition.mandatory_attribute?(attr)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the version of this object. This number is increased every time
|
61
|
+
# this object is released.
|
62
|
+
def version
|
63
|
+
load_meta_details
|
64
|
+
@object_with_meta_data.version.presence.to_i || 0
|
65
|
+
end
|
66
|
+
|
67
|
+
# Returns the time of the reminder, if it is set.
|
68
|
+
def reminder_from
|
69
|
+
load_meta_details
|
70
|
+
@object_with_meta_data.reminder_from.presence &&
|
71
|
+
::RailsConnector::DateAttribute.parse(@object_with_meta_data.reminder_from)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Returns the reminder comment, if a reminder is set.
|
75
|
+
def reminder_comment
|
76
|
+
load_meta_details
|
77
|
+
@object_with_meta_data.reminder_comment
|
78
|
+
end
|
79
|
+
|
80
|
+
# Return the name of the workflow, that is assigned to this object.
|
81
|
+
def workflow_name
|
82
|
+
load_meta_details
|
83
|
+
@object_with_meta_data.workflow_name
|
84
|
+
end
|
85
|
+
|
86
|
+
# Return the current editor as a String. If there is no edited content,
|
87
|
+
# which is always the case in live mode, an empty String is returned.
|
88
|
+
# The 'contents' table is queried for this information.
|
89
|
+
def editor
|
90
|
+
return @editor if @editor
|
91
|
+
|
92
|
+
load_meta_details
|
93
|
+
|
94
|
+
content_id = if self.edited?
|
95
|
+
@object_with_meta_data.edited_content_id
|
96
|
+
else
|
97
|
+
@object_with_meta_data.released_cont_id
|
98
|
+
end
|
99
|
+
|
100
|
+
if content_id
|
101
|
+
content = RailsConnector::Content.find(content_id)
|
102
|
+
@editor = content.editor
|
103
|
+
else
|
104
|
+
@editor = ''
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
# Load the objects details from the `objects' tables.
|
111
|
+
def load_meta_details #:nodoc:
|
112
|
+
return if @object_with_meta_data
|
113
|
+
|
114
|
+
@object_with_meta_data = RailsConnector::ObjectWithMetaData.find(self.id)
|
115
|
+
|
116
|
+
# reset depending instance variables
|
117
|
+
@editor = nil
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
# the methods in this module will become class methods
|
122
|
+
module ClassMethods
|
123
|
+
|
124
|
+
# The RailsConnector::ObjClass object for this file format.
|
125
|
+
# This will only return a proper object if a custom Ruby class exists
|
126
|
+
# and will throw a RuntimeError otherwise.
|
127
|
+
def obj_class_definition
|
128
|
+
raise "Obtaining the obj_class_definition of an Obj without custom Ruby class " \
|
129
|
+
"is logically impossible." unless is_custom_ruby_class?
|
130
|
+
# @obj_class_definition ||= RailsConnector::ObjClass.find_by_name(self.name)
|
131
|
+
@obj_class_definition ||= RailsConnector::Meta::EagerLoader.instance.obj_class(self.name)
|
132
|
+
end
|
133
|
+
alias_method :obj_class_def, :obj_class_definition
|
134
|
+
|
135
|
+
# RailsConnector::AbstractObj returns false, everything else true.
|
136
|
+
def is_custom_ruby_class?
|
137
|
+
self != RailsConnector::AbstractObj
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|