impressionist 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +11 -0
- data/.rspec +1 -0
- data/.travis.yml +11 -0
- data/CHANGELOG.rdoc +1 -1
- data/Gemfile +8 -19
- data/README.md +65 -34
- data/Rakefile +10 -82
- data/app/controllers/impressionist_controller.rb +11 -11
- data/app/models/impression.rb +2 -15
- data/app/models/impressionist/bots.rb +3 -3
- data/app/models/impressionist/impressionable.rb +29 -41
- data/impressionist.gemspec +22 -65
- data/lib/generators/active_record/impressionist_generator.rb +21 -0
- data/lib/generators/{impressionist → active_record}/templates/create_impressions_table.rb +1 -9
- data/lib/generators/impressionist_generator.rb +12 -0
- data/lib/generators/mongo_mapper/impressionist_generator.rb +8 -0
- data/lib/generators/templates/impression.rb +5 -0
- data/lib/impressionist.rb +10 -3
- data/lib/impressionist/bots.rb +1 -1
- data/lib/impressionist/engine.rb +11 -3
- data/lib/impressionist/models/active_record/impression.rb +18 -0
- data/lib/impressionist/models/active_record/impressionist/impressionable.rb +12 -0
- data/lib/impressionist/models/mongo_mapper/impression.rb +17 -0
- data/lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb +12 -0
- data/lib/impressionist/version.rb +3 -0
- data/test_app/.gitignore +17 -0
- data/test_app/.rspec +1 -0
- data/test_app/Gemfile +58 -0
- data/test_app/README +256 -0
- data/test_app/README.rdoc +261 -0
- data/test_app/Rakefile +7 -0
- data/test_app/app/assets/images/rails.png +0 -0
- data/test_app/app/assets/javascripts/application.js +15 -0
- data/test_app/app/assets/stylesheets/application.css +13 -0
- data/test_app/app/controllers/application_controller.rb +8 -0
- data/test_app/app/controllers/articles_controller.rb +18 -0
- data/test_app/app/controllers/dummy_controller.rb +6 -0
- data/test_app/app/controllers/posts_controller.rb +23 -0
- data/test_app/app/controllers/widgets_controller.rb +13 -0
- data/test_app/app/helpers/application_helper.rb +2 -0
- data/{lib/impressionist/railties/tasks.rake → test_app/app/mailers/.gitkeep} +0 -0
- data/test_app/app/models/.gitkeep +0 -0
- data/test_app/app/models/article.rb +3 -0
- data/test_app/app/models/dummy.rb +7 -0
- data/test_app/app/models/post.rb +3 -0
- data/test_app/app/models/user.rb +3 -0
- data/test_app/app/models/widget.rb +3 -0
- data/test_app/app/views/articles/index.html.erb +1 -0
- data/test_app/app/views/articles/show.html.erb +1 -0
- data/test_app/app/views/layouts/application.html.erb +14 -0
- data/test_app/app/views/posts/edit.html.erb +0 -0
- data/test_app/app/views/posts/index.html.erb +0 -0
- data/test_app/app/views/posts/show.html.erb +0 -0
- data/test_app/app/views/widgets/index.html.erb +0 -0
- data/test_app/app/views/widgets/new.html.erb +0 -0
- data/test_app/app/views/widgets/show.html.erb +0 -0
- data/test_app/config.ru +4 -0
- data/test_app/config/application.rb +59 -0
- data/test_app/config/boot.rb +6 -0
- data/test_app/config/cucumber.yml +8 -0
- data/test_app/config/database.yml +30 -0
- data/test_app/config/environment.rb +5 -0
- data/test_app/config/environments/development.rb +37 -0
- data/test_app/config/environments/pg_test.rb +35 -0
- data/test_app/config/environments/production.rb +67 -0
- data/test_app/config/environments/test.rb +37 -0
- data/test_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test_app/config/initializers/impression.rb +5 -0
- data/test_app/config/initializers/inflections.rb +15 -0
- data/test_app/config/initializers/mime_types.rb +5 -0
- data/test_app/config/initializers/secret_token.rb +7 -0
- data/test_app/config/initializers/session_store.rb +8 -0
- data/test_app/config/initializers/wrap_parameters.rb +14 -0
- data/test_app/config/locales/en.yml +5 -0
- data/test_app/config/routes.rb +3 -0
- data/test_app/db/migrate/20110201153144_create_articles.rb +13 -0
- data/test_app/db/migrate/20110210205028_create_posts.rb +13 -0
- data/test_app/db/migrate/20111127184039_create_widgets.rb +15 -0
- data/test_app/db/seeds.rb +7 -0
- data/test_app/lib/assets/.gitkeep +0 -0
- data/test_app/lib/tasks/.gitkeep +0 -0
- data/test_app/lib/tasks/cucumber.rake +53 -0
- data/test_app/log/.gitkeep +0 -0
- data/test_app/public/404.html +26 -0
- data/test_app/public/422.html +26 -0
- data/test_app/public/500.html +25 -0
- data/test_app/public/favicon.ico +0 -0
- data/test_app/public/images/rails.png +0 -0
- data/test_app/public/index.html +241 -0
- data/test_app/public/javascripts/application.js +2 -0
- data/test_app/public/javascripts/controls.js +965 -0
- data/test_app/public/javascripts/dragdrop.js +974 -0
- data/test_app/public/javascripts/effects.js +1123 -0
- data/test_app/public/javascripts/prototype.js +6001 -0
- data/test_app/public/javascripts/rails.js +175 -0
- data/test_app/public/robots.txt +5 -0
- data/test_app/public/stylesheets/.gitkeep +0 -0
- data/test_app/script/cucumber +10 -0
- data/test_app/script/rails +6 -0
- data/test_app/spec/controllers/controller_spec.rb +125 -0
- data/test_app/spec/controllers/impressionist_uniqueness_spec.rb +310 -0
- data/test_app/spec/fixtures/articles.yml +3 -0
- data/test_app/spec/fixtures/impressions.yml +43 -0
- data/test_app/spec/fixtures/posts.yml +3 -0
- data/test_app/spec/fixtures/widgets.yml +4 -0
- data/test_app/spec/intializers/initializers_spec.rb +18 -0
- data/test_app/spec/models/counter_caching_spec.rb +30 -0
- data/test_app/spec/models/model_spec.rb +94 -0
- data/test_app/spec/rails_generators/rails_generators_spec.rb +23 -0
- data/test_app/spec/spec_helper.rb +36 -0
- data/upgrade_migrations/version_0_3_0.rb +7 -7
- data/upgrade_migrations/version_0_4_0.rb +2 -2
- metadata +356 -99
- data/VERSION +0 -1
- data/config/routes.rb +0 -2
- data/lib/generators/impressionist/impressionist_generator.rb +0 -20
@@ -1,20 +1,11 @@
|
|
1
1
|
module Impressionist
|
2
2
|
module Impressionable
|
3
|
-
|
4
|
-
def self.included(base)
|
5
|
-
base.extend ClassMethods
|
6
|
-
base.send(:include, InstanceMethods)
|
7
|
-
end
|
3
|
+
extend ActiveSupport::Concern
|
8
4
|
|
9
5
|
module ClassMethods
|
10
6
|
attr_accessor :cache_options
|
11
7
|
@cache_options = nil
|
12
8
|
|
13
|
-
def is_impressionable(options={})
|
14
|
-
has_many :impressions, :as=>:impressionable
|
15
|
-
@cache_options = options[:counter_cache]
|
16
|
-
end
|
17
|
-
|
18
9
|
def counter_cache_options
|
19
10
|
if @cache_options
|
20
11
|
options = { :column_name => :impressions_count, :unique => false }
|
@@ -28,44 +19,41 @@ module Impressionist
|
|
28
19
|
end
|
29
20
|
end
|
30
21
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def impressionist_count(options={})
|
37
|
-
options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now)
|
38
|
-
imps = options[:start_date].blank? ? impressions : impressions.where("created_at>=? and created_at<=?",options[:start_date],options[:end_date])
|
39
|
-
if options[:filter]!=:all
|
40
|
-
imps = imps.select(options[:filter]).group(options[:filter])
|
41
|
-
end
|
42
|
-
imps.all.size
|
43
|
-
end
|
22
|
+
def impressionable?
|
23
|
+
true
|
24
|
+
end
|
44
25
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
26
|
+
def impressionist_count(options={})
|
27
|
+
options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now)
|
28
|
+
imps = options[:start_date].blank? ? impressions : impressions.where("created_at>=? and created_at<=?",options[:start_date],options[:end_date])
|
29
|
+
if options[:filter]!=:all
|
30
|
+
imps = imps.select(options[:filter]).group(options[:filter])
|
50
31
|
end
|
32
|
+
imps.all.size
|
33
|
+
end
|
51
34
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
35
|
+
def update_counter_cache
|
36
|
+
cache_options = self.class.counter_cache_options
|
37
|
+
column_name = cache_options[:column_name].to_sym
|
38
|
+
count = cache_options[:unique] ? impressionist_count(:filter => :ip_address) : impressionist_count
|
39
|
+
update_attribute(column_name, count)
|
40
|
+
end
|
56
41
|
|
57
|
-
|
58
|
-
|
59
|
-
|
42
|
+
# OLD METHODS - DEPRECATE IN V0.5
|
43
|
+
def impression_count(start_date=nil,end_date=Time.now)
|
44
|
+
impressionist_count({:start_date=>start_date, :end_date=>end_date, :filter=>:all})
|
45
|
+
end
|
60
46
|
|
61
|
-
|
62
|
-
|
63
|
-
|
47
|
+
def unique_impression_count(start_date=nil,end_date=Time.now)
|
48
|
+
impressionist_count({:start_date=>start_date, :end_date=>end_date, :filter=> :request_hash})
|
49
|
+
end
|
64
50
|
|
65
|
-
|
66
|
-
|
67
|
-
end
|
51
|
+
def unique_impression_count_ip(start_date=nil,end_date=Time.now)
|
52
|
+
impressionist_count({:start_date=>start_date, :end_date=>end_date, :filter=> :ip_address})
|
68
53
|
end
|
69
54
|
|
55
|
+
def unique_impression_count_session(start_date=nil,end_date=Time.now)
|
56
|
+
impressionist_count({:start_date=>start_date, :end_date=>end_date, :filter=> :session_hash})
|
57
|
+
end
|
70
58
|
end
|
71
59
|
end
|
data/impressionist.gemspec
CHANGED
@@ -1,70 +1,27 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.expand_path('../lib/impressionist/version', __FILE__)
|
5
3
|
|
6
4
|
Gem::Specification.new do |s|
|
7
|
-
s.
|
8
|
-
s.
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
s.
|
20
|
-
|
21
|
-
|
22
|
-
"LICENSE.txt",
|
23
|
-
"README.md",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"app/controllers/impressionist_controller.rb",
|
27
|
-
"app/models/impression.rb",
|
28
|
-
"app/models/impressionist/bots.rb",
|
29
|
-
"app/models/impressionist/impressionable.rb",
|
30
|
-
"config/routes.rb",
|
31
|
-
"impressionist.gemspec",
|
32
|
-
"lib/generators/impressionist/impressionist_generator.rb",
|
33
|
-
"lib/generators/impressionist/templates/create_impressions_table.rb",
|
34
|
-
"lib/impressionist.rb",
|
35
|
-
"lib/impressionist/bots.rb",
|
36
|
-
"lib/impressionist/engine.rb",
|
37
|
-
"lib/impressionist/railties/tasks.rake",
|
38
|
-
"logo.png",
|
39
|
-
"upgrade_migrations/version_0_3_0.rb",
|
40
|
-
"upgrade_migrations/version_0_4_0.rb"
|
41
|
-
]
|
42
|
-
s.homepage = %q{http://github.com/cowboycoded/impressionist}
|
5
|
+
s.add_dependency 'httpclient', '~> 2.2'
|
6
|
+
s.add_dependency 'nokogiri', '~> 1.5'
|
7
|
+
s.add_development_dependency 'capybara'
|
8
|
+
s.add_development_dependency 'rake', '>= 0.9'
|
9
|
+
s.add_development_dependency 'rails', '~>3.1'
|
10
|
+
s.add_development_dependency 'rdoc', '>= 2.4.2'
|
11
|
+
s.add_development_dependency 'rspec-rails'
|
12
|
+
s.add_development_dependency 'simplecov'
|
13
|
+
s.add_development_dependency 'sqlite3'
|
14
|
+
s.add_development_dependency 'systemu'
|
15
|
+
s.authors = ["johnmcaliley"]
|
16
|
+
s.description = "Log impressions from controller actions or from a model"
|
17
|
+
s.email = "john.mcaliley@gmail.com"
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.homepage = "https://github.com/charlotte-ruby/impressionist"
|
43
20
|
s.licenses = ["MIT"]
|
21
|
+
s.name = "impressionist"
|
44
22
|
s.require_paths = ["lib"]
|
45
|
-
s.
|
46
|
-
s.summary =
|
47
|
-
|
48
|
-
|
49
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
50
|
-
s.specification_version = 3
|
51
|
-
|
52
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
|
-
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
54
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
55
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
|
56
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
57
|
-
else
|
58
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
59
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
60
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
61
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
62
|
-
end
|
63
|
-
else
|
64
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
65
|
-
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
66
|
-
s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
|
67
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
68
|
-
end
|
23
|
+
s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if s.respond_to? :required_rubygems_version=
|
24
|
+
s.summary = "Easy way to log impressions"
|
25
|
+
s.test_files = `git ls-files -- test_app/*`.split("\n")
|
26
|
+
s.version = Impressionist::VERSION
|
69
27
|
end
|
70
|
-
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module Generators
|
3
|
+
class ImpressionistGenerator < Rails::Generators::Base
|
4
|
+
include Rails::Generators::Migration
|
5
|
+
source_root File.join(File.dirname(__FILE__), 'templates')
|
6
|
+
|
7
|
+
def self.next_migration_number(dirname)
|
8
|
+
sleep 1
|
9
|
+
if ActiveRecord::Base.timestamped_migrations
|
10
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
11
|
+
else
|
12
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_migration_file
|
17
|
+
migration_template 'create_impressions_table.rb', 'db/migrate/create_impressions_table.rb'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -24,14 +24,6 @@ class CreateImpressionsTable < ActiveRecord::Migration
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.down
|
27
|
-
remove_index :impressions, :name => :poly_request_index
|
28
|
-
remove_index :impressions, :name => :poly_ip_index
|
29
|
-
remove_index :impressions, :name => :poly_session_index
|
30
|
-
remove_index :impressions, :name => :controlleraction_request_index
|
31
|
-
remove_index :impressions, :name => :controlleraction_ip_index
|
32
|
-
remove_index :impressions, :name => :controlleraction_session_index
|
33
|
-
remove_index :impressions, :user_id
|
34
|
-
|
35
27
|
drop_table :impressions
|
36
28
|
end
|
37
|
-
end
|
29
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Impressionist
|
2
|
+
module Generators
|
3
|
+
class ImpressionistGenerator < Rails::Generators::Base
|
4
|
+
hook_for :orm
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
|
7
|
+
def copy_config_file
|
8
|
+
template 'impression.rb', 'config/initializers/impression.rb'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/impressionist.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
-
|
2
|
-
require "#{IMPRESSIONIST_PATH}/engine.rb"
|
1
|
+
require "impressionist/engine.rb"
|
3
2
|
|
4
3
|
module Impressionist
|
5
|
-
|
4
|
+
# Define ORM
|
5
|
+
mattr_accessor :orm
|
6
|
+
@@orm = :active_record
|
7
|
+
|
8
|
+
# Load configuration from initializer
|
9
|
+
def self.setup
|
10
|
+
yield self
|
11
|
+
end
|
12
|
+
end
|
data/lib/impressionist/bots.rb
CHANGED
data/lib/impressionist/engine.rb
CHANGED
@@ -3,8 +3,16 @@ require "rails"
|
|
3
3
|
|
4
4
|
module Impressionist
|
5
5
|
class Engine < Rails::Engine
|
6
|
-
initializer 'impressionist.
|
7
|
-
|
6
|
+
initializer 'impressionist.model' do |app|
|
7
|
+
if Impressionist.orm == :active_record
|
8
|
+
require "impressionist/models/active_record/impression.rb"
|
9
|
+
require "impressionist/models/active_record/impressionist/impressionable.rb"
|
10
|
+
ActiveRecord::Base.send(:include, Impressionist::Impressionable)
|
11
|
+
elsif Impressionist.orm == :mongo_mapper
|
12
|
+
require "impressionist/models/mongo_mapper/impression.rb"
|
13
|
+
require "impressionist/models/mongo_mapper/impressionist/impressionable.rb"
|
14
|
+
MongoMapper::Document.plugin Impressionist::Impressionable
|
15
|
+
end
|
8
16
|
end
|
9
17
|
|
10
18
|
initializer 'impressionist.controller' do
|
@@ -14,4 +22,4 @@ module Impressionist
|
|
14
22
|
end
|
15
23
|
end
|
16
24
|
end
|
17
|
-
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Impression < ActiveRecord::Base
|
2
|
+
attr_accessible :impressionable_type, :impressionable_id, :user_id,
|
3
|
+
:controller_name, :action_name, :view_name, :request_hash, :ip_address,
|
4
|
+
:session_hash, :message, :referrer
|
5
|
+
|
6
|
+
after_save :update_impressions_counter_cache
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def update_impressions_counter_cache
|
11
|
+
impressionable_class = self.impressionable_type.constantize
|
12
|
+
|
13
|
+
if impressionable_class.counter_cache_options
|
14
|
+
resouce = impressionable_class.find(self.impressionable_id)
|
15
|
+
resouce.try(:update_counter_cache)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Impressionist
|
2
|
+
module Impressionable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def is_impressionable(options={})
|
7
|
+
has_many :impressions, :as => :impressionable, :dependent => :destroy
|
8
|
+
@cache_options = options[:counter_cache]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Impression
|
2
|
+
include MongoMapper::Document
|
3
|
+
|
4
|
+
key :impressionable_type, String
|
5
|
+
key :impressionable_id, String
|
6
|
+
key :user_id, String
|
7
|
+
key :controller_name, String
|
8
|
+
key :action_name, String
|
9
|
+
key :view_name, String
|
10
|
+
key :request_hash, String
|
11
|
+
key :ip_address, String
|
12
|
+
key :session_hash, String
|
13
|
+
key :message, String
|
14
|
+
key :referrer, String
|
15
|
+
|
16
|
+
timestamps!
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Impressionist
|
2
|
+
module Impressionable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
def is_impressionable(options={})
|
7
|
+
many :impressions, :as => :impressionable, :dependent => :destroy
|
8
|
+
@cache_options = options[:counter_cache]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/test_app/.gitignore
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile ~/.gitignore_global
|
6
|
+
|
7
|
+
# Ignore bundler config
|
8
|
+
/.bundle
|
9
|
+
/Gemfile.lock
|
10
|
+
|
11
|
+
# Ignore the default SQLite database.
|
12
|
+
/db/*.sqlite3
|
13
|
+
|
14
|
+
# Ignore all logfiles and tempfiles.
|
15
|
+
/coverage
|
16
|
+
/log/*.log
|
17
|
+
/tmp
|
data/test_app/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/test_app/Gemfile
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'rails', '3.2.2'
|
4
|
+
|
5
|
+
gem 'impressionist', :path => '../'
|
6
|
+
|
7
|
+
platforms :jruby do
|
8
|
+
gem 'activerecord-jdbcsqlite3-adapter'
|
9
|
+
gem 'jdbc-sqlite3'
|
10
|
+
gem 'jruby-openssl'
|
11
|
+
end
|
12
|
+
|
13
|
+
platforms :ruby, :mswin, :mingw do
|
14
|
+
gem 'sqlite3'
|
15
|
+
end
|
16
|
+
|
17
|
+
gem 'json'
|
18
|
+
|
19
|
+
# Gems used only for assets and not required
|
20
|
+
# in production environments by default.
|
21
|
+
group :assets do
|
22
|
+
gem 'sass-rails', '~> 3.2.3'
|
23
|
+
gem 'coffee-rails', '~> 3.2.1'
|
24
|
+
|
25
|
+
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
26
|
+
# gem 'therubyracer'
|
27
|
+
|
28
|
+
gem 'uglifier', '>= 1.0.3'
|
29
|
+
end
|
30
|
+
|
31
|
+
group :development, :test do
|
32
|
+
gem 'autotest-notification'
|
33
|
+
gem 'rspec-rails'
|
34
|
+
gem 'spork'
|
35
|
+
end
|
36
|
+
|
37
|
+
group :test do
|
38
|
+
gem 'capybara'
|
39
|
+
gem 'simplecov'
|
40
|
+
gem 'systemu'
|
41
|
+
end
|
42
|
+
|
43
|
+
gem 'jquery-rails'
|
44
|
+
|
45
|
+
# To use ActiveModel has_secure_password
|
46
|
+
# gem 'bcrypt-ruby', '~> 3.0.0'
|
47
|
+
|
48
|
+
# To use Jbuilder templates for JSON
|
49
|
+
# gem 'jbuilder'
|
50
|
+
|
51
|
+
# Use unicorn as the app server
|
52
|
+
# gem 'unicorn'
|
53
|
+
|
54
|
+
# Deploy with Capistrano
|
55
|
+
# gem 'capistrano'
|
56
|
+
|
57
|
+
# To use debugger
|
58
|
+
# gem 'ruby-debug'
|