triumph 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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