mambanation 0.0.3 → 0.0.5

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/Rakefile CHANGED
@@ -1,50 +1,35 @@
1
- require 'rake'
2
- require 'jeweler'
3
- require 'rake/testtask'
4
- require 'rcov/rcovtask'
5
-
6
- begin
7
- Jeweler::Tasks.new do |gem|
8
- gem.name = "mambanation-wrapper"
9
- gem.summary = "wrapper for mambanation-api"
10
- gem.email = "jeremy.vandewyngaert@mimesis-republic.com"
11
- gem.homepage = "http://mercurial-paris.mimesis-republic.net/hg/mambanation"
12
- gem.authors = ["Jeremy Van de Wyngaert"]
13
- gem.files = FileList["[A-Z]*", "{lib,test}/**/*"]
14
-
15
- gem.add_dependency("oauth", "~> 0.3.6")
16
- gem.add_dependency("hashie", "~> 0.2.0")
17
- gem.add_dependency("httparty", "~> 0.5.2")
18
- gem.add_dependency("json", "~> 1.4.3")
19
-
20
- gem.add_development_dependency("shoulda", "~> 2.10.1")
21
- gem.add_development_dependency("mocha", "~> 0.9.4")
22
- gem.add_development_dependency("fakeweb", "~> 1.2.5")
23
- end
24
-
25
- rescue LoadError
26
- puts "Jeweler not available. Install it with: gem install jeweler"
1
+ require "rake"
2
+ require "jeweler"
3
+ require "yaml"
4
+
5
+ Jeweler::Tasks.new do |gem|
6
+ gem.name = "mambanation"
7
+ gem.summary = %Q{wrapper for mambanation-api}
8
+ gem.email = "jeremy.vandewyngaert@mimesis-republic.com"
9
+ gem.homepage = "https://github.com/mimesis/mambanation-wrapper"
10
+ gem.authors = ["Jeremy Van de Wyngaert"]
11
+ gem.files = FileList["[A-Z]*", "{lib,test}/**/*"]
12
+
13
+ gem.add_dependency("hashie", "~> 0.2.0")
14
+ gem.add_dependency("httparty", "~> 0.5.0")
15
+ gem.add_dependency("yajl-ruby", "~> 0.7.0")
16
+
17
+ gem.add_development_dependency("shoulda", "~> 2.10.0")
18
+ gem.add_development_dependency("jnunemaker-matchy", "~> 0.4.0")
19
+ gem.add_development_dependency("mocha", "~> 0.9.0")
20
+ gem.add_development_dependency("fakeweb", "~> 1.2.0")
21
+ gem.add_development_dependency("redgreen", "~> 1.2.2")
27
22
  end
28
23
 
29
- Rake::TestTask.new do |t|
30
- t.libs << 'lib'
31
- t.pattern = 'test/**/*_test.rb'
32
- t.verbose = false
33
- end
34
-
35
- begin
36
- require 'yard'
37
- YARD::Rake::YardocTask.new(:yardoc)
38
- rescue LoadError
39
- task :yardoc do
40
- abort "YARD is not available. In order to run yard, you must: sudo gem install yard"
41
- end
42
- end
24
+ Jeweler::GemcutterTasks.new
43
25
 
44
- Rcov::RcovTask.new do |t|
45
- t.libs << "test"
46
- t.test_files = FileList['test/*_test.rb']
47
- t.verbose = true
26
+ require "rake/testtask"
27
+ Rake::TestTask.new(:test) do |test|
28
+ test.libs << "test"
29
+ test.ruby_opts << "-rubygems"
30
+ test.pattern = "test/**/*_test.rb"
31
+ test.verbose = true
48
32
  end
49
33
 
50
- task :default => :rcov
34
+ task :default => :test
35
+ task :test => :check_dependencies
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 0
4
+ :patch: 5
data/lib/mambanation.rb CHANGED
@@ -28,8 +28,8 @@ module MambaNation
28
28
  class NotFound < StandardError; end
29
29
 
30
30
  # Options: user_id, facebook_id
31
- def self.user(query = {})
32
- perform_get("/users/show.json", :query => query)
31
+ def self.user(*user)
32
+ perform_get("/users/show.json", :body => { :user => user })
33
33
  end
34
34
 
35
35
  # Options: user_id, facebook_id
@@ -1,54 +1,148 @@
1
1
  module MambaNation
