triumph 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/README.rdoc +14 -5
  2. data/VERSION +1 -1
  3. data/app/controllers/triumph/achievements_controller.rb +90 -0
  4. data/app/models/triumph/achievement.rb +31 -0
  5. data/app/models/triumph/achievement_condition.rb +33 -0
  6. data/app/models/triumph/completed_achievement.rb +10 -0
  7. data/app/views/triumph/achievements/_form.html.erb +40 -0
  8. data/app/views/triumph/achievements/edit.html.erb +6 -0
  9. data/app/views/triumph/achievements/index.html.erb +31 -0
  10. data/app/views/triumph/achievements/new.html.erb +5 -0
  11. data/app/views/triumph/achievements/show.html.erb +30 -0
  12. data/config/routes.rb +5 -0
  13. data/lib/{generators → rails/generators}/achievement_observer/achievement_observer_generator.rb +4 -5
  14. data/lib/{generators → rails/generators}/achievement_observer/templates/achievement_observer.rb +0 -0
  15. data/lib/{db/migrate → rails/generators/triumph/templates}/20110711040135_create_achievements.rb +1 -1
  16. data/lib/{db/migrate → rails/generators/triumph/templates}/20110712025245_create_completed_achievements.rb +0 -0
  17. data/lib/{db/migrate → rails/generators/triumph/templates}/20110712033351_create_achievement_conditions.rb +1 -1
  18. data/lib/rails/generators/triumph/templates/initializer.rb +8 -0
  19. data/lib/rails/generators/triumph/triumph_generator.rb +19 -0
  20. data/lib/rails/railties/tasks.rake +8 -0
  21. data/lib/triumph.rb +12 -4
  22. data/lib/triumph/achievements.rb +25 -0
  23. data/lib/triumph/engine.rb +8 -0
  24. data/triumph.gemspec +26 -22
  25. metadata +50 -84
  26. data/lib/.DS_Store +0 -0
  27. data/lib/achievements.rb +0 -23
  28. data/lib/app/controllers/achievements_controller.rb +0 -0
  29. data/lib/app/models/achievement.rb +0 -19
  30. data/lib/app/models/completed_achievement.rb +0 -6
  31. data/lib/app/views/achievements/index.html.erb +0 -0
  32. data/lib/app/views/achievements/new.html.erb +0 -0
  33. data/lib/db/.DS_Store +0 -0
  34. data/lib/generators/.DS_Store +0 -0
  35. data/lib/generators/triumph/.DS_Store +0 -0
  36. data/lib/generators/triumph/triumph_generator.rb +0 -12
data/README.rdoc CHANGED
@@ -1,8 +1,8 @@
1
- = triumph
1
+ = Triumph
2
2
 
3
3
  Triumph is a gem that not only lets you add achievements to your rails app, but lets you dynamically define new achievements (e.g. by an admin) at runtime.
4
4
 
5
- == Use
5
+ == Installing
6
6
 
7
7
  To use Triumph, simply do the following:
8
8
 
@@ -12,13 +12,22 @@ To use Triumph, simply do the following:
12
12
  * rails generate triumph
13
13
  * rake db:migrate
14
14
  * Add an observer on any objects you want to count for your users' achevements
15
- * rake generate acheivement_observer Post
16
- * rake generate acheivement_observer Comment
15
+ * rails generate achievement_observer Post
16
+ * rails generate achievement_observer Comment
17
17
  * add those observers to the 'config.active_record.observers' variable in config/application.rb
18
18
  * In your users model, add:
19
19
  * include Achievements
20
+ * Restart your App!
20
21
 
21
- That's it. You can now create new Acheivements, and when a post is saved, for example, Triumph will check if the conditions are met.
22
+ == Using
23
+
24
+ Once you've installed Triumph, you can visit the achievements controller to add new achievement definitions. Each achievement must have:
25
+
26
+ * A name
27
+ * A description
28
+ * A set of conditions
29
+
30
+ That's it. You can now create new Achievements, and when a post is saved, for example, Triumph will check if the conditions are met.
22
31
 
23
32
  For more info, see the sample app at http://github.com/adambray/triumph-sample.git
