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 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: