abc-adapters 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem 'rspec'
7
+ unless ENV['TRAVIS']
8
+ gem 'simplecov'
9
+ gem 'pry'
10
+ gem 'pry-nav'
11
+ end
12
+ end
13
+
14
+ group :development do
15
+ gem 'yard', "~> 0.8.4.1"
16
+ gem 'rdoc'
17
+ end
18
+
19
+ gem 'abc', :path => '../'
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,24 @@
1
+ # Maintain your gem's version:
2
+ require File.expand_path('../lib/abc/package', File.dirname(__FILE__))
3
+
4
+ # Describe your gem and declare its dependencies:
5
+ Gem::Specification.new do |s|
6
+ s.name = "abc-adapters"
7
+ s.version = Abc::VERSION
8
+ s.authors = Abc::AUTHORS
9
+ s.email = Abc::EMAILS
10
+ s.homepage = Abc::HOMEPAGE
11
+ s.summary = Abc::SUMMARY
12
+ s.description = Abc::DESCRIPTION
13
+
14
+ s.require_paths = ["lib"]
15
+
16
+ s.files = `git ls-files`.split($/)
17
+ s.test_files = s.files.grep(%r{^(spec)/})
18
+
19
+ s.required_ruby_version = '>= 1.9.3' # that's right.
20
+
21
+ s.add_dependency 'abc', "~>#{Abc::VERSION}"
22
+ s.add_dependency 'hyperion-api'
23
+ s.add_dependency 'hyperion-sqlite'
24
+ end
@@ -0,0 +1,43 @@
1
+ # TODO: These should probably be namespaced under hyperion, too, since they are
2
+ # explicitly relevant to it.
3
+ # Thought: move the actual domain-specific query objects into the DSL, and use
4
+ # this as the cross-barrier interface.
5
+ # That would let us do something to standardize the interface so we could potentially
6
+ # work with AR.
7
+
8
+ module Abc
9
+ module Adapters
10
+ module Persistence
11
+ module Repositories
12
+ class Base
13
+ class << self
14
+
15
+ # Serialize a hash to the datastore.
16
+ def store(values)
17
+ Hyperion.save({:kind => kind}.merge(values))
18
+ end
19
+
20
+ # Find an entity by its key.
21
+ def find(key)
22
+ Hyperion.find_by_key(key)
23
+ end
24
+
25
+ # Search for an entity.
26
+ def search(options = {})
27
+ Hyperion.find_by_kind(kind, options)
28
+ end
29
+
30
+ protected
31
+ def kind
32
+ raise "Kind was not specified in repository."
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+
42
+
43
+
@@ -0,0 +1,18 @@
1
+ require_relative 'base'
2
+
3
+ module Abc
4
+ module Adapters
5
+ module Persistence
6
+ module Repositories
7
+ class Page < Base
8
+ class << self
9
+ protected
10
+ def kind
11
+ :page
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require_relative 'base'
2
+
3
+ module Abc
4
+ module Adapters
5
+ module Persistence
6
+ module Repositories
7
+ class Text < Base
8
+ class << self
9
+ protected
10
+ def kind
11
+ :text
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ $LOAD_PATH.push File.expand_path('../../abc', __FILE__)
2
+ require 'adapters/config'
3
+ require 'adapters/persistence/repositories/text'
4
+ require 'adapters/persistence/repositories/page'
5
+
6
+ module Abc
7
+ module Adapters
8
+ extend Config
9
+
10
+ # Override this if you want to change the datastore
11
+ def self.enable_datastore!
12
+ Hyperion.datastore = Abc::Adapters.datastore_from_options(Abc::Adapters.datastore_options)
13
+ end
14
+ end
15
+ end
16
+
17
+ Abc::Adapters.enable_datastore!
@@ -0,0 +1,29 @@
1
+ require 'hyperion'
2
+
3
+ module Abc
4
+ module Adapters
5
+ module Config
6
+
7
+ def datastore_from_options(opts)
8
+ Hyperion.datastore = Hyperion.new_datastore(*opts) if use_datastore?
9
+ end
10
+
11
+ def use_datastore?
12
+ @use_datastore.nil? ? true : @use_datastore
13
+ end
14
+
15
+ def use_datastore=(val)
16
+ @use_datastore = val
17
+ end
18
+
19
+ def datastore_options
20
+ @datastore_options ||= [:memory]
21
+ end
22
+
23
+ def datastore_options=(opts)
24
+ @datastore_options = opts
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ class MockRepo < Abc::Adapters::Persistence::Repositories::Base
4
+ def self.kind; :mock; end
5
+ end
6
+
7
+ module Abc
8
+ module Adapters
9
+ module Persistence
10
+ module Repositories
11
+ describe Base do
12
+ context "without kind" do
13
+ let(:repo) { Base }
14
+ it "should raise an error" do
15
+ lambda{ repo.send(:kind) }.should raise_error
16
+ end
17
+ end
18
+
19
+ context "with kind" do
20
+ let(:repo) { MockRepo }
21
+ let(:hash) { {:text => 'giggity'} }
22
+
23
+ # Truncate each run.
24
+ before(:each) { Abc::Adapters.enable_datastore! }
25
+
26
+ it "can store an item" do
27
+ Text.store(hash)[:text].should == hash[:text]
28
+ end
29
+
30
+ it "can retrieve an item by key" do
31
+ key = repo.store(hash)[:key]
32
+ repo.find(key)[:text].should == hash[:text]
33
+ end
34
+
35
+ it "can find an item by attributes" do
36
+ key = Text.store(hash)[:key]
37
+ result = Text.search(:filters => [[:text, '=', hash[:text]]])
38
+ result.first[:key].should == key
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module Abc
4
+ module Adapters
5
+ module Persistence
6
+ module Repositories
7
+ describe Page do
8
+ it "should be of kind page" do
9
+ Page.send(:kind).should == :page
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module Abc
4
+ module Adapters
5
+ module Persistence
6
+ module Repositories
7
+ describe Text do
8
+ it "should be of kind text" do
9
+ Text.send(:kind).should == :text
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ class Mock; end
4
+
5
+
6
+ module Abc
7
+ module Adapters
8
+ describe Config do
9
+ subject { Mock.send(:extend, Config) }
10
+
11
+ it "uses a datastore unless specified otherwise" do
12
+ subject.use_datastore?.should be_true
13
+ end
14
+
15
+ it "doesn't use a datastore if told not to" do
16
+ subject.use_datastore = false
17
+ subject.use_datastore?.should be_false
18
+ end
19
+
20
+ it "uses a memory datastore by default" do
21
+ subject.datastore_options.should == [:memory]
22
+ end
23
+
24
+ it "allows overriding options for datastores" do
25
+ subject.datastore_options = [:sqlite]
26
+ subject.datastore_options.should == [:sqlite]
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.push File.expand_path('../../abc/', __FILE__)
2
+
3
+ unless ENV['TRAVIS']
4
+ require 'simplecov'
5
+ SimpleCov.start do
6
+ add_filter "/spec/"
7
+ end
8
+ end
9
+
10
+ require 'abc-adapters'
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: abc-adapters
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - The Afterburner CMS Team
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: abc
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.0.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.0.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: hyperion-api
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: hyperion-sqlite
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: An easy-to-use, easy-to-extend CMS.
63
+ email:
64
+ - info@afterburnercms.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - Gemfile
70
+ - Rakefile
71
+ - abc-adapters.gemspec
72
+ - abc/adapters/persistence/repositories/base.rb
73
+ - abc/adapters/persistence/repositories/page.rb
74
+ - abc/adapters/persistence/repositories/text.rb
75
+ - lib/abc-adapters.rb
76
+ - lib/adapters/config.rb
77
+ - spec/adapters/persistence/repositories/base_spec.rb
78
+ - spec/adapters/persistence/repositories/page_spec.rb
79
+ - spec/adapters/persistence/repositories/text_spec.rb
80
+ - spec/lib/adapters/config_spec.rb
81
+ - spec/spec_helper.rb
82
+ homepage: http://www.afterburnercms.com/
83
+ licenses: []
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.9.3
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 1.8.24
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: An easy-to-use, easy-to-extend CMS.
106
+ test_files:
107
+ - spec/adapters/persistence/repositories/base_spec.rb
108
+ - spec/adapters/persistence/repositories/page_spec.rb
109
+ - spec/adapters/persistence/repositories/text_spec.rb
110
+ - spec/lib/adapters/config_spec.rb
111
+ - spec/spec_helper.rb
112
+ has_rdoc: