gioco 0.1.0 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,130 +1,132 @@
1
1
  module Gioco
2
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
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
34
  # -*- encoding: utf-8 -*-
35
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
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
+ #{(options[:points]) ? "r.points = args.points" : ""}
56
+ r.badges << badge
57
+ r.save
58
+ end
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ desc "Used to remove an old badge at Gioco scheme"
66
+
67
+ task :remove_badge, [:name] => :environment do |t, args|
68
+
69
+ if !args.name
70
+ puts "There are missing some arguments"
71
+
72
+ else
73
+ badge = Badge.find_by_name( args.name )
74
+ badge.destroy
75
+ end
76
+
77
+ end
76
78
 
77
79
  end
78
- EOS
79
- end
80
- end
80
+ EOS
81
+ end
82
+ end
81
83
 
82
- def migrating
83
- puts <<-EOS
84
+ def migrating
85
+ puts <<-EOS
84
86
 
85
87
  =======================================
86
88
  > Now is time to run rake db:migrate
87
89
  =======================================
88
90
 
89
- EOS
90
- rake("db:migrate")
91
- end
91
+ EOS
92
+ rake("db:migrate")
93
+ end
92
94
 
93
- def instructions
94
- puts <<-EOS
95
+ def instructions
96
+ puts <<-EOS
95
97
 
96
98
  =======================================================
97
99
 
98
100
  Gioco successfully installed.
99
101
 
100
102
  Now you are able to add Badges using:
101
- rake gioco:add_badge[BADGE_NAME,POINTS,DEFAULT]
103
+ rake gioco:add_badge[BADGE_NAME,POINTS,DEFAULT]
102
104
 
103
105
  If you installed gioco without points option:
104
- rake gioco:add_badge[BADGE_NAME,DEFAULT]
106
+ rake gioco:add_badge[BADGE_NAME,DEFAULT]
105
107
 
106
108
  And to remove Badges using:
107
- rake gioco:remove_badge[BADGE_NAME]
109
+ rake gioco:remove_badge[BADGE_NAME]
108
110
 
109
111
  For usage and more infomation go to the documentation:
110
112
  http://joaomdmoura.github.com/gioco/
111
113
 
112
114
  =======================================================
113
115
 
114
- EOS
115
- end
116
-
117
- private
116
+ EOS
117
+ end
118
+
119
+ private
118
120
 
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
121
+ def add_relationship ( model, related, relation, through = false, dependent = false )
122
+ gsub_file "app/models/#{model}.rb", get_class_header(model), "#{get_class_header(model)}
123
+ #{relation} :#{related} #{(through) ? ", :through => :#{through}" : ""} #{(dependent) ? ", :dependent => :#{dependent}" : ""}"
124
+ end
123
125
 
124
- def get_class_header ( model_name )
125
- "class #{model_name.capitalize} < ActiveRecord::Base"
126
- end
126
+ def get_class_header ( model_name )
127
+ "class #{model_name.capitalize} < ActiveRecord::Base"
128
+ end
127
129
 
128
- end
130
+ end
129
131
 
130
132
  end
@@ -1,2 +1,2 @@
1
- Gioco::Resources::NAME = "<%= file_name %>"
2
- Gioco::Resources::POINTS = <%= @points %>
1
+ Gioco::Core::RESOURCE_NAME = "<%= file_name %>"
2
+ Gioco::Core::POINTS = <%= @points %>
data/lib/gioco.rb CHANGED
@@ -1,68 +1,112 @@
1
1
  module Gioco
2
2
 
3
- class Core
3
+ class Core
4
4
 
5
- def self.get_resource( rid )
6
- eval(Gioco::Resources::NAME.capitalize).find( rid )
7
- end
5
+ def self.get_resource( rid )
6
+ eval(RESOURCE_NAME.capitalize).find( rid )
7
+ end
8
8
 
9
- def self.get_badge( bid )
10
- Badge.find( bid )
11
- end
9
+ def self.get_badge( bid )
10
+ Badge.find( bid )
11
+ end
12
12
 
