datamapper 0.3.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/History.txt +0 -0
  2. data/Manifest.txt +5 -0
  3. data/README.txt +11 -0
  4. data/Rakefile +70 -0
  5. data/lib/datamapper.rb +8 -0
  6. metadata +152 -319
  7. data/CHANGELOG +0 -145
  8. data/FAQ +0 -96
  9. data/MIT-LICENSE +0 -22
  10. data/QUICKLINKS +0 -12
  11. data/README +0 -105
  12. data/environment.rb +0 -62
  13. data/example.rb +0 -156
  14. data/lib/data_mapper.rb +0 -88
  15. data/lib/data_mapper/adapters/abstract_adapter.rb +0 -43
  16. data/lib/data_mapper/adapters/data_object_adapter.rb +0 -480
  17. data/lib/data_mapper/adapters/mysql_adapter.rb +0 -72
  18. data/lib/data_mapper/adapters/postgresql_adapter.rb +0 -258
  19. data/lib/data_mapper/adapters/sql/coersion.rb +0 -134
  20. data/lib/data_mapper/adapters/sql/commands/load_command.rb +0 -545
  21. data/lib/data_mapper/adapters/sql/mappings/associations_set.rb +0 -34
  22. data/lib/data_mapper/adapters/sql/mappings/column.rb +0 -279
  23. data/lib/data_mapper/adapters/sql/mappings/conditions.rb +0 -172
  24. data/lib/data_mapper/adapters/sql/mappings/schema.rb +0 -60
  25. data/lib/data_mapper/adapters/sql/mappings/table.rb +0 -459
  26. data/lib/data_mapper/adapters/sql/quoting.rb +0 -24
  27. data/lib/data_mapper/adapters/sqlite3_adapter.rb +0 -159
  28. data/lib/data_mapper/associations.rb +0 -106
  29. data/lib/data_mapper/associations/belongs_to_association.rb +0 -160
  30. data/lib/data_mapper/associations/has_and_belongs_to_many_association.rb +0 -437
  31. data/lib/data_mapper/associations/has_many_association.rb +0 -283
  32. data/lib/data_mapper/associations/has_n_association.rb +0 -143
  33. data/lib/data_mapper/associations/reference.rb +0 -47
  34. data/lib/data_mapper/attributes.rb +0 -73
  35. data/lib/data_mapper/auto_migrations.rb +0 -36
  36. data/lib/data_mapper/base.rb +0 -17
  37. data/lib/data_mapper/callbacks.rb +0 -107
  38. data/lib/data_mapper/context.rb +0 -112
  39. data/lib/data_mapper/database.rb +0 -234
  40. data/lib/data_mapper/dependency_queue.rb +0 -28
  41. data/lib/data_mapper/embedded_value.rb +0 -145
  42. data/lib/data_mapper/identity_map.rb +0 -47
  43. data/lib/data_mapper/is/tree.rb +0 -121
  44. data/lib/data_mapper/migration.rb +0 -155
  45. data/lib/data_mapper/persistence.rb +0 -852
  46. data/lib/data_mapper/property.rb +0 -310
  47. data/lib/data_mapper/query.rb +0 -164
  48. data/lib/data_mapper/support/blank.rb +0 -35
  49. data/lib/data_mapper/support/connection_pool.rb +0 -117
  50. data/lib/data_mapper/support/enumerable.rb +0 -35
  51. data/lib/data_mapper/support/errors.rb +0 -16
  52. data/lib/data_mapper/support/inflector.rb +0 -265
  53. data/lib/data_mapper/support/object.rb +0 -54
  54. data/lib/data_mapper/support/serialization.rb +0 -96
  55. data/lib/data_mapper/support/silence.rb +0 -10
  56. data/lib/data_mapper/support/string.rb +0 -72
  57. data/lib/data_mapper/support/struct.rb +0 -7
  58. data/lib/data_mapper/support/symbol.rb +0 -82
  59. data/lib/data_mapper/support/typed_set.rb +0 -65
  60. data/lib/data_mapper/types/base.rb +0 -44
  61. data/lib/data_mapper/types/string.rb +0 -34
  62. data/lib/data_mapper/validatable_extensions/errors.rb +0 -12
  63. data/lib/data_mapper/validatable_extensions/macros.rb +0 -7
  64. data/lib/data_mapper/validatable_extensions/validatable_instance_methods.rb +0 -62
  65. data/lib/data_mapper/validatable_extensions/validation_base.rb +0 -18
  66. data/lib/data_mapper/validatable_extensions/validations/formats/email.rb +0 -43
  67. data/lib/data_mapper/validatable_extensions/validations/validates_acceptance_of.rb +0 -7
  68. data/lib/data_mapper/validatable_extensions/validations/validates_confirmation_of.rb +0 -7
  69. data/lib/data_mapper/validatable_extensions/validations/validates_each.rb +0 -7
  70. data/lib/data_mapper/validatable_extensions/validations/validates_format_of.rb +0 -28
  71. data/lib/data_mapper/validatable_extensions/validations/validates_length_of.rb +0 -15
  72. data/lib/data_mapper/validatable_extensions/validations/validates_numericality_of.rb +0 -7
  73. data/lib/data_mapper/validatable_extensions/validations/validates_presence_of.rb +0 -7
  74. data/lib/data_mapper/validatable_extensions/validations/validates_true_for.rb +0 -7
  75. data/lib/data_mapper/validatable_extensions/validations/validates_uniqueness_of.rb +0 -40
  76. data/lib/data_mapper/validations.rb +0 -20
  77. data/lib/data_mapper/validations/number_validator.rb +0 -40
  78. data/lib/data_mapper/validations/string_validator.rb +0 -20
  79. data/lib/data_mapper/validations/validator.rb +0 -13
  80. data/performance.rb +0 -307
  81. data/plugins/can_has_sphinx/LICENSE +0 -23
  82. data/plugins/can_has_sphinx/README +0 -4
  83. data/plugins/can_has_sphinx/REVISION +0 -1
  84. data/plugins/can_has_sphinx/Rakefile +0 -22
  85. data/plugins/can_has_sphinx/init.rb +0 -1
  86. data/plugins/can_has_sphinx/install.rb +0 -1
  87. data/plugins/can_has_sphinx/lib/acts_as_sphinx.rb +0 -123
  88. data/plugins/can_has_sphinx/lib/sphinx.rb +0 -460
  89. data/plugins/can_has_sphinx/scripts/sphinx.sh +0 -47
  90. data/plugins/can_has_sphinx/tasks/acts_as_sphinx_tasks.rake +0 -41
  91. data/profile_data_mapper.rb +0 -40
  92. data/rakefile.rb +0 -159
  93. data/spec/acts_as_tree_spec.rb +0 -67
  94. data/spec/adapters/data_object_adapter_spec.rb +0 -31
  95. data/spec/associations/belongs_to_association_spec.rb +0 -98
  96. data/spec/associations/has_and_belongs_to_many_association_spec.rb +0 -377
  97. data/spec/associations/has_many_association_spec.rb +0 -337
  98. data/spec/attributes_spec.rb +0 -52
  99. data/spec/auto_migrations_spec.rb +0 -101
  100. data/spec/callbacks_spec.rb +0 -186
  101. data/spec/can_has_sphinx.rb +0 -5
  102. data/spec/coersion_spec.rb +0 -41
  103. data/spec/column_spec.rb +0 -114
  104. data/spec/count_command_spec.rb +0 -45
  105. data/spec/database_spec.rb +0 -18
  106. data/spec/dataobjects_spec.rb +0 -27
  107. data/spec/delete_command_spec.rb +0 -11
  108. data/spec/dependency_spec.rb +0 -29
  109. data/spec/embedded_value_spec.rb +0 -161
  110. data/spec/fixtures/animals.yaml +0 -33
  111. data/spec/fixtures/animals_exhibits.yaml +0 -2
  112. data/spec/fixtures/careers.yaml +0 -5
  113. data/spec/fixtures/comments.yaml +0 -1
  114. data/spec/fixtures/exhibits.yaml +0 -90
  115. data/spec/fixtures/fruit.yaml +0 -6
  116. data/spec/fixtures/people.yaml +0 -37
  117. data/spec/fixtures/posts.yaml +0 -3
  118. data/spec/fixtures/projects.yaml +0 -13
  119. data/spec/fixtures/sections.yaml +0 -5
  120. data/spec/fixtures/serializers.yaml +0 -6
  121. data/spec/fixtures/tasks.yaml +0 -6
  122. data/spec/fixtures/tasks_tasks.yaml +0 -2
  123. data/spec/fixtures/tomatoes.yaml +0 -1
  124. data/spec/fixtures/users.yaml +0 -1
  125. data/spec/fixtures/zoos.yaml +0 -24
  126. data/spec/is_a_tree_spec.rb +0 -149
  127. data/spec/legacy_spec.rb +0 -16
  128. data/spec/load_command_spec.rb +0 -322
  129. data/spec/magic_columns_spec.rb +0 -26
  130. data/spec/migration_spec.rb +0 -267
  131. data/spec/mock_adapter.rb +0 -20
  132. data/spec/models/animal.rb +0 -12
  133. data/spec/models/candidate.rb +0 -8
  134. data/spec/models/career.rb +0 -7
  135. data/spec/models/chain.rb +0 -8
  136. data/spec/models/comment.rb +0 -6
  137. data/spec/models/exhibit.rb +0 -14
  138. data/spec/models/fence.rb +0 -7
  139. data/spec/models/fruit.rb +0 -8
  140. data/spec/models/job.rb +0 -8
  141. data/spec/models/person.rb +0 -30
  142. data/spec/models/post.rb +0 -14
  143. data/spec/models/project.rb +0 -41
  144. data/spec/models/sales_person.rb +0 -5
  145. data/spec/models/section.rb +0 -8
  146. data/spec/models/serializer.rb +0 -5
  147. data/spec/models/task.rb +0 -9
  148. data/spec/models/tomato.rb +0 -27
  149. data/spec/models/user.rb +0 -12
  150. data/spec/models/zoo.rb +0 -13
  151. data/spec/natural_key_spec.rb +0 -36
  152. data/spec/paranoia_spec.rb +0 -38
  153. data/spec/persistence_spec.rb +0 -479
  154. data/spec/postgres_spec.rb +0 -96
  155. data/spec/property_spec.rb +0 -151
  156. data/spec/query_spec.rb +0 -77
  157. data/spec/save_command_spec.rb +0 -94
  158. data/spec/schema_spec.rb +0 -8
  159. data/spec/serialize_spec.rb +0 -19
  160. data/spec/single_table_inheritance_spec.rb +0 -43
  161. data/spec/spec_helper.rb +0 -45
  162. data/spec/support/blank_spec.rb +0 -8
  163. data/spec/support/inflector_spec.rb +0 -41
  164. data/spec/support/object_spec.rb +0 -9
  165. data/spec/support/serialization_spec.rb +0 -61
  166. data/spec/support/silence_spec.rb +0 -15
  167. data/spec/support/string_spec.rb +0 -7
  168. data/spec/support/struct_spec.rb +0 -12
  169. data/spec/support/typed_set_spec.rb +0 -66
  170. data/spec/symbolic_operators_spec.rb +0 -27
  171. data/spec/table_spec.rb +0 -79
  172. data/spec/types/string.rb +0 -81
  173. data/spec/validates_confirmation_of_spec.rb +0 -55
  174. data/spec/validates_format_of_spec.rb +0 -78
  175. data/spec/validates_length_of_spec.rb +0 -117
  176. data/spec/validates_uniqueness_of_spec.rb +0 -92
  177. data/spec/validations/number_validator.rb +0 -59
  178. data/spec/validations/string_validator.rb +0 -14
  179. data/spec/validations_spec.rb +0 -141
  180. data/tasks/fixtures.rb +0 -53
