infopark_reactor 1.10.0.beta → 1.11.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|