2
2
  class Base
3
3
  extend Forwardable
4
-
4
+
5
5
  def_delegators :client, :get, :post, :put, :delete
6
-
6
+
7
7
  attr_reader :client
8
-
8
+
9
9
  def initialize(client)
10
10
  @client = client
11
11
  end
12
-
13
- def create_user(query)
14
- perform_post("/users", :body => query)
12
+
13
+ #
14
+ # Users
15
+ #
16
+ def create_user(user)
17
+ perform_post("/users", :body => { :user => user })
15
18
  end
16
19
 
17
20
  def user_by_facebook_id(facebook_id, query = {})
18
- perform_get("/users/find_by?facebook_id=#{facebook_id}", :query => query)
21
+ perform_get("/users/find_by?facebook_id=#{facebook_id.to_i}", :query => query)
22
+ end
23
+
24
+ def user_by_email(email, query = {})
25
+ perform_get("/users/find_by?facebook_id=#{email}", :query => query)
19
26
  end
20
27
 
21
28
  # Options: user_id, facebook_id
22
29
  def user(id, query = {})
23
- perform_get("/users/#{id}.json", :query => query)
30
+ perform_get("/users/#{id.to_i}.json", :query => query)
24
31
  end
32
+ alias_method :user_by_id, :user
25
33
 
26
34
  def user_set_websession(id, credentials)
27
- perform_post("/users/#{id}/update_websession", :body => { :user_credentials => credentials })
35
+ perform_post("/users/#{id.to_i}/update_websession", :body => { :user_credentials => credentials })
28
36
  end
29
37
 
30
- # Options: facet_id
31
- def facet(id)
32
- perform_get("/facets/#{id}.json")
38
+ #
39
+ # User actions
40
+ #
41
+ def user_last_login(id)
42
+ perform_get("/users/#{id.to_i}/last_login.json")
33
43
  end
34
44
 
35
- # Options: user_id
36
- def user_facets(id, query = {})
37
- perform_get("/users/#{id}/facets.json", :query => query)
45
+ def user_chats(id, query = {})
46
+ perform_get("/users/#{id.to_i}/chats.json", :query => query)
47
+ end
48
+
49
+ def user_coms(id, query = {})
50
+ perform_get("/users/#{id.to_i}/coms.json", :query => query)
51
+ end
52
+
53
+ def user_actions(id, query = {})
54
+ perform_get("/users/#{id.to_i}/actions.json", :query => query)
55
+ end
56
+
57
+ def activate_user(id)
58
+ perform_put("/users/#{id.to_i}/activate")
38
59
  end
39
-
60
+
61
+ def anonymate_user(id)
62
+ perform_put("/users/#{id.to_i}/anonymate")
63
+ end
64
+
65
+ def suspend_user(id)
66
+ perform_put("/users/#{id.to_i}/suspend")
67
+ end
68
+
40
69
  # Options: user_id, :limit
41
70
  def user_media(id, query = {})
42
- perform_get("/users/#{id}/media.json", :query => query)
71
+ perform_get("/users/#{id.to_i}/media.json", :query => query)
43
72
  end
44
-
73
+
45
74
  # Options: user_id, facebook_id
46
75
  def user_friends(id, query = {})
47
- perform_get("/users/#{id}/friends.json", :query => query)
76
+ perform_get("/users/#{id.to_i}/friends.json", :query => query)
77
+ end
78
+
79
+ #
80
+ # Facets
81
+ #
82
+ # Options: facet_id
83
+ def facet(id)
84
+ perform_get("/facets/#{id.to_i}.json")
85
+ end
86
+
87
+ # Options: user_id
88
+ def user_facets(id, query = {})
89
+ perform_get("/users/#{id.to_i}/facets.json", :query => query)
90
+ end
91
+
92
+ #
93
+ # Badges
94
+ #
95
+ def badges
96
+ perform_get("/badges.json")
97
+ end
98
+
99
+ def user_badges(id, query = {})
100
+ perform_get("/users/#{id.to_i}/badges.json", :query => query)
101
+ end
102
+
103
+ #
104
+ # Mission Statuses
105
+ #
106
+ def mission_statuses(id, query = {})
107
+ perform_get("/users/#{id.to_i}/mission_statuses.json", :query => query)
108
+ end
109
+
110
+ def missions_family_statuses(id, query = {})
111
+ perform_get("/users/#{id.to_i}/missions_family_statuses.json", :query => query)
112
+ end
113
+
114
+ def mission_complete!(id, mission_id)
115
+ perform_put("/users/#{id.to_i}/mission_statuses/#{mission_id.to_i}/complete")
116
+ end
117
+
118
+ def mission_start!(id, mission_id)
119
+ perform_put("/users/#{id.to_i}/mission_statuses/#{mission_id.to_i}/start")
120
+ end
121
+
122
+ #
123
+ # Posts
124
+ #
125
+ def user_posts(id)
126
+ perform_get("/users/#{id.to_i}/posts.json")
127
+ end
128
+
129
+ def publish_post(post)
130
+ perform_post("/posts/publish", :body => { :post => post })
48
131
  end
