Commit 07a6ad7
Changed files (3)
lib/humble.rb
@@ -1,5 +1,75 @@
require "humble/version"
module Humble
- # Your code goes here...
+ class Configuration
+ attr_reader :connection_string
+
+ def initialize(connection_string)
+ @mappings = []
+ @connection_string = connection_string
+ end
+
+ def add(mapping)
+ @mappings.push(mapping)
+ end
+
+ def build_session_factory
+ SessionFactory.new(self)
+ end
+
+ def mapping_for(item)
+ @mappings.find do |mapping|
+ mapping.is_for?(item)
+ end
+ end
+ end
+
+ class SessionFactory
+ def initialize(configuration)
+ @configuration = configuration
+ end
+
+ def create_session
+ Session.new(self, @configuration)
+ end
+
+ def create_connection
+ Sequel.connect(@configuration.connection_string)
+ end
+ end
+
+ class Session
+ def initialize(connection_factory, mapper_registry)
+ @connection_factory = connection_factory
+ @mapper_registry = mapper_registry
+ end
+
+ def begin_transaction(&block)
+ create_connection.transaction do
+ block.call(self)
+ end
+ end
+
+ def save(item)
+ mapping_for(item).save_using(create_connection, item)
+ end
+
+ def find_all(clazz)
+ mapping_for(clazz).find_all_using(create_connection, clazz)
+ end
+
+ private
+
+ attr_reader :connection_factory, :mapper_registry
+
+ def create_connection
+ @connection ||= connection_factory.create_connection
+ end
+
+ def mapping_for(item)
+ mapper_registry.mapping_for(item)
+ end
+ end
+
+
end
spec/example_spec.rb
@@ -1,77 +1,7 @@
require "rubygems"
require 'sequel'
require "sqlite3"
-
-class Configuration
- attr_reader :connection_string
-
- def initialize(connection_string)
- @mappings = []
- @connection_string = connection_string
- end
-
- def add(mapping)
- @mappings.push(mapping)
- end
-
- def build_session_factory
- SessionFactory.new(self)
- end
-
- def mapping_for(item)
- @mappings.find do |mapping|
- mapping.is_for?(item)
- end
- end
-end
-
-class SessionFactory
- def initialize(configuration)
- @configuration = configuration
- end
-
- def create_session
- Session.new(self, @configuration)
- end
-
- def create_connection
- Sequel.connect(@configuration.connection_string)
- end
-end
-
-class Session
- def initialize(connection_factory, mapper_registry)
- @connection_factory = connection_factory
- @mapper_registry = mapper_registry
- end
-
- def begin_transaction(&block)
- create_connection.transaction do
- block.call(self)
- end
- end
-
- def save(item)
- mapping_for(item).save_using(create_connection, item)
- end
-
- def find_all(clazz)
- mapping_for(clazz).find_all_using(create_connection, clazz)
- end
-
- private
-
- attr_reader :connection_factory, :mapper_registry
-
- def create_connection
- @connection ||= connection_factory.create_connection
- end
-
- def mapping_for(item)
- mapper_registry.mapping_for(item)
- end
-end
-
+require_relative '../lib/humble.rb'
class Movie
attr_reader :name
@@ -81,10 +11,7 @@ class Movie
end
end
-class DatabaseMapping
-end
-
-class MovieMapping < DatabaseMapping
+class MovieMapping
def is_for?(item)
item == Movie || item.is_a?(Movie)
end
@@ -100,7 +27,6 @@ class MovieMapping < DatabaseMapping
def run(map)
map.table :movies
end
-
end
@@ -120,7 +46,7 @@ describe "orm" do
end
it "should work like this" do
- configuration = Configuration.new(connection_string)
+ configuration = Humble::Configuration.new(connection_string)
configuration.add(MovieMapping.new)
session_factory = configuration.build_session_factory
session = session_factory.create_session
humble.gemspec
@@ -17,7 +17,9 @@ Gem::Specification.new do |spec|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
+ spec.requred_ruby_version = '>= 2.0.0'
+ spec.add_dependency "sequel"
spec.add_development_dependency "bundler", "~> 1.3"
spec.add_development_dependency "rake"
spec.add_development_dependency 'rspec'