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