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