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
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
|