googlets 0.0.4

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,24 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+
6
+ # IntelliJ #############################################################################################################
7
+ .idea
8
+ /*.ids
9
+
10
+ # Linux ################################################################################################################
11
+ *~
12
+
13
+ # NetBeans #############################################################################################################
14
+ nbproject
15
+
16
+ # Windows ##############################################################################################################
17
+ Thumbs.db
18
+ Desktop.ini
19
+
20
+ # Mac ##################################################################################################################
21
+ .DS_Store
22
+
23
+ # Keep it! (and keep this pattern at the end of .gitignore) ############################################################
24
+ !.gitkeep
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in googlets.gemspec
4
+ gemspec
File without changes
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'googlets/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'googlets'
7
+ s.version = Googlets::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['sodercober']
10
+ s.email = ['sodercober@gmail.com']
11
+ s.homepage = 'https://github.com/sodercober/googlets'
12
+ s.summary = %q{Google Snippets}
13
+ s.description = %q{Several Google snippets for Rails 3}
14
+
15
+ s.rubyforge_project = 'googlets'
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ['lib']
21
+ end
@@ -0,0 +1,13 @@
1
+ module Googlets
2
+ module Generators
3
+ class ConfigGenerator < ::Rails::Generators::Base
4
+ desc 'This generator generates sample configuration for Google Snippets'
5
+ source_root File.expand_path('../templates', __FILE__)
6
+
7
+ def generate_config
8
+ copy_file 'google.yml', 'config/google.yml'
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # Include configuration for Google services here.
2
+
3
+ development:
4
+ # Disable remote CDN in development:
5
+ libraries_local_only: true
6
+
7
+ production:
8
+ # Configure Google Analytics Web Property ID (UA number). Leave this blank to disable Google Analytics.
9
+ analytics_web_property_id: UA-XXXXX-YY
@@ -0,0 +1,20 @@
1
+ module Googlets
2
+
3
+ class Railtie < Rails::Railtie
4
+
5
+ initializer 'googlets.action_view' do |app|
6
+ ActiveSupport.on_load :action_view do
7
+ require 'googlets/googlet'
8
+ require 'googlets/analytics'
9
+ require 'googlets/libraries'
10
+
11
+ Googlets::Googlet.subclasses.each(&:parse_config)
12
+
13
+ include Googlets::Libraries::ViewHelpers::ActionView
14
+ include Googlets::Analytics::ViewHelpers::ActionView
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,47 @@
1
+ module Googlets
2
+
3
+ class Analytics < Googlet
4
+ @@analytics_web_property_id = nil
5
+ cattr_accessor :analytics_web_property_id, :instance_writer => false
6
+
7
+ def self.enabled?
8
+ !analytics_web_property_id.blank?
9
+ end
10
+
11
+ module ViewHelpers
12
+ module ActionView
13
+
14
+ # Google Analytics Asynchronous Tracking
15
+ # http://code.google.com/intl/pl-PL/apis/analytics/docs/tracking/asyncUsageGuide.html
16
+ def include_google_analytics(part = nil)
17
+ return unless Googlets::Analytics.enabled?
18
+
19
+ javascript_tag do
20
+ case part
21
+ when :head then Googlets::Analytics.head_javascript
22
+ when :body then Googlets::Analytics.body_javascript
23
+ else Googlets::Analytics.head_javascript + Googlets::Analytics.body_javascript
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+
31
+ protected ##########################################################################################################
32
+
33
+ def self.head_javascript
34
+ "var _gaq = _gaq || []; _gaq.push(['_setAccount', '#{analytics_web_property_id}'], ['_trackPageview']);".html_safe
35
+ end
36
+
37
+ def self.body_javascript
38
+ "(function() { " +
39
+ "var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; " +
40
+ "ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; " +
41
+ "var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); " +
42
+ "})();".html_safe
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,29 @@
1
+ module Googlets
2
+
3
+ class Googlet
4
+
5
+ def self.parse_config
6
+ read_config.each do |key, value|
7
+ send("#{key}=", value) if respond_to?("#{key}=")
8
+ end
9
+ end
10
+
11
+ def self.read_config
12
+ return {} unless File.exist?(config_file)
13
+
14
+ config = YAML::load(ERB.new(IO.read(config_file)).result)[Rails.env] || {}
15
+ config.symbolize_keys!
16
+ config
17
+ end
18
+
19
+ def self.config_file
20
+ Rails.root.join('config', 'google.yml')
21
+ end
22
+
23
+ def self.enabled?
24
+ true
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,96 @@
1
+ module Googlets
2
+
3
+ class Libraries < Googlet
4
+ LIBRARIES = {
5
+ 'chrome-frame' => {:path => 'chrome-frame/%s/CFInstall.min.js'},
6
+ 'dojo' => {:path => 'dojo/%s/dojo/dojo.xd.js'},
7
+ 'ext-core' => {:path => 'ext-core/%s/ext-core.js'},
8
+ 'jquery' => {:path => 'jquery/%s/jquery.min.js', :local_fallback_if => '!window.jQuery'},
9
+ 'jquery-ui' => {:path => 'jqueryui/%s/jquery-ui.min.js', :local_fallback_if => 'window.jQuery && !window.jQuery.ui'},
10
+ 'mootools' => {:path => 'mootools/%s/mootools-yui-compressed.js'},
11
+ 'prototype' => {:path => 'prototype/%s/prototype.js'},
12
+ 'scriptaculous' => {:path => 'scriptaculous/%s/scriptaculous.js'},
13
+ 'swfobject' => {:path => 'swfobject/%s/swfobject.js', :local_fallback_if => '!window.swfobject'},
14
+ 'yui' => {:path => 'yui/%s/build/yui/yui-min.js'},
15
+ 'webfont' => {:path => 'webfont/%s/webfont.js'}
16
+ }
17
+
18
+ @@libraries_local_only = false
19
+ cattr_accessor :libraries_local_only, :instance_writer => false
20
+
21
+ @@libraries_api_key = nil
22
+ cattr_accessor :libraries_api_key, :instance_writer => false
23
+
24
+ @@libraries_api_url = '//www.google.com/jsapi'
25
+ cattr_accessor :libraries_api_url, :instance_writer => false
26
+
27
+ @@libraries_url = '//ajax.googleapis.com/ajax/libs/'
28
+ cattr_accessor :libraries_url, :instance_writer => false
29
+
30
+ # This must be relative to ActionController::Base.javascripts_dir
31
+ @@local_libraries_path = 'lib'
32
+ cattr_accessor :local_libraries_path, :instance_writer => false
33
+
34
+ @@local_libraries_matcher = /^([\w-]+)-(\d+(\.\d+)*)(\.\w+)*.js$/i
35
+ cattr_accessor :local_libraries_matcher, :instance_writer => false
36
+
37
+ @@libraries = LIBRARIES
38
+ cattr_reader :libraries
39
+
40
+ def self.libraries=(libraries = {})
41
+ libraries.each do |key, value|
42
+ @@libraries[key.to_s].merge!(value.symbolize_keys) if @@libraries.has_key?(key.to_s) && value.is_a?(Hash)
43
+ end
44
+ end
45
+
46
+ module ViewHelpers
47
+ module ActionView
48
+
49
+ def include_javascript_libraries(*args)
50
+ options = {}.merge(args.extract_options!)
51
+ library_names = [*args].flatten
52
+ api_key = options.delete(:libraries_api_key) || Googlets::Libraries::libraries_api_key
53
+ api_url = options.delete(:libraries_api_url) || Googlets::Libraries::libraries_api_url
54
+ local_only = options.delete(:libraries_local_only) || Googlets::Libraries::libraries_local_only
55
+
56
+ ''.html_safe.tap do |html|
57
+ html << content_tag('script', '', 'type' => Mime::JS, 'src' => api_url + '?' + {:key => api_key}.to_query) unless local_only || api_key.blank? || api_url.blank?
58
+ library_names.each{|library_name| html << include_javascript_library(library_name, {:local => local_only}.merge(options))}
59
+ end
60
+ end
61
+
62
+ def include_javascript_library(library_name, options = {})
63
+ library_name = library_name.to_s
64
+ library = Googlets::Libraries::libraries[library_name]
65
+ local_library = local_javascript_libraries[library_name]
66
+ local_libraries_path = options[:local_libraries_path] || Googlets::Libraries::local_libraries_path
67
+
68
+ if (options[:local] || !library) && local_library
69
+ javascript_include_tag(local_libraries_path + '/' + local_library[:path]).html_safe
70
+ elsif local_library || !library[:version].blank?
71
+ libraries_url = options[:libraries_url] || Googlets::Libraries::libraries_url
72
+ local_fallback_if = options[:local_fallback_if] || library[:local_fallback_if]
73
+ ''.html_safe.tap do |html|
74
+ html << content_tag('script', '', 'type' => Mime::JS, 'src' => libraries_url + (library[:path] % (library[:version] || local_library[:version])))
75
+ if local_library && !local_fallback_if.blank?
76
+ html << javascript_tag(%{(#{local_fallback_if}) && document.write(unescape('%3Cscript src="#{javascript_path(local_libraries_path + '/' + local_library[:path])}"%3E%3C/script%3E'));})
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ def local_javascript_libraries
83
+ @@local_javascript_libraries ||= {}.tap do |libraries|
84
+ Dir.entries(File.join(ActionController::Base.javascripts_dir, Googlets::Libraries::local_libraries_path)).
85
+ map{|entry| entry.match(Googlets::Libraries::local_libraries_matcher)}.compact.
86
+ each{|match| libraries[match[1]] = {:version => match[2], :path => match.to_s}}
87
+ end
88
+ end
89
+ private :local_javascript_libraries
90
+
91
+ end
92
+ end
93
+
94
+ end
95
+
96
+ end
@@ -0,0 +1,3 @@
1
+ module Googlets
2
+ VERSION = '0.0.4'
3
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: googlets
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ prerelease: !!null
6
+ platform: ruby
7
+ authors:
8
+ - sodercober
9
+ autorequire: !!null
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-03-04 00:00:00.000000000 +00:00
13
+ default_executable: !!null
14
+ dependencies: []
15
+ description: Several Google snippets for Rails 3
16
+ email:
17
+ - sodercober@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - README.md
25
+ - Rakefile
26
+ - googlets.gemspec
27
+ - lib/generators/googlets/config/config_generator.rb
28
+ - lib/generators/googlets/config/templates/google.yml
29
+ - lib/googlets.rb
30
+ - lib/googlets/analytics.rb
31
+ - lib/googlets/googlet.rb
32
+ - lib/googlets/libraries.rb
33
+ - lib/googlets/version.rb
34
+ has_rdoc: true
35
+ homepage: https://github.com/sodercober/googlets
36
+ licenses: []
37
+ post_install_message: !!null
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project: googlets
55
+ rubygems_version: 1.5.0
56
+ signing_key: !!null
57
+ specification_version: 3
58
+ summary: Google Snippets
59
+ test_files: []