24
33
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
@@ -0,0 +1,90 @@
1
+ module Triumph
2
+ class AchievementsController < ApplicationController
3
+ # GET /achievements
4
+ # GET /achievements.xml
5
+ def index
6
+ @achievements = Achievement.all
7
+
8
+ respond_to do |format|
9
+ format.html # index.html.erb
10
+ format.xml { render :xml => @achievements }
11
+ end
12
+ end
13
+
14
+ # GET /achievements/1
15
+ # GET /achievements/1.xml
16
+ def show
17
+ @achievement = Achievement.find(params[:id])
18
+
19
+ respond_to do |format|
20
+ format.html # show.html.erb
21
+ format.xml { render :xml => @achievement }
22
+ end
23
+ end
24
+
25
+ # GET /achievements/new
26
+ # GET /achievements/new.xml
27
+ def new
28
+ @achievement = Achievement.new
29
+
30
+ respond_to do |format|
31
+ format.html # new.html.erb
32
+ format.xml { render :xml => @achievement }
33
+ end
34
+ end
35
+
36
+ # GET /achievements/1/edit
37
+ def edit
38
+ @achievement = Achievement.find(params[:id])
39
+ end
40
+
41
+ # POST /achievements
42
+ # POST /achievements.xml
43
+ def create
44
+ @achievement = Achievement.new(params[:triumph_achievement])
45
+ @achievement.observe_class.downcase!
46
+
47
+ if @achievement.save
48
+ achievement_condition = AchievementCondition.new(params[:achievement_condition])
49
+ achievement_condition.achievement_id = @achievement.id
50
+ if achievement_condition.save
51
+ redirect_to(@achievement, :notice => 'Achievement was successfully created.')
52
+ else
53
+ flash[:error] = "Failed to save achievement conditions"
54
+ end
55
+ else
56
+ render :action => "new"
57
+ end
58
+ end
59
+
60
+ # PUT /achievements/1
61
+ # PUT /achievements/1.xml
62
+ def update
63
+ @achievement = Achievement.find(params[:id])
64
+ @achievement.observe_class.downcase!
65
+
66
+ respond_to do |format|
67
+ if @achievement.update_attributes(params[:triumph_achievement])
68
+ format.html { redirect_to(@achievement, :notice => 'Achievement was successfully updated.') }
69
+ format.xml { head :ok }
70
+ else
71
+ format.html { render :action => "edit" }
72
+ format.xml { render :xml => @achievement.errors, :status => :unprocessable_entity }
73
+ end
74
+ end
75
+ end
76
+
77
+ # DELETE /achievements/1
78
+ # DELETE /achievements/1.xml
79
+ def destroy
80
+ @achievement = Achievement.find(params[:id])
81
+ @achievement.destroy
82
+
83
+ respond_to do |format|
84
+ format.html { redirect_to(triumph_achievements_url) }
85
+ format.xml { head :ok }
86
+ end
87
+ end
88
+
89
+ end
90
+ end
@@ -0,0 +1,31 @@
1
+ module Triumph
2
+ class Achievement < ActiveRecord::Base
3
+
4
+ unloadable
5
+
6
+ has_many :completed_achievements, :class_name => "Triumph::CompletedAchievement"
7
+ has_many :achievement_conditions, :class_name => "Triumph::AchievementCondition"
8
+
9
+
10
+ # This method is currently long, and I plan to refactor much of it tomorrow
11
+ # I plan to move much of the checking logic into the CompletedAchievement class
12
+ def self.check_achievements_for(object)
13
+
14
+ user = object.user
15
+ object_class = object.class.to_s.underscore.downcase
16
+ potential_achievements = Triumph::Achievement.where("observe_class = ?", object_class)
17
+
18
+ potential_achievements.each do |achievement|
19
+ total = user.send(object.class.to_s.pluralize.underscore.to_sym).count
20
+ if total >= achievement.quantity
21
+ condition_results = []
22
+ achievement.achievement_conditions.each do |condition|
23
+ condition.check(object)
24
+ end
25
+ user.grant_achievement(achievement) unless condition_results.include? false
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ module Triumph
2
+ class AchievementCondition < ActiveRecord::Base
3
+
4
+ unloadable
5
+
6
+ belongs_to :achievement
7
+
8
+ def check(object)
9
+ user = object.user
10
+ object_class = object.class.to_s.underscore.downcase
11
+ objects = user.send(object.class.to_s.pluralize.underscore.to_sym)
12
+
13
+ unless objects.empty?
14
+ case objects.first.send(comparison_attribute)
15
+ when Integer
16
+ comparison_value = comparison_value.to_i
17
+ when Float
18
+ comparison_value = comparison_value.to_f
19
+ when TrueClass, FalseClass
20
+ comparison_value = comparison_value == "true" ? true : false
21
+ end
22
+ end
23
+
24
+ valid_objects = objects.select{|o| o.send(comparison_attribute).
25
+ send(comparison_operator, comparison_value)}
26
+ num_valid_objects = valid_objects.count
27
+ if !num_valid_objects.send(total_operator.to_s, total_value)
28
+ false
29
+ end
30
+ true
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,10 @@
1
+ module Triumph
2
+ class CompletedAchievement < ActiveRecord::Base
3
+
4
+ unloadable
5
+
6
+ belongs_to :user
7
+ belongs_to :achievement
8
+
9
+ end
10
+ end
@@ -0,0 +1,40 @@
1
+ <%= form_for(@achievement) do |f| %>
2
+ <% if @achievement.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@achievement.errors.count, "error") %> prohibited this achievement from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @achievement.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :name %><br />
16
+ <%= f.text_field :name %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :description %><br />
20
+ <%= f.text_area :description %>
21
+ </div>
22
+ <div class="field">
23
+ <%= f.label :observe_class %><br />
24
+ <%= f.text_field :observe_class %>
25
+ </div>
26
+ <div class="field">
27
+ Grant this achievement when a user has more than
28
+ <%= f.text_field :quantity %> objects and
29
+ <br />
30
+ <%= select_tag "achievement_condition[total_operator]", options_for_select([["more than", ">"],["exactly", "=="],["less than", "<"]]) %>
31
+ <%= text_field_tag "achievement_condition[total_value]" %>
32
+ where <%= text_field_tag "achievement_condition[comparison_attribute]" %>
33
+ is
34
+ <%= select_tag "achievement_condition[comparison_operator]", options_for_select([["more than", ">"],["exactly", "=="],["less than", "<"]]) %>
35
+ <%= text_field_tag "achievement_condition[comparison_value]" %>
36
+ </div>
37
+ <div class="actions">
38
+ <%= f.submit %>
39
+ </div>
40
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing achievement</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Show', @achievement %> |
6
+ <%= link_to 'Back', triumph_achievements_path %>
@@ -0,0 +1,31 @@
1
+ <h1>Listing achievements</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Name</th>
6
+ <th>Description</th>
7
+ <th>Observe class</th>
8
+ <th>Conditions</th>
9
+ <th>Quantity</th>
10
+ <th></th>
11
+ <th></th>
12
+ <th></th>
13
+ </tr>
14
+
15
+ <% @achievements.each do |achievement| %>
16
+ <tr>
17
+ <td><%= achievement.name %></td>
18
+ <td><%= achievement.description %></td>
19
+ <td><%= achievement.observe_class %></td>
20
+ <td><%= achievement.conditions %></td>
21
+ <td><%= achievement.quantity %></td>
22
+ <td><%= link_to 'Show', achievement %></td>
23
+ <td><%= link_to 'Edit', edit_triumph_achievement_path(achievement) %></td>
24
+ <td><%= link_to 'Destroy', achievement, :confirm => 'Are you sure?', :method => :delete %></td>
25
+ </tr>
26
+ <% end %>
27
+ </table>
28
+
29
+ <br />
30
+
31
+ <%= link_to 'New Achievement', new_triumph_achievement_path %>
@@ -0,0 +1,5 @@
1
+ <h1>New achievement</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Back', triumph_achievements_path %>
@@ -0,0 +1,30 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <b>Name:</b>
5
+ <%= @achievement.name %>
6
+ </p>
7
+
8
+ <p>
9
+ <b>Description:</b>
10
+ <%= @achievement.description %>
11
+ </p>
12
+
13
+ <p>
14
+ <b>Observe class:</b>
15
+ <%= @achievement.observe_class %>
16
+ </p>
17
+
18
+ <p>
19
+ <b>Conditions:</b>
20
+ <%= @achievement.conditions %>
21
+ </p>
22
+
23
+ <p>
24
+ <b>Quantity:</b>
25
+ <%= @achievement.quantity %>
26
+ </p>
27
+
28
+
29
+ <%= link_to 'Edit', edit_triumph_achievement_path(@achievement) %> |
30
+ <%= link_to 'Back', triumph_achievements_path %>
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ Rails.application.routes.draw do |map|
2
+
3
+ map.resources :achievements, :controller => 'triumph/achievements', :path_prefix => "/triumph", :name_prefix => "triumph_"
4
+
5
+ end
@@ -2,12 +2,11 @@ require 'rails/generators'
2
2
 
