easymarklet 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,64 @@
1
+ Easymarklet
2
+ ===================
3
+
4
+ The easiest way to create bookmarklets for your rails app.
5
+
6
+ Installation
7
+ -------------------
8
+
9
+ Add this to your Gemfile:
10
+
11
+ gem 'easymarklet'
12
+
13
+ Then run:
14
+
15
+ bundle install
16
+
17
+ Building your bookmarklet code
18
+ ---------------------------------
19
+
20
+ Add a file to your app/assets/javascripts directory that will hold the
21
+ code for your bookmarklet. For example :
22
+
23
+ app/assets/javascripts/foobaz_bookmarklet.js
24
+
25
+ (function(){
26
+ var p = document.createElement('p');
27
+ p.appendChild(document.createTextNode('Foo vs. Baz'));
28
+ document.body.appendChild(p);
29
+ })();
30
+
31
+ Linking to your bookmarklet
32
+ ---------------------------------
33
+
34
+ Then in a view template you can link to your bookmarklet using the
35
+ easymarklet_js helper.
36
+
37
+ <%= link_to "Foo Baz!", easymarklet_js('foobaz_bookmarklet.js') %>
38
+
39
+ The resulting link will contain a small snippet of javascript that will
40
+ load your bookmarklet code into the current page and execute it. Place
41
+ some instructions for your users near the link that tells them to drag
42
+ the link into their bookmark bar.
43
+
44
+ XDM Bookmarklets
45
+ ----------------------------------
46
+
47
+ * Note : XDM is a work in progress.
48
+
49
+ To enable cross domain communictaion between your site and other pages
50
+ on the 'net we need to be able to generate a fully qualified URL to your
51
+ bookmarklet code. To set the correct host you should add this to each
52
+ of your confing/environment/*.rb files. Adjust the :host accordingly.
53
+ :port is optional.
54
+
55
+ config.action_controller.default_url_options = {:host =>
56
+ 'localhost', :port => 3000}
57
+
58
+ XDM bookmarklet code acts as a consumer for data or a service that is
59
+ supplied by the provider, a page on your app.
60
+
61
+
62
+
63
+
64
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'Easymarklet'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
@@ -0,0 +1,181 @@
1
+ (function(){
2
+
3
+ var Easymarklet = window.Easymarklet || {}
4
+
5
+ Easymarklet.Consumer = function(bookmarklet){
6
+ if(bookmarklet == null){ alert('You must pass some bookmarklet to Easymarklet.Consumer.'); return;}
7
+ if(bookmarklet.consumer == null){ alert('Your bookmarklet definition is missing a consumer.'); return; }
8
+ if(bookmarklet.producer == null){ alert('Your bookmarklet definition is missing a producer.'); return; }
9
+
10
+ var _this = this;
11
+ //console.log('Easymarklet.Consumer : init');
12
+ var bookmarklet = bookmarklet
13
+ var s1, s2, isLoaded = false, xhr, head = document.getElementsByTagName('head')[0];
14
+ var easymarkletDiv = null;
15
+
16
+ var consumer_url = encodeURIComponent(document.location);
17
+ var protocol = 'http://'
18
+ var host = '<%= Rails.application.config.action_controller.default_url_options[:host] %>';
19
+ var port = '<%= Rails.application.config.action_controller.default_url_options[:port] %>';
20
+ port = port === '' ? '' : ':' + port;
21
+ var full_host = protocol + host + port;
22
+
23
+ // Once easyXDM is available this will create an iframe and set up the RPC channel
24
+ function scriptOnLoad(){
25
+
26
+ if (isLoaded || typeof easyXDM === "undefined" || typeof JSON === "undefined") {
27
+ return;
28
+ }
29
+ isLoaded = true;
30
+
31
+ if(bookmarklet.visible){
32
+ easymarkletDiv = document.createElement('div');
33
+ easymarkletDiv.id = "easymarklet_div";
34
+ easymarkletDiv.className = 'easymarklet_iframe_div';
35
+ //easymarkletDiv.appendChild(document.createTextNode("Loading bookmarklet"));
36
+ document.body.appendChild(easymarkletDiv);
37
+ }
38
+
39
+ //var dest = full_host + "/bookmarklet_frame?dest=";
40
+ //dest += encodeURIComponent("/bookmarklet/court_cases/check?court_case[url]=" + caseUrl);
41
+
42
+ var dest = full_host + bookmarklet.producer.path
43
+
44
+ // here we put the main code, in this case we expose an ajax endpoint
45
+ xhr = new easyXDM.Rpc({
46
+ remote: dest,
47
+ container: easymarkletDiv,
48
+ onReady: function(){
49
+ //xhr.post("example/glossary.php", {
50
+ // param1: "a",
51
+ // param2: "b"
52
+ //}, function(json){
53
+ // alert(json.glossary.title);
54
+ //});
55
+ }
56
+ }, _this.createRpcConfig() /*{
57
+ remote: {
58
+
59
+ post: {}
60
+ },
61
+ local : {
62
+ alertMessage: {
63
+ method : function(msg){
64
+ alert(msg);
65
+ }
66
+ },
67
+ closeFrame: {
68
+ method : function(){
69
+ //alert('closing!');
70
+ var cdiv = document.getElementById('bookmarklet_div');
71
+ cdiv.parentNode.removeChild(cdiv);
72
+ }
73
+ },
74
+ resizeFrame : {
75
+ method : function(height){
76
+ //console.log("resizing outter frame : " + height);
77
+ var cdiv = document.getElementById('bookmarklet_div');
78
+ //console.log(cdiv);
79
+ //console.log(cdiv.style)
80
+ cdiv.style.height = height + "px";
81
+ cdiv.getElementsByTagName("iframe")[0].style.height = height + "px";
82
+ }
83
+ }
84
+ }
85
+ }*/
86
+ );
87
+ }
88
+
89
+ this.loadEasyXdmLib = function(){
90
+ // load easyXDM
91
+ s1 = document.createElement("script");
92
+ s1.type = "text/javascript";
93
+ s1.src = full_host + "/assets/easyXDM.js";
94
+ s1.onreadystatechange = function(){
95
+ if (this.readyState === "complete" || this.readyState === "loaded") {
96
+ scriptOnLoad();
97
+ }
98
+ };
99
+ s1.onload = scriptOnLoad;
100
+ head.appendChild(s1);
101
+ }
102
+
103
+ this.loadJsonLib = function(){
104
+ // load JSON if needed
105
+ if (typeof JSON === "undefined" || !JSON) {
106
+ s2 = document.createElement("script");
107
+ s2.type = "text/javascript";
108
+ s2.src = full_host + "/assets/json2.js";
109
+ s2.onreadystatechange = function(){
110
+ if (this.readyState === "complete" || this.readyState === "loaded") {
111
+ scriptOnLoad();
112
+ }
113
+ };
114
+ s2.onload = scriptOnLoad;
115
+ head.appendChild(s2);
116
+ }
117
+ }
118
+
119
+ this.loadCss = function(){
120
+ //Load the css
121
+ bookmarklet.consumer.css = [].concat(bookmarklet.consumer.css)
122
+ for(var i = 0; i<bookmarklet.consumer.css.length; i++){
123
+ var src = bookmarklet.consumer.css[i]
124
+ var css = document.createElement('LINK');
125
+ css.href = full_host + src;
126
+ css.type = 'text/css';
127
+ css.media = 'screen';
128
+ css.rel = 'stylesheet';
129
+ head.appendChild(css);
130
+ }
131
+ }
132
+
133
+ this.init = function(){
134
+ this.loadEasyXdmLib();
135
+ this.loadJsonLib();
136
+ this.loadCss();
137
+ }
138
+
139
+ this.createRpcConfig = function(){
140
+ var rpcConfig = {};
141
+
142
+ rpcConfig.local = {};
143
+ for (var key in bookmarklet.consumer.methods) {
144
+ if (bookmarklet.consumer.methods.hasOwnProperty(key)) {
145
+ //console.log(key);
146
+ rpcConfig.local[key] = bookmarklet.consumer.methods[key];
147
+ }
148
+ }
149
+ rpcConfig.local.closeFrame = this.closeFrame;
150
+
151
+ rpcConfig.remote = {};
152
+ for (var key in bookmarklet.producer.methods) {
153
+ if (bookmarklet.producer.methods.hasOwnProperty(key)) {
154
+ //console.log(key);
155
+ rpcConfig.remote[key] = {}; //We just stub these since they're not called on this side
156
+ }
157
+ }
158
+
159
+ return rpcConfig;
160
+ }
161
+
162
+ this.closeFrame = function(){
163
+ if(easymarkletDiv){
164
+ easymarkletDiv.parentNode.removeChild(easymarkletDiv)
165
+ }
166
+ }
167
+
168
+ this.resizeFrame = function(height){
169
+ easymarkletDiv.style.height = height + "px";
170
+ easymarkletDiv.getElementsByTagName("iframe")[0].style.height = height + "px";
171
+ }
172
+
173
+ } // Easymarklet.Consumer = function(){
174
+
175
+
176
+ // Now expose the Easymarklet to the global object
177
+ window.Easymarklet = Easymarklet;
178
+
179
+
180
+ })();
181
+
@@ -0,0 +1,69 @@
1
+ (function(){
2
+
3
+ var Easymarklet = window.Easymarklet || {}
4
+
5
+ Easymarklet.Producer = function(bookmarklet){
6
+ if(bookmarklet == null){ alert('You must pass a bookmarklet to Easymarklet.Producer.'); return;}
7
+ if(bookmarklet.consumer == null){ alert('Your bookmarklet definition is missing a consumer.'); return; }
8
+ if(bookmarklet.producer == null){ alert('Your bookmarklet definition is missing a producer.'); return; }
9
+
10
+ var _this = this;
11
+ _this.consumer = null;
12
+ //console.log('Easymarklet.Producert : init');
13
+
14
+ this.init = function(){
15
+ _this.createRpcChannel();
16
+ }
17
+
18
+ this.createRpcConfig = function(){
19
+ var rpcConfig = {};
20
+
21
+ rpcConfig.remote = {};
22
+ for (var key in bookmarklet.consumer.methods) {
23
+ if (bookmarklet.consumer.methods.hasOwnProperty(key)) {
24
+ //console.log(key);
25
+ rpcConfig.remote[key] = bookmarklet.consumer.methods[key];
26
+ _this[key]
27
+ }
28
+ }
29
+ rpcConfig.remote.closeFrame = {};
30
+ _this.closeFrame = function(){ _this.consumer.closeFrame() };
31
+
32
+ rpcConfig.local = {};
33
+ for (var key in bookmarklet.producer.methods) {
34
+ if (bookmarklet.producer.methods.hasOwnProperty(key)) {
35
+ //console.log(key);
36
+ rpcConfig.local[key] = {}; //We just stub these since they're not called on this side
37
+ }
38
+ }
39
+
40
+ return rpcConfig;
41
+ }
42
+
43
+ this.createRpcChannel = function(){
44
+ _this.consumer = new easyXDM.Rpc(
45
+ /** The channel configuration*/
46
+ {
47
+ local: "/assets/cors/index.html",
48
+ swf: "/assets/easyxdm.swf",
49
+ onReady: function(){
50
+ //console.log("calling the remote test....");
51
+ //Cicero.EasymarkletFrame.remote.alertMessage("just a test...");
52
+ }
53
+ }, _this.createRpcConfig()
54
+ );
55
+ }
56
+
57
+ this.call = function(func){
58
+ _this.consumer[func]();
59
+ }
60
+
61
+ } // Easymarklet.Producer = function(){
62
+
63
+
64
+ // Now expose the Easymarklet to the global object
65
+ window.Easymarklet = Easymarklet;
66
+
67
+ })();
68
+
69
+
@@ -0,0 +1,7 @@
1
+ module Easymarklet::LinkHelper
2
+
3
+ def easymarklet_js(manifest = 'bookmarklet.js')
4
+ "javascript:(function(){var script=document.createElement('SCRIPT');script.src='#{root_url}assets/#{manifest}';document.body.appendChild(script);})()"
5
+ end
6
+
7
+ end
@@ -0,0 +1,5 @@
1
+ if Rails.env.test? || Rails.env.development?
2
+ Rails.application.config.assets.paths << Easymarklet::Engine.root.join("spec", "javascripts") << Easymarklet::Engine.root.join("spec", "stylesheets")
3
+ # Add engine to view path so that spec/javascripts/fixtures are accessible
4
+ ActionController::Base.prepend_view_path Easymarklet::Engine.root
5
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Rails.application.routes.draw do
2
+ end
@@ -0,0 +1,4 @@
1
+ require "easymarklet/engine"
2
+
3
+ module Easymarklet
4
+ end
@@ -0,0 +1,9 @@
1
+ module Easymarklet
2
+
3
+ require 'easyxdm-rails'
4
+
5
+ class Engine < ::Rails::Engine
6
+ config.generators.integration_tool :rspec
7
+ config.generators.test_framework :rspec
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Easymarklet
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,12 @@
1
+ Description:
2
+ Generate a simple (non-xdm) bookmarklet.
3
+
4
+ Example:
5
+ rails generate easymarklet:simple foobaz
6
+
7
+ This will create:
8
+ app/assets/javascripts/foobaz_bookmarklet.js
9
+
10
+ Then you could link to it with:
11
+ <%= link_to "FooBaz Simple", easymarklet_js('foobaz_bookmarklet.js') %>
12
+
@@ -0,0 +1,19 @@
1
+ module Easymarklet
2
+ class SimpleGenerator < Rails::Generators::NamedBase
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def copy_js_file
6
+ copy_file "simple_bookmarklet.js", "app/assets/javascripts/#{file_name}_bookmarklet.js"
7
+ end
8
+
9
+ def display_msg
10
+ puts ""
11
+ puts "You can link to your new bookmarklet with this :"
12
+ puts ""
13
+ puts "<%= link_to '#{file_name.titleize}', easymarklet_js('#{file_name}_bookmarklet.js') %>"
14
+ puts ""
15
+ end
16
+
17
+ end
18
+ end
19
+
@@ -0,0 +1,6 @@
1
+ (function(){
2
+
3
+ // Your simple bookmarklet code goes here.
4
+
5
+
6
+ })();
@@ -0,0 +1,15 @@
1
+ Description:
2
+ Generate a new xdm bookmarklet.
3
+
4
+ Example:
5
+ rails generate easymarklet:xdm foobaz
6
+
7
+ This will create:
8
+ app/assets/javascripts/foobaz_bookmarklet.js
9
+ app/assets/javascripts/foobaz_consumer.js
10
+ app/assets/javascripts/foobaz_producer.js
11
+
12
+
13
+ Then you could link to it with:
14
+ <%= link_to "FooBaz XDM", easymarklet_js('foobaz_consumer.js') %>
15
+
@@ -0,0 +1,23 @@
1
+ (function(){
2
+
3
+ var <%= name.titleize %>Bookmarklet = {
4
+
5
+ visible : true,
6
+ consumer : {
7
+ css : [], // could be an array or a string
8
+ methods : { // The methods that the producer can call
9
+
10
+ }
11
+ },
12
+ producer : {
13
+ path : "/<%= name %>_producer", // The path on your app that provides your data service
14
+ methods : { // The methods that the consumer can call
15
+
16
+ }
17
+ }
18
+ }
19
+
20
+ window.<%= name.titleize %>Bookmarklet = <%= name.titleize %>Bookmarklet;
21
+
22
+ })();
23
+
@@ -0,0 +1,5 @@
1
+ //= require easymarklet/consumer
2
+ //= require <%= name %>_xdm
3
+ //
4
+ var <%= name %>_consumer = new Easymarklet.Consumer(<%= name.titleize %>Bookmarklet);
5
+ <%= name %>_consumer.init();
@@ -0,0 +1,6 @@
1
+ //= require easymarklet/producer
2
+ //= require <%= name %>_xdm
3
+ //= require easyXDM
4
+
5
+ var <%= name %>_producer = new Easymarklet.Producer(<%= name.titleize %>Bookmarklet);
6
+ <%= name %>_producer.init();
@@ -0,0 +1,20 @@
1
+ module Easymarklet
2
+ class XdmGenerator < Rails::Generators::NamedBase
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def copy_js_file
6
+ template "xdm_bookmarklet.js", "app/assets/javascripts/#{file_name}_bookmarklet.js"
7
+ template "xdm_consumer.js", "app/assets/javascripts/#{file_name}_consumer.js"
8
+ template "xdm_producer.js", "app/assets/javascripts/#{file_name}_producer.js"
9
+ end
10
+
11
+ def display_msg
12
+ puts ""
13
+ puts "You can link to your new bookmarklet with this :"
14
+ puts ""
15
+ puts "<%= link_to '#{file_name.titleize}', bookmarklet_js('#{file_name}_consumer.js') %>"
16
+ puts ""
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :easymarklet do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,215 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easymarklet
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jeremy Green
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.8
30
+ - !ruby/object:Gem::Dependency
31
+ name: easyxdm-rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.0.5
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.0.5
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec-rails
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: capybara
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: capybara-webkit
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: guard-rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: guard-spork
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: jasminerice
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: The easiest way to create bookmarklets in your rails app.
159
+ email:
160
+ - jeremy@octolabs.com
161
+ executables: []
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - app/assets/javascripts/easymarklet/consumer.js.erb
166
+ - app/assets/javascripts/easymarklet/producer.js.erb
167
+ - app/helpers/easymarklet/link_helper.rb
168
+ - config/initializers/jasminerice.rb
169
+ - config/routes.rb
170
+ - lib/easymarklet/engine.rb
171
+ - lib/easymarklet/version.rb
172
+ - lib/easymarklet.rb
173
+ - lib/generators/easymarklet/simple/simple_generator.rb
174
+ - lib/generators/easymarklet/simple/templates/simple_bookmarklet.js
175
+ - lib/generators/easymarklet/simple/USAGE
176
+ - lib/generators/easymarklet/xdm/templates/xdm_bookmarklet.js
177
+ - lib/generators/easymarklet/xdm/templates/xdm_consumer.js
178
+ - lib/generators/easymarklet/xdm/templates/xdm_producer.js
179
+ - lib/generators/easymarklet/xdm/USAGE
180
+ - lib/generators/easymarklet/xdm/xdm_generator.rb
181
+ - lib/tasks/easymarklet_tasks.rake
182
+ - MIT-LICENSE
183
+ - Rakefile
184
+ - README.md
185
+ homepage: https://github.com/Octo-Labs/easymarklet
186
+ licenses: []
187
+ post_install_message:
188
+ rdoc_options: []
189
+ require_paths:
190
+ - lib
191
+ required_ruby_version: !ruby/object:Gem::Requirement
192
+ none: false
193
+ requirements:
194
+ - - ! '>='
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ segments:
198
+ - 0
199
+ hash: -4490360310275386110
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ segments:
207
+ - 0
208
+ hash: -4490360310275386110
209
+ requirements: []
210
+ rubyforge_project:
211
+ rubygems_version: 1.8.24
212
+ signing_key:
213
+ specification_version: 3
214
+ summary: The easiest way to create bookmarklets in your rails app.
215
+ test_files: []