abc-adapters 0.0.1
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.
- data/Gemfile +19 -0
- data/Rakefile +1 -0
- data/abc-adapters.gemspec +24 -0
- data/abc/adapters/persistence/repositories/base.rb +43 -0
- data/abc/adapters/persistence/repositories/page.rb +18 -0
- data/abc/adapters/persistence/repositories/text.rb +18 -0
- data/lib/abc-adapters.rb +17 -0
- data/lib/adapters/config.rb +29 -0
- data/spec/adapters/persistence/repositories/base_spec.rb +45 -0
- data/spec/adapters/persistence/repositories/page_spec.rb +15 -0
- data/spec/adapters/persistence/repositories/text_spec.rb +15 -0
- data/spec/lib/adapters/config_spec.rb +30 -0
- data/spec/spec_helper.rb +10 -0
- metadata +112 -0
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 => '../'
|
data/Rakefile
ADDED
@@ -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
|
+
|
data/lib/abc-adapters.rb
ADDED
@@ -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,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
|
data/spec/spec_helper.rb
ADDED
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:
|