static_addthis 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ group :dev do
4
+ gem 'jeweler'
5
+ gem 'rake'
6
+ gem 'rspec', '~>2'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,26 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.2)
5
+ git (1.2.5)
6
+ jeweler (1.6.0)
7
+ bundler (~> 1.0.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.8.7)
11
+ rspec (2.6.0)
12
+ rspec-core (~> 2.6.0)
13
+ rspec-expectations (~> 2.6.0)
14
+ rspec-mocks (~> 2.6.0)
15
+ rspec-core (2.6.0)
16
+ rspec-expectations (2.6.0)
17
+ diff-lcs (~> 1.1.2)
18
+ rspec-mocks (2.6.0)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ jeweler
25
+ rake
26
+ rspec (~> 2)
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ task :default do
2
+ exec "rspec spec/"
3
+ end
4
+
5
+ task :refresh_icons do
6
+ icon_set = '.at15t'
7
+ css = "http://s7.addthis.com/static/r07/widget59.css"
8
+ css = `curl #{css}`
9
+
10
+ css_rules = css.split('}').map(&:strip)
11
+ puts "found #{css_rules.size} rules"
12
+
13
+ # find all simple class rules
14
+ css_rules = css_rules.map do |rule|
15
+ next unless match = rule.match(/^(\.[_a-z\d]+)\s*\{/)
16
+ [match[1], rule.sub(match[0],'')]
17
+ end.compact
18
+ css_rules = Hash[css_rules]
19
+
20
+ puts "extracted #{css_rules.size} simple rules"
21
+
22
+ # find png location
23
+ png = 'http:' + css_rules[icon_set][%r{//.*?\.png}]
24
+ puts "using image #{png}"
25
+ `curl #{png} > assets/addthis_sprite.png`
26
+
27
+ # extract background offset info
28
+ icons = css_rules.map do |klass, css|
29
+ puts klass+css
30
+ next unless klass+css =~ /^#{icon_set}_([_a-z]+)background-position:0 -(\d+)px/
31
+ [$1, $2.to_i]
32
+ end.compact.sort
33
+ icons = Hash[icons]
34
+
35
+ puts icons.inspect
36
+ puts "now paste this into lib/static_addthis.rb"
37
+ end
38
+
39
+ begin
40
+ require 'jeweler'
41
+ Jeweler::Tasks.new do |gem|
42
+ gem.name = 'static_addthis'
43
+ gem.summary = "Fast Addthis: no external js/css/images + no backlinks to addthis"
44
+ gem.email = "michael@grosser.it"
45
+ gem.homepage = "http://github.com/grosser/#{gem.name}"
46
+ gem.authors = ["Michael Grosser"]
47
+ end
48
+
49
+ Jeweler::GemcutterTasks.new
50
+ rescue LoadError
51
+ puts "Jeweler, or one of its dependencies, is not available. Install it with: gem install jeweler"
52
+ end
data/Readme.md ADDED
@@ -0,0 +1,53 @@
1
+ Advantages:
2
+
3
+ - Pagespeed: no additional js/css files + no js execution time
4
+ - Security: no flash tracking pixel from addthis
5
+ - Offline access: everything working without an internet connection
6
+ - SEO: no backlinks to addthis
7
+
8
+ Install
9
+ =======
10
+ rails plugin install git://github.com/grosser/static_addthis.git
11
+
12
+ - copy css from assets/static_addthis.css (0.2kb) to public and include it
13
+ - copy assets/addthis_sprite.png into public/images
14
+
15
+ Usage
16
+ =====
17
+
18
+ # app/helpers/application_helper.rb
19
+ def add_this(options)
20
+ # add google analytics tracking
21
+ url = request.request_uri
22
+ url += url.include?('?') ? '&' : '?'
23
+ url += 'utm_source=add_this&utm_medium=%{provider}'
24
+
25
+ StaticAddthis.icons(options.reverse_merge(
26
+ :title => @page_title,
27
+ :url => request.request_uri,
28
+ :username => 'myaddthisusername',
29
+ :uid => '12345'
30
+ ))
31
+ end
32
+
33
+ # in view
34
+ <%= add_this :providers => ['Facebook', 'Twitter', '|', 'more'] %>
35
+
36
+ # adding a custom provider
37
+ <%= add_this(:providers => ['Twitter', 'MyStuff', 'more']).sub('MyStuff', link_to('MyStuff', '/my_stuff')) %>
38
+
39
+ # without icons
40
+ <%= add_this :providers => ['more'], :only_text => true %>
41
+
42
+ # custom translations
43
+ <%= add_this :providers => ['Facebook', 'Twitter', 'more'], :text => "Share on %{provider}", :show_text => true, :more_text => 'All...' %>
44
+
45
+ # just need some icons ?
46
+ <%= StaticAddthis.social_icon('Facebook') %>
47
+
48
+
49
+ Author
50
+ ======
51
+ [Michael Grosser](http://grosser.it)<br/>
52
+ michael@grosser.it<br/>
53
+ Hereby placed under public domain, do what you want, just do not hold me accountable...<br/>
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
Binary file
@@ -0,0 +1,15 @@
1
+ .addthis_icon{
2
+ background: url(/images/addthis_sprite.png) no-repeat;
3
+ width: 16px;
4
+ height: 15px;
5
+ display: inline-block;
6
+ text-decoration: none;
7
+ }
8
+
9
+ .addthis_separator{
10
+ margin-left: 3px;
11
+ }
12
+
13
+ .addthis_toolbox .addthis_icon {
14
+ margin-left: 3px;
15
+ }
@@ -0,0 +1,91 @@
1
+ require 'cgi'
2
+
3
+ module StaticAddthis
4
+ VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
5
+
6
+ ICON_OFFSETS = {"addio"=>112, "addressbar"=>128, "adfty"=>160, "adifni"=>176, "aerosocial"=>192, "aim"=>208, "allmyfaves"=>224, "amazonwishlist"=>240, "amenme"=>256, "aolmail"=>272, "armenix"=>288, "arto"=>304, "aviary"=>320, "baang"=>336, "baidu"=>352, "bebo"=>368, "bentio"=>384, "biggerpockets"=>400, "bitly"=>416, "bizsugar"=>432, "bleetbox"=>448, "blinklist"=>464, "blip"=>480, "blogger"=>496, "bloggy"=>512, "blogmarks"=>528, "blogtrottr"=>544, "blurpalicious"=>560, "boardlite"=>576, "bobrdobr"=>592, "bonzobox"=>608, "bookmarkedbyus"=>624, "bookmarkycz"=>640, "bookmerkende"=>656, "bordom"=>672, "box"=>688, "brainify"=>704, "bryderi"=>720, "buddymarks"=>736, "buzzzy"=>752, "camyoo"=>768, "cardthis"=>784, "chiq"=>816, "cirip"=>832, "citeulike"=>848, "classicalplace"=>864, "clickazoo"=>880, "clply"=>896, "cndig"=>912, "colivia"=>928, "compact"=>3440, "connotea"=>944, "cootopia"=>960, "cosmiq"=>976, "curateus"=>992, "dashboard"=>1008, "delicious"=>1024, "designbump"=>1040, "designmoo"=>1056, "digaculturanet"=>1072, "digg"=>1088, "diggita"=>1104, "diggtiger"=>1120, "diglog"=>1136, "digo"=>1152, "digthiswebhost"=>1168, "digzign"=>1184, "diigo"=>1200, "dipdive"=>1216, "domaintoolswhois"=>1232, "domelhor"=>1248, "dosti"=>1264, "dotnetkicks"=>1280, "dotnetshoutout"=>1296, "douban"=>1312, "draugiem"=>1328, "drimio"=>1344, "dropjack"=>1360, "dwellicious"=>1376, "dzone"=>1392, "edelight"=>1408, "efactor"=>1424, "ekudos"=>1440, "elefantapl"=>1456, "email"=>1472, "embarkons"=>1488, "eucliquei"=>1504, "evernote"=>1520, "expanded"=>3440, "extraplay"=>1536, "ezyspot"=>1552, "facebook"=>1584, "facebook_like"=>1600, "fark"=>1616, "farkinda"=>1632, "fashiolista"=>1648, "fashionburner"=>1664, "favable"=>1680, "faves"=>1696, "favicon"=>1712, "favlogde"=>1728, "favoritende"=>1744, "favorites"=>1760, "favoritus"=>1776, "flaker"=>1792, "flickr"=>1808, "flosspro"=>1824, "folkd"=>1840, "followtags"=>1856, "forceindya"=>1872, "formspring"=>1888, "fresqui"=>1904, "friendfeed"=>1920, "friendster"=>1936, "funp"=>1952, "fwisp"=>1968, "gabbr"=>1984, "gacetilla"=>2000, "gamekicker"=>2016, "givealink"=>2032, "globalgrind"=>2048, "gluvsnap"=>2064, "gmail"=>2080, "goodnoows"=>2096, "google"=>2112, "googlebuzz"=>2128, "googlereader"=>2144, "googletranslate"=>2160, "gravee"=>2176, "greaterdebater"=>2192, "grono"=>2208, "grumper"=>2224, "habergentr"=>2240, "hackernews"=>2256, "hadashhot"=>2272, "hatena"=>2288, "hazarkor"=>2304, "hedgehogs"=>2320, "hellotxt"=>2336, "hipstr"=>2368, "historious"=>2384, "hitmarks"=>2400, "hotbookmark"=>2416, "hotklix"=>2432, "hotmail"=>2448, "hyves"=>2464, "idearef"=>2480, "identica"=>2496, "igoogle"=>2512, "ihavegot"=>2528, "indexor"=>2560, "informazione"=>2576, "instapaper"=>2592, "investorlinks"=>2608, "iorbix"=>2624, "isociety"=>2640, "iwiw"=>2656, "jamespot"=>2672, "jappy"=>2688, "jisko"=>2704, "joliprint"=>2720, "jumptags"=>2736, "kaboodle"=>2752, "kaevur"=>2768, "kaixin"=>2784, "kipup"=>2800, "kirtsy"=>2816, "kledy"=>2832, "kommenting"=>2848, "laaikit"=>2864, "ladenzeile"=>2880, "latafaneracat"=>2896, "librerio"=>2912, "linkagogo"=>2928, "linkedin"=>2944, "linkninja"=>2960, "linksgutter"=>2976, "linkshares"=>2992, "linksnapr"=>3008, "linkstore"=>3024, "linkuj"=>3040, "live"=>3056, "livefavoris"=>3072, "livejournal"=>3088, "lockerblogger"=>3104, "lynki"=>3136, "mailto"=>3152, "markme"=>3168, "mashbord"=>3184, "mawindo"=>3200, "meccho"=>3216, "meinvz"=>3232, "mekusharim"=>3248, "memonic"=>3264, "memori"=>3280, "meneame"=>3296, "menu"=>3312, "mindbodygreen"=>3328, "misterwong"=>3344, "misterwong_de"=>3360, "misterwong_ru"=>3376, "mixx"=>3392, "moemesto"=>3408, "moikrug"=>3424, "more"=>3440, "mototagz"=>3456, "mrcnetworkit"=>3472, "mssocialbookmarks"=>3488, "multiply"=>3504, "myaol"=>3520, "myhayastan"=>3536, "mylinkvault"=>3552, "mymailru"=>3568, "mynasa"=>3584, "myspace"=>3600, "myyearbook"=>3616, "naszaklasa"=>3648, "netlog"=>3664, "netvibes"=>3680, "netvouz"=>3696, "newsmeback"=>3712, "newstrust"=>3728, "newsvine"=>3744, "nujij"=>3760, "odnoklassniki_ru"=>3776, "oknotizie"=>3792, "olddogg"=>3808, "oneview"=>3824, "ongobee"=>3840, "orkut"=>3856, "osmosus"=>3872, "oyyla"=>3888, "packg"=>3904, "pafnetde"=>3920, "pdfmyurl"=>3936, "pdfonline"=>3952, "phonefavs"=>3968, "pimpthisblog"=>3984, "pingfm"=>4000, "planypus"=>4016, "plaxo"=>4032, "plurk"=>4048, "pochvalcz"=>4064, "popedition"=>4080, "posteezy"=>4096, "posterous"=>4112, "pratiba"=>4128, "print"=>4144, "printfriendly"=>4160, "pusha"=>4176, "qrfin"=>4192, "quantcast"=>4208, "qzone"=>4224, "readitlater"=>4240, "reddit"=>4256, "rediff"=>4272, "redkum"=>4288, "ridefix"=>4304, "rss"=>4320, "scoopat"=>4336, "segnalo"=>4352, "sekoman"=>4368, "shaveh"=>4400, "shetoldme"=>4416, "shirintar"=>4432, "simpy"=>4448, "sinaweibo"=>4464, "slashdot"=>4480, "smiru"=>4496, "socialbookmarkingnet"=>4512, "sodahead"=>4528, "sonico"=>4544, "speedtile"=>4560, "sphinn"=>4576, "spinsnap"=>4592, "spokentoyou"=>4608, "sportpost"=>4624, "springpad"=>4640, "spruzer"=>4656, "squidoo"=>4672, "startaid"=>4688, "startlap"=>4704, "storyfollower"=>4720, "studivz"=>4736, "stuffpit"=>4752, "stumbleupon"=>4768, "stumpedia"=>4784, "stylehive"=>4800, "surfpeoplenet"=>4816, "svejo"=>4832, "symbaloo"=>4848, "taaza"=>4864, "tagmarksde"=>4880, "tagvn"=>4896, "tagza"=>4912, "tailrank"=>4928, "tarpipe"=>4944, "technerd"=>4960, "teknikim"=>4976, "tellmypolitician"=>4992, "thefreedictionary"=>5008, "thewebblend"=>5024, "thinkfinity"=>5040, "thisnext"=>5056, "throwpile"=>5072, "tipd"=>5088, "topsitelernet"=>5104, "transferr"=>5120, "tuenti"=>5136, "tulinq"=>5152, "tumblr"=>5168, "tusul"=>5184, "tvinx"=>5200, "tweetmeme"=>5216, "twitter"=>5232, "twitthis"=>5248, "typepad"=>5264, "upnews"=>5280, "urlaubswerkde"=>5296, "viadeo"=>5312, "virb"=>5328, "visitezmonsite"=>5344, "vk"=>5360, "vkrugudruzei"=>5376, "voxopolis"=>5392, "vybralisme"=>5408, "vyoom"=>5424, "webnews"=>5456, "webs"=>5472, "windows"=>5488, "windycitizen"=>5504, "wirefan"=>5520, "wordpress"=>5536, "worio"=>5552, "woscc"=>5568, "wykop"=>5584, "xanga"=>5600, "xing"=>5616, "yahoobkm"=>5632, "yahoomail"=>5648, "yammer"=>5664, "yardbarker"=>5680, "yemle"=>5696, "yigg"=>5712, "yiid"=>5728, "yoolink"=>5744, "yorumcuyum"=>5760, "youblr"=>5776, "youbookmarks"=>5792, "youmob"=>5808, "youtube"=>5824, "yuuby"=>5840, "zakladoknet"=>5856, "zanatic"=>5872, "ziczac"=>5888, "zingme"=>5904, "zooloo"=>5920, "zootool"=>5936}
7
+
8
+ def self.icons(options)
9
+ providers = options[:providers].map{|p| link_to_provider(p, options) }
10
+
11
+ if options[:inline]
12
+ content_tag :span, providers.to_s, :class => "addthis_toolbox"
13
+ else
14
+ <<-HTML
15
+ <div class="addthis_toolbox">
16
+ #{providers}
17
+ <div style="clear:both"></div>
18
+ </div>
19
+ HTML
20
+ end
21
+ end
22
+
23
+ def self.social_icon(provider, options={})
24
+ return '' unless offset = icon_offset(provider)
25
+ options = {:class => 'addthis_icon', :style => "background-position: 0 #{-1*offset}px"}.merge(options)
26
+ options[:title] ||= provider.to_s.capitalize
27
+ content_tag :span, '&nbsp;', options
28
+ end
29
+
30
+ def self.link_to_provider(provider, options)
31
+ provider = provider.to_s
32
+
33
+ url = options[:url] || raise('addthis needs :url')
34
+ url = CGI.escape(url.gsub('%{provider}', provider))
35
+
36
+ title = CGI.escape(options[:title] || raise('addthis needs :title'))
37
+ username = options[:username] || raise('addthis needs :username')
38
+ uid = options[:uid] || raise('addthis needs :uid')
39
+
40
+ case provider
41
+ when '|' then
42
+ %{<span class="addthis_separator">|</span>}
43
+ when 'more'
44
+ href = "http://www.addthis.com/bookmark.php?v=250&amp;username=#{username}"
45
+ text = (options[:more_text] || options[:text] || '+')
46
+ build_link provider, text, href, options
47
+ else
48
+ if known_provider?(provider)
49
+ href = "//www.addthis.com/bookmark.php?pub=#{username}&amp;v=250&amp;source=tbx-250&amp;tt=0&amp;s=#{provider}&amp;url=#{url}&amp;title=#{title}&amp;content=&amp;uid=#{uid}"
50
+ text = (options[:text] || provider.capitalize)
51
+ build_link provider, text, href, options
52
+ else
53
+ provider
54
+ end
55
+ end
56
+ end
57
+
58
+ private
59
+
60
+ def self.build_link(provider, text, href, options)
61
+ text = text.gsub('%{provider}', provider)
62
+ icon = social_icon(provider, :title => text)
63
+
64
+ text = if options[:only_text]
65
+ text
66
+ elsif options[:show_text] or (options[:show_more_text] and provider == 'more')
67
+ "#{icon}#{text}"
68
+ else
69
+ icon
70
+ end
71
+
72
+ link_to text, href, :target => :blank, :rel => :nofollow, :id => "add_this_#{provider}"
73
+ end
74
+
75
+ def self.icon_offset(provider)
76
+ ICON_OFFSETS[provider.to_s.downcase]
77
+ end
78
+
79
+ def self.known_provider?(provider)
80
+ !!icon_offset(provider)
81
+ end
82
+
83
+ def self.link_to(name, href, options={})
84
+ content_tag :a, name, options.merge(:href => href)
85
+ end
86
+
87
+ def self.content_tag(name, content, options={})
88
+ options = options.map{|k,v| %{#{k}="#{v.to_s.gsub('"','`')}"}} * ' '
89
+ "<#{name} #{options}>#{content}</#{name}>"
90
+ end
91
+ end
@@ -0,0 +1,53 @@
1
+ require 'rubygems'
2
+ require 'lib/static_addthis'
3
+
4
+ describe StaticAddthis do
5
+ let(:defaults){ {:url => 'asdadas', :title => 'xxczx', :uid => '1121', :username => 'asdads'} }
6
+
7
+ describe :icons do
8
+ it "produces seperator" do
9
+ StaticAddthis.icons(defaults.merge(:providers => ['|'])).should include("<span class=\"addthis_separator\">|</span>")
10
+ end
11
+
12
+ it "produces more" do
13
+ StaticAddthis.icons(defaults.merge(:providers => ['more'])).should include(%{class="addthis_icon"})
14
+ end
15
+
16
+ it "produces a provider" do
17
+ StaticAddthis.icons(defaults.merge(:providers => ['Twitter'], :show_text => true)).should include(">Twitter<")
18
+ end
19
+
20
+ it "overwrites %{provider} in url" do
21
+ StaticAddthis.icons(defaults.merge(:providers => ['Twitter'], :url => 'xxx%{provider}yyy')).should include("xxxTwitteryyy")
22
+ end
23
+
24
+ it "ignores unknown providers so I can gsub them" do
25
+ result = StaticAddthis.icons(defaults.merge(:providers => ['Foo']))
26
+ result.should_not include(">Foo<")
27
+ result.should include("Foo\n")
28
+ end
29
+
30
+ it "does not show icons with only_text option" do
31
+ result = StaticAddthis.icons(defaults.merge(:providers => ['Twitter','more'], :only_text => true))
32
+ result.should_not include(%{class="addthis_icon"})
33
+ end
34
+
35
+ it "supports custom translations" do
36
+ result = StaticAddthis.icons(defaults.merge(:providers => ['Twitter'], :text => "Share on %{provider}"))
37
+ result.should include('Share on Twitter')
38
+ end
39
+
40
+ it "supports :inline" do
41
+ result = StaticAddthis.icons(defaults.merge(:providers => ['Twitter'], :inline => true))
42
+ result.should_not include('clear')
43
+ result.should_not include('<div')
44
+ result.should include('addthis_toolbox')
45
+ end
46
+ end
47
+
48
+ describe :social_icon do
49
+ it "finds correct offset" do
50
+ StaticAddthis.social_icon('Twitter').should include('background-position: 0 -5232px')
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,40 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{static_addthis}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Michael Grosser"]
12
+ s.date = %q{2011-06-06}
13
+ s.email = %q{michael@grosser.it}
14
+ s.files = [
15
+ "Gemfile",
16
+ "Gemfile.lock",
17
+ "Rakefile",
18
+ "Readme.md",
19
+ "VERSION",
20
+ "assets/addthis_sprite.png",
21
+ "assets/static_addthis.css",
22
+ "lib/static_addthis.rb",
23
+ "spec/static_addthis_spec.rb",
24
+ "static_addthis.gemspec"
25
+ ]
26
+ s.homepage = %q{http://github.com/grosser/static_addthis}
27
+ s.require_paths = ["lib"]
28
+ s.rubygems_version = %q{1.6.2}
29
+ s.summary = %q{Fast Addthis: no external js/css/images + no backlinks to addthis}
30
+
31
+ if s.respond_to? :specification_version then
32
+ s.specification_version = 3
33
+
34
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
35
+ else
36
+ end
37
+ else
38
+ end
39
+ end
40
+
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: static_addthis
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Michael Grosser
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-06 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description:
23
+ email: michael@grosser.it
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - Gemfile
32
+ - Gemfile.lock
33
+ - Rakefile
34
+ - Readme.md
35
+ - VERSION
36
+ - assets/addthis_sprite.png
37
+ - assets/static_addthis.css
38
+ - lib/static_addthis.rb
39
+ - spec/static_addthis_spec.rb
40
+ - static_addthis.gemspec
41
+ has_rdoc: true
42
+ homepage: http://github.com/grosser/static_addthis
43
+ licenses: []
44
+
45
+ post_install_message:
46
+ rdoc_options: []
47
+
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ requirements: []
69
+
70
+ rubyforge_project:
71
+ rubygems_version: 1.6.2
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: "Fast Addthis: no external js/css/images + no backlinks to addthis"
75
+ test_files: []
76
+