gioco 0.1.0 → 0.1.7

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.
@@ -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.