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
@@ -3,40 +3,33 @@ module Rea
3
3
  module Event
4
4
  def self.included base
5
5
  base.fields = [:amount]
6
- Entity.included base
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 klass, options={}
28
- define_belongs_to_relation :provider, klass, options
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
- def recipient klass, options={}
31
- define_belongs_to_relation :recipient, klass, options
19
+
20
+ def resource klass_or_symbol, options={}
21
+ define_belongs_to_relation :resource, klass_or_symbol, options
32
22
  end
33
- def resource klass, options={}
34
- define_belongs_to_relation :resource, klass, options
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, klass, options
39
- belongs_to name, {:class_name=>klass.name}.merge(options)
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
 
@@ -0,0 +1,6 @@
1
+ module Rea
2
+ module MetaType
3
+ class Exchange < Process
4
+ end
5
+ end
6
+ end
@@ -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
@@ -3,7 +3,11 @@ module Rea
3
3
  module Resource
4
4
  def self.included base
5
5
  base.fields = [:name, :value]
6
- Entity.included base
6
+ base.send :include, Entity
7
+ base.extend ClassMethod
8
+ end
9
+
10
+ module ClassMethod
7
11
  end
8
12
  end
9
13
  end
@@ -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
@@ -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
@@ -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 => 20120605082028) do
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
@@ -24,4 +24,6 @@ describe Rea::InstallGenerator do
24
24
  end
25
25
  }
26
26
  end
27
+
28
+
27
29
  end
@@ -1,5 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rea::CategoryMember do
4
- pending "add some examples to (or delete) #{__FILE__}"
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
- pending "add some examples to (or delete) #{__FILE__}"
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
- pending "add some examples to (or delete) #{__FILE__}"
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
- pending "add some examples to (or delete) #{__FILE__}"
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
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rea::GroupType do
4
+ context :association do
5
+ subject { described_class.reflect_on_all_associations.map(&:name) }
6
+ it { should include :groups }
7
+ end
8
+ end