engine-rea 0.2.2 → 0.3.0
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/.rspec +1 -0
- data/Gemfile +3 -2
- data/Gemfile.lock +40 -35
- data/VERSION +1 -1
- data/app/models/rea/categories_entity.rb +7 -0
- data/app/models/rea/category.rb +18 -7
- data/app/models/rea/classification.rb +7 -0
- data/app/models/rea/entities_group.rb +7 -0
- data/app/models/rea/group.rb +5 -17
- data/app/models/rea/rea.rb +7 -0
- data/config/locales/en.yml +2 -0
- data/config/locales/zh-CN.yml +16 -17
- data/db/migrate/20121129100245_create_rea_groups.rb +18 -0
- data/db/migrate/20121129100748_create_rea_categories.rb +19 -0
- data/db/migrate/20121129101744_create_rea_classifications.rb +29 -0
- data/db/migrate/20121130051633_create_rea_entities_groups.rb +13 -0
- data/db/migrate/20121130100600_create_rea_categories_entities.rb +13 -0
- data/engine-rea.gemspec +27 -59
- data/lib/generators/rea/install/install_generator.rb +4 -4
- data/lib/rea/active_record_ext.rb +82 -0
- data/lib/rea/application.rb +55 -21
- data/lib/rea/engine.rb +8 -2
- data/lib/rea.rb +5 -10
- data/spec/dummy/db/schema.rb +61 -1
- data/spec/models/rea/categories_entity_spec.rb +7 -0
- data/spec/models/rea/category_spec.rb +10 -19
- data/spec/models/rea/classification_spec.rb +6 -0
- data/spec/models/rea/entities_group_spec.rb +7 -0
- data/spec/models/rea/group_spec.rb +3 -35
- data/spec/rea/active_record_ext_spec.rb +35 -0
- data/spec/rea/application_spec.rb +17 -0
- data/spec/spec_helper.rb +3 -0
- metadata +40 -59
- data/app/models/rea/category_member.rb +0 -8
- data/app/models/rea/category_type.rb +0 -7
- data/app/models/rea/group_type.rb +0 -7
- data/app/models/rea/identifier.rb +0 -51
- data/app/views/layouts/rea/application.html.erb +0 -14
- data/db/migrate/20120601074531_create_rea_category_types.rb +0 -11
- data/db/migrate/20120601074540_create_rea_categories.rb +0 -12
- data/db/migrate/20120605023205_create_rea_category_members.rb +0 -12
- data/db/migrate/20120605030658_create_rea_groups.rb +0 -20
- data/db/migrate/20120605082028_create_rea_identifiers.rb +0 -11
- data/db/migrate/20120717080004_create_rea_group_types.rb +0 -7
- data/lib/rea/aspect_type/base.rb +0 -10
- data/lib/rea/aspect_type/classification.rb +0 -142
- data/lib/rea/aspect_type/description.rb +0 -8
- data/lib/rea/aspect_type/due_date.rb +0 -34
- data/lib/rea/aspect_type/identification.rb +0 -38
- data/lib/rea/aspect_type.rb +0 -33
- data/lib/rea/meta_type/agent.rb +0 -10
- data/lib/rea/meta_type/commitment.rb +0 -26
- data/lib/rea/meta_type/contract.rb +0 -32
- data/lib/rea/meta_type/conversion.rb +0 -6
- data/lib/rea/meta_type/entity.rb +0 -91
- data/lib/rea/meta_type/event.rb +0 -39
- data/lib/rea/meta_type/exchange.rb +0 -6
- data/lib/rea/meta_type/group.rb +0 -25
- data/lib/rea/meta_type/process.rb +0 -28
- data/lib/rea/meta_type/resource.rb +0 -14
- data/lib/rea/meta_type/schedule.rb +0 -0
- data/lib/rea/meta_type/type.rb +0 -0
- data/lib/rea/meta_type.rb +0 -8
- data/lib/rea/model.rb +0 -65
- data/lib/rea/plugins/active_model.rb +0 -18
- data/spec/models/rea/category_member_spec.rb +0 -9
- data/spec/models/rea/category_type_spec.rb +0 -28
- data/spec/models/rea/group_type_spec.rb +0 -8
- data/spec/models/rea/identifier_spec.rb +0 -48
- data/spec/rea/aspect_type/classification_spec.rb +0 -107
- data/spec/rea/aspect_type/due_date_spec.rb +0 -75
- data/spec/rea/aspect_type/identification_spec.rb +0 -64
- data/spec/rea/aspect_type_spec.rb +0 -44
- data/spec/rea/meta_type/agent_spec.rb +0 -28
- data/spec/rea/meta_type/commitment_spec.rb +0 -45
- data/spec/rea/meta_type/contract_spec.rb +0 -42
- data/spec/rea/meta_type/entity_spec.rb +0 -58
- data/spec/rea/meta_type/event_spec.rb +0 -21
- data/spec/rea/meta_type/group_spec.rb +0 -55
- data/spec/rea/meta_type/process_spec.rb +0 -5
- data/spec/rea/meta_type/resource_spec.rb +0 -65
- data/spec/rea/meta_type_spec.rb +0 -11
- data/spec/rea/model_spec.rb +0 -79
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'thread'
|
2
|
-
module Rea
|
3
|
-
class Identifier < ActiveRecord::Base
|
4
|
-
attr_accessible :name, :value_reset_rule, :id_rule, :last_value
|
5
|
-
SEM = Mutex.new
|
6
|
-
|
7
|
-
validates_presence_of :name, :id_rule
|
8
|
-
validate :instance_validations
|
9
|
-
|
10
|
-
def next_id
|
11
|
-
self.instance_eval "\"#{id_rule}\"" if id_rule
|
12
|
-
end
|
13
|
-
|
14
|
-
def next_value
|
15
|
-
last_value + 1
|
16
|
-
end
|
17
|
-
|
18
|
-
def generate
|
19
|
-
SEM.synchronize do
|
20
|
-
self.class.transaction do
|
21
|
-
if value_reset_rule
|
22
|
-
self.last_value = 0 if self.instance_eval(value_reset_rule)
|
23
|
-
end
|
24
|
-
self.last_value = (self.last_value) || 0
|
25
|
-
id = self.instance_eval "\"#{id_rule}\""
|
26
|
-
self.last_value = next_value
|
27
|
-
self.save!
|
28
|
-
return id
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
protected
|
34
|
-
def instance_validations
|
35
|
-
if id_rule
|
36
|
-
begin
|
37
|
-
self.instance_eval "\"#{id_rule}\""
|
38
|
-
rescue Exception => e
|
39
|
-
errors.add :id_rule, :malformed, :error_message=> e.message
|
40
|
-
end
|
41
|
-
end
|
42
|
-
if value_reset_rule
|
43
|
-
begin
|
44
|
-
self.instance_eval value_reset_rule
|
45
|
-
rescue Exception => e
|
46
|
-
errors.add :value_reset_rule, :malformed, :error_message=> e.message
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>Rea</title>
|
5
|
-
<%= stylesheet_link_tag "rea/application", :media => "all" %>
|
6
|
-
<%= javascript_include_tag "rea/application" %>
|
7
|
-
<%= csrf_meta_tags %>
|
8
|
-
</head>
|
9
|
-
<body>
|
10
|
-
|
11
|
-
<%= yield %>
|
12
|
-
|
13
|
-
</body>
|
14
|
-
</html>
|
@@ -1,11 +0,0 @@
|
|
1
|
-
class CreateReaCategoryTypes < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table :rea_category_types do |t|
|
4
|
-
t.string :name, :null=>false
|
5
|
-
t.boolean :system
|
6
|
-
t.boolean :automatic
|
7
|
-
t.boolean :multiple
|
8
|
-
end
|
9
|
-
add_index :rea_category_types, :name
|
10
|
-
end
|
11
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class CreateReaCategories < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table :rea_categories do |t|
|
4
|
-
t.string :name, :null=>false
|
5
|
-
t.references :category_type
|
6
|
-
t.references :category
|
7
|
-
t.timestamps
|
8
|
-
end
|
9
|
-
add_index :rea_categories, :category_type_id
|
10
|
-
add_index :rea_categories, :category_id
|
11
|
-
end
|
12
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
class CreateReaCategoryMembers < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table :rea_category_members do |t|
|
4
|
-
t.references :entity
|
5
|
-
t.string :entity_type
|
6
|
-
t.references :category
|
7
|
-
t.timestamps
|
8
|
-
end
|
9
|
-
add_index :rea_category_members, [:entity_id, :entity_type]
|
10
|
-
add_index :rea_category_members, :category_id
|
11
|
-
end
|
12
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
class CreateReaGroups < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table :rea_groups do |t|
|
4
|
-
t.string :name, :null=>false
|
5
|
-
t.references :group_type
|
6
|
-
end
|
7
|
-
|
8
|
-
add_index :rea_groups, :group_type_id
|
9
|
-
|
10
|
-
create_table :categories_groups do |t|
|
11
|
-
t.references :category
|
12
|
-
t.references :group
|
13
|
-
end
|
14
|
-
|
15
|
-
add_index :categories_groups, :group_id
|
16
|
-
add_index :categories_groups, :category_id
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
class CreateReaIdentifiers < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table :rea_identifiers do |t|
|
4
|
-
t.string :name, :null=>false
|
5
|
-
t.string :value_reset_rule
|
6
|
-
t.string :id_rule, :null=>false
|
7
|
-
t.integer :last_value, :default=>0
|
8
|
-
t.timestamps
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
data/lib/rea/aspect_type/base.rb
DELETED
@@ -1,142 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module AspectType
|
3
|
-
module Classification
|
4
|
-
def self.included base
|
5
|
-
base.scope :by_category, lambda { |*categories|
|
6
|
-
$options = categories.extract_options!
|
7
|
-
$aspect = base.classification_aspect
|
8
|
-
$condition = {}
|
9
|
-
categories.each do |category|
|
10
|
-
$category_type_name = category.category_type.name
|
11
|
-
$condition["#{$aspect.member_type_for($category_type_name)}_id"] = category.id
|
12
|
-
end
|
13
|
-
$condition.merge! $options
|
14
|
-
base.where($condition)
|
15
|
-
}
|
16
|
-
|
17
|
-
base.send :has_many, :category_members, :class_name=>::Rea::CategoryMember.name, :as=>:entity
|
18
|
-
base.send :has_many, :categories, :class_name=>::Rea::Category.name,
|
19
|
-
:through=>:category_members, :source=>:category
|
20
|
-
|
21
|
-
base.class_eval do
|
22
|
-
|
23
|
-
def self.categories_for member_type
|
24
|
-
self.classification_aspect.categories_for member_type
|
25
|
-
end
|
26
|
-
|
27
|
-
def is? category
|
28
|
-
$field_name = self.class.classification_aspect.member_type_for(category.category_type.name)
|
29
|
-
self.send($field_name) == category
|
30
|
-
end
|
31
|
-
def is_in? category
|
32
|
-
$field_name = self.class.classification_aspect.member_type_for(category.category_type.name)
|
33
|
-
$current = category.class.find(self.send($field_name))
|
34
|
-
while($current) do
|
35
|
-
return true if $current == category
|
36
|
-
$current = $current.parent_category
|
37
|
-
end
|
38
|
-
return false
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
module CategoryType
|
45
|
-
|
46
|
-
def self.included base
|
47
|
-
base.extend ClassMethods
|
48
|
-
end
|
49
|
-
|
50
|
-
module ClassMethods
|
51
|
-
def category_type *category_types, &block
|
52
|
-
$options = category_types.extract_options!
|
53
|
-
category_types.each do |type|
|
54
|
-
$category_type = self.find_or_create_by_name type, $options
|
55
|
-
$category_type.instance_eval &block if block
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def category *category_names, &block
|
61
|
-
$options = category_names.extract_options!
|
62
|
-
category_names.flatten.each do |name|
|
63
|
-
category = self.categories.find_or_create_by_name name, $options
|
64
|
-
category.instance_eval &block if block_given?
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
module Category
|
70
|
-
def category *category_names, &block
|
71
|
-
$options = category_names.extract_options!
|
72
|
-
$options = {:category_type_id=>self.category_type_id, :category_id=>self.id}.merge($options)
|
73
|
-
category_names.flatten.each do |name|
|
74
|
-
$category = self.child_categories.find_or_create_by_name name, $options
|
75
|
-
$categroy.instance_eval &block if block_given?
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
class Aspect < Base
|
81
|
-
|
82
|
-
def members
|
83
|
-
@members ||= {}
|
84
|
-
end
|
85
|
-
|
86
|
-
def member *names, &block
|
87
|
-
$options = names.extract_options!
|
88
|
-
names.each do |name|
|
89
|
-
base.attr_accessible "#{name}_id"
|
90
|
-
base.belongs_to name, :class_name=>::Rea::Category.name
|
91
|
-
members[name] = MemberType.new($options)
|
92
|
-
members[name].instance_eval &block if block
|
93
|
-
#pp members[name]
|
94
|
-
if members[name].multiple_select
|
95
|
-
define_multiple_member name, members[name]
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def member_type_for category_type
|
101
|
-
$types = {}
|
102
|
-
members.each_pair { |k,v| $types[v.category_type_name] = k }
|
103
|
-
$types[category_type.to_sym]
|
104
|
-
end
|
105
|
-
|
106
|
-
def categories_for member_type
|
107
|
-
$member_type = members[member_type]
|
108
|
-
raise "not found member_type #{member_type}" unless $member_type
|
109
|
-
$member_type.category_options
|
110
|
-
end
|
111
|
-
|
112
|
-
private
|
113
|
-
def define_multiple_member name, member
|
114
|
-
base.send :attr_accessible, "#{name.to_s.singularize}_ids"
|
115
|
-
base.send :has_many, name, :through=>:category_members, :source=>:category,
|
116
|
-
:class_name=>::Rea::Category.name, :include=> :category_type,
|
117
|
-
:conditions=>"rea_category_type.name = #{member.category_type_name}"
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
class MemberType < Base
|
122
|
-
|
123
|
-
attr_reader :category_type_name, :multiple_select
|
124
|
-
|
125
|
-
def initialize options={}
|
126
|
-
super
|
127
|
-
@multiple_select = options[:multiple_select] || false
|
128
|
-
end
|
129
|
-
|
130
|
-
def category name, options={}
|
131
|
-
@category_type_name = name
|
132
|
-
end
|
133
|
-
|
134
|
-
def category_options
|
135
|
-
Rea::CategoryType.find_by_name(category_type_name).categories
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module AspectType
|
3
|
-
module DueDate
|
4
|
-
|
5
|
-
class Aspect < Base
|
6
|
-
def member *names
|
7
|
-
$options = names.extract_options!
|
8
|
-
|
9
|
-
base.send :scope, :expired_on, lambda { |*names|
|
10
|
-
$options = names.extract_options!
|
11
|
-
$clause = (names.collect {|name| " #{name} < :now " }).join(" AND ")
|
12
|
-
base.where($clause, :now=>DateTime.now )
|
13
|
-
}
|
14
|
-
base.send :scope, :active_on, lambda { |*names|
|
15
|
-
$options = names.extract_options!
|
16
|
-
$clause = (names.collect {|name| " #{name} > :now " }).join(" AND ")
|
17
|
-
base.where($clause, :now=>DateTime.now )
|
18
|
-
}
|
19
|
-
|
20
|
-
names.each do |name|
|
21
|
-
base.send :attr_accessible, name
|
22
|
-
base.send :define_method, "#{name}_state" do
|
23
|
-
(Time.now > self.send(name)) ? :expired : :active
|
24
|
-
end
|
25
|
-
|
26
|
-
base.send :define_method, "#{name}_expired?" do
|
27
|
-
self.send("#{name}_state") == :expired
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module AspectType
|
3
|
-
module Identification
|
4
|
-
|
5
|
-
def self.included base
|
6
|
-
base.before_create do |object|
|
7
|
-
base.identification_aspect.identifiers.values.each do |val|
|
8
|
-
identifier = Rea::Identifier.find_by_name val.type
|
9
|
-
return unless identifier
|
10
|
-
object.send "#{val.name}=", identifier.generate
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Setup
|
16
|
-
attr_accessor :name, :type
|
17
|
-
def initialize options={}
|
18
|
-
options.keys.each do |key| instance_variable_set("@#{key}", options[key]) end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class Aspect < Base
|
23
|
-
def identifiers
|
24
|
-
@identifiers ||= {}
|
25
|
-
end
|
26
|
-
|
27
|
-
def identifier *names
|
28
|
-
$options = names.extract_options!
|
29
|
-
names.each do |name|
|
30
|
-
$default_id_type = "#{base.name.underscore}.#{name}"
|
31
|
-
$options = {:name=>name,:type=>$default_id_type}.merge($options)
|
32
|
-
identifiers[name] = Setup.new($options)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/rea/aspect_type.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module AspectType
|
3
|
-
|
4
|
-
autoload :Base, 'rea/aspect_type/base'
|
5
|
-
|
6
|
-
TYPES = %W{identification classification due_date description}
|
7
|
-
|
8
|
-
TYPES.each do |type|
|
9
|
-
require "rea/aspect_type/#{type}"
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
module ClassMethods
|
14
|
-
TYPES.each do |pattern|
|
15
|
-
define_method pattern do |*names, &block|
|
16
|
-
$options = names.extract_options!
|
17
|
-
$options.merge! :base=>self
|
18
|
-
self.send :include, "Rea::AspectType::#{pattern.camelize}".constantize
|
19
|
-
self.send :cattr_accessor, "#{pattern}_aspect".to_sym
|
20
|
-
if names.size == 0
|
21
|
-
names << "%s_%s_aspect" % [self.name.underscore, pattern]
|
22
|
-
end
|
23
|
-
names.each do |name|
|
24
|
-
$aspect = "Rea::AspectType::#{pattern.camelize}::Aspect".constantize.new($options)
|
25
|
-
$aspect.instance_eval &block if block
|
26
|
-
self.send "#{pattern}_aspect=", $aspect
|
27
|
-
Rea.context.symbol_table[name] = $aspect
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/rea/meta_type/agent.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module MetaType
|
3
|
-
module Commitment
|
4
|
-
def self.included base
|
5
|
-
base.fields = [:amount]
|
6
|
-
Entity.included base
|
7
|
-
base.extend ::Rea::MetaType::Event::ClassMethods
|
8
|
-
base.extend ClassMethods
|
9
|
-
base.cattr_accessor :event_handler
|
10
|
-
base.after_save :after_save_commitment
|
11
|
-
end
|
12
|
-
|
13
|
-
def after_save_commitment
|
14
|
-
if self.respond_to?(:fulfilled_changed?) && fulfilled_changed?
|
15
|
-
self.instance_exec &self.class.event_handler if self.class.event_handler
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
module ClassMethods
|
20
|
-
def event_creator &block
|
21
|
-
self.event_handler = block
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module MetaType
|
3
|
-
module Contract
|
4
|
-
def self.included base
|
5
|
-
base.fields = nil
|
6
|
-
base.send :include, Entity
|
7
|
-
base.extend ClassMethods
|
8
|
-
end
|
9
|
-
|
10
|
-
module ClassMethods
|
11
|
-
|
12
|
-
def clauses
|
13
|
-
@@clauses ||= []
|
14
|
-
end
|
15
|
-
|
16
|
-
def clause klass_or_symbol, options={}
|
17
|
-
$klass = guess_entity_class klass_or_symbol
|
18
|
-
has_many $klass.name.tableize.to_sym, {:class_name=>$klass.name, :foreign_key=>:contract_id}.merge(options)
|
19
|
-
self.clauses << $klass
|
20
|
-
$klass.belongs_to :contract, :class_name => self.name
|
21
|
-
end
|
22
|
-
|
23
|
-
def party name, klass_or_sym, options={}
|
24
|
-
$klass = guess_entity_class(klass_or_sym)
|
25
|
-
attr_accessible :"#{name}_id"
|
26
|
-
belongs_to name, {:class_name=>$klass.name}.merge(options)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
data/lib/rea/meta_type/entity.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module MetaType
|
3
|
-
module Entity
|
4
|
-
def self.included base
|
5
|
-
base.class_eval do
|
6
|
-
unless self.ancestors.include? ActiveRecord::Base
|
7
|
-
include ::Rea::Plugins::ActiveModel
|
8
|
-
else
|
9
|
-
attr_accessible *self.fields if self.fields
|
10
|
-
end
|
11
|
-
if base.fields
|
12
|
-
validates_presence_of *self.fields
|
13
|
-
end
|
14
|
-
end
|
15
|
-
base.extend ClassMethods
|
16
|
-
base.extend ::Rea::AspectType::ClassMethods
|
17
|
-
end
|
18
|
-
|
19
|
-
module ClassMethods
|
20
|
-
|
21
|
-
def setup options=nil
|
22
|
-
options = {:entity_type=>:active_record}.merge(options)
|
23
|
-
class_option_set :entity_type, options
|
24
|
-
|
25
|
-
case
|
26
|
-
when self.entity_type == :simple
|
27
|
-
attr_accessor :id
|
28
|
-
self.class_eval do
|
29
|
-
def self.find id
|
30
|
-
self.items[id]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def groups; @@groups ||= [] ; end
|
37
|
-
|
38
|
-
def grouping *names
|
39
|
-
$options = names.extract_options!
|
40
|
-
names.each do |name|
|
41
|
-
attr_accessible "#{name}_id"
|
42
|
-
belongs_to name, $options
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def groups_for name
|
47
|
-
klass = Rea.context.symbol_table[name]
|
48
|
-
klass.all
|
49
|
-
end
|
50
|
-
|
51
|
-
def items
|
52
|
-
@@items ||= {}
|
53
|
-
end
|
54
|
-
|
55
|
-
def item name, options={}, &block
|
56
|
-
if self.entity_type == :simple
|
57
|
-
cattr_reader name
|
58
|
-
$item = self.new
|
59
|
-
options.keys.each do |key|
|
60
|
-
$item.instance_variable_set("@#{key}", options[key])
|
61
|
-
end if options
|
62
|
-
self.class_variable_set "@@#{name}", $item
|
63
|
-
items[$item.id] = $item
|
64
|
-
else
|
65
|
-
raise "not support #{self.entity_type} yet!"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
|
-
def specification name, options={}
|
71
|
-
belongs_to name, options
|
72
|
-
end
|
73
|
-
|
74
|
-
protected
|
75
|
-
def guess_entity_class klass_or_symbol
|
76
|
-
$klass = klass_or_symbol.is_a?(Symbol) ? Rea.context.symbol_table[klass_or_symbol] : klass_or_symbol
|
77
|
-
raise "entity not found #{klass_or_symbol}" unless $klass
|
78
|
-
$klass
|
79
|
-
end
|
80
|
-
|
81
|
-
def class_option_set *names
|
82
|
-
$options = names.extract_options!
|
83
|
-
names.each do |name|
|
84
|
-
self.cattr_reader name
|
85
|
-
self.class_variable_set "@@#{name}", $options[name]
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
data/lib/rea/meta_type/event.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
module Rea
|
2
|
-
module MetaType
|
3
|
-
module Event
|
4
|
-
def self.included base
|
5
|
-
base.fields = [:amount]
|
6
|
-
base.send :include, Entity
|
7
|
-
base.extend ClassMethods
|
8
|
-
end
|
9
|
-
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
def provider klass_or_symbol, options={}
|
13
|
-
define_belongs_to_relation :provider, klass_or_symbol, options
|
14
|
-
end
|
15
|
-
|
16
|
-
def recipient klass_or_symbol, options={}
|
17
|
-
define_belongs_to_relation :recipient, klass_or_symbol, options
|
18
|
-
end
|
19
|
-
|
20
|
-
def resource klass_or_symbol, options={}
|
21
|
-
define_belongs_to_relation :resource, klass_or_symbol, options
|
22
|
-
end
|
23
|
-
|
24
|
-
def setup options
|
25
|
-
class_option_set :type, options
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
def define_belongs_to_relation name, klass_or_symbol, options
|
30
|
-
$klass = klass_or_symbol.is_a?(Symbol) ? klass_or_symbol.to_s.camelize.constantize : klass_or_symbol
|
31
|
-
attr_accessible :"#{name}_id"
|
32
|
-
belongs_to name, {:class_name=>$klass.name}.merge(options)
|
33
|
-
validates_presence_of "#{name}_id".to_sym
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|