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.
Files changed (75) hide show
  1. data/VERSION +1 -1
  2. data/app/models/rea/category.rb +4 -0
  3. data/app/models/rea/category_member.rb +1 -0
  4. data/app/models/rea/category_type.rb +1 -1
  5. data/app/models/rea/group.rb +17 -6
  6. data/app/models/rea/group_type.rb +7 -0
  7. data/app/models/rea/identifier.rb +12 -3
  8. data/config/locales/en.yml +4 -0
  9. data/config/locales/zh-CN.yml +42 -0
  10. data/db/migrate/20120601074531_create_rea_category_types.rb +1 -1
  11. data/db/migrate/20120601074540_create_rea_categories.rb +1 -1
  12. data/db/migrate/20120605030658_create_rea_groups.rb +14 -3
  13. data/db/migrate/20120605082028_create_rea_identifiers.rb +2 -2
  14. data/db/migrate/20120717080004_create_rea_group_types.rb +7 -0
  15. data/engine-rea.gemspec +31 -14
  16. data/lib/generators/rea/install/install_generator.rb +8 -0
  17. data/lib/rails_patch.rb +26 -0
  18. data/lib/rea.rb +25 -1
  19. data/lib/rea/application.rb +86 -0
  20. data/lib/rea/aspect_type.rb +28 -6
  21. data/lib/rea/aspect_type/base.rb +3 -2
  22. data/lib/rea/aspect_type/classification.rb +142 -0
  23. data/lib/rea/aspect_type/description.rb +3 -2
  24. data/lib/rea/aspect_type/due_date.rb +34 -0
  25. data/lib/rea/aspect_type/identification.rb +38 -0
  26. data/lib/rea/engine.rb +1 -3
  27. data/lib/rea/meta_type.rb +1 -1
  28. data/lib/rea/meta_type/agent.rb +1 -1
  29. data/lib/rea/meta_type/commitment.rb +5 -6
  30. data/lib/rea/meta_type/contract.rb +17 -4
  31. data/lib/rea/meta_type/conversion.rb +6 -0
  32. data/lib/rea/meta_type/entity.rb +61 -20
  33. data/lib/rea/meta_type/event.rb +17 -24
  34. data/lib/rea/meta_type/exchange.rb +6 -0
  35. data/lib/rea/meta_type/group.rb +25 -0
  36. data/lib/rea/meta_type/process.rb +28 -0
  37. data/lib/rea/meta_type/resource.rb +5 -1
  38. data/lib/rea/model.rb +65 -0
  39. data/lib/rea/settings.rb +58 -0
  40. data/spec/dummy/db/schema.rb +1 -56
  41. data/spec/generators/rea/install/install_generator_spec.rb +2 -0
  42. data/spec/models/rea/category_member_spec.rb +5 -1
  43. data/spec/models/rea/category_spec.rb +19 -1
  44. data/spec/models/rea/category_type_spec.rb +24 -1
  45. data/spec/models/rea/group_spec.rb +34 -1
  46. data/spec/models/rea/group_type_spec.rb +8 -0
  47. data/spec/rea/application_spec.rb +8 -0
  48. data/spec/rea/aspect_type/classification_spec.rb +107 -0
  49. data/spec/rea/aspect_type/due_date_spec.rb +75 -0
  50. data/spec/rea/aspect_type/identification_spec.rb +64 -0
  51. data/spec/rea/aspect_type_spec.rb +44 -0
  52. data/spec/rea/engine_spec.rb +0 -3
  53. data/spec/rea/meta_type/agent_spec.rb +28 -0
  54. data/spec/rea/meta_type/commitment_spec.rb +45 -0
  55. data/spec/rea/meta_type/contract_spec.rb +42 -0
  56. data/spec/rea/meta_type/entity_spec.rb +58 -0
  57. data/spec/rea/meta_type/event_spec.rb +21 -0
  58. data/spec/rea/meta_type/group_spec.rb +55 -0
  59. data/spec/rea/meta_type/process_spec.rb +5 -0
  60. data/spec/rea/meta_type/resource_spec.rb +65 -0
  61. data/spec/rea/meta_type_spec.rb +1 -1
  62. data/spec/rea/model_spec.rb +79 -0
  63. metadata +32 -15
  64. data/app/models/rea/group_entity.rb +0 -7
  65. data/db/migrate/20120605030708_create_rea_group_entities.rb +0 -9
  66. data/lib/rea/aspect_type/classification_aspect.rb +0 -75
  67. data/lib/rea/aspect_type/due_date_type.rb +0 -5
  68. data/lib/rea/aspect_type/identifier_setup.rb +0 -7
  69. data/lib/rea/dsl.rb +0 -24
  70. data/lib/rea/dsl/behavioral.rb +0 -50
  71. data/lib/rea/dsl/structural.rb +0 -53
  72. data/spec/models/rea/group_entity_spec.rb +0 -5
  73. data/spec/rea/dsl/behavioral_spec.rb +0 -149
  74. data/spec/rea/dsl/structural_spec.rb +0 -299
  75. data/spec/rea/dsl_spec.rb +0 -11
