mambanation 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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
+ ]