imedo_client_communication 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in imedo_client_communication.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'gemmer'
5
+ require 'rake'
6
+ require 'rake/testtask'
7
+
8
+ desc 'Default: run all tests.'
9
+ task :default => ['test:units', 'test:functionals']
10
+
11
+ desc 'Unit Test the common_helpers gem.'
12
+ Rake::TestTask.new('test:units') do |t|
13
+ t.libs << 'lib'
14
+ t.pattern = 'test/unit/**/*_test.rb'
15
+ t.verbose = true
16
+ end
17
+
18
+ desc 'Functional Test the common_helpers gem.'
19
+ Rake::TestTask.new('test:functionals') do |t|
20
+ t.libs << 'lib'
21
+ t.pattern = 'test/functional/**/*_test.rb'
22
+ t.verbose = true
23
+ end
24
+
25
+ Gemmer::Tasks.new('imedo_client_communication') do |t|
26
+ t.release_via :scatter, :to => 'dev01'
27
+ end
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "imedo_client_communication/version"
4
+
5
+ # Dependencies
6
+ dependencies = [
7
+ [ %q<activesupport> , ["= 2.3.3"] ],
8
+ [ %q<actionpack> , ["= 2.3.3"] ]
9
+ ]
10
+
11
+ Gem::Specification.new do |s|
12
+ s.name = "imedo_client_communication"
13
+ s.version = ImedoClientCommunication::VERSION
14
+ s.platform = Gem::Platform::RUBY
15
+ s.authors = ["imedo GmbH"]
16
+ s.email = ["entwickler@imedo.de"]
17
+ s.homepage = ""
18
+ s.summary = %q{Client-side communication with the main application}
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 3
28
+
29
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
30
+ dependencies.each{|dep| s.add_runtime_dependency(*dep) }
31
+ else
32
+ dependencies.each{|dep| s.add_dependency(*dep) }
33
+ end
34
+ else
35
+ dependencies.each{|dep| s.add_dependency(*dep) }
36
+ end
37
+
38
+ end
@@ -0,0 +1,9 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'action_controller'
5
+ module ImedoClientCommunication
6
+ autoload :Context, "imedo_client_communication/context"
7
+ autoload :Payload, "imedo_client_communication/payload"
8
+ autoload :BaseProvider, "imedo_client_communication/base_provider"
9
+ end
@@ -0,0 +1,37 @@
1
+ module ImedoClientCommunication
2
+
3
+ module BaseProvider
4
+ def self.included(receiver)
5
+ receiver.class_eval do
6
+
7
+ provides_context :title
8
+ provides_context :main_title, :main_subtitle, :meta_title, :title_class, :subtitle
9
+ provides_context :page_description, :page_keywords, :keywords
10
+ provides_context :geo_location_city, :geo_location_latlong, :geo_location_icbm, :geo_location_region
11
+ provides_context :noindex, :canonical, :no_breadcrumb
12
+
13
+ provides_context :request_uri do
14
+ request.request_uri
15
+ end
16
+
17
+ provides_context :forbidden
18
+
19
+ provides_context :page_id
20
+ provides_context :model_type => lambda { @navigation_model.class.name if @navigation_model },
21
+ :model_id => lambda { @navigation_model.id if @navigation_model },
22
+ # remove respond_to when all client apps implemented the necessary remote sitemap method in all models
23
+ :model_name => lambda { @navigation_model.sitemap_name if @navigation_model && @navigation_model.respond_to?(:sitemap_name) },
24
+ :model_param => lambda { @navigation_model.to_param if @navigation_model }
25
+
26
+ provides_context :back_link
27
+
28
+ provides_context :current_topic # hook to connect contents across apps
29
+
30
+ provides_context :client_javascripts do
31
+ (Array(@client_javascripts) || []).join(",")
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,52 @@
1
+ module ImedoClientCommunication
2
+
3
+ module Context
4
+ module ClassMethods
5
+ def provides_context(*names, &block)
6
+ if names.size > 1 && block_given?
7
+ raise "Either give the names of several instance variables, or one instance variable and a block"
8
+ else
9
+ if names.size == 1 && block_given?
10
+ names = { names.first => block }
11
+ elsif names.first.is_a?(Hash)
12
+ names = names.first
13
+ else
14
+ names = names.inject({}) { |hash, name| hash[name] = lambda { instance_variable_get :"@#{name}" }; hash }
15
+ end
16
+ self.context_providers.merge! names
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ module InstanceMethods
23
+ def dump_context
24
+ context.merge!(eval_context)
25
+ context
26
+ end
27
+
28
+ protected
29
+ def eval_context
30
+ self.class.context_providers.inject({}) do |hash, pair|
31
+ hash[pair.first] = pair.last.bind(@template || self).call
32
+ hash
33
+ end
34
+ end
35
+
36
+ def context
37
+ @context ||= {}
38
+ end
39
+ end
40
+
41
+ def self.included(receiver)
42
+ receiver.extend ClassMethods
43
+ receiver.send :include, InstanceMethods
44
+
45
+ receiver.class_eval do
46
+ class_inheritable_accessor :context_providers
47
+ self.context_providers = {}
48
+ helper_method :dump_context if self.respond_to?(:helper_method)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ module ImedoClientCommunication
2
+
3
+ class Payload
4
+
5
+ def self.serialize(body)
6
+ BERT.encode(body)
7
+ end
8
+
9
+ end
10
+ end
11
+
@@ -0,0 +1,3 @@
1
+ module ImedoClientCommunication
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,64 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+
3
+ class ImedoClientCommunication::ContextTest < ActionController::TestCase
4
+
5
+ test "should provide context for one variable" do
6
+ c = create_class do
7
+ provides_context :variable
8
+ end
9
+ assert c.context_providers.has_key?(:variable)
10
+ end
11
+
12
+ test "should provide context for more than one variable" do
13
+ c = create_class do
14
+ provides_context :one, :two, :three
15
+ end
16
+ assert (c.context_providers.keys - [:one, :two, :three]).blank?
17
+ end
18
+
19
+ test "should provide context for one variable with hash" do
20
+ c = create_class do
21
+ provides_context :variable => lambda { |value| Hash.new(:value => value) }
22
+ end
23
+ assert c.context_providers.has_key?(:variable)
24
+ end
25
+
26
+ test "should allow block as lambda for one variable" do
27
+ c = create_class do
28
+ provides_context :variable do |value|
29
+ Hash.new(:value => value)
30
+ end
31
+ end
32
+ assert c.context_providers.has_key?(:variable)
33
+ end
34
+
35
+ test "should not allow block as lambda for multiple variables" do
36
+ assert_raise RuntimeError do
37
+ create_class do
38
+ provides_context :one, :two do |value|
39
+ Hash.new(:value => value)
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ test "should dump context" do
46
+ klass = create_class do
47
+ provides_context :variable
48
+ attr_accessor :variable
49
+ end
50
+ c = klass.new
51
+ c.variable = { :value => 15 }
52
+ expected = { :variable => { :value => 15 } }
53
+ assert_equal expected, c.dump_context
54
+ end
55
+
56
+ protected
57
+ def create_class(&block)
58
+ returning Class.new(ApplicationController) do |klass|
59
+ klass.class_eval do
60
+ block.bind(self).call if block_given?
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ RAILS_ROOT = File.dirname(__FILE__) + '/..'
5
+
6
+ gem 'activesupport', '2.3.3'
7
+
8
+ require 'active_support'
9
+ require 'ostruct'
10
+
11
+ require File.dirname(__FILE__) + '/../lib/imedo_client_communication'
12
+ ActionController::Base.send(:include, ImedoClientCommunication::Context)
13
+ class ApplicationController<ActionController::Base; end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: imedo_client_communication
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - imedo GmbH
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-27 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: activesupport
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 5
30
+ segments:
31
+ - 2
32
+ - 3
33
+ - 3
34
+ version: 2.3.3
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: actionpack
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - "="
44
+ - !ruby/object:Gem::Version
45
+ hash: 5
46
+ segments:
47
+ - 2
48
+ - 3
49
+ - 3
50
+ version: 2.3.3
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ description:
54
+ email:
55
+ - entwickler@imedo.de
56
+ executables: []
57
+
58
+ extensions: []
59
+
60
+ extra_rdoc_files: []
61
+
62
+ files:
63
+ - .gitignore
64
+ - Gemfile
65
+ - Rakefile
66
+ - imedo_client_communication.gemspec
67
+ - lib/imedo_client_communication.rb
68
+ - lib/imedo_client_communication/base_provider.rb
69
+ - lib/imedo_client_communication/context.rb
70
+ - lib/imedo_client_communication/payload.rb
71
+ - lib/imedo_client_communication/version.rb
72
+ - test/functional/lib/context_test.rb
73
+ - test/test_helper.rb
74
+ has_rdoc: true
75
+ homepage: ""
76
+ licenses: []
77
+
78
+ post_install_message:
79
+ rdoc_options: []
80
+
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ requirements: []
102
+
103
+ rubyforge_project:
104
+ rubygems_version: 1.3.7
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: Client-side communication with the main application
108
+ test_files:
109
+ - test/functional/lib/context_test.rb
110
+ - test/test_helper.rb