hydra_attribute 0.3.2 → 0.4.0.rc1

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 (65) hide show
  1. data/CHANGELOG.md +1 -1
  2. data/README.md +7 -0
  3. data/features/entity/create.feature +128 -0
  4. data/features/entity/destroy.feature +111 -0
  5. data/features/entity/new.feature +121 -0
  6. data/features/entity/update.feature +147 -0
  7. data/features/{attributes → hydra_attribute}/create.feature +7 -7
  8. data/features/{attributes → hydra_attribute}/destroy.feature +2 -4
  9. data/features/{attributes → hydra_attribute}/update.feature +10 -10
  10. data/features/hydra_set/destroy.feature +31 -0
  11. data/features/migrations/create_and_drop.feature +165 -0
  12. data/features/migrations/migrate_and_rollback.feature +211 -0
  13. data/features/relation/query_methods/group.feature +42 -0
  14. data/features/relation/query_methods/order.feature +67 -0
  15. data/features/relation/query_methods/reorder.feature +29 -0
  16. data/features/relation/query_methods/reverse_order.feature +29 -0
  17. data/features/relation/query_methods/select.feature +50 -0
  18. data/features/relation/query_methods/where.feature +70 -0
  19. data/features/step_definitions/connections.rb +65 -0
  20. data/features/step_definitions/model_steps.rb +79 -6
  21. data/features/step_definitions/query_methods.rb +3 -3
  22. data/features/step_definitions/record_steps.rb +3 -4
  23. data/features/support/env.rb +17 -3
  24. data/features/support/world.rb +15 -10
  25. data/gemfiles/3.1.gemfile.lock +15 -15
  26. data/gemfiles/3.2.gemfile.lock +15 -15
  27. data/lib/hydra_attribute/active_record/association.rb +74 -38
  28. data/lib/hydra_attribute/active_record/association_preloader.rb +49 -49
  29. data/lib/hydra_attribute/active_record/attribute_methods.rb +37 -85
  30. data/lib/hydra_attribute/active_record/migration.rb +2 -2
  31. data/lib/hydra_attribute/active_record/reflection.rb +1 -1
  32. data/lib/hydra_attribute/active_record/relation/query_methods.rb +8 -7
  33. data/lib/hydra_attribute/active_record/relation.rb +1 -0
  34. data/lib/hydra_attribute/active_record.rb +20 -12
  35. data/lib/hydra_attribute/association_builder.rb +1 -2
  36. data/lib/hydra_attribute/builder.rb +7 -8
  37. data/lib/hydra_attribute/entity_callbacks.rb +12 -32
  38. data/lib/hydra_attribute/hydra_attribute.rb +25 -16
  39. data/lib/hydra_attribute/hydra_attribute_methods.rb +85 -0
  40. data/lib/hydra_attribute/hydra_methods.rb +123 -0
  41. data/lib/hydra_attribute/hydra_set.rb +36 -0
  42. data/lib/hydra_attribute/hydra_set_methods.rb +39 -0
  43. data/lib/hydra_attribute/hydra_value_methods.rb +14 -0
  44. data/lib/hydra_attribute/memoize.rb +37 -0
  45. data/lib/hydra_attribute/migrator.rb +100 -51
  46. data/lib/hydra_attribute/railtie.rb +1 -3
  47. data/lib/hydra_attribute/version.rb +1 -1
  48. data/lib/hydra_attribute.rb +7 -1
  49. data/spec/hydra_attribute_methods_spec.rb +458 -0
  50. data/spec/hydra_attribute_spec.rb +19 -0
  51. data/spec/hydra_methods_spec.rb +457 -0
  52. data/spec/hydra_set_methods_spec.rb +203 -0
  53. data/spec/hydra_set_spec.rb +19 -0
  54. data/spec/memoize_spec.rb +95 -0
  55. data/spec/spec_helper.rb +42 -2
  56. metadata +71 -43
  57. data/features/create.feature +0 -47
  58. data/features/define.feature +0 -38
  59. data/features/destroy.feature +0 -102
  60. data/features/query_methods/group.feature +0 -42
  61. data/features/query_methods/order.feature +0 -99
  62. data/features/query_methods/select.feature +0 -50
  63. data/features/query_methods/where.feature +0 -70
  64. data/features/support/schema.rb +0 -79
  65. data/features/update.feature +0 -114