49
-
132
+
133
+ def post(id)
134
+ perform_get("/posts/#{id.to_i}.json")
135
+ end
136
+
137
+ #
138
+ # Roles
139
+ #
140
+ def user_roles(id)
141
+ perform_get("/users/#{id.to_i}/roles.json")
142
+ end
143
+
50
144
  protected
51
-
145
+
52
146
  def self.mime_type(file)
53
147
  case
54
148
  when file =~ /\.jpg/ then 'image/jpg'
@@ -57,11 +151,11 @@ module MambaNation
57
151
  else 'application/octet-stream'
58
152
  end
59
153
  end
60
-
154
+
61
155
  def mime_type(f) self.class.mime_type(f) end
62
-
156
+
63
157
  CRLF = "\r\n"
64
-
158
+
65
159
  def self.build_multipart_bodies(parts)
66
160
  boundary = Time.now.to_i.to_s(16)
67
161
  body = ""
@@ -83,26 +177,26 @@ module MambaNation
83
177
  :headers => {"Content-Type" => "multipart/form-data; boundary=#{boundary}"}
84
178
  }
85
179
  end
86
-
180
+
87
181
  def build_multipart_bodies(parts) self.class.build_multipart_bodies(parts) end
88
-
182
+
89
183
  private
90
-
184
+
91
185
  def perform_get(path, options={})
92
186
  MambaNation::Request.get(self, path, options)
93
187
  end
94
-
188
+
95
189
  def perform_post(path, options={})
96
190
  MambaNation::Request.post(self, path, options)
97
191
  end
98
-
192
+
99
193
  def perform_put(path, options={})
100
194
  MambaNation::Request.put(self, path, options)
101
195
  end
102
-
196
+
103
197
  def perform_delete(path, options={})
104
198
  MambaNation::Request.delete(self, path, options)
105
199
  end
106
-
200
+
107
201
  end
108
202
  end
@@ -10,7 +10,16 @@ module MambaNation
10
10
  @username, @password = username, password
11
11
  @options = {:ssl => false}.merge(options)
12
12
  options[:api_endpoint] ||= "api.mambanation.com"
13
- self.class.base_uri "http#{'s' if options[:ssl]}://#{options[:api_endpoint]}"
13
+
14
+ if options[:api_version] == false
15
+ version_path = 2
16
+ else
17
+ options[:api_version] ||= API_VERSION
18
+ version_path = "#{options[:api_version]}"
19
+ end
20
+
21
+ self.class.base_uri "http#{'s' if options[:ssl]}://#{options[:api_endpoint]}/v#{version_path}"
22
+ self.class.default_timeout options[:timeout] if options[:timeout]
14
23
  end
15
24
 
16
25
  def get(uri, headers={})
@@ -4,20 +4,26 @@ module MambaNation
4
4
 
5
5
  def_delegators :access_token, :get, :post, :put, :delete
6
6
 
7
- attr_reader :ctoken, :csecret, :consumer_options
7
+ attr_reader :ctoken, :csecret, :consumer_options, :api_endpoint, :signing_endpoint
8
8
 
9
9
  # Options
10
- # :sign_in => true to just sign in with mambanation instead of doing oauth authorization
11
- # (http://apiwiki.mambanation.com/Sign-in-with-MambaNation)
10
+ # :sign_in => true to just sign in with twitter instead of doing oauth authorization
11
+ # (http://apiwiki.twitter.com/Sign-in-with-Twitter)
12
12
  def initialize(ctoken, csecret, options={})
13
13
  @ctoken, @csecret, @consumer_options = ctoken, csecret, {}
