in_bed_with 0.1.0
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/.gitignore +6 -0
- data/.rspec +2 -0
- data/.rvmrc +3 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +112 -0
- data/LICENSE +19 -0
- data/README.md +152 -0
- data/Rakefile +2 -0
- data/in_bed_with.gemspec +28 -0
- data/lib/in_bed_with.rb +24 -0
- data/lib/in_bed_with/adsense.rb +40 -0
- data/lib/in_bed_with/analytics.rb +9 -0
- data/lib/in_bed_with/base.rb +42 -0
- data/lib/in_bed_with/gauges.rb +9 -0
- data/lib/in_bed_with/railtie.rb +13 -0
- data/lib/in_bed_with/version.rb +3 -0
- data/spec/in_bed_with/adsense_spec.rb +37 -0
- data/spec/in_bed_with/analytics_spec.rb +14 -0
- data/spec/in_bed_with/base_spec.rb +22 -0
- data/spec/in_bed_with/gauges_spec.rb +14 -0
- data/spec/in_bed_with/rails_spec.rb +20 -0
- data/spec/spec_helper.rb +6 -0
- metadata +131 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rvmrc
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
in_bed_with (0.1.0)
|
5
|
+
activesupport (~> 3.1)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionmailer (3.1.3)
|
11
|
+
actionpack (= 3.1.3)
|
12
|
+
mail (~> 2.3.0)
|
13
|
+
actionpack (3.1.3)
|
14
|
+
activemodel (= 3.1.3)
|
15
|
+
activesupport (= 3.1.3)
|
16
|
+
builder (~> 3.0.0)
|
17
|
+
erubis (~> 2.7.0)
|
18
|
+
i18n (~> 0.6)
|
19
|
+
rack (~> 1.3.5)
|
20
|
+
rack-cache (~> 1.1)
|
21
|
+
rack-mount (~> 0.8.2)
|
22
|
+
rack-test (~> 0.6.1)
|
23
|
+
sprockets (~> 2.0.3)
|
24
|
+
activemodel (3.1.3)
|
25
|
+
activesupport (= 3.1.3)
|
26
|
+
builder (~> 3.0.0)
|
27
|
+
i18n (~> 0.6)
|
28
|
+
activerecord (3.1.3)
|
29
|
+
activemodel (= 3.1.3)
|
30
|
+
activesupport (= 3.1.3)
|
31
|
+
arel (~> 2.2.1)
|
32
|
+
tzinfo (~> 0.3.29)
|
33
|
+
activeresource (3.1.3)
|
34
|
+
activemodel (= 3.1.3)
|
35
|
+
activesupport (= 3.1.3)
|
36
|
+
activesupport (3.1.3)
|
37
|
+
multi_json (~> 1.0)
|
38
|
+
arel (2.2.1)
|
39
|
+
builder (3.0.0)
|
40
|
+
diff-lcs (1.1.3)
|
41
|
+
erubis (2.7.0)
|
42
|
+
fuubar (0.0.6)
|
43
|
+
rspec (~> 2.0)
|
44
|
+
rspec-instafail (~> 0.1.8)
|
45
|
+
ruby-progressbar (~> 0.0.10)
|
46
|
+
hike (1.2.1)
|
47
|
+
i18n (0.6.0)
|
48
|
+
json (1.6.4)
|
49
|
+
mail (2.3.0)
|
50
|
+
i18n (>= 0.4.0)
|
51
|
+
mime-types (~> 1.16)
|
52
|
+
treetop (~> 1.4.8)
|
53
|
+
mime-types (1.17.2)
|
54
|
+
multi_json (1.0.4)
|
55
|
+
polyglot (0.3.3)
|
56
|
+
rack (1.3.6)
|
57
|
+
rack-cache (1.1)
|
58
|
+
rack (>= 0.4)
|
59
|
+
rack-mount (0.8.3)
|
60
|
+
rack (>= 1.0.0)
|
61
|
+
rack-ssl (1.3.2)
|
62
|
+
rack
|
63
|
+
rack-test (0.6.1)
|
64
|
+
rack (>= 1.0)
|
65
|
+
rails (3.1.3)
|
66
|
+
actionmailer (= 3.1.3)
|
67
|
+
actionpack (= 3.1.3)
|
68
|
+
activerecord (= 3.1.3)
|
69
|
+
activeresource (= 3.1.3)
|
70
|
+
activesupport (= 3.1.3)
|
71
|
+
bundler (~> 1.0)
|
72
|
+
railties (= 3.1.3)
|
73
|
+
railties (3.1.3)
|
74
|
+
actionpack (= 3.1.3)
|
75
|
+
activesupport (= 3.1.3)
|
76
|
+
rack-ssl (~> 1.3.2)
|
77
|
+
rake (>= 0.8.7)
|
78
|
+
rdoc (~> 3.4)
|
79
|
+
thor (~> 0.14.6)
|
80
|
+
rake (0.9.2.2)
|
81
|
+
rdoc (3.12)
|
82
|
+
json (~> 1.4)
|
83
|
+
rspec (2.8.0)
|
84
|
+
rspec-core (~> 2.8.0)
|
85
|
+
rspec-expectations (~> 2.8.0)
|
86
|
+
rspec-mocks (~> 2.8.0)
|
87
|
+
rspec-core (2.8.0)
|
88
|
+
rspec-expectations (2.8.0)
|
89
|
+
diff-lcs (~> 1.1.2)
|
90
|
+
rspec-instafail (0.1.9)
|
91
|
+
rspec-mocks (2.8.0)
|
92
|
+
ruby-progressbar (0.0.10)
|
93
|
+
sprockets (2.0.3)
|
94
|
+
hike (~> 1.2)
|
95
|
+
rack (~> 1.0)
|
96
|
+
tilt (~> 1.1, != 1.3.0)
|
97
|
+
thor (0.14.6)
|
98
|
+
tilt (1.3.3)
|
99
|
+
treetop (1.4.10)
|
100
|
+
polyglot
|
101
|
+
polyglot (>= 0.3.1)
|
102
|
+
tzinfo (0.3.31)
|
103
|
+
|
104
|
+
PLATFORMS
|
105
|
+
ruby
|
106
|
+
|
107
|
+
DEPENDENCIES
|
108
|
+
fuubar
|
109
|
+
in_bed_with!
|
110
|
+
rails (~> 3.1)
|
111
|
+
rake
|
112
|
+
rspec (~> 2.8.0)
|
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (C) 2010 Sebastian von Conrad
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
5
|
+
the Software without restriction, including without limitation the rights to
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
8
|
+
so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
11
|
+
copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
# in_bed_with
|
2
|
+
in_bed_with is a gem to easily embed common javascript snippets in your application. It's both very simple and much webscale!
|
3
|
+
|
4
|
+
Works with or without Rails, so it's very possible to use it with Sinatra or any other Ruby lib/framework.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
### As a rubygem
|
8
|
+
```
|
9
|
+
gem install in_bed_with
|
10
|
+
```
|
11
|
+
|
12
|
+
### With Bundler
|
13
|
+
In your Gemfile, add:
|
14
|
+
|
15
|
+
```
|
16
|
+
gem 'in_bed_with'
|
17
|
+
```
|
18
|
+
|
19
|
+
## How to use
|
20
|
+
### Rails
|
21
|
+
The simplest way to use **in_bed_with** in Rails is to create an initializer file `config/initializers/in_bed_with.rb`. Use it to specify the properties of the relevant service:
|
22
|
+
|
23
|
+
```
|
24
|
+
InBedWith.config do |config|
|
25
|
+
config.analytics_property_id = 'UA-1234567-1'
|
26
|
+
end
|
27
|
+
```
|
28
|
+
|
29
|
+
Then, in your view, simply use:
|
30
|
+
|
31
|
+
```
|
32
|
+
<%= in_bed_with.analytics %>
|
33
|
+
```
|
34
|
+
|
35
|
+
That's it!
|
36
|
+
|
37
|
+
If you don't want to set the properties through config, you can also pass any property into the method directly:
|
38
|
+
|
39
|
+
```
|
40
|
+
<%= in_bed_with.analytics(property_id: 'UA-1234567-1') %>
|
41
|
+
```
|
42
|
+
|
43
|
+
This approach is also useful if you have multiple objects with different properties to embed. You can still specify defaults through the config:
|
44
|
+
|
45
|
+
```
|
46
|
+
# config/initializers/in_bed_with.rb
|
47
|
+
InBedWith.config do |config|
|
48
|
+
config.adsense_client = 'ca-pub-1234567890123456'
|
49
|
+
config.adsense_ad_type = :small_rectangle
|
50
|
+
end
|
51
|
+
|
52
|
+
# app/views/layouts/application.html.erb
|
53
|
+
# Will create a small rectangle ad with a slot parameter of '1234567890'
|
54
|
+
<%= in_bed_with.adsense(ad_slot: '1234567890') %>
|
55
|
+
|
56
|
+
# Will create a wide skyscraper ad with a slot parameter of '0987654321'
|
57
|
+
<%= in_bed_with.adsense(ad_slot: '0987654321', ad_type: :wide_skyscraper) %>
|
58
|
+
```
|
59
|
+
|
60
|
+
### Sinatra/Other
|
61
|
+
With Sinatra, you'll need to use the `helper` method to register the `in_bed_with` helper.
|
62
|
+
|
63
|
+
```
|
64
|
+
helper InBedWith::Helper
|
65
|
+
```
|
66
|
+
|
67
|
+
With any other lib/framework, use extend:
|
68
|
+
|
69
|
+
```
|
70
|
+
extend InBedWith::Helper
|
71
|
+
```
|
72
|
+
|
73
|
+
You can also forego the helper completely and call the `InBedWith` module directly:
|
74
|
+
|
75
|
+
```
|
76
|
+
InBedWith.analytics
|
77
|
+
# same as:
|
78
|
+
in_bed_with.analytics
|
79
|
+
```
|
80
|
+
|
81
|
+
## Service support
|
82
|
+
**in_bed_with** currently supports Google Analytics, Adsense and Gauges. Many more are planned--feel free to open an issue/pull request for integration with your favorite service!
|
83
|
+
|
84
|
+
### Google Analytics
|
85
|
+
**Available properties:**
|
86
|
+
|
87
|
+
* `property_id`: The ID of the property. Usually a string formatted along the likes of `UA-xxxxxxx-x`, where `x` is a digit.
|
88
|
+
|
89
|
+
**Example:**
|
90
|
+
|
91
|
+
```
|
92
|
+
# initializer
|
93
|
+
InBedWith.config do |config|
|
94
|
+
config.analytics_property_id = 'UA-1234567-1'
|
95
|
+
end
|
96
|
+
|
97
|
+
# view
|
98
|
+
<%= in_bed_with.analytics %>
|
99
|
+
```
|
100
|
+
|
101
|
+
### Google Adsense
|
102
|
+
**Available properties:**
|
103
|
+
|
104
|
+
* `client`: The Adsense client id. Usually a string formatted along the likes of `ca-pub–xxxxxxxxxxxxxxxx`, where `x` is a digit.
|
105
|
+
* `ad_slot`: The ad slot. Usually a 10-digit number.
|
106
|
+
* `ad_type`: The type of the ad. **Does not need to be set if both `ad_width` and `ad_height` are set**. Can be any of (see [here](https://support.google.com/adsense/bin/answer.py?hl=en-GB&answer=185665&topic=29561) for exact sizes):
|
107
|
+
* `:banner`, `:button`, `:half_banner`, `:large_rectangle`, `:leaderboard`, `:medium_rectangle`, `:skyscraper`, `:small_rectangle`, `:small_square`, `:square`, `:vertical_banner`, `:wide_skyscraper`
|
108
|
+
* `ad_width`: The width of the ad. **Does not need to be set if `ad_type` is set**. Usually a 2 or 3-digit number.
|
109
|
+
* `ad_height`: The height of the ad. **Does not need to be set if `ad_type` is set**. Usually a 2 or 3-digit number.
|
110
|
+
|
111
|
+
**Example:**
|
112
|
+
|
113
|
+
```
|
114
|
+
# initializer
|
115
|
+
InBedWith.config do |config|
|
116
|
+
config.adsense_client = 'ca-pub-1234567890123456'
|
117
|
+
config.adsense_ad_type = :small_rectangle
|
118
|
+
end
|
119
|
+
|
120
|
+
# view
|
121
|
+
<%= in_bed_with.adsense(ad_slot: '1234567890') %>
|
122
|
+
```
|
123
|
+
|
124
|
+
### Gauges
|
125
|
+
**Available properties:**
|
126
|
+
|
127
|
+
* `site_id`: The ID of the site. (As far as I know) a 24-character hexadecimal string.
|
128
|
+
|
129
|
+
**Example:**
|
130
|
+
|
131
|
+
```
|
132
|
+
# initializer
|
133
|
+
InBedWith.config do |config|
|
134
|
+
config.gauges_site_id = '1234567890abcdef12345678'
|
135
|
+
end
|
136
|
+
|
137
|
+
# view
|
138
|
+
<%= in_bed_with.gauges %>
|
139
|
+
```
|
140
|
+
|
141
|
+
## Contributions
|
142
|
+
Pull requests for integration with additional service are very welcome!
|
143
|
+
|
144
|
+
### Pull requests
|
145
|
+
1. Fork the project.
|
146
|
+
2. Make your feature addition or bug fix.
|
147
|
+
3. Add tests for it. This is important so I don't break it in a future version unintentionally.
|
148
|
+
4. Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
149
|
+
5. Send me a pull request. Bonus points for topic branches.
|
150
|
+
|
151
|
+
## License
|
152
|
+
`in_bed_with` is licensed under the MIT license. See `LICENSE` for details.
|
data/Rakefile
ADDED
data/in_bed_with.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require 'in_bed_with/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'in_bed_with'
|
7
|
+
s.version = InBedWith::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ['Sebastian von Conrad']
|
10
|
+
s.email = ['sebastian@vonconrad.com']
|
11
|
+
s.homepage = 'http://github.com/vonconrad/in_bed_with'
|
12
|
+
s.summary = %q{in_bed_with embeds popular javascript codes into markup}
|
13
|
+
s.description = %q{in_bed_with allows javascript code embedding of popular services (such as Google Analytics, Google Adsense and Gauges) into Rails views and other markup}
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.rubyforge_project = 'in_bed_with'
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ['lib']
|
22
|
+
|
23
|
+
s.add_dependency 'activesupport', '~> 3.1'
|
24
|
+
s.add_development_dependency 'rails', '~> 3.1'
|
25
|
+
s.add_development_dependency 'rake'
|
26
|
+
s.add_development_dependency 'rspec', '~> 2.8.0'
|
27
|
+
s.add_development_dependency 'fuubar'
|
28
|
+
end
|
data/lib/in_bed_with.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
require 'active_support/inflector'
|
6
|
+
|
7
|
+
require 'in_bed_with/base'
|
8
|
+
require 'in_bed_with/adsense'
|
9
|
+
require 'in_bed_with/analytics'
|
10
|
+
require 'in_bed_with/gauges'
|
11
|
+
require 'in_bed_with/version'
|
12
|
+
|
13
|
+
require 'in_bed_with/railtie' if defined?(Rails)
|
14
|
+
|
15
|
+
module InBedWith
|
16
|
+
def self.config(&block)
|
17
|
+
yield self
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.method_missing(method, *args, &block)
|
21
|
+
str = "InBedWith::#{method.to_s.camelize}".constantize.new(*args).code
|
22
|
+
str.respond_to?(:html_safe) ? str.html_safe : str
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module InBedWith
|
2
|
+
class Adsense < Base
|
3
|
+
register :client
|
4
|
+
register :ad_slot
|
5
|
+
register :ad_type, optional: true
|
6
|
+
register :ad_width, optional: true
|
7
|
+
register :ad_height, optional: true
|
8
|
+
|
9
|
+
AD_TYPES = {
|
10
|
+
button: { width: 125, height: 125 },
|
11
|
+
half_banner: { width: 234, height: 60 },
|
12
|
+
banner: { width: 468, height: 60 },
|
13
|
+
vertical_banner: { width: 120, height: 240 },
|
14
|
+
leaderboard: { width: 728, height: 90 },
|
15
|
+
skyscraper: { width: 468, height: 600 },
|
16
|
+
wide_skyscraper: { width: 160, height: 600 },
|
17
|
+
small_square: { width: 200, height: 200 },
|
18
|
+
square: { width: 250, height: 250 },
|
19
|
+
small_rectangle: { width: 180, height: 150 },
|
20
|
+
medium_rectangle: { width: 300, height: 250 },
|
21
|
+
large_rectangle: { width: 336, height: 280 }
|
22
|
+
}
|
23
|
+
|
24
|
+
def code
|
25
|
+
"<script type=\"text/javascript\">google_ad_client = '#{client}'; google_ad_slot = '#{ad_slot}'; google_ad_width = #{properties[:width]}; google_ad_height = #{properties[:height]};</script><script type=\"text/javascript\" src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\"></script>"
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def properties
|
31
|
+
if ad_width && ad_height
|
32
|
+
{ width: ad_width, height: ad_height }
|
33
|
+
elsif ad_type
|
34
|
+
AD_TYPES[ad_type.to_sym] or raise ArgumentError, "Ad type '#{ad_type}' is not known: Please use ad_width and ad_height parameters instead."
|
35
|
+
else
|
36
|
+
raise ArgumentError, 'Please set either ad_type or ad_height/ad_width of the ad.'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module InBedWith
|
2
|
+
class Analytics < Base
|
3
|
+
register :property_id
|
4
|
+
|
5
|
+
def code
|
6
|
+
"<script type=\"text/javascript\">var _gaq = _gaq || []; _gaq.push(['_setAccount', '#{property_id}']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();</script>"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module InBedWith
|
2
|
+
class Base
|
3
|
+
class << self
|
4
|
+
attr_reader :attributes
|
5
|
+
|
6
|
+
def register(attribute, options={})
|
7
|
+
InBedWith.mattr_accessor module_attr(attribute)
|
8
|
+
attr_accessor attribute
|
9
|
+
|
10
|
+
@attributes ||= {}
|
11
|
+
@attributes.merge!({ attribute.to_sym => options })
|
12
|
+
end
|
13
|
+
|
14
|
+
def module_attr(attribute)
|
15
|
+
"#{name.demodulize.underscore}_#{attribute}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(attributes={})
|
20
|
+
attributes.symbolize_keys!
|
21
|
+
|
22
|
+
self.class.attributes.each do |attribute, options|
|
23
|
+
value = attributes[attribute] || InBedWith.send(self.class.module_attr(attribute))
|
24
|
+
|
25
|
+
raise ArgumentError, missing(attribute) unless value || options[:optional]
|
26
|
+
|
27
|
+
self.send "#{attribute}=", value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def missing(attribute)
|
33
|
+
"Please set #{self.class.name.demodulize} #{attribute.to_s.camelize} through config.#{self.class.module_attr(attribute)} or by supplying :#{attribute} when calling in_bed_with.#{self.class.name.demodulize.underscore}."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module Helper
|
38
|
+
def in_bed_with
|
39
|
+
InBedWith
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module InBedWith
|
2
|
+
class Gauges < Base
|
3
|
+
register :site_id
|
4
|
+
|
5
|
+
def code
|
6
|
+
"<script type=\"text/javascript\">var _gauges = _gauges || []; (function() { var t = document.createElement('script'); t.type = 'text/javascript'; t.async = true; t.id = 'gauges-tracker'; t.setAttribute('data-site-id', '#{site_id}'); t.src = '//secure.gaug.es/track.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(t, s); })();</script>"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe InBedWith::Adsense do
|
4
|
+
it 'prints a javascript tag based on argument' do
|
5
|
+
js = InBedWith.adsense(client: 'ca-pub-1234567890123456', ad_slot: '1234567890', ad_width: 728, ad_height: 90)
|
6
|
+
js.should == "<script type=\"text/javascript\">google_ad_client = 'ca-pub-1234567890123456'; google_ad_slot = '1234567890'; google_ad_width = 728; google_ad_height = 90;</script><script type=\"text/javascript\" src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\"></script>"
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'prints a javascript tag based on configuration option' do
|
10
|
+
InBedWith.config do |config|
|
11
|
+
config.adsense_client = 'ca-pub-1234567890123456'
|
12
|
+
config.adsense_ad_slot = '1234567890'
|
13
|
+
config.adsense_ad_width = 728
|
14
|
+
config.adsense_ad_height = 90
|
15
|
+
end
|
16
|
+
|
17
|
+
js = InBedWith.adsense
|
18
|
+
js.should == "<script type=\"text/javascript\">google_ad_client = 'ca-pub-1234567890123456'; google_ad_slot = '1234567890'; google_ad_width = 728; google_ad_height = 90;</script><script type=\"text/javascript\" src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\"></script>"
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'predefined ad types' do
|
22
|
+
before do
|
23
|
+
InBedWith.config do |config|
|
24
|
+
%w(adsense_client adsense_ad_slot adsense_ad_width adsense_ad_height).each { |opt| config.send("#{opt}=", nil) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'prints a javascript tag based on a predefined ad type' do
|
29
|
+
js = InBedWith.adsense(client: 'ca-pub-1234567890123456', ad_slot: '1234567890', ad_type: :leaderboard)
|
30
|
+
js.should == "<script type=\"text/javascript\">google_ad_client = 'ca-pub-1234567890123456'; google_ad_slot = '1234567890'; google_ad_width = 728; google_ad_height = 90;</script><script type=\"text/javascript\" src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\"></script>"
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'raises an exception if the ad type is not known' do
|
34
|
+
lambda { InBedWith.adsense(client: 'ca-pub-1234567890123456', ad_slot: '1234567890', ad_type: :foobarbaz) }.should raise_exception ArgumentError, /'foobarbaz' is not known/
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe InBedWith::Analytics do
|
4
|
+
it 'prints a javascript tag based on argument' do
|
5
|
+
js = InBedWith.analytics(property_id: 'UA-1234567-1')
|
6
|
+
js.should == "<script type=\"text/javascript\">var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-1234567-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();</script>"
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'prints a javascript tag based on configuration option' do
|
10
|
+
InBedWith.config { |config| config.analytics_property_id = 'UA-7654321-1' }
|
11
|
+
js = InBedWith.analytics
|
12
|
+
js.should == "<script type=\"text/javascript\">var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-7654321-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();</script>"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module InBedWith
|
4
|
+
class Test < Base
|
5
|
+
register :foo
|
6
|
+
register :bar, :optional => true
|
7
|
+
|
8
|
+
def code
|
9
|
+
"foo_with_value_#{foo}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe InBedWith::Base do
|
15
|
+
it 'raises an exception if a required attribute is missing' do
|
16
|
+
lambda { InBedWith::Test.new }.should raise_exception ArgumentError, /config\.test_foo/
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'does not raise an exception if an optional attribute is missing' do
|
20
|
+
InBedWith::Test.new(foo: 'gazonk').code.should == 'foo_with_value_gazonk'
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe InBedWith::Gauges do
|
4
|
+
it 'prints a javascript tag based on argument' do
|
5
|
+
js = InBedWith.gauges(site_id: '1234567890abcdef12345678')
|
6
|
+
js.should == "<script type=\"text/javascript\">var _gauges = _gauges || []; (function() { var t = document.createElement('script'); t.type = 'text/javascript'; t.async = true; t.id = 'gauges-tracker'; t.setAttribute('data-site-id', '1234567890abcdef12345678'); t.src = '//secure.gaug.es/track.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(t, s); })();</script>"
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'prints a javascript tag based on configuration option' do
|
10
|
+
InBedWith.config { |config| config.gauges_site_id = '87654321fedcba0987654321' }
|
11
|
+
js = InBedWith.gauges
|
12
|
+
js.should == "<script type=\"text/javascript\">var _gauges = _gauges || []; (function() { var t = document.createElement('script'); t.type = 'text/javascript'; t.async = true; t.id = 'gauges-tracker'; t.setAttribute('data-site-id', '87654321fedcba0987654321'); t.src = '//secure.gaug.es/track.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(t, s); })();</script>"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TestApp
|
4
|
+
class Application < Rails::Application
|
5
|
+
config.active_support.deprecation = :log
|
6
|
+
end
|
7
|
+
end
|
8
|
+
TestApp::Application.initialize!
|
9
|
+
|
10
|
+
describe ActionView::Base do
|
11
|
+
it 'should add in_bed_with helper through railtie' do
|
12
|
+
InBedWith.config { |config| config.analytics_property_id = 'UA-7654321-1' }
|
13
|
+
|
14
|
+
view = ActionView::Base.new
|
15
|
+
view.should respond_to(:in_bed_with)
|
16
|
+
|
17
|
+
view.in_bed_with.should == InBedWith
|
18
|
+
view.in_bed_with.analytics.should =~ /UA-7654321-1/
|
19
|
+
end
|
20
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: in_bed_with
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Sebastian von Conrad
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-28 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: &70180001148040 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.1'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70180001148040
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rails
|
27
|
+
requirement: &70180001147500 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.1'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70180001147500
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &70180001147080 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70180001147080
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &70180001146500 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.8.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70180001146500
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: fuubar
|
60
|
+
requirement: &70180001146060 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70180001146060
|
69
|
+
description: in_bed_with allows javascript code embedding of popular services (such
|
70
|
+
as Google Analytics, Google Adsense and Gauges) into Rails views and other markup
|
71
|
+
email:
|
72
|
+
- sebastian@vonconrad.com
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- .gitignore
|
78
|
+
- .rspec
|
79
|
+
- .rvmrc
|
80
|
+
- CHANGELOG.md
|
81
|
+
- Gemfile
|
82
|
+
- Gemfile.lock
|
83
|
+
- LICENSE
|
84
|
+
- README.md
|
85
|
+
- Rakefile
|
86
|
+
- in_bed_with.gemspec
|
87
|
+
- lib/in_bed_with.rb
|
88
|
+
- lib/in_bed_with/adsense.rb
|
89
|
+
- lib/in_bed_with/analytics.rb
|
90
|
+
- lib/in_bed_with/base.rb
|
91
|
+
- lib/in_bed_with/gauges.rb
|
92
|
+
- lib/in_bed_with/railtie.rb
|
93
|
+
- lib/in_bed_with/version.rb
|
94
|
+
- spec/in_bed_with/adsense_spec.rb
|
95
|
+
- spec/in_bed_with/analytics_spec.rb
|
96
|
+
- spec/in_bed_with/base_spec.rb
|
97
|
+
- spec/in_bed_with/gauges_spec.rb
|
98
|
+
- spec/in_bed_with/rails_spec.rb
|
99
|
+
- spec/spec_helper.rb
|
100
|
+
homepage: http://github.com/vonconrad/in_bed_with
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options: []
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ! '>='
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project: in_bed_with
|
121
|
+
rubygems_version: 1.8.10
|
122
|
+
signing_key:
|
123
|
+
specification_version: 3
|
124
|
+
summary: in_bed_with embeds popular javascript codes into markup
|
125
|
+
test_files:
|
126
|
+
- spec/in_bed_with/adsense_spec.rb
|
127
|
+
- spec/in_bed_with/analytics_spec.rb
|
128
|
+
- spec/in_bed_with/base_spec.rb
|
129
|
+
- spec/in_bed_with/gauges_spec.rb
|
130
|
+
- spec/in_bed_with/rails_spec.rb
|
131
|
+
- spec/spec_helper.rb
|