@@ -0,0 +1,85 @@
1
+ module HydraAttribute
2
+ module HydraAttributeMethods
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ extend Memoize
7
+
8
+ def hydra_attributes
9
+ HydraAttribute.where(entity_type: base_class.model_name)
10
+ end
11
+ hydra_memoize :hydra_attributes
12
+
13
+ def hydra_attribute(identifier)
14
+ hydra_attributes.find do |hydra_attribute|
15
+ hydra_attribute.id == identifier || hydra_attribute.name == identifier
16
+ end
17
+ end
18
+ hydra_memoize :hydra_attribute
19
+
20
+ def hydra_attribute_backend_types
21
+ hydra_attributes.map(&:backend_type).uniq
22
+ end
23
+ hydra_memoize :hydra_attribute_backend_types
24
+
25
+ %w(id name).each do |prefix|
26
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
27
+ def hydra_attribute_#{prefix}s
28
+ hydra_attributes.map(&:#{prefix})
29
+ end
30
+ hydra_memoize :hydra_attribute_#{prefix}s
31
+ EOS
32
+ end
33
+
34
+ def hydra_attributes_by_backend_type
35
+ hydra_attributes.group_by(&:backend_type)
36
+ end
37
+ hydra_memoize :hydra_attributes_by_backend_type
38
+
39
+ %w(id name).each do |prefix|
40
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
41
+ def hydra_attribute_#{prefix}s_by_backend_type
42
+ hydra_attributes.each_with_object({}) do |hydra_attribute, object|
43
+ object[hydra_attribute.backend_type] ||= []
44
+ object[hydra_attribute.backend_type] << hydra_attribute.#{prefix}
45
+ end
46
+ end
47
+ hydra_memoize :hydra_attribute_#{prefix}s_by_backend_type
48
+ EOS
49
+ end
50
+
51
+ def hydra_attributes_for_backend_type(backend_type)
52
+ hydra_attributes = hydra_attributes_by_backend_type[backend_type]
53
+ hydra_attributes.nil? ? [] : hydra_attributes
54
+ end
55
+
56
+ %w(id name).each do |prefix|
57
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
58
+ def hydra_attribute_#{prefix}s_for_backend_type(backend_type)
59
+ values = hydra_attribute_#{prefix}s_by_backend_type[backend_type]
60
+ values.nil? ? [] : values
61
+ end
62
+ EOS
63
+ end
64
+
65
+ def clear_hydra_attribute_cache!
66
+ [
67
+ :@hydra_attributes,
68
+ :@hydra_attribute,
69
+ :@hydra_attribute_ids,
70
+ :@hydra_attribute_names,
71
+ :@hydra_attribute_backend_types,
72
+ :@hydra_attributes_by_backend_type,
73
+ :@hydra_attribute_ids_by_backend_type,
74
+ :@hydra_attribute_names_by_backend_type,
75
+ ].each do |variable|
76
+ remove_instance_variable(variable) if instance_variable_defined?(variable)
77
+ end
78
+ end
79
+ end
80
+
81
+ def hydra_attribute?(name)
82
+ self.class.hydra_attribute_names.include?(name.to_s)
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,123 @@
1
+ module HydraAttribute
2
+ module HydraMethods
3
+ extend ActiveSupport::Concern
4
+ extend Memoize
5
+
6
+ include HydraSetMethods
7
+ include HydraAttributeMethods
8
+ include HydraValueMethods
9
+
10
+ included do
11
+ alias_method_chain :write_attribute, :hydra_set_id
12
+ end
13
+
14
+ module ClassMethods
15
+ extend Memoize
16
+
17
+ def hydra_set_attributes(hydra_set_id)
18
+ hydra_set = hydra_set(hydra_set_id)
19
+ hydra_set.nil? ? hydra_attributes : hydra_set.hydra_attributes
20
+ end
21
+
22
+ %w(id name backend_type).each do |prefix|
23
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
24
+ def hydra_set_attribute_#{prefix}s(hydra_set_id)
25
+ hydra_set_attributes(hydra_set_id).map(&:#{prefix})
26
+ end
27
+ hydra_memoize :hydra_set_attribute_#{prefix}s
28
+ EOS
29
+ end
30
+
31
+ def hydra_set_attributes_by_backend_type(hydra_set_id)
32
+ hydra_set_attributes(hydra_set_id).group_by(&:backend_type)
33
+ end
34
+ hydra_memoize :hydra_set_attributes_by_backend_type
35
+
36
+ %w(id name).each do |prefix|
37
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
38
+ def hydra_set_attribute_#{prefix}s_by_backend_type(hydra_set_id)
39
+ hydra_set_attributes(hydra_set_id).each_with_object({}) do |hydra_attribute, object|
40
+ object[hydra_attribute.backend_type] ||= []
41
+ object[hydra_attribute.backend_type] << hydra_attribute.#{prefix}
42
+ end
43
+ end
44
+ hydra_memoize :hydra_set_attribute_#{prefix}s_by_backend_type
45
+ EOS
46
+ end
47
+
48
+ def hydra_set_attributes_for_backend_type(hydra_set_id, backend_type)
49
+ hydra_attributes = hydra_set_attributes_by_backend_type(hydra_set_id)[backend_type]
50
+ hydra_attributes.nil? ? [] : hydra_attributes
51
+ end
52
+
53
+ %w(id name).each do |prefix|
54
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
55
+ def hydra_set_attribute_#{prefix}s_for_backend_type(hydra_set_id, backend_type)
56
+ values = hydra_set_attribute_#{prefix}s_by_backend_type(hydra_set_id)[backend_type]
57
+ values.nil? ? [] : values
58
+ end
59
+ EOS
60
+ end
61
+
62
+ def clear_hydra_method_cache!
63
+ clear_hydra_set_cache!
64
+ clear_hydra_attribute_cache!
65
+ clear_hydra_value_cache!
66
+
67
+ [
68
+ :@hydra_set_attributes,
69
+ :@hydra_set_attribute_ids,
70
+ :@hydra_set_attribute_names,
71
+ :@hydra_set_attribute_backend_types,
72
+ :@hydra_set_attributes_by_backend_type,
73
+ :@hydra_set_attribute_ids_by_backend_type,
74
+ :@hydra_set_attribute_names_by_backend_type
75
+ ].each do |variable|
76
+ remove_instance_variable(variable) if instance_variable_defined?(variable)
77
+ end
78
+ end
79
+ end
80
+
81
+ def hydra_attributes
82
+ hydra_value_models.inject({}) do |hydra_attributes, model|
83
+ hydra_attributes[model.hydra_attribute_name] = model.value
84
+ hydra_attributes
85
+ end
86
+ end
87
+
88
+ %w(ids names backend_types).each do |prefix|
89
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
90
+ def hydra_attribute_#{prefix}
91
+ self.class.hydra_set_attribute_#{prefix}(hydra_set_id)
92
+ end
93
+ EOS
94
+ end
95
+
96
+ def hydra_value_model(identifier)
97
+ hydra_attribute = self.class.hydra_attribute(identifier)
98
+ if hydra_attribute
99
+ association = hydra_value_association(hydra_attribute.backend_type)
100
+ association.find_model_or_build(hydra_attribute_id: hydra_attribute.id)
101
+ end
102
+ end
103
+ hydra_memoize :hydra_value_model
104
+
105
+ def hydra_value_models
106
+ self.class.hydra_set_attribute_backend_types(hydra_set_id).inject([]) do |models, backend_type|
107
+ models + hydra_value_association(backend_type).all_models
108
+ end
109
+ end
110
+ hydra_memoize :hydra_value_models
111
+
112
+ private
113
+ def write_attribute_with_hydra_set_id(attr_name, value)
114
+ if attr_name.to_s == 'hydra_set_id'
115
+ self.class.hydra_attribute_backend_types.each do |backend_type|
116
+ hydra_value_association(backend_type).clear_cache!
117
+ end
118
+ remove_instance_variable(:@hydra_value_models) if instance_variable_defined?(:@hydra_value_models)
119
+ end
120
+ write_attribute_without_hydra_set_id(attr_name, value)
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,36 @@
1
+ require 'active_support/core_ext/object/with_options'
2
+
3
+ module HydraAttribute
4
+ class HydraSet < ActiveRecord::Base
5
+ self.table_name = 'hydra_sets'
6
+
7
+ attr_accessible :name
8
+
9
+ has_and_belongs_to_many :hydra_attributes, join_table: 'hydra_attribute_sets', class_name: 'HydraAttribute::HydraAttribute', conditions: proc { {hydra_attributes: {entity_type: entity_type}} }
10
+
11
+ with_options presence: true do |klass|
12
+ klass.validates :entity_type, inclusion: { in: lambda { |attr| [(attr.entity_type.constantize.name rescue nil)] } }
13
+ klass.validates :name, uniqueness: { scope: :entity_type }
14
+ end
15
+
16
+ after_destroy :detach_entities
17
+ after_commit :clear_entity_cache
18
+
19
+ # @COMPATIBILITY with 3.1.x association module is directly added to the class instead of including module
20
+ def hydra_attributes_with_clearing_cache=(value)
21
+ self.hydra_attributes_without_clearing_cache = value
22
+ clear_entity_cache
23
+ value
24
+ end
25
+ alias_method_chain :hydra_attributes=, :clearing_cache
26
+
27
+ private
28
+ def clear_entity_cache
29
+ entity_type.constantize.clear_hydra_method_cache!
30
+ end
31
+
32
+ def detach_entities
33
+ entity_type.constantize.where(hydra_set_id: id).update_all(hydra_set_id: nil)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,39 @@
1
+ module HydraAttribute
2
+ class MissingAttributeInHydraSetError < NoMethodError
3
+ end
4
+
5
+ module HydraSetMethods
6
+ extend ActiveSupport::Concern
7
+
8
+ module ClassMethods
9
+ extend Memoize
10
+
11
+ def hydra_sets
12
+ HydraSet.where(entity_type: base_class.model_name)
13
+ end
14
+ hydra_memoize :hydra_sets
15
+
16
+ def hydra_set(identifier)
17
+ hydra_sets.find do |hydra_set|
18
+ hydra_set.id == identifier || hydra_set.name == identifier
19
+ end
20
+ end
21
+ hydra_memoize :hydra_set
22
+
23
+ %w(id name).each do |prefix|
24
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
25
+ def hydra_set_#{prefix}s
26
+ hydra_sets.map(&:#{prefix})
27
+ end
28
+ hydra_memoize :hydra_set_#{prefix}s
29
+ EOS
30
+ end
31
+
32
+ def clear_hydra_set_cache!
33
+ [:@hydra_sets, :@hydra_set, :@hydra_set_ids, :@hydra_set_names].each do |variable|
34
+ remove_instance_variable(variable) if instance_variable_defined?(variable)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,14 @@
1
+ module HydraAttribute
2
+ module HydraValueMethods
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def clear_hydra_value_cache!
7
+ end
8
+ end
9
+
10
+ def hydra_value_association(backend_type)
11
+ association(::HydraAttribute::AssociationBuilder.association_name(backend_type))
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,37 @@
1
+ module HydraAttribute
2
+ module Memoize
3
+ def hydra_memoize(*methods)
4
+ methods.each do |method_name|
5
+ bound_method = instance_method(method_name)
6
+ alias_method "unmemoized_#{method_name}", method_name
7
+
8
+ if bound_method.arity.abs == 0
9
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
10
+ def #{method_name}
11
+ @#{method_name} = unmemoized_#{method_name} unless instance_variable_defined?(:@#{method_name})
12
+ @#{method_name}
13
+ end
14
+ EOS
15
+ else
16
+ args = 1.upto(bound_method.arity.abs).map { |i| "a#{i}" }
17
+ keys = 1.upto(bound_method.arity.abs).map { |i| "k#{i}" }
18
+
19
+ call = args.inject("@#{method_name}") do |hash_call, arg|
20
+ "#{hash_call}[#{arg}]"
21
+ end
22
+
23
+ hash = keys.reverse.inject("unmemoized_#{method_name}(#{keys.join(', ')})") do |code, key|
24
+ "Hash.new { |hash, #{key}| hash[#{key}] = #{code} }"
25
+ end
26
+
27
+ module_eval <<-EOS, __FILE__, __LINE__ + 1
28
+ def #{method_name}(#{args.join(', ')}) # def method(a1)
29
+ @#{method_name} ||= #{hash} # @method ||= Hash.new { |hash, key1| hash[key1] = unmemoized_method(key1) }
30
+ #{call} # @method[a1]
31
+ end # end
32
+ EOS
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -6,7 +6,7 @@ module HydraAttribute
6
6
  end
7
7
 
8
8
  class << self
9
- %w(create remove migrate rollback).each do |method|
9
+ %w(create drop migrate rollback).each do |method|
10
10
  class_eval <<-EOS, __FILE__, __LINE__ + 1
11
11
  def #{method}(migration, *args, &block)
12
12
  new(migration).#{method}(*args, &block)
@@ -18,90 +18,139 @@ module HydraAttribute
18
18
  def create(name, options = {}, &block)
19
19
  create_entity(name, options, &block)
20
20
  create_attribute unless attribute_exists?
21
+ create_set unless set_exists?
21
22
  create_values(name)
22
23
  end
23
24
 
24
25
  def drop(name)
25
26
  drop_values(name)
26
- drop_attributes unless values_exists?
27
+ unless values_exists?
28
+ drop_set
29
+ drop_attribute
30
+ end
27
31
  drop_entity(name)
28
32
  end
29
33
 
30
- def migrate(name)
34
+ def migrate(name, options = {}, &block)
35
+ migrate_entity(name, options, &block)
31
36
  create_attribute unless attribute_exists?
37
+ create_set unless set_exists?
32
38
  create_values(name)
33
39
  end
34
40
 
35
41
  def rollback(name)
36
42
  drop_values(name)
37
- drop_attribute unless values_exists?
43
+ unless values_exists?
44
+ drop_attribute
45
+ drop_set
46
+ end
47
+ rollback_entity(name)
38
48
  end
39
49
 
40
50
  private
51
+ def create_entity(name, options = {})
52
+ create_table name, options do |t|
53
+ t.integer :hydra_set_id, null: true
54
+ yield t if block_given?
55
+ end
56
+ add_index name, :hydra_set_id, unique: false, name: "#{name}_hydra_set_id_index"
57
+ end
41
58
 
42
- def create_entity(name, options = {})
43
- create_table name, options do |t|
44
- yield t if block_given?
59
+ def migrate_entity(name, options = {})
60
+ change_table name, options do |t|
61
+ t.integer :hydra_set_id, null: true
62
+ end
63
+ add_index name, :hydra_set_id, uniqie: false, name: "#{name}_hydra_set_id_index"
45
64
  end
46
- end
47
65
 
48
- def create_attribute
49
- create_table :hydra_attributes do |t|
50
- t.string :entity_type, limit: 32, null: false
51
- t.string :name, limit: 32, null: false
52
- t.string :backend_type, limit: 16, null: false
53
- t.string :default_value
54
- t.boolean :white_list, null: false, default: false
55
- t.timestamps
66
+ def create_attribute
67
+ create_table :hydra_attributes do |t|
68
+ t.string :entity_type, limit: 32, null: false
69
+ t.string :name, limit: 32, null: false
70
+ t.string :backend_type, limit: 16, null: false
71
+ t.string :default_value
72
+ t.boolean :white_list, null: false, default: false
73
+ t.datetime :created_at # @COMPATIBILITY with 3.1.x use "datetime" method instead of "timestamps" because Rails 3.1.x and 3.2.x have a different "null" value
74
+ t.datetime :updated_at # @COMPATIBILITY with 3.1.x
75
+ end
76
+ add_index :hydra_attributes, [:entity_type, :name], unique: true, name: 'hydra_attributes_index'
56
77
  end
57
- add_index :hydra_attributes, [:entity_type, :name], unique: true, name: 'hydra_attributes_index'
58
- end
59
78
 
60
- def create_values(name)
61
- SUPPORT_TYPES.each do |type|
62
- table_name = value_table(name, type)
63
- create_table table_name do |t|
64
- t.integer :entity_id, null: false
79
+ def create_set
80
+ create_table :hydra_sets do |t|
81
+ t.string :entity_type, limit: 32, null: false
82
+ t.string :name, limit: 32, null: false
83
+ t.datetime :created_at # @COMPATIBILITY with 3.1.x
84
+ t.datetime :updated_at # @COMPATIBILITY with 3.1.x
85
+ end
86
+ add_index :hydra_sets, [:entity_type, :name], unique: true, name: 'hydra_sets_index'
87
+
88
+ create_table :hydra_attribute_sets, id: false do |t|
65
89
  t.integer :hydra_attribute_id, null: false
66
- t.send type, :value
67
- t.timestamps
90
+ t.integer :hydra_set_id, null: false
68
91
  end
69
- add_index table_name, [:entity_id, :hydra_attribute_id], unique: true, name: "#{table_name}_index"
92
+ add_index :hydra_attribute_sets, [:hydra_attribute_id, :hydra_set_id], unique: true, name: 'hydra_attribute_sets_index'
70
93
  end
71
- end
72
94
 
73
- def drop_entity(name)
74
- drop_table(name)
75
- end
95
+ def create_values(name)
96
+ SUPPORTED_BACKEND_TYPES.each do |type|
97
+ table_name = value_table(name, type)
98
+ create_table table_name do |t|
99
+ t.integer :entity_id, null: false
100
+ t.integer :hydra_attribute_id, null: false
101
+ t.send type, :value
102
+ t.datetime :created_at # @COMPATIBILITY with 3.1.x
103
+ t.datetime :updated_at # @COMPATIBILITY with 3.1.x
104
+ end
105
+ add_index table_name, [:entity_id, :hydra_attribute_id], unique: true, name: "#{table_name}_index"
106
+ end
107
+ end
76
108
 
77
- def drop_attribute
78
- drop_table(:hydra_attributes)
79
- end
109
+ def drop_entity(name)
110
+ drop_table(name)
111
+ end
80
112
 
81
- def drop_values(name)
82
- SUPPORT_TYPES.each do |type|
83
- drop_table(value_table(name, type))
113
+ def rollback_entity(name)
114
+ remove_column name, :hydra_set_id
84
115
  end
85
- end
86
116
 
87
- def value_table(name, type)
88
- "hydra_#{type}_#{name}"
89
- end
117
+ def drop_attribute
118
+ drop_table(:hydra_attributes)
119
+ end
90
120
 
91
- def attribute_exists?
92
- table_exists?(:hydra_attributes)
93
- end
121
+ def drop_set
122
+ drop_table(:hydra_attribute_sets)
123
+ drop_table(:hydra_sets)
124
+ end
94
125
 
95
- def values_exists?
96
- tables.any? do |table|
97
- SUPPORT_TYPES.any? do |type|
98
- table.start_with?("hydra_#{type}_")
126
+ def drop_values(name)
127
+ SUPPORTED_BACKEND_TYPES.each do |type|
128
+ drop_table(value_table(name, type))
99
129
  end
100
130
  end
101
- end
102
131
 
103
- def method_missing(symbol, *args, &block)
104
- @migration.send(symbol, *args, &block)
105
- end
132
+ def value_table(name, type)
133
+ "hydra_#{type}_#{name}"
134
+ end
135
+
136
+ def attribute_exists?
137
+ table_exists?(:hydra_attributes)
138
+ end
139
+
140
+ def set_exists?
141
+ table_exists?(:hydra_sets)
142
+ end
143
+
144
+ def values_exists?
145
+ tables.any? do |table|
146
+ SUPPORTED_BACKEND_TYPES.any? do |type|
147
+ table.start_with?("hydra_#{type}_")
148
+ end
149
+ end
150
+ end
151
+
152
+ def method_missing(symbol, *args, &block)
153
+ @migration.send(symbol, *args, &block)
154
+ end
106
155
  end
107
156
  end
@@ -2,9 +2,7 @@ module HydraAttribute
2
2
  class Railtie < Rails::Railtie
3
3
  initializer 'hydra_attribute.active_record' do
4
4
  ActiveSupport.on_load :active_record do
5
- extend ::HydraAttribute::ActiveRecord
6
-
7
- ::ActiveRecord::Migration.send :include, ::HydraAttribute::ActiveRecord::Migration
5
+ ::ActiveRecord::Migration.send(:include, ::HydraAttribute::ActiveRecord::Migration)
8
6
  end
9
7
  end
10
8
  end
@@ -1,3 +1,3 @@
1
1
  module HydraAttribute
2
- VERSION = '0.3.2'
2
+ VERSION = '0.4.0.rc1'
3
3
  end
@@ -1,5 +1,5 @@
1
1
  module HydraAttribute
2
- SUPPORT_TYPES = %w(string text integer float boolean datetime).freeze
2
+ SUPPORTED_BACKEND_TYPES = %w(string text integer float boolean datetime).freeze
3
3
 
4
4
  class << self
5
5
  def config
@@ -18,8 +18,14 @@ require 'hydra_attribute/configuration'
18
18
  require 'hydra_attribute/association_builder'
19
19
  require 'hydra_attribute/builder'
20
20
  require 'hydra_attribute/migrator'
21
+ require 'hydra_attribute/memoize'
21
22
  require 'hydra_attribute/hydra_attribute'
23
+ require 'hydra_attribute/hydra_set'
22
24
  require 'hydra_attribute/entity_callbacks'
25
+ require 'hydra_attribute/hydra_set_methods'
26
+ require 'hydra_attribute/hydra_value_methods'
27
+ require 'hydra_attribute/hydra_attribute_methods'
28
+ require 'hydra_attribute/hydra_methods'
23
29
  require 'hydra_attribute/active_record'
24
30
  require 'hydra_attribute/active_record/scoping'
25
31
  require 'hydra_attribute/active_record/reflection'