3
3
  class AchievementObserverGenerator < Rails::Generators::Base
4
4
  source_root File.expand_path('../templates', __FILE__)
5
-
5
+
6
6
  argument :model_name, :type => :string, :description => "The name of the model to observe."
7
-
7
+
8
8
  def generate
9
- empty_directory "app/models"
10
- template "achievement_observer.rb", "app/models/triumph/#{model_name.underscore}_observer.rb"
9
+ empty_directory "app/models/"
10
+ template "achievement_observer.rb", "app/models/#{model_name.underscore}_observer.rb"
11
11
  end
12
-
13
12
  end
@@ -5,7 +5,7 @@ class CreateAchievements < ActiveRecord::Migration
5
5
  t.text :description
6
6
  t.string :observe_class
7
7
  t.string :conditions
8
- t.integer :quantity
8
+ t.integer :quantity
9
9
 
10
10
  t.timestamps
11
11
  end
@@ -6,7 +6,7 @@ class CreateAchievementConditions < ActiveRecord::Migration
6
6
  t.string :comparison_operator
7
7
  t.string :comparison_value
8
8
  t.string :total_operator
9
- t.string :total_value
9
+ t.integer :total_value
10
10
 
11
11
  t.timestamps
12
12
  end
@@ -0,0 +1,8 @@
1
+ module Triumph
2
+ class Engine < Rails::Engine
3
+
4
+ #Learning about rails engines, do I really need this?
5
+ config.mount_at = '/triumph'
6
+
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ require 'rails/generators'
2
+
3
+ class TriumphGenerator < Rails::Generators::Base
4
+
5
+ source_root File.expand_path('../templates', __FILE__)
6
+
7
+ def generate
8
+ copy_file "20110711040135_create_achievements.rb", "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_create_achievements.rb"
9
+ copy_file "20110712025245_create_completed_achievements.rb", "db/migrate/#{(Time.now + 5.seconds).utc.strftime("%Y%m%d%H%M%S")}_create_completed_achievements.rb"
10
+ copy_file "20110712033351_create_achievement_conditions.rb", "db/migrate/#{(Time.now + 10.seconds).utc.strftime("%Y%m%d%H%M%S")}_create_achievement_conditions.rb"
11
+ end
12
+
13
+ # Every method that is declared below will be automatically executed when the generator is run
14
+ def copy_initializer_file
15
+ copy_file 'initializer.rb', 'config/initializers/triumph.rb'
16
+ end
17
+
18
+
19
+ end
@@ -0,0 +1,8 @@
1
+ namespace :triumph do
2
+
3
+ #desc "example gem rake task"
4
+ #task :report => :environment do
5
+ # puts "test rake task to see if they work from here"
6
+ #end
7
+
8
+ end
data/lib/triumph.rb CHANGED
@@ -1,4 +1,12 @@
1
- require File.dirname(__FILE__) + '/achievements'
2
- require File.dirname(__FILE__) + '/app/models/achievement'
3
- require File.dirname(__FILE__) + '/app/models/completed_achievement'
4
- require File.dirname(__FILE__) + '/generators/triumph/triumph_generator'
1
+ module Triumph
2
+
3
+ require 'triumph/engine' if defined?(Rails)
4
+ require 'triumph/achievements'
5
+
6
+ end
7
+
8
+ # require File.dirname(__FILE__) + '/achievements'
9
+ # require File.dirname(__FILE__) + '/app/models/achievement'
10
+ # require File.dirname(__FILE__) + '/app/models/completed_achievement'
11
+ # require File.dirname(__FILE__) + '/app/controllers/achievements_controller'
12
+ # require File.dirname(__FILE__) + '/generators/triumph/triumph_generator'
@@ -0,0 +1,25 @@
1
+ module Triumph
2
+ module Achievements
3
+
4
+ def self.included(base)
5
+ base.class_eval do
6
+ #for some reason, this is not adding the proper association to the users model
7
+ # when I do 'include Achievemnts', though everything else works as expected.
8
+ # For now, I'm manually adding the 'has_many :completed_achievements' to the user
9
+ # model in my sample app, but I need to figure this out.
10
+ has_many :completed_achievements, :class_name => 'Triumph::CompletedAchievement'
11
+ end
12
+ end
13
+
14
+ def grant_achievement(achievement)
15
+ unless self.has_achievement?(achievement)
16
+ CompletedAchievement.create!(:achievement_id => achievement.id, :user_id => self.id)
17
+ end
18
+ end
19
+
20
+ def has_achievement?(achievement)
21
+ CompletedAchievement.where("achievement_id = ? AND user_id = ?", achievement.id, self.id).count >= 1
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,8 @@
1
+ require "triumph"
2
+ require "rails"
3
+
4
+ module Triumph
5
+ class Engine < Rails::Engine
6
+
7
+ end
8
+ end
data/triumph.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{triumph}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{Adam Bray}]
12
- s.date = %q{2011-07-15}
11
+ s.authors = ["Adam Bray"]
12
+ s.date = %q{2011-07-28}
13
13
  s.description = %q{Triumph makes it easy to add achievements to your app, even dynamically at runtime.}
