abc-core 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 +20 -0
- data/Guardfile +6 -0
- data/Rakefile +1 -0
- data/abc-core.gemspec +22 -0
- data/abc/entities/content/text.rb +19 -0
- data/abc/entities/menu/menu.rb +16 -0
- data/abc/entities/menu/menu_entry.rb +20 -0
- data/abc/entities/menu/menuable.rb +6 -0
- data/abc/entities/menu/path.rb +17 -0
- data/abc/entities/pages/page.rb +16 -0
- data/abc/entities/view/viewable.rb +7 -0
- data/abc/entities/view/viewable_presenter.rb +9 -0
- data/abc/interactors/creates_menu.rb +23 -0
- data/abc/interactors/pages/builds_page.rb +21 -0
- data/lib/abc-core.rb +1 -0
- data/spec/entities/content/text_spec.rb +37 -0
- data/spec/entities/menu/menu_entry_spec.rb +11 -0
- data/spec/entities/menu/menu_spec.rb +17 -0
- data/spec/entities/menu/menuable_spec.rb +7 -0
- data/spec/entities/menu/path_spec.rb +8 -0
- data/spec/entities/pages/page_spec.rb +19 -0
- data/spec/entities/view/viewable_presenter_spec.rb +7 -0
- data/spec/entities/view/viewable_spec.rb +7 -0
- data/spec/interactors/creates_menu_spec.rb +31 -0
- data/spec/interactors/pages/builds_page_spec.rb +15 -0
- data/spec/spec_helper.rb +10 -0
- metadata +99 -0
data/Gemfile
ADDED
@@ -0,0 +1,20 @@
|
|
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 'guard-shell'
|
10
|
+
gem 'rb-fsevent', '~> 0.9', :platform => :ruby
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
group :development do
|
15
|
+
gem 'yard', "~> 0.8.4.1"
|
16
|
+
gem 'rdoc'
|
17
|
+
gem 'kramdown'
|
18
|
+
end
|
19
|
+
|
20
|
+
gem 'abc', :path => '../'
|
data/Guardfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/abc-core.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
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-core"
|
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
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Abc
|
2
|
+
|
3
|
+
# This is the actual main menu class. It holds logic for spitting out menus.
|
4
|
+
# It doesn't know how to render each node; it just knows how to spit out a
|
5
|
+
# tree.
|
6
|
+
class Menu
|
7
|
+
|
8
|
+
# This holds a tree of entries.
|
9
|
+
attr_accessor :entries
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
self.entries = []
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Abc
|
2
|
+
# A MenuEntry is the class that actually holds entries to the {Menu} class.
|
3
|
+
# This is the parent type of the subtypes that can be registered
|
4
|
+
# ({Menuable}s). Note that these do not define entry points; those are done
|
5
|
+
# by {Path}s, though you shouldn't have to ever see a Path unless you define
|
6
|
+
# an additional one for a {Viewable}. If you have defined an additional path,
|
7
|
+
# then the interface should let you specify which you want to use for the
|
8
|
+
# menu entry.
|
9
|
+
class MenuEntry
|
10
|
+
attr_accessor :title, :children
|
11
|
+
|
12
|
+
def initialize(title, children = [])
|
13
|
+
self.title = title
|
14
|
+
self.children = Array(children).map do |child|
|
15
|
+
self.class.new(child[:title], child[:children])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Abc
|
2
|
+
# Path is an object that represents a valid entry point to a viewable. This
|
3
|
+
# is a mostly invisible object that's created when you set a custom URL on a
|
4
|
+
# {MenuEntry}, but this makes it possible to also add custom, non-canonical
|
5
|
+
# entry points to {Viewable}s.
|
6
|
+
#
|
7
|
+
# This will be particularly valuable for a number of reasons:
|
8
|
+
#
|
9
|
+
# 1. Custom URLs, obviously;
|
10
|
+
# 2. Entry points with additional options: you could specify an additional
|
11
|
+
# route that would pass along information to the {Viewable} or its renderer,
|
12
|
+
# such as whether comments should be displayed. A trivial example would be a
|
13
|
+
# Path that's used in a BlogPost-style {MenuEntry} that shows comments or not
|
14
|
+
# (i.e. /blog/post/blah/no-comments).
|
15
|
+
class Path
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Abc
|
2
|
+
# This is a superclass that's used to define some sensible defaults and
|
3
|
+
# provide additional methods to presenters, which are used to determine how
|
4
|
+
# to present a {Viewable} for a specific medium. Without reference to the
|
5
|
+
# medium, these are just HTML presenters... but we could have something like
|
6
|
+
# a JsonPagePresenter, too.
|
7
|
+
class ViewablePresenter
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'abc'
|
2
|
+
require 'entities/menu/menu'
|
3
|
+
require 'entities/menu/menu_entry'
|
4
|
+
|
5
|
+
module Abc
|
6
|
+
module Interactors
|
7
|
+
class CreatesMenu < Abc::BaseInteractor
|
8
|
+
attr_reader :menu
|
9
|
+
|
10
|
+
def to_response
|
11
|
+
menu
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(menu_entries, options = {})
|
15
|
+
@menu = Menu.new
|
16
|
+
@menu.entries = menu_entries.map do |entry|
|
17
|
+
MenuEntry.new entry[:title], entry[:children]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'abc'
|
2
|
+
require 'entities/pages/page'
|
3
|
+
|
4
|
+
module Abc
|
5
|
+
module Interactors
|
6
|
+
class BuildsPage < Abc::BaseInteractor
|
7
|
+
attr_reader :page
|
8
|
+
|
9
|
+
def to_response
|
10
|
+
page
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
def initialize(data, options = {})
|
15
|
+
@page = Entities::Page.new(data[:title])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
data/lib/abc-core.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
$LOAD_PATH.push File.expand_path('../../abc', __FILE__)
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'abc/entities/content/text'
|
3
|
+
|
4
|
+
module Abc
|
5
|
+
module Entities
|
6
|
+
module Content
|
7
|
+
describe Text do
|
8
|
+
let(:text) { "Afterburner" }
|
9
|
+
|
10
|
+
subject { Text.new(text) }
|
11
|
+
|
12
|
+
it 'encapsulates a block of text' do
|
13
|
+
subject.text.should == text
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'responds to to_s' do
|
17
|
+
subject.to_s.should == text
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'accepts text in the initialize call' do
|
21
|
+
subject.class.new(text).to_s.should == text
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'requires text in the initialize call' do
|
25
|
+
expect { subject.class.new }.to raise_exception(ArgumentError)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'can be hashified' do
|
29
|
+
text1 = text
|
30
|
+
hsh = {:text => text1}
|
31
|
+
subject.class.new(text).to_hash.should == hsh
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'abc/entities/menu/menu_entry'
|
3
|
+
|
4
|
+
module Abc
|
5
|
+
describe MenuEntry do
|
6
|
+
it "wraps passed children" do
|
7
|
+
e = MenuEntry.new('My title', [{:title => 'Child 1'}])
|
8
|
+
expect(e.children.first).to be_kind_of Abc::MenuEntry
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'abc/entities/menu/menu'
|
3
|
+
|
4
|
+
module Abc
|
5
|
+
describe Menu do
|
6
|
+
it "lists nothing when empty" do
|
7
|
+
subject.entries.should be_empty
|
8
|
+
end
|
9
|
+
|
10
|
+
it "lists root nodes" do
|
11
|
+
entry1 = "node"
|
12
|
+
entry2 = "node2"
|
13
|
+
subject.entries = [entry1, entry2]
|
14
|
+
subject.entries.should == [entry1, entry2]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'abc/entities/pages/page'
|
3
|
+
|
4
|
+
module Abc
|
5
|
+
module Entities
|
6
|
+
describe Page do
|
7
|
+
let(:title) { "Afterburner" }
|
8
|
+
subject { Page.new(title) }
|
9
|
+
|
10
|
+
it "has a title" do
|
11
|
+
subject.title.should == title
|
12
|
+
end
|
13
|
+
|
14
|
+
it "can be hashified" do
|
15
|
+
subject.to_hash.should == {:title => title}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'abc/interactors/creates_menu'
|
3
|
+
|
4
|
+
module Abc
|
5
|
+
module Interactors
|
6
|
+
describe CreatesMenu do
|
7
|
+
let(:menu_entries) do
|
8
|
+
[{:title => "One", :children => [{ :title => "One first child"}]}]
|
9
|
+
end
|
10
|
+
|
11
|
+
describe ".new" do
|
12
|
+
it "creates new menu" do
|
13
|
+
menu_creator = CreatesMenu.send(:new, [])
|
14
|
+
expect(menu_creator.to_response).to be_kind_of(Abc::Menu)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "adds menu entries to menu" do
|
18
|
+
menu_creator = CreatesMenu.send(:new, menu_entries)
|
19
|
+
menu_creator.menu.entries.each do |menu_entry|
|
20
|
+
expect(menu_entry).to be_kind_of(Abc::MenuEntry)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns a menu" do
|
26
|
+
menu_creator = CreatesMenu.call(menu_entries)
|
27
|
+
expect(menu_creator).to be_kind_of(Abc::Menu)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'abc/interactors/pages/builds_page'
|
3
|
+
|
4
|
+
module Abc
|
5
|
+
module Interactors
|
6
|
+
describe BuildsPage do
|
7
|
+
let(:data) {{:title => "More like Awesome-burner, amirite??"}}
|
8
|
+
|
9
|
+
it "returns a page" do
|
10
|
+
builder = BuildsPage.call(data)
|
11
|
+
expect(builder).to be_kind_of(Abc::Entities::Page)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: abc-core
|
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
|
+
description: An easy-to-use, easy-to-extend CMS.
|
31
|
+
email:
|
32
|
+
- info@afterburnercms.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- Gemfile
|
38
|
+
- Guardfile
|
39
|
+
- Rakefile
|
40
|
+
- abc-core.gemspec
|
41
|
+
- abc/entities/content/text.rb
|
42
|
+
- abc/entities/menu/menu.rb
|
43
|
+
- abc/entities/menu/menu_entry.rb
|
44
|
+
- abc/entities/menu/menuable.rb
|
45
|
+
- abc/entities/menu/path.rb
|
46
|
+
- abc/entities/pages/page.rb
|
47
|
+
- abc/entities/view/viewable.rb
|
48
|
+
- abc/entities/view/viewable_presenter.rb
|
49
|
+
- abc/interactors/creates_menu.rb
|
50
|
+
- abc/interactors/pages/builds_page.rb
|
51
|
+
- lib/abc-core.rb
|
52
|
+
- spec/entities/content/text_spec.rb
|
53
|
+
- spec/entities/menu/menu_entry_spec.rb
|
54
|
+
- spec/entities/menu/menu_spec.rb
|
55
|
+
- spec/entities/menu/menuable_spec.rb
|
56
|
+
- spec/entities/menu/path_spec.rb
|
57
|
+
- spec/entities/pages/page_spec.rb
|
58
|
+
- spec/entities/view/viewable_presenter_spec.rb
|
59
|
+
- spec/entities/view/viewable_spec.rb
|
60
|
+
- spec/interactors/creates_menu_spec.rb
|
61
|
+
- spec/interactors/pages/builds_page_spec.rb
|
62
|
+
- spec/spec_helper.rb
|
63
|
+
homepage: http://www.afterburnercms.com/
|
64
|
+
licenses: []
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.9.3
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 1.8.24
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: An easy-to-use, easy-to-extend CMS.
|
87
|
+
test_files:
|
88
|
+
- spec/entities/content/text_spec.rb
|
89
|
+
- spec/entities/menu/menu_entry_spec.rb
|
90
|
+
- spec/entities/menu/menu_spec.rb
|
91
|
+
- spec/entities/menu/menuable_spec.rb
|
92
|
+
- spec/entities/menu/path_spec.rb
|
93
|
+
- spec/entities/pages/page_spec.rb
|
94
|
+
- spec/entities/view/viewable_presenter_spec.rb
|
95
|
+
- spec/entities/view/viewable_spec.rb
|
96
|
+
- spec/interactors/creates_menu_spec.rb
|
97
|
+
- spec/interactors/pages/builds_page_spec.rb
|
98
|
+
- spec/spec_helper.rb
|
99
|
+
has_rdoc:
|