engine-rea 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/models/rea/category.rb +4 -0
- data/app/models/rea/category_member.rb +1 -0
- data/app/models/rea/category_type.rb +1 -1
- data/app/models/rea/group.rb +17 -6
- data/app/models/rea/group_type.rb +7 -0
- data/app/models/rea/identifier.rb +12 -3
- data/config/locales/en.yml +4 -0
- data/config/locales/zh-CN.yml +42 -0
- data/db/migrate/20120601074531_create_rea_category_types.rb +1 -1
- data/db/migrate/20120601074540_create_rea_categories.rb +1 -1
- data/db/migrate/20120605030658_create_rea_groups.rb +14 -3
- data/db/migrate/20120605082028_create_rea_identifiers.rb +2 -2
- data/db/migrate/20120717080004_create_rea_group_types.rb +7 -0
- data/engine-rea.gemspec +31 -14
- data/lib/generators/rea/install/install_generator.rb +8 -0
- data/lib/rails_patch.rb +26 -0
- data/lib/rea.rb +25 -1
- data/lib/rea/application.rb +86 -0
- data/lib/rea/aspect_type.rb +28 -6
- data/lib/rea/aspect_type/base.rb +3 -2
- data/lib/rea/aspect_type/classification.rb +142 -0
- data/lib/rea/aspect_type/description.rb +3 -2
- data/lib/rea/aspect_type/due_date.rb +34 -0
- data/lib/rea/aspect_type/identification.rb +38 -0
- data/lib/rea/engine.rb +1 -3
- data/lib/rea/meta_type.rb +1 -1
- data/lib/rea/meta_type/agent.rb +1 -1
- data/lib/rea/meta_type/commitment.rb +5 -6
- data/lib/rea/meta_type/contract.rb +17 -4
- data/lib/rea/meta_type/conversion.rb +6 -0
- data/lib/rea/meta_type/entity.rb +61 -20
- data/lib/rea/meta_type/event.rb +17 -24
- data/lib/rea/meta_type/exchange.rb +6 -0
- data/lib/rea/meta_type/group.rb +25 -0
- data/lib/rea/meta_type/process.rb +28 -0
- data/lib/rea/meta_type/resource.rb +5 -1
- data/lib/rea/model.rb +65 -0
- data/lib/rea/settings.rb +58 -0
- data/spec/dummy/db/schema.rb +1 -56
- data/spec/generators/rea/install/install_generator_spec.rb +2 -0
- data/spec/models/rea/category_member_spec.rb +5 -1
- data/spec/models/rea/category_spec.rb +19 -1
- data/spec/models/rea/category_type_spec.rb +24 -1
- data/spec/models/rea/group_spec.rb +34 -1
- data/spec/models/rea/group_type_spec.rb +8 -0
- data/spec/rea/application_spec.rb +8 -0
- data/spec/rea/aspect_type/classification_spec.rb +107 -0
- data/spec/rea/aspect_type/due_date_spec.rb +75 -0
- data/spec/rea/aspect_type/identification_spec.rb +64 -0
- data/spec/rea/aspect_type_spec.rb +44 -0
- data/spec/rea/engine_spec.rb +0 -3
- data/spec/rea/meta_type/agent_spec.rb +28 -0
- data/spec/rea/meta_type/commitment_spec.rb +45 -0
- data/spec/rea/meta_type/contract_spec.rb +42 -0
- data/spec/rea/meta_type/entity_spec.rb +58 -0
- data/spec/rea/meta_type/event_spec.rb +21 -0
- data/spec/rea/meta_type/group_spec.rb +55 -0
- data/spec/rea/meta_type/process_spec.rb +5 -0
- data/spec/rea/meta_type/resource_spec.rb +65 -0
- data/spec/rea/meta_type_spec.rb +1 -1
- data/spec/rea/model_spec.rb +79 -0
- metadata +32 -15
- data/app/models/rea/group_entity.rb +0 -7
- data/db/migrate/20120605030708_create_rea_group_entities.rb +0 -9
- data/lib/rea/aspect_type/classification_aspect.rb +0 -75
- data/lib/rea/aspect_type/due_date_type.rb +0 -5
- data/lib/rea/aspect_type/identifier_setup.rb +0 -7
- data/lib/rea/dsl.rb +0 -24
- data/lib/rea/dsl/behavioral.rb +0 -50
- data/lib/rea/dsl/structural.rb +0 -53
- data/spec/models/rea/group_entity_spec.rb +0 -5
- data/spec/rea/dsl/behavioral_spec.rb +0 -149
- data/spec/rea/dsl/structural_spec.rb +0 -299
- data/spec/rea/dsl_spec.rb +0 -11
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::AspectType::Classification do
|
4
|
+
let(:category_type) { Rea::CategoryType.create :name=>:category_type }
|
5
|
+
let(:category_type_multi) { Rea::CategoryType.create :name=>:category_type_multi }
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
category_type.category :cate_l1_1, :cate_l1_2
|
9
|
+
category_type.category :cate_l1_3 do
|
10
|
+
category :cate_l2_1, :cate_l2_2
|
11
|
+
end
|
12
|
+
category_type_multi.category :catem_l1_1, :catem_l1_2
|
13
|
+
category_type_multi.category :catem_l1_3 do
|
14
|
+
category :catem_l2_1, :catem_l2_2
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
context :syntax_symbol_table_classification_aspect do
|
20
|
+
with_model :resource do
|
21
|
+
table do |t|
|
22
|
+
t.string :name
|
23
|
+
t.decimal :value
|
24
|
+
t.references :member_type
|
25
|
+
end
|
26
|
+
model do
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
before :each do
|
31
|
+
Rea.model do
|
32
|
+
entities do
|
33
|
+
resource :resource do
|
34
|
+
classification :auto_classification=>false do
|
35
|
+
member :member_type, :multiple_select=>false do
|
36
|
+
category :category_type
|
37
|
+
end
|
38
|
+
member :member_type_multi, :multiple_select=>true do
|
39
|
+
category :category_type_multi
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
subject { Rea.context.symbol_table[:resource_classification_aspect] }
|
49
|
+
it { should_not be_nil }
|
50
|
+
it { should be_a_kind_of Rea::AspectType::Classification::Aspect }
|
51
|
+
its(:members) { should have(2).items }
|
52
|
+
it { subject.member_type_for(:category_type).should == :member_type }
|
53
|
+
it { subject.member_type_for(:category_type_multi).should == :member_type_multi }
|
54
|
+
|
55
|
+
context :members do
|
56
|
+
subject { Rea.context.symbol_table[:resource_classification_aspect].members[:member_type_multi] }
|
57
|
+
its(:multiple_select) { should be_true }
|
58
|
+
end
|
59
|
+
|
60
|
+
context :model do
|
61
|
+
let(:category) { ::Rea::Category.find_by_name :cate_l1_1 }
|
62
|
+
|
63
|
+
context :class do
|
64
|
+
before :each do
|
65
|
+
Resource.delete_all
|
66
|
+
10.times do
|
67
|
+
Resource.create! :name=>:name, :value=>10, :member_type_id=>category.id
|
68
|
+
end
|
69
|
+
end
|
70
|
+
subject { Resource }
|
71
|
+
it { subject.by_category(category).size.should == 10 }
|
72
|
+
it { subject.categories_for(:member_type).size.should == 5 }
|
73
|
+
end
|
74
|
+
|
75
|
+
context :instance do
|
76
|
+
subject { Resource.create! :name=>:name, :value=>1, :member_type_id=>category.id }
|
77
|
+
it { subject.is?(category).should be_true }
|
78
|
+
it { subject.is_in?(category).should be_true }
|
79
|
+
end
|
80
|
+
|
81
|
+
context :instance_multi do
|
82
|
+
let(:resource_multi) do
|
83
|
+
ids = Rea::CategoryType.find_by_name(:category_type_multi).category_ids
|
84
|
+
Resource.create! :name=>:name, :value=>1, :member_type_multi_ids=> ids
|
85
|
+
end
|
86
|
+
|
87
|
+
subject { resource_multi }
|
88
|
+
|
89
|
+
its(:member_type_multi) { should have(5).items }
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context :category_type_and_category do
|
97
|
+
|
98
|
+
context :category_type do
|
99
|
+
subject { category_type }
|
100
|
+
its(:categories) { should have(5).items }
|
101
|
+
context :category do
|
102
|
+
subject{ Rea::Category.find_by_name 'cate_l1_3' }
|
103
|
+
its(:child_categories) { should have(2).items }
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::AspectType::DueDate do
|
4
|
+
|
5
|
+
with_model :resource do
|
6
|
+
table do |t|
|
7
|
+
t.string :name
|
8
|
+
t.decimal :value
|
9
|
+
t.datetime :deadline
|
10
|
+
end
|
11
|
+
model do
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
before :each do
|
16
|
+
Rea.model do
|
17
|
+
entities do
|
18
|
+
resource :resource do
|
19
|
+
due_date do
|
20
|
+
member :deadline, :editable=>true
|
21
|
+
member :auto_date, :editable=>false, :activation_rule=>proc{Time.now}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context :syntax do
|
29
|
+
context :aspect do
|
30
|
+
subject { Rea.context.symbol_table[:resource_due_date_aspect] }
|
31
|
+
it(:member) { subject.respond_to?(:member).should be_true }
|
32
|
+
end
|
33
|
+
context :entity_class do
|
34
|
+
subject { Resource }
|
35
|
+
it(:expired_on){ subject.respond_to?(:expired_on).should be_true }
|
36
|
+
it(:active_on){ subject.respond_to?(:active_on).should be_true }
|
37
|
+
|
38
|
+
context :with_data do
|
39
|
+
before :each do
|
40
|
+
subject.delete_all
|
41
|
+
10.times do
|
42
|
+
subject.create :name=>:name1, :value=>1, :deadline=>1.days.ago
|
43
|
+
subject.create :name=>:name2, :value=>1, :deadline=>1.days.from_now
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it :active_and_expired do
|
48
|
+
subject.count.should == 20
|
49
|
+
subject.active_on(:deadline).size.should == 10
|
50
|
+
subject.expired_on(:deadline).size.should == 10
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
context :entity_instance do
|
56
|
+
subject { Resource.new }
|
57
|
+
its(:public_methods) { should include :deadline, :deadline_state, :deadline_expired? }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context :model do
|
62
|
+
context :active do
|
63
|
+
subject { Resource.new :deadline=> 1.days.from_now }
|
64
|
+
its(:deadline_state) { should == :active }
|
65
|
+
its(:deadline_expired?) { should be_false }
|
66
|
+
end
|
67
|
+
context :expired do
|
68
|
+
subject { Resource.new :deadline=> 1.days.ago }
|
69
|
+
its(:deadline_state) { should == :expired }
|
70
|
+
its(:deadline_expired?) { should be_true }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::AspectType::Identification do
|
4
|
+
|
5
|
+
def valid_attributes
|
6
|
+
{:name=>:name, :value=>1}
|
7
|
+
end
|
8
|
+
|
9
|
+
with_model :resource do
|
10
|
+
table do |t|
|
11
|
+
t.string :name
|
12
|
+
t.decimal :value
|
13
|
+
t.string :sn
|
14
|
+
t.string :sn_other
|
15
|
+
end
|
16
|
+
model do
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
before :each do
|
21
|
+
Rea.model do
|
22
|
+
entities do
|
23
|
+
resource :resource do
|
24
|
+
identification do
|
25
|
+
identifier :sn
|
26
|
+
identifier :sn_other, :type=>"resource.sn2"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context :syntax do
|
34
|
+
subject { Rea.context.symbol_table[:resource_identification_aspect] }
|
35
|
+
its(:identifiers) { should have(2).items }
|
36
|
+
it(:default_type) { subject.identifiers[:sn].type.should == "resource.sn" }
|
37
|
+
it(:customize_type) { subject.identifiers[:sn_other].type.should == 'resource.sn2'}
|
38
|
+
end
|
39
|
+
|
40
|
+
context :callback do
|
41
|
+
before :each do
|
42
|
+
Rea::Identifier.delete_all
|
43
|
+
Rea::Identifier.create :name=>"resource.sn", :id_rule=>"RESOURCE_SN"
|
44
|
+
Rea::Identifier.create :name=>"resource.sn2", :id_rule=>"RESOUCE_SN2"
|
45
|
+
end
|
46
|
+
|
47
|
+
context :update do
|
48
|
+
let(:resource) { Resource.create! valid_attributes }
|
49
|
+
subject { resource }
|
50
|
+
before(:each) { resource.save }
|
51
|
+
it { should be_valid }
|
52
|
+
it { should_not be_sn_changed }
|
53
|
+
end
|
54
|
+
|
55
|
+
context :create do
|
56
|
+
subject { Resource.create! valid_attributes }
|
57
|
+
before(:each) { subject.reload }
|
58
|
+
its(:sn) { should == "RESOURCE_SN" }
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::AspectType do
|
4
|
+
|
5
|
+
with_model :resource do
|
6
|
+
table do |t|
|
7
|
+
t.string :name
|
8
|
+
t.decimal :value
|
9
|
+
end
|
10
|
+
model do
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
Rea.model do
|
16
|
+
entities do
|
17
|
+
resource :resource
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def valid_attributes
|
23
|
+
{:name=>:name, :value=>1}
|
24
|
+
end
|
25
|
+
|
26
|
+
context :syntax do
|
27
|
+
subject { Resource }
|
28
|
+
|
29
|
+
%W{classification identification description due_date}.each do |method|
|
30
|
+
context "#{method}_context" do
|
31
|
+
before(:each) do
|
32
|
+
subject.send method, :name
|
33
|
+
end
|
34
|
+
it("respond_to? #{method}"){ subject.respond_to?(method).should be_true }
|
35
|
+
it("block called #{method}") do
|
36
|
+
expect { |b| subject.send(method,:"#{method}_aspect", &b) }.to yield_control
|
37
|
+
end
|
38
|
+
its("ancestors") { should include "Rea::AspectType::#{method.camelize}".constantize }
|
39
|
+
its("#{method}_aspect") { should be_a_kind_of "Rea::AspectType::#{method.camelize}::Aspect".constantize }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/spec/rea/engine_spec.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::MetaType::Agent do
|
4
|
+
|
5
|
+
context :active_record_resource_define do
|
6
|
+
with_model :agent do
|
7
|
+
table do |t|
|
8
|
+
t.string :name
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
before(:each) do
|
13
|
+
Rea.model do
|
14
|
+
entities do
|
15
|
+
agent :agent
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
subject { Agent.new :name=>:name }
|
21
|
+
it { should be_valid }
|
22
|
+
it :name_not_nil do
|
23
|
+
subject.name = nil
|
24
|
+
should_not be_valid
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::MetaType::Commitment do
|
4
|
+
|
5
|
+
with_model :commitment do
|
6
|
+
table do |t|
|
7
|
+
t.references :provider
|
8
|
+
t.references :resource
|
9
|
+
t.decimal :amount
|
10
|
+
t.boolean :fulfilled
|
11
|
+
end
|
12
|
+
model do
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
before(:each) do
|
17
|
+
Rea.model do
|
18
|
+
entities do
|
19
|
+
commitment :commitment, :type=>:increment do
|
20
|
+
event_creator do
|
21
|
+
raise :callback
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context :syntax do
|
30
|
+
subject { Rea.context.symbol_table[:commitment] }
|
31
|
+
its(:ancestors) { should include Rea::MetaType::Commitment }
|
32
|
+
its(:event_handler) {should_not be_nil }
|
33
|
+
end
|
34
|
+
|
35
|
+
context :model do
|
36
|
+
subject { Commitment.new :amount=>1 }
|
37
|
+
it {
|
38
|
+
expect do |b|
|
39
|
+
Commitment.event_creator &b
|
40
|
+
subject.fulfilled = true
|
41
|
+
subject.save
|
42
|
+
end.to yield_control
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::MetaType::Contract do
|
4
|
+
|
5
|
+
with_model :contract do
|
6
|
+
table do |t|
|
7
|
+
end
|
8
|
+
model do
|
9
|
+
end
|
10
|
+
end
|
11
|
+
with_model :agent do
|
12
|
+
|
13
|
+
end
|
14
|
+
with_model :commitment do
|
15
|
+
table do
|
16
|
+
end
|
17
|
+
model do
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
before(:each) do
|
22
|
+
Rea.model do
|
23
|
+
entities do
|
24
|
+
agent :agent
|
25
|
+
commitment :commitment
|
26
|
+
contract :contract do
|
27
|
+
clause :commitment
|
28
|
+
party :buyer, Agent
|
29
|
+
party :seller, :agent
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context :syntax do
|
36
|
+
subject { Rea.context.symbol_table[:contract] }
|
37
|
+
it { should_not be_nil }
|
38
|
+
its(:clauses) { should include Commitment }
|
39
|
+
its(:reflect_on_all_associations) { should have(3).items }
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rea::MetaType::Entity do
|
4
|
+
|
5
|
+
with_model :agent do
|
6
|
+
table do |t|
|
7
|
+
t.string :name
|
8
|
+
t.references :group
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
with_model :group do
|
13
|
+
table do |t|
|
14
|
+
t.string :name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
before :each do
|
19
|
+
Rea.model do
|
20
|
+
entities do
|
21
|
+
group :group
|
22
|
+
agent :agent do
|
23
|
+
grouping :group
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context :syntax do
|
30
|
+
subject { Rea.context.symbol_table[:agent] }
|
31
|
+
it { should == Agent }
|
32
|
+
context :group_reflect do
|
33
|
+
subject { Agent.reflect_on_association(:group) }
|
34
|
+
it { should_not be_nil }
|
35
|
+
its(:macro) { should == :belongs_to }
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
context :model do
|
41
|
+
before :each do
|
42
|
+
Agent.delete_all
|
43
|
+
Group.delete_all
|
44
|
+
Group.create! :name=>:group
|
45
|
+
2.times do
|
46
|
+
Agent.create! :name=>:agent, :group_id=>Group.last.id
|
47
|
+
end
|
48
|
+
end
|
49
|
+
context :class do
|
50
|
+
subject { Agent }
|
51
|
+
it :groups_for do
|
52
|
+
subject.groups_for(:group).should have(1).items
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|