kiosk 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.
@@ -0,0 +1,13 @@
1
+ module Kiosk
2
+ module Rewrite
3
+ autoload :CdnRewrite, 'kiosk/rewrite/cdn_rewrite'
4
+ autoload :NodeRewrite, 'kiosk/rewrite/node_rewrite'
5
+ autoload :PathRewrite, 'kiosk/rewrite/path_rewrite'
6
+
7
+ class << self
8
+ def new(type = :node, *args, &blk)
9
+ "kiosk/rewrite/#{type}_rewrite".classify.constantize.new(*args, &blk)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module Kiosk
2
+ module Rewrite
3
+ class CdnRewrite < NodeRewrite
4
+ def evaluate(node)
5
+ Kiosk.origin.cdn.rewrite_node(node)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ module Kiosk
2
+ module Rewrite
3
+ class NodeRewrite
4
+ def initialize(model, &blk)
5
+ @model = model
6
+ @proc = blk
7
+ end
8
+
9
+ def matches?(node)
10
+ node.is_a?(ClaimedNode) && node.resource.is_a?(@model)
11
+ end
12
+
13
+ def evaluate(node)
14
+ @proc.call(node.resource, node)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,10 @@
1
+ module Kiosk
2
+ module Rewrite
3
+ class PathRewrite < NodeRewrite
4
+ def evaluate(node)
5
+ node.uri_attribute.content = @proc.call(node.resource,node)
6
+ rescue ActionController::RoutingError => e
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,72 @@
1
+ require 'nokogiri'
2
+
3
+ module Kiosk
4
+ # Rewrites the content of resources.
5
+ #
6
+ class Rewriter
7
+
8
+ # Creates a new content rewriter.
9
+ #
10
+ def initialize
11
+ @claims = {}
12
+ @rewrites = []
13
+ end
14
+
15
+ # Adds a +Claim+ to the rewriter. This is typically done indirectly
16
+ # using +Resource.claims_content+ in each resource model.
17
+ #
18
+ # Options:
19
+ #
20
+ # - +:priority+: Claims with higher priority (a lower value) take
21
+ # precedence. Symbols +:high+, +:normal+, +:low+ map to
22
+ # values -9, 0, and 9 respectively.
23
+ #
24
+ def add_claim(claim, options = {})
25
+ priority = {
26
+ :high => -9,
27
+ :normal => 0,
28
+ :low => 9
29
+ }.fetch(options[:priority], options[:priority] || 0)
30
+
31
+ (@claims[priority] || (@claims[priority] = [])) << claim
32
+ end
33
+
34
+ # Adds a rewrite rule to the rewriter. This is typically done indirectly
35
+ # using +Controller.rewrite_content_for+ in each controller.
36
+ #
37
+ def add_rewrite(rewrite)
38
+ @rewrites << rewrite
39
+ end
40
+
41
+ # Clears all rewrite rules.
42
+ #
43
+ def reset!
44
+ @rewrites.clear
45
+ end
46
+
47
+ # Runs on claims on the given content, incorporates all controller
48
+ # rewrites, and returns the resulting content.
49
+ #
50
+ def rewrite(content)
51
+ document = Document.parse(content)
52
+
53
+ # Claims are grouped by priority. Process them in order.
54
+ @claims.keys.sort.each do |k|
55
+
56
+ # Iterate of all claims in this priority group.
57
+ @claims[k].each do |claim|
58
+
59
+ # Stake the claim on the content.
60
+ claim.stake!(document) do |node|
61
+ # Process all rewrites on the claimed node.
62
+ @rewrites.each do |rewrite|
63
+ rewrite.evaluate(node) if rewrite.matches?(node)
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ document.to_html
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,5 @@
1
+ module Kiosk
2
+ module Searchable
3
+ autoload :Resource, 'kiosk/searchable/resource'
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ require 'active_support/concern'
2
+
3
+ module Kiosk
4
+ # Provides indexing of content resources for supported search providers. As
5
+ # of now, only Thinking Sphinx/Sphinx is provided for.
6
+ #
7
+ module Searchable::Resource
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ raise BadConfig.new('you must configure an indexer') unless Kiosk.origin.indexer
12
+ Kiosk.origin.indexer.extend_model(self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ namespace :kiosk do
2
+ desc "Helper task for content indexing."
3
+ task :index, [:index_name] => [:environment] do |task,arguments|
4
+ Kiosk.origin.indexer.index(arguments.index_name)
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module Kiosk
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kiosk
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Daniel Duvall
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-04-27 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: nokogiri
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: "1.5"
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rails
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 3.0.10
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: "2.5"
46
+ type: :development
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: shoulda
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ type: :development
58
+ version_requirements: *id004
59
+ description: "Kiosk provides APIs for integrating WordPress content into a Ruby application: a base REST model for retrieving content, a caching layer, and a rewriting engine for canonicalizing and contextualizing content elements."
60
+ email:
61
+ - dan@mutual.io
62
+ executables: []
63
+
64
+ extensions: []
65
+
66
+ extra_rdoc_files: []
67
+
68
+ files:
69
+ - lib/kiosk/bad_config.rb
70
+ - lib/kiosk/cacheable/connection.rb
71
+ - lib/kiosk/cacheable/resource.rb
72
+ - lib/kiosk/cacheable.rb
73
+ - lib/kiosk/cdn.rb
74
+ - lib/kiosk/claim/node_claim.rb
75
+ - lib/kiosk/claim/path_claim.rb
76
+ - lib/kiosk/claim.rb
77
+ - lib/kiosk/claimed_node.rb
78
+ - lib/kiosk/controller.rb
79
+ - lib/kiosk/document.rb
80
+ - lib/kiosk/indexer/adapter/base.rb
81
+ - lib/kiosk/indexer/adapter/thinking_sphinx_adapter.rb
82
+ - lib/kiosk/indexer/adapter.rb
83
+ - lib/kiosk/indexer.rb
84
+ - lib/kiosk/localizable/resource.rb
85
+ - lib/kiosk/localizable.rb
86
+ - lib/kiosk/localizer.rb
87
+ - lib/kiosk/origin.rb
88
+ - lib/kiosk/prospective_node.rb
89
+ - lib/kiosk/prospector.rb
90
+ - lib/kiosk/resource.rb
91
+ - lib/kiosk/resource_error.rb
92
+ - lib/kiosk/resource_not_found.rb
93
+ - lib/kiosk/resource_uri.rb
94
+ - lib/kiosk/rewrite/cdn_rewrite.rb
95
+ - lib/kiosk/rewrite/node_rewrite.rb
96
+ - lib/kiosk/rewrite/path_rewrite.rb
97
+ - lib/kiosk/rewrite.rb
98
+ - lib/kiosk/rewriter.rb
99
+ - lib/kiosk/searchable/resource.rb
100
+ - lib/kiosk/searchable.rb
101
+ - lib/kiosk/tasks/kiosk.rake
102
+ - lib/kiosk/version.rb
103
+ - lib/kiosk.rb
104
+ - MIT-LICENSE
105
+ - Rakefile
106
+ - Gemfile
107
+ - README.rdoc
108
+ homepage: https://github.com/lettersandlight/kiosk
109
+ licenses: []
110
+
111
+ post_install_message:
112
+ rdoc_options: []
113
+
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: "0"
128
+ requirements: []
129
+
130
+ rubyforge_project:
131
+ rubygems_version: 1.8.23
132
+ signing_key:
133
+ specification_version: 3
134
+ summary: Simple WordPress integration for Ruby applications.
135
+ test_files: []
136
+