14
14
  s.email = %q{adam.bray@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -23,32 +23,36 @@ Gem::Specification.new do |s|
23
23
  "README.rdoc",
24
24
  "Rakefile",
25
25
  "VERSION",
26
- "lib/.DS_Store",
27
- "lib/achievements.rb",
28
- "lib/app/controllers/achievements_controller.rb",
29
- "lib/app/models/achievement.rb",
30
- "lib/app/models/completed_achievement.rb",
31
- "lib/app/views/achievements/index.html.erb",
32
- "lib/app/views/achievements/new.html.erb",
33
- "lib/db/.DS_Store",
34
- "lib/db/migrate/20110711040135_create_achievements.rb",
35
- "lib/db/migrate/20110712025245_create_completed_achievements.rb",
36
- "lib/db/migrate/20110712033351_create_achievement_conditions.rb",
37
- "lib/generators/.DS_Store",
38
- "lib/generators/achievement_observer/achievement_observer_generator.rb",
39
- "lib/generators/achievement_observer/templates/achievement_observer.rb",
40
- "lib/generators/triumph/.DS_Store",
41
- "lib/generators/triumph/triumph_generator.rb",
26
+ "app/controllers/triumph/achievements_controller.rb",
27
+ "app/models/triumph/achievement.rb",
28
+ "app/models/triumph/achievement_condition.rb",
29
+ "app/models/triumph/completed_achievement.rb",
30
+ "app/views/triumph/achievements/_form.html.erb",
31
+ "app/views/triumph/achievements/edit.html.erb",
32
+ "app/views/triumph/achievements/index.html.erb",
33
+ "app/views/triumph/achievements/new.html.erb",
34
+ "app/views/triumph/achievements/show.html.erb",
35
+ "config/routes.rb",
36
+ "lib/rails/generators/achievement_observer/achievement_observer_generator.rb",
37
+ "lib/rails/generators/achievement_observer/templates/achievement_observer.rb",
38
+ "lib/rails/generators/triumph/templates/20110711040135_create_achievements.rb",
39
+ "lib/rails/generators/triumph/templates/20110712025245_create_completed_achievements.rb",
40
+ "lib/rails/generators/triumph/templates/20110712033351_create_achievement_conditions.rb",
41
+ "lib/rails/generators/triumph/templates/initializer.rb",
42
+ "lib/rails/generators/triumph/triumph_generator.rb",
43
+ "lib/rails/railties/tasks.rake",
42
44
  "lib/triumph.rb",
45
+ "lib/triumph/achievements.rb",
46
+ "lib/triumph/engine.rb",
43
47
  "rails/init.rb",
44
48
  "test/helper.rb",
45
49
  "test/test_triumph.rb",
46
50
  "triumph.gemspec"
47
51
  ]