@@ -1,5 +0,0 @@
1
- class Rea::AspectType::DueDateType < Rea::AspectType::Base
2
-
3
- attr_reader :name, :activation_rule
4
-
5
- end
@@ -1,7 +0,0 @@
1
- module Rea
2
- module AspectType
3
- class IdentifierSetup < Base
4
- attr_reader :name, :identifier
5
- end
6
- end
7
- end
@@ -1,24 +0,0 @@
1
- module Rea
2
- module Dsl
3
-
4
- autoload :Structural, 'rea/dsl/structural'
5
- autoload :Behavioral, 'rea/dsl/behavioral'
6
-
7
-
8
- def self.included base
9
- base.extend ClassMethods
10
- base.cattr_reader :rea, :rea_ast
11
- base.cattr_accessor :type, :fields
12
- base.class_variable_set "@@rea", {}
13
- base.class_variable_set "@@rea_ast", {}
14
- base.class_eval do
15
- include Structural
16
- include Behavioral
17
- end
18
- end
19
-
20
- module ClassMethods
21
- end
22
- end
23
- end
24
-
@@ -1,50 +0,0 @@
1
- module Rea
2
- module Dsl
3
- module Behavioral
4
- def self.included base
5
- base.extend ClassMethods
6
- end
7
-
8
- def create_id_string
9
- id_setup = self.class.rea_ast[:identifier]
10
- self.send("#{id_setup.name}=", Rea::Identifier.find_last_by_name(id_setup.identifier).try(:generate))
11
- end
12
-
13
- module ClassMethods
14
-
15
- def classification options={}, &block
16
- include ::Rea::AspectType::Classification
17
- rea_ast[:classification] = {}
18
- Rea::CategoryType.find_or_create_by_name name.to_s, options
19
- block.call if block_given?
20
- end
21
-
22
-
23
- def identification name, identifier
24
- rea_ast[:identifier] = ::Rea::AspectType::IdentifierSetup.new :name=>name, :identifier=>identifier
25
- self.before_create :create_id_string
26
- end
27
-
28
- def description name, media, options={}
29
- rea[name] = ::Rea::AspectType::Description.new :name=>name, :media=>media
30
- end
31
-
32
- def due_date name, options={}
33
- options = {:name=>name, :activation_rule=>'true'}.merge(options)
34
- rea[name] = ::Rea::AspectType::DueDateType.new options
35
- define_method "#{name}_state".to_sym do
36
- if try(name).nil?
37
- :disabled
38
- else
39
- if send(name) > Time.now
40
- :incoming
41
- else
42
- :expired
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,53 +0,0 @@
1
- module Rea
2
- module Dsl
3
- module Structural
4
- def self.included base
5
- base.extend ClassMethods
6
- if base == ActiveRecord::Base
7
-
8
- else
9
- base.class_eval do
10
- include ::Rea::Plugins::ActiveModel
11
- def initialize options = {}
12
- options.keys.each do |key|
13
- instance_variable_set "@#{key}", options[key]
14
- end
15
- end
16
- end
17
- end
18
- end
19
-
20
-
21
- module ClassMethods
22
-
23
- def acts_as_resource options={}, &block
24
- include ::Rea::MetaType::Resource
25
- block.call if block_given?
26
- end
27
-
28
-
29
- def acts_as_commitment options={}, &block
30
- include ::Rea::MetaType::Commitment
31
- yield
32
- end
33
-
34
- def acts_as_event options={}, &block
35
- include ::Rea::MetaType::Event
36
- block.call if block_given?
37
- end
38
-
39
- def acts_as_agent options={}, &block
40
- include ::Rea::MetaType::Agent
41
- yield if block_given?
42
- end
43
-
44
- def acts_as_contract options={}
45
- include ::Rea::MetaType::Contract
46
- yield if block_given?
47
- end
48
-
49
- end
50
-
51
- end
52
- end
53
- end
@@ -1,5 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rea::GroupEntity do
4
- pending "add some examples to (or delete) #{__FILE__}"
5
- end
@@ -1,149 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rea::Dsl::Behavioral do
4
-
5
- context :identification do
6
- with_model :entity do
7
- table do |t|
8
- t.string :name
9
- t.string :value
10
- t.string :sn
11
- end
12
- model do
13
- acts_as_resource do
14
- identification :sn, :entity_sn
15
- end
16
- end
17
- end
18
-
19
- context :sematics do
20
- subject { Entity.rea_ast }
21
- its([:identifier]) { should be_a_kind_of Rea::AspectType::IdentifierSetup }
22
- end
23
-
24
- context :model do
25
- subject { Entity.create :name=>:entity, :value=>1 }
26
-
27
- before(:all) { Rea::Identifier.create! :name=>:entity_sn, :id_rule=>'#{"%010d" % last_value}' }
28
-
29
- it { should be_valid }
30
- its(:sn) { should_not be_nil }
31
- its(:sn) { should =~ /\d{10}/ }
32
- end
33
-
34
- end
35
-
36
- context :classification do
37
-
38
- with_model :entity do
39
- table do |t|
40
- t.string :name
41
- t.string :value
42
- t.string :category
43
- end
44
- model do
45
- acts_as_resource do
46
- classification do
47
- category_type 'category_type_one' do |ct|
48
- ct.category :cate_1 do |c|
49
- c.category :cate_2, :cate_3
50
- end
51
- end
52
- category_type 'category_type_two', :automatic=>true, :system=>true do |ct|
53
- ct.category :category_one, :category_two
54
- ct.category :category_tree do |c|
55
- c.category :category_node_1, :category_node_2, :category_node_3
56
- end
57
- end
58
- end
59
- member :category, :type=>:category_type_one
60
- end
61
- end
62
- end
63
-
64
- context :sematics do
65
-
66
- context :category_type_defaults do
67
- subject { Rea::CategoryType.find_by_name 'category_type_one' }
68
-
69
- it { should_not be_nil }
70
- it { should_not be_system }
71
- it { should_not be_multiple }
72
- it { should_not be_automatic }
73
- end
74
-
75
- context :category_type_two do
76
- subject { Rea::CategoryType.find_by_name 'category_type_two' }
77
-
78
- it { should_not be_nil }
79
- its(:categories) { should have(6).items }
80
- context :category_tree do
81
- subject { Rea::Category.find_by_name('category_tree').child_categories }
82
- it { should have(3).items }
83
- end
84
- end
85
-
86
- context :rea do
87
- subject { Entity.rea }
88
- its([:category]) { should be_a_kind_of(Rea::AspectType::MemberType) }
89
- end
90
- context :member_field do
91
- subject { Entity.rea[:category] }
92
- its(:category_options) { should have(3).items }
93
- end
94
- end
95
- context :model do
96
- context :entity do
97
- context :methods do
98
- let(:cate_3) { Rea::Category.find_by_name :cate_3 }
99
- let(:cate_1) { Rea::Category.find_by_name :cate_1 }
100
- subject { Entity.create :name=>:name, :value=>1, :category=>:cate_3 }
101
- it { subject.is(cate_3).should be_true }
102
- it { subject.is_in(cate_1).should be_true }
103
- end
104
- end
105
- end
106
- end
107
-
108
- context :description do
109
-
110
- with_model :entity do
111
- table do |t|
112
- end
113
- model do
114
- acts_as_resource do
115
- description :text, :text
116
- description :markdown, :md
117
- end
118
- end
119
- end
120
-
121
- subject { Entity.rea }
122
- its([:text]) { should be_a_kind_of(Rea::AspectType::Description) }
123
- end
124
-
125
- context :due_date do
126
- with_model :entity do
127
- table do |t|
128
- t.datetime :date_one
129
- t.datetime :date_two
130
- end
131
- model do
132
- acts_as_resource do
133
- due_date :date_one
134
- due_date :date_two, :activation_rule=>'date_one.nil?'
135
- end
136
- end
137
- end
138
-
139
- context :sematics do
140
- subject { Entity.rea }
141
- its([:date_one]) { should be_a_kind_of(::Rea::AspectType::DueDateType) }
142
- end
143
- context :model do
144
- subject { Entity.new :date_one=>1.day.ago, :date_two=>nil }
145
- its(:date_one_state) { should == :expired }
146
- its(:date_two_state) { should == :disabled }
147
- end
148
- end
149
- end
@@ -1,299 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rea::Dsl::Structural do
4
- shared_examples "entities" do |attrs, defaults|
5
- context :definations do
6
- let!(:entity) { entity_class.new defaults }
7
- subject { entity_class }
8
- attrs.each do |attr|
9
- its(:public_instance_methods) { should include attr }
10
- end
11
- end
12
- context :validations do
13
- context :valid do
14
- subject { (entity_class).new defaults }
15
- after(:each) { pp subject.errors unless subject.valid? }
16
- it { should be_valid }
17
- end
18
- context :invalid do
19
- subject { (entity_class).new }
20
- it { should_not be_valid }
21
- end
22
- end
23
- end
24
-
25
- def self.create_entity_model name, columns = [:name, :value], &block
26
- with_model name do
27
- table do |t|
28
- columns.each do |c| t.string c end
29
- end
30
- model &block
31
- end
32
- let!(:entity_class) { name.to_s.camelize.constantize }
33
- end
34
-
35
-
36
- context :acts_as_resource do
37
- context :active_record do
38
- with_model :resource do
39
- table do |t|
40
- t.string :name
41
- t.decimal :value
42
- end
43
- model do
44
- acts_as_resource
45
- end
46
- end
47
- let!(:entity_class) { Resource }
48
- include_examples "entities", [:name, :value], :name=>:name, :value=>1
49
- end
50
-
51
- context :simple_class do
52
- class SimpleResource
53
- include Rea::Dsl
54
- acts_as_resource do
55
- item :rmb, :id=>1, :value=>1
56
- item :usd, :id=>2, :value=>6.78
57
- end
58
- end
59
-
60
- entity_class = SimpleResource
61
- let!(:entity_class) { entity_class }
62
- include_examples "entities", [:name, :value], :name=>:name, :value=>1
63
- context :nested_items do
64
- subject { entity_class }
65
- its("rmb.value") { should == 1 }
66
- its("rmb.name") { should == "rmb" }
67
- its("usd.value") { should == 6.78 }
68
- end
69
- end
70
- end
71
-
72
- context :acts_as_agent do
73
- context :active_record do
74
- create_entity_model(:agent, [:name]) do acts_as_agent end
75
- include_examples "entities", [:name], :name=>:name
76
- end
77
-
78
- context :simple_class do
79
- class SimpleAgent
80
- include Rea::Dsl
81
- acts_as_agent do
82
- item :facebook, :id=>1
83
- item :google, :id=>2
84
- end
85
- end
86
- entity_class = SimpleAgent
87
- let!(:entity_class) { entity_class}
88
- include_examples "entities", [:name], :name=>:name
89
- context :nested_items do
90
- subject { entity_class }
91
- its("facebook.name") { should == "facebook" }
92
- end
93
- end
94
-
95
- end
96
-
97
- context :acts_as_event do
98
- context :active_record do
99
- with_model :resource do
100
- table do |t|
101
- t.string :name
102
- t.decimal :value
103
- end
104
- model do
105
- acts_as_resource
106
- end
107
- end
108
- with_model :agent do
109
- table do |t|
110
- t.string :name
111
- end
112
- model do
113
- acts_as_agent
114
- end
115
- end
116
- with_model :increment_event do
117
- table do |t|
118
- t.references :resource
119
- t.references :provider
120
- t.decimal :amount
121
- t.timestamps
122
- end
123
- model do
124
- acts_as_event do
125
- resource Resource
126
- provider Agent
127
- end
128
- end
129
- end
130
- let!(:entity_class) { IncrementEvent }
131
- include_examples "entities", [:resource, :amount, :provider ], {:resource_id=>1,:provider_id=>1,:amount=>1}
132
- end
133
-
134
- end
135
- context :acts_as_increment_commitment do
136
- context :active_record do
137
- with_model :resource do
138
- table do |t|
139
- t.string :name
140
- t.decimal :value
141
- end
142
- model do
143
- acts_as_resource
144
- end
145
- end
146
- with_model :agent do
147
- table do |t|
148
- t.string :name
149
- end
150
- model do
151
- acts_as_agent
152
- end
153
- end
154
- with_model :increment_event do
155
- table do |t|
156
- t.references :resource
157
- t.references :provider
158
- t.decimal :amount
159
- t.timestamps
160
- end
161
- model do
162
- acts_as_event do
163
- resource Resource
164
- provider Agent
165
- end
166
- end
167
- end
168
-
169
- with_model :increment_commitment do
170
- table do |t|
171
- t.references :resource
172
- t.references :provider
173
- t.decimal :amount
174
- t.boolean :fulfilled, :default=>false
175
- t.timestamps
176
- end
177
- model do
178
- acts_as_commitment do
179
- resource Resource
180
- provider Agent
181
- event_creator IncrementEvent
182
- end
183
- end
184
- end
185
- let!(:entity_class) { IncrementCommitment }
186
- include_examples "entities", [:resource, :amount, :provider ], {:resource_id=>1,:provider_id=>1,:amount=>1}
187
-
188
- context :fulfill do
189
- subject { IncrementCommitment }
190
- its(:event_creator) { should == IncrementEvent }
191
- end
192
-
193
- context :callback do
194
- subject { IncrementCommitment.new :resource_id=>1, :provider_id=>1, :amount=>1, :fulfilled=>true }
195
- it :should_create_event do
196
- expect {
197
- subject.save
198
- }.to change {IncrementEvent.count}
199
- end
200
- it :event_sum_amount_should_plus_when_fulfill do
201
- expect {
202
- subject.save
203
- }.to change{IncrementEvent.sum(:amount)}.by(1)
204
- end
205
- it :event_sum_amount_should_minus_when_not_fulfill do
206
- subject.save
207
- subject.fulfilled = false
208
- expect {
209
- subject.save
210
- }.to change{IncrementEvent.sum(:amount)}.by(-1)
211
- end
212
- end
213
- end
214
- end
215
-
216
- context :acts_as_contract do
217
- context :normal do
218
- with_model :increment_commitment do
219
- table do |t|
220
- t.references :provider
221
- t.references :resource
222
- t.references :contract
223
- t.decimal :amount
224
- t.boolean :fulfilled
225
- end
226
- model do
227
- acts_as_commitment do
228
- end
229
- end
230
- end
231
- with_model :decrement_commitment do
232
- table do |t|
233
- t.references :contract
234
- end
235
- model do
236
- acts_as_commitment do
237
- end
238
- end
239
- end
240
- with_model :order do
241
- table do |t|
242
- end
243
- model do
244
- acts_as_contract do
245
- clause IncrementCommitment
246
- clause DecrementCommitment
247
- end
248
- end
249
- end
250
- context :sematics do
251
- context :contract do
252
- subject { Order }
253
- its(:public_instance_methods) { should include :increment_commitments }
254
- its(:public_instance_methods) { should include :decrement_commitments }
255
- end
256
- context :commitment do
257
- subject { IncrementCommitment }
258
- its(:public_instance_methods) { should include :contract }
259
- end
260
- end
261
- context :model do
262
- subject { Order.create }
263
- it :could_add_increment_commitment do
264
- expect { subject.increment_commitments.create :provider_id=>1, :resource_id=>1, :amount=>10
265
- }.to change{IncrementCommitment.count}
266
- end
267
- end
268
- end
269
- end
270
-
271
- context :grouping do
272
- with_model :entity do
273
- table do |t|
274
- t.string :name
275
- end
276
- model do
277
- acts_as_resource do
278
- grouping do
279
- group_item :group_one, :group_two
280
- group_item :group_three
281
- end
282
- end
283
- end
284
- end
285
-
286
- context :reflect_on_all_associations do
287
- subject { Entity.reflect_on_all_associations.map(&:name) }
288
- it { should include(:group_entities) }
289
- it { should include(:groups) }
290
- end
291
-
292
- context :group_items do
293
- subject { Rea::Group.groups(Entity).map(&:name) }
294
- its(:size) { should == 3}
295
- it { should include('group_one') }
296
- end
297
- end
298
-
299
- end