freelancer-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "freelancer", "0.1.1"
data/Gemfile.lock ADDED
@@ -0,0 +1,18 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ freelancer (0.1.1)
5
+ htmlentities (>= 4.2.1)
6
+ json_mapper (>= 0.2.1)
7
+ oauth (>= 0.4.0)
8
+ htmlentities (4.2.1)
9
+ json (1.4.6)
10
+ json_mapper (0.2.1)
11
+ json (>= 1.4.3)
12
+ oauth (0.4.2)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ freelancer (= 0.1.1)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Trond Arve Nordheim
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,52 @@
1
+ = Freelancer Rails API
2
+
3
+ Copyright (C) 2010 Trond Arve Nordheim - {Binary Marbles}[http://www.binarymarbles.com/]
4
+
5
+ == NOTICE
6
+
7
+ This is a project under heavy development. The API is far from stable yet, and
8
+ the code is very unclean in some places. The API won't be considered stable
9
+ until all the full Freelancer.com APIs is implemented and have tests verifying
10
+ that they work like they should.
11
+
12
+ == Description
13
+
14
+ A Ruby gem for integrating the Freelancer.com API services into a Ruby on Rails application.
15
+
16
+ == Features
17
+
18
+ * oAuth authorization
19
+ * Per-environment configuration and sandboxing support, and support from setting API configuration from environment variables.
20
+
21
+ == Issues and missing features
22
+
23
+ * No tests yet.
24
+ * No elegant way of hooking into post-authorization-events to retrieve the access token and access secret for storing on the current users profile.
25
+ * No generators available.
26
+ * Lacks documentation.
27
+
28
+ == Documentation
29
+
30
+ * RDoc: http://rdoc.info/projects/tanordheim/freelancer-rails
31
+ * Usage: http://wiki.github.com/tanordheim/freelancer-rails
32
+ * Example app:
33
+
34
+ == Requirements
35
+
36
+ * {freelancer}[http://rubygems.org/gems/freelancer]
37
+
38
+ == Installation
39
+
40
+ $ gem install freelancer-rails
41
+
42
+ == Note on Patches/Pull Requests
43
+
44
+ * Fork the project.
45
+ * Make your feature addition or bug fix.
46
+ * Add tests for it. This is important so I don't break it in a future version unintentionally.
47
+ * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
48
+ * Send me a pull request. Bonus points for topic branches.
49
+
50
+ == License
51
+
52
+ Copyright (c) 2010 Trond Arve Nordheim. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,79 @@
1
+ require "rake"
2
+ require "bundler"
3
+ require "rake/testtask"
4
+ require "rake/rdoctask"
5
+
6
+ # Gemcutter/Jeweler configuration
7
+ # ----------------------------------------------------------------------------
8
+ begin
9
+
10
+ require "jeweler"
11
+
12
+ Jeweler::Tasks.new do |gem|
13
+
14
+ gem.name = "freelancer-rails"
15
+ gem.summary = "Freelancer.com API for Ruby on Rails"
16
+ gem.description = "Ruby on Rails support for the Freelancer.com Ruby gem"
17
+ gem.email = "tanordheim@gmail.com"
18
+ gem.homepage = "http://github.com/tanordheim/freelancer-rails"
19
+ gem.authors = [ "Trond Arve Nordheim" ]
20
+
21
+ gem.files = FileList["[A-Z]*", "{app,config,lib,rails}/**/*"]
22
+ gem.extra_rdoc_files = FileList["[A-Z]*"] - %w(Gemfile Rakefile)
23
+
24
+ gem.add_bundler_dependencies
25
+
26
+ end
27
+
28
+ Jeweler::GemcutterTasks.new
29
+
30
+ rescue LoadError
31
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
32
+ end
33
+
34
+ # Test setup
35
+ # ----------------------------------------------------------------------------
36
+ Rake::TestTask.new(:test) do |t|
37
+ t.libs << "lib" << "test"
38
+ t.ruby_opts << "-rubygems"
39
+ t.pattern = "test/**/*_test.rb"
40
+ t.verbose = true
41
+ end
42
+
43
+ # RDoc setup
44
+ # ----------------------------------------------------------------------------
45
+ Rake::RDocTask.new do |rdoc|
46
+
47
+ version = File.exists?("VERSION") ? File.read("VERSION") : ""
48
+
49
+ rdoc.rdoc_dir = "rdoc"
50
+ rdoc.title = "freelancer-rails #{version}"
51
+ rdoc.rdoc_files.include("README.rdoc")
52
+ rdoc.rdoc_files.include("lib/**/*.rb")
53
+
54
+ end
55
+
56
+ # Rcov setup
57
+ # ----------------------------------------------------------------------------
58
+ begin
59
+
60
+ require "rcov/rcovtask"
61
+
62
+ Rcov::RcovTask.new do |test|
63
+
64
+ test.libs << "test"
65
+ test.pattern = "test/**/*_test.rb"
66
+ test.verbose = true
67
+
68
+ end
69
+
70
+ rescue LoadError
71
+ task :rcov do
72
+ abort "Rcov is not available. In order to run rcov, you must: sudo gem install rcov"
73
+ end
74
+ end
75
+
76
+ # Task setups
77
+ # ----------------------------------------------------------------------------
78
+ task :test => :check_dependencies
79
+ task :default => :test
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,32 @@
1
+ class Freelancer::Rails::AuthorizationsController < ApplicationController
2
+
3
+ include Freelancer::Rails::Controllers::Helpers
4
+
5
+ def new
6
+ end
7
+
8
+ def create
9
+
10
+ freelancer_client.set_callback_url(freelancer_oauth_callback_url + "?")
11
+ session["freelancer_oauth_request_token"] = freelancer_client.request_token.token
12
+ session["freelancer_oauth_request_secret"] = freelancer_client.request_token.secret
13
+
14
+ authorize_url = freelancer_client.request_token.authorize_url
15
+ redirect_to authorize_url
16
+
17
+ end
18
+
19
+ def oauth_callback
20
+
21
+ request_token = session["freelancer_oauth_request_token"]
22
+ request_secret = session["freelancer_oauth_request_secret"]
23
+
24
+ freelancer_client.authorize_from_request(request_token, request_secret, params[:oauth_verifier])
25
+ session["freelancer_oauth_access_token"] = freelancer_client.access_token.token
26
+ session["freelancer_oauth_access_secret"] = freelancer_client.access_token.secret
27
+
28
+ redirect_to root_path
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,13 @@
1
+ <h1>Freelancer.com authorization required</h1>
2
+
3
+ <p>
4
+ The application needs to request authorization from Freelancer.com on your behalf to be able to make requests against the Freelancer.com API.
5
+ </p>
6
+
7
+ <p>
8
+ You will now be redirected to Freelancer.com and asked to authorize this application to access the site on your behalf.
9
+ </p>
10
+
11
+ <% form_tag freelancer_authorize_path do %>
12
+ <%= submit_tag "I understand, authorize this application" %>
13
+ <% end %>
@@ -0,0 +1,6 @@
1
+ # Pull in the Freelancer Ruby API
2
+ require "freelancer"
3
+
4
+ require "freelancer-rails/configuration"
5
+ require "freelancer-rails/routes"
6
+ require "freelancer-rails/controllers/helpers.rb"
@@ -0,0 +1,53 @@
1
+ module Freelancer
2
+ module Rails
3
+ class Configuration
4
+
5
+ class << self
6
+
7
+ def api_token
8
+ configuration["api_token"]
9
+ end
10
+
11
+ def api_secret
12
+ configuration["api_secret"]
13
+ end
14
+
15
+ def sandbox_mode?
16
+ configuration["sandbox_mode"] == true
17
+ end
18
+
19
+ private
20
+
21
+ def configuration_file
22
+ "#{RAILS_ROOT}/config/freelancer.yml"
23
+ end
24
+
25
+ # Load the system configuration. This will try to load from the configuration
26
+ # file located in config/freelancer.yml first and use the configuration for the
27
+ # current environment. If that file can't be found, it will use the environment
28
+ # variables "FREELANCER_API_TOKEN", "FREELANCER_API_SECRET" and "FREELANCER_SANDBOX_MODE"
29
+ # instead.
30
+ def load!
31
+
32
+ if File.exists?(configuration_file)
33
+ @configuration = YAML.load(ERB.new(File.read(configuration_file)).result)[RAILS_ENV]
34
+ else
35
+ @configuration = {
36
+ "api_token" => ENV["FREELANCER_API_TOKEN"],
37
+ "api_secret" => ENV["FREELANCER_API_SECRET"],
38
+ "sandbox_mode" => ENV["FREELANCER_SANDBOX_MODE"]
39
+ }
40
+ end
41
+
42
+ end
43
+
44
+ def configuration
45
+ load! unless defined?(@configuration)
46
+ @configuration
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,34 @@
1
+ module Freelancer
2
+ module Rails
3
+ module Controllers
4
+ module Helpers
5
+
6
+ # Returns the current instance of the Freelancer Client
7
+ def freelancer_client
8
+ @freelancer_client ||= Freelancer::Client.new(Freelancer::Rails::Configuration.api_token, Freelancer::Rails::Configuration.api_secret, :sandbox => Freelancer::Rails::Configuration.sandbox_mode?)
9
+ end
10
+
11
+ # Returns true if the current user session contains an access token
12
+ def freelancer_access_token?
13
+ freelancer_access_token != nil
14
+ end
15
+
16
+ # Returns the current access token from the user session
17
+ def freelancer_access_token
18
+ session["freelancer_oauth_access_token"]
19
+ end
20
+
21
+ # Returns true if the current user session contains an access secret
22
+ def freelancer_access_secret?
23
+ freelancer_access_secret != nil
24
+ end
25
+
26
+ # Returns the current access secret from the user session
27
+ def freelancer_access_secret
28
+ session["freelancer_oauth_access_secret"]
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ module Freelancer
2
+ module Rails
3
+ class Routes
4
+
5
+ def self.draw(map)
6
+
7
+ map.namespace(:freelancer) do |freelancer|
8
+ freelancer.sign_in "sign_in", :controller => "rails/authorizations", :action => "new"
9
+ freelancer.authorize "authorize", :controller => "rails/authorizations", :action => "create"
10
+ freelancer.oauth_callback "oauth_callback", :controller => "rails/authorizations", :action => "oauth_callback"
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+ end
17
+ end
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ require "freelancer-rails"
data/test/helper.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'freelancer-rails'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestFreelancerRails < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: freelancer-rails
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Trond Arve Nordheim
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-21 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ hash: 25
28
+ segments:
29
+ - 0
30
+ - 1
31
+ - 1
32
+ version: 0.1.1
33
+ type: :runtime
34
+ name: freelancer
35
+ prerelease: false
36
+ version_requirements: *id001
37
+ description: Ruby on Rails support for the Freelancer.com Ruby gem
38
+ email: tanordheim@gmail.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - Gemfile.lock
45
+ - LICENSE
46
+ - README.rdoc
47
+ - VERSION
48
+ files:
49
+ - Gemfile
50
+ - Gemfile.lock
51
+ - LICENSE
52
+ - README.rdoc
53
+ - Rakefile
54
+ - VERSION
55
+ - app/controllers/freelancer/rails/authorizations_controller.rb
56
+ - app/views/freelancer/rails/authorizations/new.html.erb
57
+ - lib/freelancer-rails.rb
58
+ - lib/freelancer-rails/configuration.rb
59
+ - lib/freelancer-rails/controllers/helpers.rb
60
+ - lib/freelancer-rails/routes.rb
61
+ - rails/init.rb
62
+ - test/helper.rb
63
+ - test/test_freelancer-rails.rb
64
+ has_rdoc: true
65
+ homepage: http://github.com/tanordheim/freelancer-rails
66
+ licenses: []
67
+
68
+ post_install_message:
69
+ rdoc_options:
70
+ - --charset=UTF-8
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ hash: 3
88
+ segments:
89
+ - 0
90
+ version: "0"
91
+ requirements: []
92
+
93
+ rubyforge_project:
94
+ rubygems_version: 1.3.7
95
+ signing_key:
96
+ specification_version: 3
97
+ summary: Freelancer.com API for Ruby on Rails
98
+ test_files:
99
+ - test/helper.rb
100
+ - test/test_freelancer-rails.rb