48
52
  s.homepage = %q{http://github.com/adambray/triumph}
49
- s.licenses = [%q{MIT}]
50
- s.require_paths = [%q{lib}]
51
- s.rubygems_version = %q{1.8.5}
53
+ s.licenses = ["MIT"]
54
+ s.require_paths = ["lib"]
55
+ s.rubygems_version = %q{1.6.2}
52
56
  s.summary = %q{Trimuph helps you add achievements to your app}
53
57
 
54
58
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: triumph
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
4
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 4
10
- version: 0.1.4
5
+ version: 0.2.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Adam Bray
@@ -15,128 +10,97 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-07-15 00:00:00 Z
13
+ date: 2011-07-28 00:00:00 -04:00
14
+ default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
17
+ name: rails
18
+ requirement: &id001 !ruby/object:Gem::Requirement
22
19
  none: false
23
20
  requirements:
24
21
  - - ">="
25
22
  - !ruby/object:Gem::Version
26
- hash: 7
27
- segments:
28
- - 3
29
- - 0
30
- - 0
31
23
  version: 3.0.0
32
24
  type: :runtime
33
- requirement: *id001
34
25
  prerelease: false
35
- name: rails
26
+ version_requirements: *id001
36
27
  - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
28
+ name: rails3-generators
29
+ requirement: &id002 !ruby/object:Gem::Requirement
38
30
  none: false
39
31
  requirements:
40
32
  - - ">="
41
33
  - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
34
  version: "0"
46
35
  type: :runtime
47
- requirement: *id002
48
36
  prerelease: false
49
- name: rails3-generators
37
+ version_requirements: *id002
50
38
  - !ruby/object:Gem::Dependency
51
- version_requirements: &id003 !ruby/object:Gem::Requirement
39
+ name: shoulda
40
+ requirement: &id003 !ruby/object:Gem::Requirement
52
41
  none: false
53
42
  requirements:
54
43
  - - ">="
55
44
  - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
45
  version: "0"
60
46
  type: :development
61
- requirement: *id003
62
47
  prerelease: false
63
- name: shoulda
48
+ version_requirements: *id003
64
49
  - !ruby/object:Gem::Dependency
65
- version_requirements: &id004 !ruby/object:Gem::Requirement
50
+ name: bundler
51
+ requirement: &id004 !ruby/object:Gem::Requirement
66
52
  none: false
67
53
  requirements:
68
54
  - - ~>
69
55
  - !ruby/object:Gem::Version
70
- hash: 23
71
- segments:
72
- - 1
73
- - 0
74
- - 0
75
56
  version: 1.0.0
76
57
  type: :development
77
- requirement: *id004
78
58
  prerelease: false
79
- name: bundler
59
+ version_requirements: *id004
80
60
  - !ruby/object:Gem::Dependency
81
- version_requirements: &id005 !ruby/object:Gem::Requirement
61
+ name: jeweler
62
+ requirement: &id005 !ruby/object:Gem::Requirement
82
63
  none: false
83
64
  requirements:
84
65
  - - ~>
85
66
  - !ruby/object:Gem::Version
86
- hash: 7
87
- segments:
88
- - 1
89
- - 6
90
- - 4
91
67
  version: 1.6.4
92
68
  type: :development
93
- requirement: *id005
94
69
  prerelease: false
95
- name: jeweler
70
+ version_requirements: *id005
96
71
  - !ruby/object:Gem::Dependency
97
- version_requirements: &id006 !ruby/object:Gem::Requirement
72
+ name: rcov
73
+ requirement: &id006 !ruby/object:Gem::Requirement
98
74
  none: false
99
75
  requirements:
100
76
  - - ">="
101
77
  - !ruby/object:Gem::Version
102
- hash: 3
103
- segments:
104
- - 0
105
78
  version: "0"
106
79
  type: :development
107
- requirement: *id006
108
80
  prerelease: false
109
- name: rcov
81
+ version_requirements: *id006
110
82
  - !ruby/object:Gem::Dependency
111
- version_requirements: &id007 !ruby/object:Gem::Requirement
83
+ name: rdoc
84
+ requirement: &id007 !ruby/object:Gem::Requirement
112
85
  none: false
113
86
  requirements:
114
87
  - - ">="
115
88
  - !ruby/object:Gem::Version
116
- hash: 3
117
- segments:
118
- - 0
119
89
  version: "0"
120
90
  type: :development
121
- requirement: *id007
122
91
  prerelease: false
123
- name: rdoc
92
+ version_requirements: *id007
124
93
  - !ruby/object:Gem::Dependency
125
- version_requirements: &id008 !ruby/object:Gem::Requirement
94
+ name: rails
95
+ requirement: &id008 !ruby/object:Gem::Requirement
126
96
  none: false
127
97
  requirements:
128
98
  - - ">="
129
99
  - !ruby/object:Gem::Version
130
- hash: 7
131
- segments:
132
- - 3
133
- - 0
134
- - 0
135
100
  version: 3.0.0
136
101
  type: :development
137
- requirement: *id008
138
102
  prerelease: false
139
- name: rails
103
+ version_requirements: *id008
140
104
  description: Triumph makes it easy to add achievements to your app, even dynamically at runtime.
141
105
  email: adam.bray@gmail.com
142
106
  executables: []
@@ -153,27 +117,32 @@ files:
153
117
  - README.rdoc
154
118
  - Rakefile
155
119
  - VERSION
156
- - lib/.DS_Store
157
- - lib/achievements.rb
158
- - lib/app/controllers/achievements_controller.rb
159
- - lib/app/models/achievement.rb
160
- - lib/app/models/completed_achievement.rb
161
- - lib/app/views/achievements/index.html.erb
162
- - lib/app/views/achievements/new.html.erb
163
- - lib/db/.DS_Store
164
- - lib/db/migrate/20110711040135_create_achievements.rb
165
- - lib/db/migrate/20110712025245_create_completed_achievements.rb
166
- - lib/db/migrate/20110712033351_create_achievement_conditions.rb
167
- - lib/generators/.DS_Store
168
- - lib/generators/achievement_observer/achievement_observer_generator.rb
169
- - lib/generators/achievement_observer/templates/achievement_observer.rb
170
- - lib/generators/triumph/.DS_Store
171
- - lib/generators/triumph/triumph_generator.rb
120
+ - app/controllers/triumph/achievements_controller.rb
121
+ - app/models/triumph/achievement.rb
122
+ - app/models/triumph/achievement_condition.rb
123
+ - app/models/triumph/completed_achievement.rb
124
+ - app/views/triumph/achievements/_form.html.erb
125
+ - app/views/triumph/achievements/edit.html.erb
126
+ - app/views/triumph/achievements/index.html.erb
127
+ - app/views/triumph/achievements/new.html.erb
128
+ - app/views/triumph/achievements/show.html.erb
129
+ - config/routes.rb
130
+ - lib/rails/generators/achievement_observer/achievement_observer_generator.rb
131
+ - lib/rails/generators/achievement_observer/templates/achievement_observer.rb
132
+ - lib/rails/generators/triumph/templates/20110711040135_create_achievements.rb
133
+ - lib/rails/generators/triumph/templates/20110712025245_create_completed_achievements.rb
134
+ - lib/rails/generators/triumph/templates/20110712033351_create_achievement_conditions.rb
135
+ - lib/rails/generators/triumph/templates/initializer.rb
136
+ - lib/rails/generators/triumph/triumph_generator.rb
137
+ - lib/rails/railties/tasks.rake
172
138
  - lib/triumph.rb
139
+ - lib/triumph/achievements.rb
140
+ - lib/triumph/engine.rb
173
141
  - rails/init.rb
174
142
  - test/helper.rb
175
143
  - test/test_triumph.rb
176
144
  - triumph.gemspec
145
+ has_rdoc: true
177
146
  homepage: http://github.com/adambray/triumph
178
147
  licenses:
179
148
  - MIT
@@ -187,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
156
  requirements:
188
157
  - - ">="
189
158
  - !ruby/object:Gem::Version
190
- hash: 3
159
+ hash: -1814513464805021718
191
160
  segments:
192
161
  - 0
193
162
  version: "0"
@@ -196,14 +165,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
165
  requirements:
197
166
  - - ">="
198
167
  - !ruby/object:Gem::Version
199
- hash: 3
200
- segments:
201
- - 0
202
168
  version: "0"
203
169
  requirements: []
204
170
 
205
171
  rubyforge_project:
206
- rubygems_version: 1.8.5
172
+ rubygems_version: 1.6.2
207
173
  signing_key:
208
174
  specification_version: 3
209
175
  summary: Trimuph helps you add achievements to your app
data/lib/.DS_Store DELETED
Binary file
data/lib/achievements.rb DELETED
@@ -1,23 +0,0 @@
1
- module Achievements
2
-
3
- def self.included(base)
4
- base.class_eval do
5
- #for some reason, this is not adding the proper association to the users model
6
- # when I do 'include Achievemnts', though everything else works as expected.
7
- # For now, I'm manually adding the 'has_many :completed_achievements' to the user
8
- # model in my sample app, but I need to figure this out.
9
- has_many :completed_achievements
10
- end
11
- end
12
-
13
- def grant_achievement(achievement)
14
- unless self.has_achievement?(achievement)
15
- CompletedAchievement.create!(:achievement_id => achievement.id, :user_id => self.id)
16
- end
17
- end
18
-
19
- def has_achievement?(achievement)
20
- CompletedAchievement.where("achievement_id = ?", achievement.id).count >= 1
21
- end
22
-
23
- end
File without changes
@@ -1,19 +0,0 @@
1
- class Achievement < ActiveRecord::Base
2
-
3
- has_many :completed_achievements
4
-
5
- def self.check_achievements_for(object)
6
-
7
- user = object.user
8
- object_class = object.class.to_s.underscore.downcase
9
- potential_achievements = Achievement.where("observe_class = ?", object_class)
10
-
11
- potential_achievements.each do |achievement|
12
- total = user.send(object.class.to_s.pluralize.underscore.to_sym).where(achievement.conditions).count
13
- if total >= achievement.quantity
14
- user.grant_achievement(achievement)
15
- end
16
- end
17
- end
18
-
19
- end
@@ -1,6 +0,0 @@
1
- class CompletedAchievement < ActiveRecord::Base
2
-
3
- belongs_to :user
4
- belongs_to :achievement
5
-
6
- end
File without changes
File without changes
data/lib/db/.DS_Store DELETED
Binary file
Binary file
Binary file
@@ -1,12 +0,0 @@
1
- require 'rails/generators'
2
-
3
- class TriumphGenerator < Rails::Generators::Base
4
-
5
- source_root File.expand_path('../../../../lib/db/migrate', __FILE__)
6
-
7
- def generate
8
- copy_file "20110711040135_create_achievements.rb", "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_create_achievements.rb"
9
- copy_file "20110712025245_create_completed_achievements.rb", "db/migrate/#{(Time.now + 1.minute).utc.strftime("%Y%m%d%H%M%S")}_create_completed_achievements.rb"
10
- copy_file "20110712033351_create_achievement_conditions.rb", "db/migrate/#{(Time.now + 2.minutes).utc.strftime("%Y%m%d%H%M%S")}_create_achievement_conditions.rb"
11
- end
12
- end