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
data/lib/rea/meta_type/event.rb
CHANGED
@@ -3,40 +3,33 @@ module Rea
|
|
3
3
|
module Event
|
4
4
|
def self.included base
|
5
5
|
base.fields = [:amount]
|
6
|
-
|
6
|
+
base.send :include, Entity
|
7
7
|
base.extend ClassMethods
|
8
|
-
base.extend EventClassMethods
|
9
8
|
end
|
10
9
|
|
11
|
-
module EventClassMethods
|
12
|
-
def create_event commitment
|
13
|
-
amount = (commitment.fulfilled?) ? commitment.amount : -commitment.amount
|
14
|
-
options = {:resource_id=>commitment.resource_id, :amount=>amount}
|
15
|
-
options.merge!(
|
16
|
-
if commitment.respond_to?(:provider)
|
17
|
-
{:provider_id=>commitment.provider_id}
|
18
|
-
else
|
19
|
-
{:recipient_id=>commitment.recipient_id}
|
20
|
-
end
|
21
|
-
)
|
22
|
-
self.create! options
|
23
|
-
end
|
24
|
-
end
|
25
10
|
|
26
11
|
module ClassMethods
|
27
|
-
def provider
|
28
|
-
define_belongs_to_relation :provider,
|
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
|
29
18
|
end
|
30
|
-
|
31
|
-
|
19
|
+
|
20
|
+
def resource klass_or_symbol, options={}
|
21
|
+
define_belongs_to_relation :resource, klass_or_symbol, options
|
32
22
|
end
|
33
|
-
|
34
|
-
|
23
|
+
|
24
|
+
def setup options
|
25
|
+
class_option_set :type, options
|
35
26
|
end
|
36
27
|
|
37
28
|
protected
|
38
|
-
def define_belongs_to_relation name,
|
39
|
-
|
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)
|
40
33
|
validates_presence_of "#{name}_id".to_sym
|
41
34
|
end
|
42
35
|
|
data/lib/rea/meta_type/group.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Rea
|
2
|
+
module MetaType
|
3
|
+
module Group
|
4
|
+
def self.included base
|
5
|
+
base.fields = [:name]
|
6
|
+
base.send :include, Entity
|
7
|
+
base.extend ClassMethods
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def entity_types
|
13
|
+
@@entity_types ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
def grouped *names
|
17
|
+
$options = names.extract_options!
|
18
|
+
names.each do |name|
|
19
|
+
entity_types << name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Rea
|
2
|
+
module MetaType
|
3
|
+
class Process
|
4
|
+
|
5
|
+
def inflows
|
6
|
+
@inflows ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def outflows
|
10
|
+
@outflows ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
def inflow *names, &block
|
14
|
+
$options = names.extract_options!
|
15
|
+
names.each do |name|
|
16
|
+
inflows << name
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def outflow *names, &block
|
21
|
+
$options = names.extract_options!
|
22
|
+
names.each do |name|
|
23
|
+
outflows << name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/rea/model.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
module Rea
|
2
|
+
module Model
|
3
|
+
class Context
|
4
|
+
|
5
|
+
def entities &block
|
6
|
+
instance_eval &block
|
7
|
+
end
|
8
|
+
|
9
|
+
%W{resource event agent commitment contract group}.each do |type_name|
|
10
|
+
define_method type_name do |*names, &block|
|
11
|
+
define_entity type_name, *names, &block
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def processes &block
|
16
|
+
instance_eval &block
|
17
|
+
end
|
18
|
+
|
19
|
+
def exchange name, &block
|
20
|
+
$exchange = ::Rea::MetaType::Exchange.new
|
21
|
+
$exchange.instance_eval &block
|
22
|
+
symbol_table[name] = $exchange
|
23
|
+
end
|
24
|
+
|
25
|
+
def conversion name, &block
|
26
|
+
$conversion = ::Rea::MetaType::Conversion.new
|
27
|
+
$conversion.instance_eval &block
|
28
|
+
symbol_table[name] = $conversion
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def symbol_table
|
33
|
+
@symbol_table ||= {}.with_indifferent_access
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def define_entity type, *names, &block
|
38
|
+
$type_module = "Rea::MetaType::#{type.to_s.camelize}".constantize
|
39
|
+
$options = names.extract_options!
|
40
|
+
names.each do |name|
|
41
|
+
$target_class = name.is_a?(Symbol) ? name.to_s.camelize.constantize : name
|
42
|
+
$target_class.class_eval do
|
43
|
+
cattr_accessor :fields
|
44
|
+
include $type_module
|
45
|
+
end
|
46
|
+
$target_class.setup $options unless $options.empty?
|
47
|
+
$target_class.class_eval &block if block_given?
|
48
|
+
$name = name.is_a?(Symbol)? name : name.to_s.underscore.to_sym
|
49
|
+
symbol_table[$name] = $target_class
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.included base
|
55
|
+
end
|
56
|
+
|
57
|
+
def model &block
|
58
|
+
self.context.instance_eval &block
|
59
|
+
end
|
60
|
+
|
61
|
+
def context
|
62
|
+
@context ||= Context.new
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/rea/settings.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module Rea
|
4
|
+
|
5
|
+
# Adds a class method to a class to create settings with default values.
|
6
|
+
#
|
7
|
+
# Example:
|
8
|
+
#
|
9
|
+
# class Configuration
|
10
|
+
# include ActiveAdmin::Settings
|
11
|
+
#
|
12
|
+
# setting :site_title, "Default Site Title"
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# conf = Configuration.new
|
16
|
+
# conf.site_title #=> "Default Site Title"
|
17
|
+
# conf.site_title = "Override Default"
|
18
|
+
# conf.site_title #=> "Override Default"
|
19
|
+
#
|
20
|
+
module Settings
|
21
|
+
extend ActiveSupport::Concern
|
22
|
+
|
23
|
+
def read_default_setting(name)
|
24
|
+
default_settings[name]
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def default_settings
|
30
|
+
self.class.default_settings
|
31
|
+
end
|
32
|
+
|
33
|
+
module ClassMethods
|
34
|
+
|
35
|
+
def setting(name, default)
|
36
|
+
default_settings[name] = default
|
37
|
+
attr_accessor(name)
|
38
|
+
|
39
|
+
# Create an accessor that grabs from the defaults
|
40
|
+
# if @name has not been set yet
|
41
|
+
class_eval <<-EOC, __FILE__, __LINE__ + 1
|
42
|
+
def #{name}
|
43
|
+
if instance_variable_defined? :@#{name}
|
44
|
+
@#{name}
|
45
|
+
else
|
46
|
+
read_default_setting(:#{name})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
EOC
|
50
|
+
end
|
51
|
+
|
52
|
+
def default_settings
|
53
|
+
@default_settings ||= {}
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,61 +11,6 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
15
|
-
|
16
|
-
create_table "rea_categories", :force => true do |t|
|
17
|
-
t.string "name"
|
18
|
-
t.integer "category_type_id"
|
19
|
-
t.integer "category_id"
|
20
|
-
t.datetime "created_at", :null => false
|
21
|
-
t.datetime "updated_at", :null => false
|
22
|
-
end
|
23
|
-
|
24
|
-
add_index "rea_categories", ["category_id"], :name => "index_rea_categories_on_category_id"
|
25
|
-
add_index "rea_categories", ["category_type_id"], :name => "index_rea_categories_on_category_type_id"
|
26
|
-
|
27
|
-
create_table "rea_category_members", :force => true do |t|
|
28
|
-
t.integer "entity_id"
|
29
|
-
t.string "entity_type"
|
30
|
-
t.integer "category_id"
|
31
|
-
t.datetime "created_at", :null => false
|
32
|
-
t.datetime "updated_at", :null => false
|
33
|
-
end
|
34
|
-
|
35
|
-
add_index "rea_category_members", ["category_id"], :name => "index_rea_category_members_on_category_id"
|
36
|
-
add_index "rea_category_members", ["entity_id", "entity_type"], :name => "index_rea_category_members_on_entity_id_and_entity_type"
|
37
|
-
|
38
|
-
create_table "rea_category_types", :force => true do |t|
|
39
|
-
t.string "name"
|
40
|
-
t.integer "group_id"
|
41
|
-
t.string "group_type"
|
42
|
-
t.boolean "system"
|
43
|
-
t.boolean "automatic"
|
44
|
-
t.boolean "multiple"
|
45
|
-
end
|
46
|
-
|
47
|
-
add_index "rea_category_types", ["group_id", "group_type"], :name => "index_rea_category_types_on_group_id_and_group_type"
|
48
|
-
|
49
|
-
create_table "rea_group_entities", :force => true do |t|
|
50
|
-
t.integer "entity_id"
|
51
|
-
t.string "entity_type"
|
52
|
-
t.integer "group_id"
|
53
|
-
end
|
54
|
-
|
55
|
-
create_table "rea_groups", :force => true do |t|
|
56
|
-
t.string "name"
|
57
|
-
t.string "entity_types"
|
58
|
-
t.datetime "created_at", :null => false
|
59
|
-
t.datetime "updated_at", :null => false
|
60
|
-
end
|
61
|
-
|
62
|
-
create_table "rea_identifiers", :force => true do |t|
|
63
|
-
t.string "name"
|
64
|
-
t.string "value_reset_rule"
|
65
|
-
t.string "id_rule"
|
66
|
-
t.integer "last_value", :default => 0
|
67
|
-
t.datetime "created_at", :null => false
|
68
|
-
t.datetime "updated_at", :null => false
|
69
|
-
end
|
14
|
+
ActiveRecord::Schema.define(:version => 0) do
|
70
15
|
|
71
16
|
end
|
@@ -1,5 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rea::CategoryMember do
|
4
|
-
|
4
|
+
context :associations do
|
5
|
+
subject { described_class.reflect_on_all_associations.map(&:name) }
|
6
|
+
it { should include :category }
|
7
|
+
it { should include :entity }
|
8
|
+
end
|
5
9
|
end
|
@@ -1,5 +1,23 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rea::Category do
|
4
|
-
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
ct = Rea::CategoryType.create! :name=>'type'
|
7
|
+
ct.category :cate0101, :cate0102
|
8
|
+
end
|
9
|
+
|
10
|
+
context :class do
|
11
|
+
subject { described_class }
|
12
|
+
end
|
13
|
+
|
14
|
+
context :instance do
|
15
|
+
subject { Rea::Category.last }
|
16
|
+
before :all do
|
17
|
+
subject.category_members.create!
|
18
|
+
end
|
19
|
+
|
20
|
+
its(:category_members) { should have(1).items }
|
21
|
+
end
|
22
|
+
|
5
23
|
end
|
@@ -1,5 +1,28 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rea::CategoryType do
|
4
|
-
|
4
|
+
|
5
|
+
context :class do
|
6
|
+
subject { described_class }
|
7
|
+
it { subject.respond_to?(:category_type).should be_true }
|
8
|
+
|
9
|
+
it :could_create_instance do
|
10
|
+
expect { subject.category_type :category_type_test }.to change {Rea::CategoryType.count}
|
11
|
+
end
|
12
|
+
|
13
|
+
it :could_yield_block do
|
14
|
+
expect { |b| subject.category_type :some, &b }.to yield_control
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context :category do
|
19
|
+
before :all do
|
20
|
+
ct = described_class.create! :name=>:type
|
21
|
+
ct.category :c1, :c2
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { described_class.first }
|
25
|
+
its(:categories) { should have(2).items }
|
26
|
+
|
27
|
+
end
|
5
28
|
end
|
@@ -1,5 +1,38 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rea::Group do
|
4
|
-
|
4
|
+
context :associations do
|
5
|
+
subject { described_class.reflect_on_all_associations.map(&:name) }
|
6
|
+
it { should include :group_type }
|
7
|
+
it { should include :categories }
|
8
|
+
it { should include :category_types }
|
9
|
+
end
|
10
|
+
|
11
|
+
context :model do
|
12
|
+
context :categories do
|
13
|
+
subject { described_class.create! :name=>:group }
|
14
|
+
|
15
|
+
it { should_not be_nil }
|
16
|
+
it :could_relate_category do
|
17
|
+
category = Rea::Category.create :name=>:category
|
18
|
+
expect {
|
19
|
+
subject.categories << category
|
20
|
+
}.to change { category.groups.count }.by(1)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context :category_types do
|
25
|
+
let(:category_type){Rea::CategoryType.create :name=>:type}
|
26
|
+
let(:category) { category_type.categories.create :name=>:category }
|
27
|
+
|
28
|
+
subject { described_class.create! :name=>:group }
|
29
|
+
|
30
|
+
before :each do
|
31
|
+
subject.categories = [category]
|
32
|
+
end
|
33
|
+
|
34
|
+
its(:category_types) { should have(1).items }
|
35
|
+
its(:category_types) { should include category_type }
|
36
|
+
end
|
37
|
+
end
|
5
38
|
end
|