hound 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5124b75e28297b2fcc833c9b785afaaf30ef1a6d
4
- data.tar.gz: 243191f171a35b3d0434e19ba8a8c0b2a98d7fae
3
+ metadata.gz: 788da607d57abb6490a4ef46a87442a887e17edd
4
+ data.tar.gz: a3adbd30914bc452af590c8f5acf7bbbbf6ccab5
5
5
  SHA512:
6
- metadata.gz: 35a19f7e49986a4a5e9e5114de97f9416535f0fc53497f50e17c504f4522593f9d23e16cc860cc1a3a7b66f19a87cb32e1c8aed97030a831b568c29f4ca42002
7
- data.tar.gz: e0ce3c16219b152035deaf16e1c748f2e0dc9ff3fc72a23d891d1e51ae6c005279b2c1e7fe52f8bf333997686d14949110376c7a3def5697109c9ac5f89d7b31
6
+ metadata.gz: 548a27cd88a07f80ac75dfa0a3f5ed2e0b7b13ff553e6917949379165fd1929eb967efdae776c261c6494c99fe94d1186aaa62dd86e394c81babce1a11bff7cd
7
+ data.tar.gz: 04109465ee9387282a5fbed0b186d974b963e78ab0eedaf1f7606aa1b889f4259c0d48be9958dcf7beb5a5d08f4dc546fb187b8e7ac440a15185fe4c04be87de
data/.gitignore CHANGED
@@ -5,3 +5,4 @@ test/dummy/db/*.sqlite3
5
5
  test/dummy/log/*.log
6
6
  test/dummy/tmp/
7
7
  test/dummy/.sass-cache
8
+ Gemfile.lock
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ rvm:
2
+ - 1.9.2
3
+ - 1.9.3
4
+ - ruby-head
5
+ - jruby-19mode
6
+ - rbx-18mode
7
+ notifications:
8
+ email:
9
+ on_success: change
10
+ on_failure: always
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2013 YOURNAME
1
+ Copyright 2013 Lee Jarvis
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -16,4 +16,78 @@ rails generate hound:install
16
16
  ```
17
17
 
18
18
  This will create a new migration file. Run `rake db:migrate` to add
19
- this table.
19
+ this table.
20
+
21
+ ## Usage
22
+
23
+ Hound will automatically track `create` `update` and `destroy` methods that
24
+ occur on your 'hounded' models. You can tell Hound which actions you'd like
25
+ to track in the `hound` method:
26
+
27
+ ```ruby
28
+ class Article < ActiveRecord::Base
29
+ hound actions: [:create, :update] # only track create/update
30
+ end
31
+ ```
32
+
33
+ Hound also adds a `hound_action` helper method to your controllers. This
34
+ allows you to set a custom action on any of your hounded models.
35
+
36
+ ```ruby
37
+ class ArticlesController < ApplicationController
38
+ def add_to_frontpage
39
+ # Does not update @article so no action will be created
40
+ @frontpage << @article
41
+ hound_action @article, 'added_to_frontpage'
42
+ end
43
+ end
44
+
45
+ @article.actions.last.action #=> 'added_to_frontpage'
46
+ ```
47
+
48
+ Hound will track the current user making these changes assuming your
49
+ application controller responds to a `current_user` method. If you have a
50
+ custom method, you can override `hound_user` to return this instead.
51
+
52
+ ```ruby
53
+ class ApplicationController < ActionController::Base
54
+ def hound_user
55
+ current_admin_user
56
+ end
57
+ end
58
+ ```
59
+
60
+ For this to work successfully you must tell Hound about your user class
61
+ (note that this value defaults to 'User' already).
62
+
63
+ ```ruby
64
+ Hound.config.user_class = 'CustomUser'
65
+ Hound.config.user_class = AdminUser # String or constant
66
+ ```
67
+
68
+ ### Cleaning up actions
69
+
70
+ With all this action creating we're doing, your database is bound to start
71
+ getting full quickly. You have two options for cleaning up after yourself,
72
+ either create a rake task:
73
+
74
+ ```ruby
75
+ task :prune_hound_actions do
76
+ Hound.actions.where('created_at < ?', 1.week.ago).delete_all
77
+ end
78
+ ```
79
+
80
+ And run it as a cron job, or you can simply limit records on a per model basis
81
+
82
+ ```ruby
83
+ class Article < ActiveRecord::Base
84
+ hound limit: 10
85
+ end
86
+ ```
87
+
88
+ Now Hound will never store more than 10 actions for an Article. You can
89
+ configure this globally through `Hound.config.limit`, too. Do note though
90
+ that adding this functionality means whenever an action is tracked, Hound
91
+ will not only create a new action, it will check and destroy any actions
92
+ outside of this limit. This requires an extra call to the database, so if
93
+ that could be an issue, using a rake task might be a better idea.
data/hound.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.files = `git ls-files`.split($/)
17
17
  s.test_files = s.files.grep(%r{^test/})
18
18
 
19
- s.add_dependency 'rails', '>= 3.2.0'
19
+ s.add_dependency 'rails', '>= 3.1.0'
20
20
 
21
21
  s.add_development_dependency 'sqlite3'
22
22
  end
@@ -4,6 +4,7 @@ class CreateHoundActions < ActiveRecord::Migration
4
4
  t.string :action, null: false
5
5
  t.string :actionable_type, null: false
6
6
  t.integer :actionable_id, null: false
7
+ t.integer :user_id
7
8
  t.datetime :created_at
8
9
  end
9
10
  add_index :hound_actions, [:actionable_type, :actionable_id]
data/lib/hound.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'hound/model'
2
2
  require 'hound/controller'
3
- require 'hound/action'
4
3
  require 'hound/config'
5
4
  require 'hound/version'
6
5
 
@@ -35,4 +34,5 @@ end
35
34
 
36
35
  ActiveSupport.on_load :active_record do
37
36
  include Hound::Model
37
+ require 'hound/action'
38
38
  end
data/lib/hound/action.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  module Hound
2
2
  class Action < ActiveRecord::Base
3
3
  self.table_name = 'hound_actions'
4
- attr_accessible :action, :actionable_id, :actionable_type
4
+ attr_accessible :action, :actionable_id, :actionable_type, :user_id
5
5
  belongs_to :actionable, polymorphic: true
6
+ belongs_to :user, class_name: Hound.config.user_class
6
7
 
7
8
  scope :created, -> { where(action: 'create') }
8
9
  scope :updated, -> { where(action: 'update') }
data/lib/hound/config.rb CHANGED
@@ -7,8 +7,20 @@ module Hound
7
7
  # An Array of actions Hound should track.
8
8
  attr_accessor :actions
9
9
 
10
+ # The String used to represent a User class (defaults to 'User').
11
+ attr_reader :user_class
12
+
13
+ # Limit actions on a global basis.
14
+ attr_accessor :limit
15
+
10
16
  def initialize
11
17
  @actions = %w'create update destroy'
18
+ @user_class = 'User'
19
+ @limit = nil
20
+ end
21
+
22
+ def user_class=(klassname)
23
+ @user_class = klassname.to_s
12
24
  end
13
25
 
14
26
  end
@@ -11,25 +11,22 @@ module Hound
11
11
  # This method should be overridden for providing custom behavour.
12
12
  def hound_user
13
13
  @hound_user ||= current_user
14
- rescue NoMethodError
14
+ rescue NameError
15
15
  nil
16
16
  end
17
17
 
18
- def hound_user_type
19
- if hound_user
20
- hound_user.class.base_class.name
21
- end
22
- end
23
-
24
18
  def hound_user_id
25
19
  hound_user.try(:id)
26
20
  end
27
21
 
28
22
  private
29
23
 
24
+ def hound_action(object, action = params[:action])
25
+ object.actions.create(action: action, user_id: hound_user_id)
26
+ end
27
+
30
28
  def set_hound_user
31
- Hound.store[:hound_user_type] = hound_user_type
32
- Hound.store[:hound_user_id] = hound_user_id
29
+ Hound.store[:current_user_id] = hound_user_id
33
30
  end
34
31
 
35
32
  end
data/lib/hound/model.rb CHANGED
@@ -23,6 +23,7 @@ module Hound
23
23
  class_attribute :hound_options
24
24
  self.hound_options = options.dup
25
25
 
26
+ # Add action hooks
26
27
  after_create :hound_create if options[:actions].include?('create')
27
28
  before_update :hound_update if options[:actions].include?('update')
28
29
  after_destroy :hound_destroy if options[:actions].include?('destroy')
@@ -34,19 +35,39 @@ module Hound
34
35
  private
35
36
 
36
37
  def hound_create
37
- actions.create! action: 'create'
38
+ attributes = default_attributes.merge(action: 'create')
39
+ actions.create! attributes
40
+ inforce_limit
38
41
  end
39
42
 
40
43
  def hound_update
41
- actions.create! action: 'update'
44
+ attributes = default_attributes.merge(action: 'update')
45
+ actions.create! attributes
46
+ inforce_limit
42
47
  end
43
48
 
44
49
  def hound_destroy
45
- Hound::Action.create(
46
- actionable_id: self.id,
47
- actionable_type: self.class.base_class.name,
48
- action: 'destroy'
49
- )
50
+ attributes = default_attributes.merge(action: 'destroy')
51
+ attributes.merge!(
52
+ actionable_id: self.id,
53
+ actionable_type: self.class.base_class.name)
54
+ Hound::Action.create(attributes)
55
+ inforce_limit
56
+ end
57
+
58
+ def default_attributes
59
+ {
60
+ user_id: Hound.store[:current_user_id]
61
+ }
62
+ end
63
+
64
+ def inforce_limit
65
+ limit = self.class.hound_options[:limit]
66
+ limit ||= Hound.config.limit
67
+ if limit and actions.size > limit
68
+ good_actions = actions.order('created_at DESC').limit(limit)
69
+ actions.where('id NOT IN (?)', good_actions.map(&:id)).delete_all
70
+ end
50
71
  end
51
72
 
52
73
  end
data/lib/hound/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hound
2
- VERSION = "0.0.1"
2
+ VERSION = '0.1.0'
3
3
  end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class TestUserClass; end
4
+
5
+ class ConfigTest < ActiveSupport::TestCase
6
+
7
+ test 'user_class' do
8
+ assert_equal 'User', Hound.config.user_class
9
+
10
+ Hound.config.user_class = TestUserClass
11
+ assert_equal 'TestUserClass', Hound.config.user_class
12
+ end
13
+
14
+ end
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -1,3 +1,7 @@
1
1
  class ApplicationController < ActionController::Base
2
2
  protect_from_forgery
3
+
4
+ def current_user
5
+ @current_user ||= User.create! name: 'Lee'
6
+ end
3
7
  end
@@ -0,0 +1,21 @@
1
+ class ArticlesController < ApplicationController
2
+
3
+ def create
4
+ @article = Article.create(params[:article])
5
+ head :ok
6
+ end
7
+
8
+ def update
9
+ @article = Article.find(params[:id])
10
+ @article.update_attributes(params[:article])
11
+ hound_action @article, 'something_custom'
12
+ head :ok
13
+ end
14
+
15
+ def destroy
16
+ @article = Article.find(params[:id])
17
+ @article.destroy
18
+ head :ok
19
+ end
20
+
21
+ end
@@ -0,0 +1,2 @@
1
+ module ArticlesHelper
2
+ end
@@ -1,4 +1,4 @@
1
1
  class Post < ActiveRecord::Base
2
2
  attr_accessible :text
3
- hound actions: 'create'
3
+ hound actions: 'update', limit: 3
4
4
  end
@@ -1,4 +1,5 @@
1
1
  Dummy::Application.routes.draw do
2
+ resources :articles
2
3
  # The priority is based upon order of creation:
3
4
  # first created -> highest priority.
4
5
 
@@ -4,6 +4,7 @@ class CreateHoundActions < ActiveRecord::Migration
4
4
  t.string :action, null: false
5
5
  t.string :actionable_type, null: false
6
6
  t.integer :actionable_id, null: false
7
+ t.integer :user_id
7
8
  t.datetime :created_at
8
9
  end
9
10
  add_index :hound_actions, [:actionable_type, :actionable_id]
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20130307183451) do
14
+ ActiveRecord::Schema.define(:version => 20130308110847) do
15
15
 
16
16
  create_table "articles", :force => true do |t|
17
17
  t.string "title"
@@ -24,10 +24,11 @@ ActiveRecord::Schema.define(:version => 20130307183451) do
24
24
  t.string "action", :null => false
25
25
  t.string "actionable_type", :null => false
26
26
  t.integer "actionable_id", :null => false
27
+ t.integer "user_id"
27
28
  t.datetime "created_at"
28
29
  end
29
30
 
30
- add_index "hound_actions", ["actionable_type", "actionable_id"], :name => "index_houndd_actions_on_actionable_type_and_actionable_id"
31
+ add_index "hound_actions", ["actionable_type", "actionable_id"], :name => "index_hound_actions_on_actionable_type_and_actionable_id"
31
32
 
32
33
  create_table "posts", :force => true do |t|
33
34
  t.text "text"
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class ArticlesControllerTest < ActionController::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class ArticlesHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class ControllerTest < ActionController::TestCase
4
+ tests ArticlesController
5
+
6
+ test 'creating an action' do
7
+ post :create, article_attributes
8
+ assert_equal 1, assigns(:article).actions.size
9
+ end
10
+
11
+ test 'hound_user defaults to current_user' do
12
+ post :create, article_attributes
13
+ assert_equal User.first, assigns(:article).actions.first.user
14
+ end
15
+
16
+ test 'custom actions' do
17
+ article = Article.create title: 'Salut, World!', body: 'Lorem Ipsum'
18
+ put :update, article_attributes.merge(id: article.id)
19
+ actions = assigns(:article).actions
20
+ assert_equal 3, actions.size # one to create, one to update, one custom
21
+ assert_equal 'something_custom', actions.last.action
22
+ assert_equal User.first, actions.last.user
23
+ end
24
+
25
+ private
26
+
27
+ def article_attributes
28
+ { article: { title: 'Hello, World!', body: 'Lorem Ipsum' } }
29
+ end
30
+ end
data/test/hound_test.rb CHANGED
@@ -7,7 +7,7 @@ class HoundTest < ActiveSupport::TestCase
7
7
 
8
8
  test 'hound_options' do
9
9
  assert_equal %w'create update destroy', Article.hound_options[:actions]
10
- assert_equal %w'create', Post.hound_options[:actions]
10
+ assert_equal %w'update', Post.hound_options[:actions]
11
11
  end
12
12
 
13
13
  test 'hound model creation' do
@@ -28,4 +28,12 @@ class HoundTest < ActiveSupport::TestCase
28
28
  assert_equal 'Article', action.actionable_type
29
29
  assert_equal @article.id, action.actionable_id
30
30
  end
31
+
32
+ test 'limiting actions' do
33
+ @post = Post.create! text: 'lorem ipsum'
34
+ 5.times do |n|
35
+ @post.update_attributes(text: "lorem ipsum #{n}")
36
+ end
37
+ assert_equal 3, @post.actions.size
38
+ end
31
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hound
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Jarvis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-07 00:00:00.000000000 Z
11
+ date: 2013-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
19
+ version: 3.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.0
26
+ version: 3.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sqlite3
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -46,8 +46,8 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - .gitignore
49
+ - .travis.yml
49
50
  - Gemfile
50
- - Gemfile.lock
51
51
  - LICENSE
52
52
  - README.md
53
53
  - Rakefile
@@ -62,12 +62,17 @@ files:
62
62
  - lib/hound/model.rb
63
63
  - lib/hound/version.rb
64
64
  - lib/tasks/hound_tasks.rake
65
+ - test/config_test.rb
65
66
  - test/dummy/README.rdoc
66
67
  - test/dummy/Rakefile
67
68
  - test/dummy/app/assets/javascripts/application.js
69
+ - test/dummy/app/assets/javascripts/articles.js
68
70
  - test/dummy/app/assets/stylesheets/application.css
71
+ - test/dummy/app/assets/stylesheets/articles.css
69
72
  - test/dummy/app/controllers/application_controller.rb
73
+ - test/dummy/app/controllers/articles_controller.rb
70
74
  - test/dummy/app/helpers/application_helper.rb
75
+ - test/dummy/app/helpers/articles_helper.rb
71
76
  - test/dummy/app/mailers/.gitkeep
72
77
  - test/dummy/app/models/.gitkeep
73
78
  - test/dummy/app/models/article.rb
@@ -92,8 +97,8 @@ files:
92
97
  - test/dummy/config/routes.rb
93
98
  - test/dummy/db/migrate/20130307165752_create_users.rb
94
99
  - test/dummy/db/migrate/20130307165837_create_articles.rb
95
- - test/dummy/db/migrate/20130307175522_create_persued_actions.rb
96
100
  - test/dummy/db/migrate/20130307183451_create_posts.rb
101
+ - test/dummy/db/migrate/20130308110847_create_hound_actions.rb
97
102
  - test/dummy/db/schema.rb
98
103
  - test/dummy/lib/assets/.gitkeep
99
104
  - test/dummy/log/.gitkeep
@@ -105,9 +110,12 @@ files:
105
110
  - test/dummy/test/fixtures/articles.yml
106
111
  - test/dummy/test/fixtures/posts.yml
107
112
  - test/dummy/test/fixtures/users.yml
113
+ - test/dummy/test/functional/articles_controller_test.rb
108
114
  - test/dummy/test/unit/article_test.rb
115
+ - test/dummy/test/unit/helpers/articles_helper_test.rb
109
116
  - test/dummy/test/unit/post_test.rb
110
117
  - test/dummy/test/unit/user_test.rb
118
+ - test/functional/controller_test.rb
111
119
  - test/hound_test.rb
112
120
  - test/test_helper.rb
113
121
  homepage: https://github.com/injekt/hound
@@ -134,12 +142,17 @@ signing_key:
134
142
  specification_version: 4
135
143
  summary: Trace changes to your models
136
144
  test_files:
145
+ - test/config_test.rb
137
146
  - test/dummy/README.rdoc
138
147
  - test/dummy/Rakefile
139
148
  - test/dummy/app/assets/javascripts/application.js
149
+ - test/dummy/app/assets/javascripts/articles.js
140
150
  - test/dummy/app/assets/stylesheets/application.css
151
+ - test/dummy/app/assets/stylesheets/articles.css
141
152
  - test/dummy/app/controllers/application_controller.rb
153
+ - test/dummy/app/controllers/articles_controller.rb
142
154
  - test/dummy/app/helpers/application_helper.rb
155
+ - test/dummy/app/helpers/articles_helper.rb
143
156
  - test/dummy/app/mailers/.gitkeep
144
157
  - test/dummy/app/models/.gitkeep
145
158
  - test/dummy/app/models/article.rb
@@ -164,8 +177,8 @@ test_files:
164
177
  - test/dummy/config/routes.rb
165
178
  - test/dummy/db/migrate/20130307165752_create_users.rb
166
179
  - test/dummy/db/migrate/20130307165837_create_articles.rb
167
- - test/dummy/db/migrate/20130307175522_create_persued_actions.rb
168
180
  - test/dummy/db/migrate/20130307183451_create_posts.rb
181
+ - test/dummy/db/migrate/20130308110847_create_hound_actions.rb
169
182
  - test/dummy/db/schema.rb
170
183
  - test/dummy/lib/assets/.gitkeep
171
184
  - test/dummy/log/.gitkeep
@@ -177,8 +190,11 @@ test_files:
177
190
  - test/dummy/test/fixtures/articles.yml
178
191
  - test/dummy/test/fixtures/posts.yml
179
192
  - test/dummy/test/fixtures/users.yml
193
+ - test/dummy/test/functional/articles_controller_test.rb
180
194
  - test/dummy/test/unit/article_test.rb
195
+ - test/dummy/test/unit/helpers/articles_helper_test.rb
181
196
  - test/dummy/test/unit/post_test.rb
182
197
  - test/dummy/test/unit/user_test.rb
198
+ - test/functional/controller_test.rb
183
199
  - test/hound_test.rb
184
200
  - test/test_helper.rb
data/Gemfile.lock DELETED
@@ -1,98 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- hound (0.0.1)
5
- rails (>= 3.2.0)
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- actionmailer (3.2.13.rc2)
11
- actionpack (= 3.2.13.rc2)
12
- mail (~> 2.5.3)
13
- actionpack (3.2.13.rc2)
14
- activemodel (= 3.2.13.rc2)
15
- activesupport (= 3.2.13.rc2)
16
- builder (~> 3.0.0)
17
- erubis (~> 2.7.0)
18
- journey (~> 1.0.4)
19
- rack (~> 1.4.5)
20
- rack-cache (~> 1.2)
21
- rack-test (~> 0.6.1)
22
- sprockets (~> 2.2.1)
23
- activemodel (3.2.13.rc2)
24
- activesupport (= 3.2.13.rc2)
25
- builder (~> 3.0.0)
26
- activerecord (3.2.13.rc2)
27
- activemodel (= 3.2.13.rc2)
28
- activesupport (= 3.2.13.rc2)
29
- arel (~> 3.0.2)
30
- tzinfo (~> 0.3.29)
31
- activeresource (3.2.13.rc2)
32
- activemodel (= 3.2.13.rc2)
33
- activesupport (= 3.2.13.rc2)
34
- activesupport (3.2.13.rc2)
35
- i18n (= 0.6.1)
36
- multi_json (~> 1.0)
37
- arel (3.0.2)
38
- builder (3.0.4)
39
- erubis (2.7.0)
40
- hike (1.2.1)
41
- i18n (0.6.1)
42
- journey (1.0.4)
43
- jquery-rails (2.2.1)
44
- railties (>= 3.0, < 5.0)
45
- thor (>= 0.14, < 2.0)
46
- json (1.7.7)
47
- mail (2.5.3)
48
- i18n (>= 0.4.0)
49
- mime-types (~> 1.16)
50
- treetop (~> 1.4.8)
51
- mime-types (1.21)
52
- multi_json (1.6.1)
53
- polyglot (0.3.3)
54
- rack (1.4.5)
55
- rack-cache (1.2)
56
- rack (>= 0.4)
57
- rack-ssl (1.3.3)
58
- rack
59
- rack-test (0.6.2)
60
- rack (>= 1.0)
61
- rails (3.2.13.rc2)
62
- actionmailer (= 3.2.13.rc2)
63
- actionpack (= 3.2.13.rc2)
64
- activerecord (= 3.2.13.rc2)
65
- activeresource (= 3.2.13.rc2)
66
- activesupport (= 3.2.13.rc2)
67
- bundler (~> 1.0)
68
- railties (= 3.2.13.rc2)
69
- railties (3.2.13.rc2)
70
- actionpack (= 3.2.13.rc2)
71
- activesupport (= 3.2.13.rc2)
72
- rack-ssl (~> 1.3.2)
73
- rake (>= 0.8.7)
74
- rdoc (~> 3.4)
75
- thor (>= 0.14.6, < 2.0)
76
- rake (10.0.3)
77
- rdoc (3.12.2)
78
- json (~> 1.4)
79
- sprockets (2.2.2)
80
- hike (~> 1.2)
81
- multi_json (~> 1.0)
82
- rack (~> 1.0)
83
- tilt (~> 1.1, != 1.3.0)
84
- sqlite3 (1.3.7)
85
- thor (0.17.0)
86
- tilt (1.3.4)
87
- treetop (1.4.12)
88
- polyglot
89
- polyglot (>= 0.3.1)
90
- tzinfo (0.3.36)
91
-
92
- PLATFORMS
93
- ruby
94
-
95
- DEPENDENCIES
96
- hound!
97
- jquery-rails
98
- sqlite3