13
- def self.get_level( rid, bid )
14
- Level.where( "#{Gioco::Resources::NAME}_id = #{rid} AND badge_id = #{bid}" )[0]
15
- end
13
+ def self.ranking
16
14
 
17
- end
15
+ if POINTS
18
16
 
19
- class Resources < Core
17
+ eval(RESOURCE_NAME.capitalize).order( "points DESC" )
20
18
 
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
19
+ else
26
20
 
27
- resource.update_attributes( {:points => new_pontuation } )
21
+ eval(RESOURCE_NAME.capitalize).all(
22
+ :select => "#{eval(RESOURCE_NAME.capitalize).table_name}.*,
23
+ COUNT(levels.badge_id) AS number_of_levels",
24
+ :joins => :levels,
25
+ :group => "#{RESOURCE_NAME}_id",
26
+ :order => "number_of_levels DESC")
28
27
 
29
- if old_pontuation < new_pontuation
28
+ end
30
29
 
31
- related_badges = Badge.where( "points <= #{new_pontuation}" )
30
+ end
32
31
 
33
- related_badges.each do |badge|
34
- Badges.add( nil, nil, resource, badge )
35
- end
36
-
37
- else
32
+ def self.sync_resource_by_points( resource, points )
38
33
 
39
- related_badges = Badge.where( "points > #{new_pontuation} AND points <= #{old_pontuation}" )
34
+ old_pontuation = resource.points.to_i
40
35
 
41
- related_badges.each do |badge|
42
- Badges.remove( resource.id, badge.id )
43
- end
36
+ related_badges = Badge.where( ( old_pontuation < points ) ? "points <= #{points}" : "points > #{points} AND points <= #{old_pontuation}" )
44
37
 
45
- end
38
+ Badge.transaction do
46
39
 
47
- end
40
+ resource.update_attributes( {:points => points } )
48
41
 
49
- end
42
+ related_badges.each do |badge|
50
43
 
51
- class Badges < Core
44
+ if old_pontuation < points
52
45
 
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
46
+ resource.badges << badge if !resource.badges.include?(badge)
56
47
 
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
48
+ elsif old_pontuation > points
60
49
 
61
- def self.remove( rid, badge_id, resource = false, badge = false )
62
- level = get_level( rid, badge_id )
63
- level.destroy
64
- end
50
+ resource.levels.where( :badge_id => badge.id )[0].destroy
65
51
 
66
- end
52
+ end
53
+
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+
62
+ class Resources < Core
63
+
64
+ def self.change_points( rid, points, resource = false )
65
+
66
+ resource = get_resource( rid ) if !resource
67
+ new_pontuation = resource.points.to_i + points
68
+
69
+ sync_resource_by_points( resource, new_pontuation )
70
+
71
+ end
72
+
73
+ end
74
+
75
+ class Badges < Core
76
+
77
+ def self.add( rid, badge_id, resource = false, badge = false )
78
+ resource = get_resource( rid ) if !resource
79
+ badge = get_badge( badge_id ) if !badge
80
+
81
+ if POINTS && !resource.badges.include?(badge)
82
+
83
+ sync_resource_by_points( resource, badge.points )
84
+
85
+ elsif !resource.badges.include?(badge)
86
+
87
+ resource.badges << badge
88
+
89
+ end
90
+
91
+ end
92
+
93
+ def self.remove( rid, badge_id, resource = false, badge = false )
94
+
95
+ resource = get_resource( rid ) if !resource
96
+ badge = get_badge( badge_id ) if !badge
97
+
98
+ if POINTS && resource.badges.include?(badge)
99
+
100
+ sync_resource_by_points( resource, Badge.where( "points < #{badge.points}" )[0].points )
101
+
102
+ elsif resource.badges.include?(badge)
103
+
104
+ resource.levels.where( :badge_id => badge.id )[0].destroy
105
+
106
+ end
107
+
108
+ end
109
+
110
+ end
67
111
 
68
112
  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.1.0
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,39 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-04-25 00:00:00.000000000Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: activerecord
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
14
46
  description: Gioco is a easy to implement gamification gem based on plug and play
15
47
  concept.Doesn't matter if you already have a full and functional database, Gioco
16
48
  will smoothly integrateeverything and provide all methods that you might need.