Commit 9f34767
Changed files (3)
lib
humble
lib/humble/column.rb
@@ -1,40 +1,51 @@
module Humble
class Column
- def initialize(attributes)
- @attributes = attributes
+ def initialize(name)
+ @column_name = name
end
def prepare_insert(item)
return {} if primary_key?
- key = column_name
- value = item.instance_variable_get("@#{key}")
- { key.to_sym => value }
+ value = item.instance_variable_get("@#{column_name}")
+ { column_name.to_sym => value }
end
def prepare_update(item)
- key = column_name
- value = item.instance_variable_get("@#{key}")
- { key.to_sym => value }
+ value = item.instance_variable_get("@#{column_name}")
+ { column_name.to_sym => value }
end
def primary_key?
- @attributes[:primary_key]
+ false
end
- def column_name
- @attributes[:name]
- end
+ protected
+
+ attr_reader :column_name
+ end
- def default
- @attributes[:default]
+ class PrimaryKeyColumn < Column
+ attr_reader :default
+
+ def initialize(name, default)
+ super(name)
+ @default = default
end
def apply(id, entity)
- entity.instance_variable_set("@#{column_name}", id ) if primary_key?
+ entity.instance_variable_set("@#{column_name}", id )
end
def destroy(connection, entity)
- connection.where(column_name.to_sym => entity.id).delete if primary_key?
+ connection.where(column_name.to_sym => entity.id).delete
+ end
+
+ def primary_key?
+ true
+ end
+
+ def has_default_value?(item)
+ @default == item.id
end
end
end
lib/humble/database_table.rb
@@ -11,15 +11,15 @@ module Humble
end
def primary_key(name, default: 0)
- @columns << Column.new(:name => name, :default => default, :primary_key => true)
+ @primary_key = PrimaryKeyColumn.new(name, default)
end
def add_column(name)
- @columns << Column.new(:name => name)
+ @columns << Column.new(name)
end
def persist(connection, item)
- if has_default_value?(item)
+ if @primary_key.has_default_value?(item)
insert(item, connection[@name])
else
update(item, connection[@name])
@@ -27,19 +27,11 @@ module Humble
end
def destroy(connection, entity)
- primary_key_column.destroy(connection[@name], entity)
+ @primary_key.destroy(connection[@name], entity)
end
private
- def has_default_value?(item)
- primary_key_column.default == item.id
- end
-
- def primary_key_column
- @columns.find { |x| x.primary_key? }
- end
-
def prepare_statement
@columns.inject({}) do |result, column|
result.merge(yield(column))
@@ -48,7 +40,7 @@ module Humble
def insert(item, connection)
id = connection.insert(prepare_statement { |column| column.prepare_insert(item) })
- primary_key_column.apply(id, item)
+ @primary_key.apply(id, item)
end
def update(item, connection)
Gemfile.lock
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
- humble (0.0.1374367205)
+ humble (0.0.1374367897)
sequel
GEM