engine-rea 0.2.1 → 0.2.2
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/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
|