gioco 0.0.0 → 0.1.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.
- data/lib/generators/gioco/setup_generator.rb +130 -0
- data/lib/generators/templates/gioco.rb +2 -0
- data/lib/gioco.rb +65 -0
- metadata +9 -21
@@ -0,0 +1,130 @@
|
|
1
|
+
module Gioco
|
2
|
+
|
3
|
+
class SetupGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path("../../templates", __FILE__)
|
5
|
+
|
6
|
+
desc "Setup Gioco for some resource"
|
7
|
+
class_option :points, :type => :boolean, :default => false, :desc => "Setup gioco with points-system based"
|
8
|
+
|
9
|
+
def generate_models
|
10
|
+
generate("model", "badge name:string #{(options[:points]) ? "points:integer" : ""} default:boolean")
|
11
|
+
generate("model", "level badge_id:integer #{file_name}_id:integer")
|
12
|
+
generate("migration", "add_points_to_#{file_name.pluralize} points:integer") if options[:points]
|
13
|
+
end
|
14
|
+
|
15
|
+
def creating_templates
|
16
|
+
@points = ( options[:points] ) ? true : false
|
17
|
+
template "gioco.rb", "config/initializers/gioco.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
def setup_relations
|
21
|
+
add_relationship( "badge", "levels", "has_many", false, "destroy" )
|
22
|
+
add_relationship( "badge", file_name.pluralize, "has_many", "levels" )
|
23
|
+
|
24
|
+
add_relationship( file_name, "levels", "has_many" )
|
25
|
+
add_relationship( file_name, "badges", "has_many", "levels" )
|
26
|
+
|
27
|
+
add_relationship( "level", file_name, "belongs_to" )
|
28
|
+
add_relationship( "level", "badge", "belongs_to" )
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_rakes
|
32
|
+
rakefile("gioco.rake") do
|
33
|
+
<<-EOS
|
34
|
+
# -*- encoding: utf-8 -*-
|
35
|
+
namespace :gioco do
|
36
|
+
|
37
|
+
desc "Used to add a new badge at Gioco scheme"
|
38
|
+
|
39
|
+
task :add_badge, [:name, #{(options[:points]) ? ":points, " : ""}:default] => :environment do |t, args|
|
40
|
+
args.default = ( args.default ) ? eval(args.default) : false
|
41
|
+
|
42
|
+
if !args.name #{(options[:points]) ? "&& !args.points" : ""}
|
43
|
+
puts "There are missing some arguments"
|
44
|
+
|
45
|
+
else
|
46
|
+
badge = Badge.create({
|
47
|
+
:name => args.name,
|
48
|
+
#{(options[:points]) ? ":points => args.points," : ""}
|
49
|
+
:default => args.default
|
50
|
+
})
|
51
|
+
|
52
|
+
if args.default
|
53
|
+
resources = #{file_name.capitalize}.find(:all)
|
54
|
+
resources.each do |r|
|
55
|
+
r.badges << badge
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "Used to remove an old badge at Gioco scheme"
|
64
|
+
|
65
|
+
task :remove_badge, [:name] => :environment do |t, args|
|
66
|
+
|
67
|
+
if !args.name
|
68
|
+
puts "There are missing some arguments"
|
69
|
+
|
70
|
+
else
|
71
|
+
badge = Badge.find_by_name( args.name )
|
72
|
+
badge.destroy
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
EOS
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def migrating
|
83
|
+
puts <<-EOS
|
84
|
+
|
85
|
+
=======================================
|
86
|
+
> Now is time to run rake db:migrate
|
87
|
+
=======================================
|
88
|
+
|
89
|
+
EOS
|
90
|
+
rake("db:migrate")
|
91
|
+
end
|
92
|
+
|
93
|
+
def instructions
|
94
|
+
puts <<-EOS
|
95
|
+
|
96
|
+
=======================================================
|
97
|
+
|
98
|
+
Gioco successfully installed.
|
99
|
+
|
100
|
+
Now you are able to add Badges using:
|
101
|
+
rake gioco:add_badge[BADGE_NAME,POINTS,DEFAULT]
|
102
|
+
|
103
|
+
If you installed gioco without points option:
|
104
|
+
rake gioco:add_badge[BADGE_NAME,DEFAULT]
|
105
|
+
|
106
|
+
And to remove Badges using:
|
107
|
+
rake gioco:remove_badge[BADGE_NAME]
|
108
|
+
|
109
|
+
For usage and more infomation go to the documentation:
|
110
|
+
http://joaomdmoura.github.com/gioco/
|
111
|
+
|
112
|
+
=======================================================
|
113
|
+
|
114
|
+
EOS
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
def add_relationship ( model, related, relation, through = false, dependent = false )
|
120
|
+
gsub_file "app/models/#{model}.rb", get_class_header(model), "#{get_class_header(model)}
|
121
|
+
#{relation} :#{related} #{(through) ? ", :through => :#{through}" : ""} #{(dependent) ? ", :dependent => :#{dependent}" : ""}"
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_class_header ( model_name )
|
125
|
+
"class #{model_name.capitalize} < ActiveRecord::Base"
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
data/lib/gioco.rb
CHANGED
@@ -1,3 +1,68 @@
|
|
1
1
|
module Gioco
|
2
2
|
|
3
|
+
class Core
|
4
|
+
|
5
|
+
def self.get_resource( rid )
|
6
|
+
eval(Gioco::Resources::NAME.capitalize).find( rid )
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.get_badge( bid )
|
10
|
+
Badge.find( bid )
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.get_level( rid, bid )
|
14
|
+
Level.where( "#{Gioco::Resources::NAME}_id = #{rid} AND badge_id = #{bid}" )[0]
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class Resources < Core
|
20
|
+
|
21
|
+
def self.change_points( rid, points, resource = false )
|
22
|
+
resource = get_resource( rid ) if !resource
|
23
|
+
new_pontuation = resource.points.to_i + points
|
24
|
+
old_pontuation = resource.points.to_i
|
25
|
+
status = nil
|
26
|
+
|
27
|
+
resource.update_attributes( {:points => new_pontuation } )
|
28
|
+
|
29
|
+
if old_pontuation < new_pontuation
|
30
|
+
|
31
|
+
related_badges = Badge.where( "points <= #{new_pontuation}" )
|
32
|
+
|
33
|
+
related_badges.each do |badge|
|
34
|
+
Badges.add( nil, nil, resource, badge )
|
35
|
+
end
|
36
|
+
|
37
|
+
else
|
38
|
+
|
39
|
+
related_badges = Badge.where( "points > #{new_pontuation} AND points <= #{old_pontuation}" )
|
40
|
+
|
41
|
+
related_badges.each do |badge|
|
42
|
+
Badges.remove( resource.id, badge.id )
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
class Badges < Core
|
52
|
+
|
53
|
+
def self.add( rid, badge_id, resource = false, badge = false )
|
54
|
+
resource = get_resource( rid ) if !resource
|
55
|
+
badge = get_badge( badge_id ) if !badge
|
56
|
+
|
57
|
+
resource.update_attributes( {:points => badge.points } ) if Gioco::Resources::POINTS && badge.points > resource.points.to_i
|
58
|
+
resource.badges << badge if !resource.badges.include?(badge)
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.remove( rid, badge_id, resource = false, badge = false )
|
62
|
+
level = get_level( rid, badge_id )
|
63
|
+
level.destroy
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
3
68
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gioco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,31 +9,19 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :development
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
30
|
-
description: A gamification gem to Ruby applications.
|
12
|
+
date: 2012-04-25 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Gioco is a easy to implement gamification gem based on plug and play
|
15
|
+
concept.Doesn't matter if you already have a full and functional database, Gioco
|
16
|
+
will smoothly integrateeverything and provide all methods that you might need.
|
31
17
|
email: joaomdmoura@gmail.com
|
32
18
|
executables: []
|
33
19
|
extensions: []
|
34
20
|
extra_rdoc_files: []
|
35
21
|
files:
|
36
22
|
- lib/gioco.rb
|
23
|
+
- lib/generators/gioco/setup_generator.rb
|
24
|
+
- lib/generators/templates/gioco.rb
|
37
25
|
- init.rb
|
38
26
|
homepage: http://joaomdmoura.github.com/gioco/
|
39
27
|
licenses: []
|
@@ -58,5 +46,5 @@ rubyforge_project:
|
|
58
46
|
rubygems_version: 1.8.18
|
59
47
|
signing_key:
|
60
48
|
specification_version: 3
|
61
|
-
summary: A gamification gem to Ruby applications.
|
49
|
+
summary: A gamification gem to Ruby on Rails applications.
|
62
50
|
test_files: []
|