14
+ @api_endpoint = options[:api_endpoint] || 'http://api.twitter.com'
15
+ @signing_endpoint = options[:signing_endpoint] || 'http://api.twitter.com'
14
16
  if options[:sign_in]
15
17
  @consumer_options[:authorize_path] = '/oauth/authenticate'
16
18
  end
17
19
  end
18
20
 
19
21
  def consumer
20
- @consumer ||= ::OAuth::Consumer.new(@ctoken, @csecret, {:site => 'http://api.mambanation.com'}.merge(consumer_options))
22
+ @consumer ||= ::OAuth::Consumer.new(@ctoken, @csecret, {:site => api_endpoint}.merge(consumer_options))
23
+ end
24
+
25
+ def signing_consumer
26
+ @signing_consumer ||= ::OAuth::Consumer.new(@ctoken, @csecret, {:site => signing_endpoint, :request_endpoint => api_endpoint }.merge(consumer_options))
21
27
  end
22
28
 
23
29
  def set_callback_url(url)
@@ -27,21 +33,21 @@ module MambaNation
27
33
 
28
34
  # Note: If using oauth with a web app, be sure to provide :oauth_callback.
29
35
  # Options:
30
- # :oauth_callback => String, url that mambanation should redirect to
36
+ # :oauth_callback => String, url that twitter should redirect to
31
37
  def request_token(options={})
32
- @request_token ||= consumer.get_request_token(options)
38
+ @request_token ||= signing_consumer.get_request_token(options)
33
39
  end
34
40
 
35
41
  # For web apps use params[:oauth_verifier], for desktop apps,
36
- # use the verifier is the pin that mambanation gives users.
42
+ # use the verifier is the pin that twitter gives users.
37
43
  def authorize_from_request(rtoken, rsecret, verifier_or_pin)
38
- request_token = ::OAuth::RequestToken.new(consumer, rtoken, rsecret)
44
+ request_token = ::OAuth::RequestToken.new(signing_consumer, rtoken, rsecret)
39
45
  access_token = request_token.get_access_token(:oauth_verifier => verifier_or_pin)
40
46
  @atoken, @asecret = access_token.token, access_token.secret
41
47
  end
42
48
 
43
49
  def access_token
44
- @access_token ||= ::OAuth::AccessToken.new(consumer, @atoken, @asecret)
50
+ @access_token ||= ::OAuth::AccessToken.new(signing_consumer, @atoken, @asecret)
45
51
  end
46
52
 
47
53
  def authorize_from_access(atoken, asecret)
@@ -3,15 +3,11 @@ module MambaNation
3
3
  extend Forwardable
4
4
 
5
5
  def self.get(client, path, options={})
6
- a = new(client, :get, path, options)
7
- # RAILS_DEFAULT_LOGGER.debug { "request: #{a.inspect}" }
8
- a.perform
6
+ new(client, :get, path, options).perform
9
7
  end
10
8
 
11
- def self.post(client, path, options={})
12
- a = new(client, :post, path, options)
13
- # RAILS_DEFAULT_LOGGER.debug { "request: #{a.inspect}" }
14
- a.perform
9
+ def self.post(client, path, options={})
10
+ new(client, :post, path, options).perform
15
11
  end
16
12
 
17
13
  def self.put(client, path, options={})
@@ -43,6 +39,7 @@ module MambaNation
43
39
  end
44
40
 
45
41
  def perform
42
+ puts "\nuri: #{uri}\noptions[:body]: #{options[:body]}\noptions[:headers]: #{options[:headers]}"
46
43
  MambaNation.make_friendly(send("perform_#{method}"))
47
44
  end
48
45
 
@@ -0,0 +1,12 @@
1
+ [{
2
+ created_at: "1274275491"
3
+ reward_coefficient: "1"
4
+ application_id: "1"
5
+ name: "publish_post"
6
+ },
7
+ {
8
+ created_at: "1274275499"
9
+ reward_coefficient: "1"
10
+ application_id: "1"
11
+ name: "publish_post"
12
+ }]
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "id" : 1
4
+ "name" : "Explorer"
5
+ "image" : "http://my.server.com/explorer.jpg"
6
+ },
7
+ {
8
+ "id" : 2
9
+ "name" : "Firefox"
10
+ "image" : "http://my.server.com/firefox.jpg"
11
+ },
12
+ ]