@@ -1,34 +0,0 @@
1
- module DataMapper
2
- module Adapters
3
- module Sql
4
- module Mappings
5
-
6
- class AssociationsSet
7
-
8
- include Enumerable
9
-
10
- def initialize
11
- @set = {}
12
- end
13
-
14
- def <<(association)
15
- @set[association.name] = association
16
- end
17
-
18
- def [](name)
19
- @set[name]
20
- end
21
-
22
- def each
23
- @set.each { |name, association| yield(association) }
24
- end
25
-
26
- def empty?
27
- @set.empty?
28
- end
29
- end
30
-
31
- end # module Mappings
32
- end # module Sql
33
- end # module Adapters
34
- end # module DataMapper
@@ -1,279 +0,0 @@
1
- module DataMapper
2
- module Adapters
3
- module Sql
4
- module Mappings
5
-
6
- # TODO: There are of course many more options to add here.
7
- # Ordinal, Length/Size, Nullability are just a few.
8
- class Column
9
- attr_reader :type, :name, :ordinal, :size, :default, :check
10
- attr_writer :lazy, :index, :unique
11
- attr_accessor :table, :options
12
-
13
- def initialize(adapter, table, name, type, ordinal, options = {})
14
- @adapter = adapter
15
- @table = table
16
- @name, self.type, @options = name.to_sym, type, options
17
- @ordinal = ordinal
18
- parse_options!
19
- end
20
-
21
- def parse_options!
22
- @key = @options[:key] == true || @options[:serial] == true
23
- @nullable = @options.has_key?(:nullable) ? @options[:nullable] : !@key
24
- @lazy = @options.has_key?(:lazy) ? @options[:lazy] : (@type == :text && !@key)
25
- @serial = @options[:serial] == true
26
- @default = @options[:default]
27
-
28
- @unique = if @options[:index] == :unique then @options.delete(:index); true else false end
29
- @index = @options[:index]
30
- @check = @options[:check] # only for postgresql
31
-
32
- @size = if @options.has_key?(:size)
33
- @options[:size]
34
- elsif @options.has_key?(:length)
35
- @options[:length]
36
- else
37
- case type
38
- when :integer then 11
39
- when :string, :class then 50
40
- else nil
41
- end
42
- end
43
- @size = @size.last if @size.is_a?(Range)
44
- end
45
-
46
- def defaulted?() instance_variables.include?("@default") end
47
-
48
- def type=(value)
49
- self.flush_sql_caches!
50
- @type = value
51
- (class << self; self end).class_eval <<-EOS
52
- def type_cast_value(value)
53
- @adapter.type_cast_#{@type}(value)
54
- end
55
- EOS
56
- @type
57
- end
58
-
59
- def name=(value)
60
- flush_sql_caches!
61
- @name = value
62
- end
63
-
64
- # Determines if the field should be lazy loaded.
65
- # You can set this explicitly, or accept the default,
66
- # which is false for all but text fields.
67
- def lazy?
68
- @lazy
69
- end
70
-
71
- def nullable?
72
- @nullable
73
- end
74
-
75
- def key?
76
- @key
77
- end
78
-
79
- def serial?
80
- @serial
81
- end
82
-
83
- def unique?
84
- @unique
85
- end
86
-
87
- def index?
88
- @index
89
- end
90
-
91
- def default=(value)
92
- self.flush_sql_caches!
93
- @default = value
94
- end
95
-
96
- def to_sym
97
- @name
98
- end
99
-
100
- def instance_variable_name
101
- @instance_variable_name || (@instance_variable_name = "@#{@name.to_s.gsub(/\?$/, '')}".freeze)
102
- end
103
-
104
- def to_s
105
- @name.to_s
106
- end
107
-
108
- def column_name
109
- @column_name || (@column_name = (@options.has_key?(:column) ? @options[:column].to_s : name.to_s.gsub(/\?$/, '')).freeze)
110
- end
111
-
112
- def to_sql(include_table_name = false)
113
- if include_table_name
114
- @to_sql_with_table_name || @to_sql_with_table_name = begin
115
- (@table.to_sql + '.' + @adapter.quote_column_name(column_name)).freeze
116
- end
117
- else
118
- @to_sql || (@to_sql = @adapter.quote_column_name(column_name).freeze)
119
- end
120
- end
121
-
122
- def size=(val)
123
- self.flush_sql_caches!
124
- @size = val
125
- end
126
-
127
- def inspect
128
- "#<%s:0x%x @name=%s, @type=%s, @options=%s>" % [self.class.name, (object_id * 2), to_sql, type.inspect, options.inspect]
129
- end
130
-
131
- def to_create_sql
132
- "ALTER TABLE " << table.to_sql << " ADD " << to_long_form
133
- end
134
-
135
- def to_alter_sql
136
- "ALTER TABLE " << table.to_sql << " MODIFY COLUMN " << to_long_form
137
- end
138
-
139
- def to_drop_sql
140
- "ALTER TABLE " << table.to_sql << " DROP COLUMN " << to_sql
141
- end
142
-
143
- def create!
144
- @table.columns << self
145
- flush_sql_caches!
146
-
147
- @adapter.connection do |db|
148
- command = db.create_command(to_create_sql)
149
- command.execute_non_query
150
- end
151
- true
152
- end
153
-
154
- def drop!
155
- @table.columns.delete(self)
156
- flush_sql_caches!
157
-
158
- @adapter.connection do |db|
159
- command = db.create_command(to_drop_sql)
160
- command.execute_non_query
161
- end
162
- true
163
- end
164
-
165
- def alter!
166
- flush_sql_caches!
167
- @adapter.connection do |db|
168
- command = db.create_command(to_alter_sql)
169
- command.execute_non_query
170
- end
171
- true
172
- end
173
-
174
- def rename!(new_name)
175
- old_name = name # Store the old_name
176
-
177
- new_column = @table.add_column(new_name, self.type, self.options.merge(:ordinal => self.ordinal))
178
-
179
- # Create the new column
180
- new_column.create!
181
-
182
- # Copy the data from one column to the other.
183
- @adapter.connection do |db|
184
- command = db.create_command <<-EOS.compress_lines
185
- UPDATE #{@table.to_sql} SET
186
- #{new_column.to_sql} = #{to_sql}
187
- EOS
188
- command.execute_non_query
189
- end
190
-
191
- self.drop!
192
- new_column
193
- end
194
-
195
- def to_long_form
196
- @to_long_form || begin
197
- @to_long_form = "#{to_sql} #{type_declaration}"
198
-
199
- unless nullable? || not_null_declaration.blank?
200
- @to_long_form << " #{not_null_declaration}"
201
- end
202
-
203
- # NOTE: We only do inline PRIMARY KEY declarations
204
- # if the column is also serial since we know
205
- # "there can be only one".
206
- if key? && serial? && !primary_key_declaration.blank?
207
- @to_long_form << " #{primary_key_declaration}"
208
- end
209
-
210
- if serial? && !serial_declaration.blank?
211
- @to_long_form << " #{serial_declaration}"
212
- end
213
-
214
- unless default.nil? || (value = default_declaration).blank?
215
- @to_long_form << " #{value}"
216
- end
217
-
218
- if unique? && !unique_declaration.blank?
219
- @to_long_form << " #{unique_declaration}"
220
- end
221
-
222
- @to_long_form
223
- end
224
- end
225
-
226
- def <=>(other)
227
- ordinal <=> other.ordinal
228
- end
229
-
230
- def hash
231
- @hash || @hash = to_sql(true).hash
232
- end
233
-
234
- def eql?(other)
235
- name == other.name
236
- end
237
-
238
- protected
239
-
240
- def primary_key_declaration
241
- "PRIMARY KEY"
242
- end
243
-
244
- def type_declaration
245
- sql = "#{@adapter.class::TYPES[type] || type}"
246
- sql << "(#{size})" unless size.nil?
247
- sql
248
- end
249
-
250
- def not_null_declaration
251
- "NOT NULL"
252
- end
253
-
254
- def serial_declaration
255
- "AUTO_INCREMENT"
256
- end
257
-
258
- def unique_declaration
259
- "UNIQUE"
260
- end
261
-
262
- def default_declaration
263
- @adapter.connection { |db| db.create_command("DEFAULT ?").escape_sql([default]) }
264
- end
265
-
266
- def flush_sql_caches!
267
- @to_long_form = nil
268
- @to_sql = nil
269
- @to_sql_with_table_name = nil
270
- @column_name = nil
271
- @table.flush_sql_caches!(false)
272
- end
273
-
274
- end
275
-
276
- end
277
- end
278
- end
279
- end
@@ -1,172 +0,0 @@
1
- module DataMapper
2
- module Adapters
3
- module Sql
4
- module Mappings
5
-
6
- class Conditions
7
- def initialize(table, adapter, qualify_columns=false, options={})
8
- @table = table
9
- @qualify_columns = qualify_columns
10
-
11
- # BEGIN: Partion out the options hash into general options,
12
- # and conditions.
13
- standard_find_options = adapter.class::FIND_OPTIONS
14
- conditions_hash = {}
15
-
16
- options.each do |key,value|
17
- unless standard_find_options.include?(key) && key != :conditions
18
- conditions_hash[key] = value
19
- end
20
- end
21
- # END
22
-
23
- @conditions = parse_conditions(conditions_hash)
24
- end
25
-
26
- # Generate a statement after 'WHERE' based on the initialization
27
- # arguments.
28
- def to_params_sql
29
- parameters = []
30
- sql = ""
31
-
32
- unless @conditions.empty?
33
- sql << ' WHERE ('
34
-
35
- last_index = @conditions.size
36
- current_index = 0
37
-
38
- @conditions.each do |condition|
39
- case condition
40
- when String then sql << condition
41
- when Array then
42
- sql << condition.shift
43
- parameters += condition
44
- else
45
- raise "Unable to parse condition: #{condition.inspect}" if condition
46
- end
47
-
48
- if (current_index += 1) == last_index
49
- sql << ')'
50
- else
51
- sql << ') AND ('
52
- end
53
- end
54
- end
55
-
56
- parameters.unshift(sql)
57
- end
58
-
59
- def parse_conditions(conditions_hash)
60
- collection = []
61
-
62
- case x = conditions_hash.delete(:conditions)
63
- when Array then
64
- # DO NOT mutate incoming Array values!!!
65
- # Otherwise the mutated version may impact all the
66
- # way up to the options passed to the finders,
67
- # and have unintended side-effects.
68
- array_copy = x.dup
69
- clause = array_copy.shift
70
- expression_to_sql(clause, array_copy, collection)
71
- when Hash then
72
- x.each_pair do |key,value|
73
- expression_to_sql(key, value, collection)
74
- end
75
- else
76
- raise "Unable to parse conditions: #{x.inspect}" if x
77
- end
78
-
79
- if @table.paranoid?
80
- conditions_hash[@table.paranoid_column.name] = nil
81
- end
82
-
83
- conditions_hash.each_pair do |key,value|
84
- expression_to_sql(key, value, collection)
85
- end
86
-
87
- collection
88
- end
89
-
90
- # expression_to_sql takes a set of arguments, and turns them into a an
91
- # Array of generated SQL, followed by optional Values to interpolate as SQL-Parameters.
92
- #
93
- # Parameters:
94
- # +clause+ The name of the column as a Symbol, a raw-SQL String, a Mappings::Column
95
- # instance, or a Symbol::Operator.
96
- # +value+ The Value for the condition.
97
- # +collector+ An Array representing all conditions that is appended to by expression_to_sql
98
- #
99
- # Returns: Undefined Output. The work performed is added to the +collector+ argument.
100
- # Example:
101
- # conditions = []
102
- # expression_to_sql(:name, 'Bob', conditions)
103
- # => +undefined return value+
104
- # conditions.inspect
105
- # => ["name = ?", 'Bob']
106
- def expression_to_sql(clause, value, collector)
107
- case clause
108
- when Symbol::Operator then
109
- operator = case clause.type
110
- when :gt then '>'
111
- when :gte then '>='
112
- when :lt then '<'
113
- when :lte then '<='
114
- when :not then inequality_operator(value)
115
- when :eql then equality_operator(value)
116
- when :like then equality_operator(value, 'LIKE')
117
- when :in then equality_operator(value)
118
- else raise ArgumentError.new('Operator type not supported')
119
- end
120
- #Table[column name] is column.to_sql(true/false based on associations or not)
121
- collector << ["#{@table[clause].to_sql(@qualify_columns)} #{operator} ?", value]
122
- when Symbol then
123
- collector << ["#{@table[clause].to_sql(@qualify_columns)} #{equality_operator(value)} ?", value]
124
- when String then
125
- collector << [clause, *value]
126
- when Mappings::Column then
127
- collector << ["#{clause.to_sql(@qualify_columns)} #{equality_operator(value)} ?", value]
128
- else raise "CAN HAS CRASH? #{clause.inspect}"
129
- end
130
- rescue => e
131
- raise ConditionsError.new(clause, value, e)
132
- end
133
-
134
- def equality_operator(value, default = '=')
135
- case value
136
- when NilClass then 'IS'
137
- when Array then 'IN'
138
- else default
139
- end
140
- end
141
-
142
- def inequality_operator(value, default = '<>')
143
- case value
144
- when NilClass then 'IS NOT'
145
- when Array then 'NOT IN'
146
- else default
147
- end
148
- end
149
-
150
- class ConditionsError < StandardError
151
-
152
- attr_reader :inner_error
153
-
154
- def initialize(clause, value, inner_error)
155
- @clause, @value, @inner_error = clause, value, inner_error
156
- end
157
-
158
- def message
159
- "Conditions (:clause => #{@clause.inspect}, :value => #{@value.inspect}) failed: #{@inner_error}"
160
- end
161
-
162
- def backtrace
163
- @inner_error.backtrace
164
- end
165
-
166
- end
167
-
168
- end
169
- end
170
- end
171
- end
172
- end