Commit ef06ad0b9b491ab2a8bd8f4767c22720d470abe5
Committed by
Rodrigo Souto
1 parent
c6b5c34e
Exists in
api_tasks
and in
4 other branches
expose image urls
Showing
8 changed files
with
128 additions
and
42 deletions
Show diff stats
app/models/article.rb
@@ -701,6 +701,11 @@ class Article < ActiveRecord::Base | @@ -701,6 +701,11 @@ class Article < ActiveRecord::Base | ||
701 | person ? person.id : nil | 701 | person ? person.id : nil |
702 | end | 702 | end |
703 | 703 | ||
704 | + #FIXME make this test | ||
705 | + def author_custom_image(size = :icon) | ||
706 | + author ? author.profile_custom_image(size) : nil | ||
707 | + end | ||
708 | + | ||
704 | def version_license(version_number = nil) | 709 | def version_license(version_number = nil) |
705 | return license if version_number.nil? | 710 | return license if version_number.nil? |
706 | profile.environment.licenses.find_by_id(get_version(version_number).license_id) | 711 | profile.environment.licenses.find_by_id(get_version(version_number).license_id) |
app/models/comment.rb
@@ -65,6 +65,11 @@ class Comment < ActiveRecord::Base | @@ -65,6 +65,11 @@ class Comment < ActiveRecord::Base | ||
65 | author ? author.url : nil | 65 | author ? author.url : nil |
66 | end | 66 | end |
67 | 67 | ||
68 | + #FIXME make this test | ||
69 | + def author_custom_image(size = :icon) | ||
70 | + author ? author.profile_custom_image(size) : nil | ||
71 | + end | ||
72 | + | ||
68 | def url | 73 | def url |
69 | article.view_url.merge(:anchor => anchor) | 74 | article.view_url.merge(:anchor => anchor) |
70 | end | 75 | end |
app/models/profile.rb
@@ -935,6 +935,13 @@ private :generate_url, :url_options | @@ -935,6 +935,13 @@ private :generate_url, :url_options | ||
935 | image.public_filename(:icon) if image.present? | 935 | image.public_filename(:icon) if image.present? |
936 | end | 936 | end |
937 | 937 | ||
938 | + #FIXME make this test | ||
939 | + def profile_custom_image(size = :icon) | ||
940 | + image_path = profile_custom_icon if size == :icon | ||
941 | + image_path ||= image.public_filename(size) if image.present? | ||
942 | + image_path | ||
943 | + end | ||
944 | + | ||
938 | def jid(options = {}) | 945 | def jid(options = {}) |
939 | domain = options[:domain] || environment.default_hostname | 946 | domain = options[:domain] || environment.default_hostname |
940 | "#{identifier}@#{domain}" | 947 | "#{identifier}@#{domain}" |
lib/api/entities.rb
@@ -2,17 +2,34 @@ module API | @@ -2,17 +2,34 @@ module API | ||
2 | module Entities | 2 | module Entities |
3 | class Article < Grape::Entity | 3 | class Article < Grape::Entity |
4 | expose :id, :name, :body, :created_at | 4 | expose :id, :name, :body, :created_at |
5 | -# expose :is_admin?, as: :is_admin | ||
6 | 5 | ||
7 | -# expose :avatar_url do |user, options| | ||
8 | -# if user.avatar.present? | ||
9 | -# user.avatar.url | ||
10 | -# end | ||
11 | -# end | 6 | + expose :author do |article, options| |
7 | + { | ||
8 | + :id => article.author_id, | ||
9 | + :name => article.author_name, | ||
10 | + :icon_url => article.author_custom_image(:icon), | ||
11 | + :minor_url => article.author_custom_image(:minor), | ||
12 | + :portrait_url => article.author_custom_image(:portrait), | ||
13 | + :thumb_url => article.author_custom_image(:thumb), | ||
14 | + } | ||
15 | + end | ||
16 | + | ||
12 | end | 17 | end |
13 | 18 | ||
14 | class Comment < Grape::Entity | 19 | class Comment < Grape::Entity |
15 | - expose :author_id, :body, :title, :created_at | 20 | + expose :body, :title, :created_at, :id |
21 | + | ||
22 | + expose :author do |comment, options| | ||
23 | + { | ||
24 | + :id => comment.author_id, | ||
25 | + :name => comment.author_name, | ||
26 | + :icon_url => comment.author_custom_image(:icon), | ||
27 | + :minor_url => comment.author_custom_image(:minor), | ||
28 | + :portrait_url => comment.author_custom_image(:portrait), | ||
29 | + :thumb_url => comment.author_custom_image(:thumb), | ||
30 | + } | ||
31 | + end | ||
32 | + | ||
16 | end | 33 | end |
17 | 34 | ||
18 | class User < Grape::Entity | 35 | class User < Grape::Entity |
lib/api/helpers.rb
@@ -13,6 +13,16 @@ module API | @@ -13,6 +13,16 @@ module API | ||
13 | @current_user = nil | 13 | @current_user = nil |
14 | end | 14 | end |
15 | 15 | ||
16 | + def environment | ||
17 | + @environment | ||
18 | + end | ||
19 | + | ||
20 | + def limit | ||
21 | + limit = params[:limit].to_i | ||
22 | + limit = default_limit if limit <= 0 | ||
23 | + limit | ||
24 | + end | ||
25 | + | ||
16 | #FIXME see if its needed | 26 | #FIXME see if its needed |
17 | # def paginate(relation) | 27 | # def paginate(relation) |
18 | # per_page = params[:per_page].to_i | 28 | # per_page = params[:per_page].to_i |
@@ -105,5 +115,27 @@ module API | @@ -105,5 +115,27 @@ module API | ||
105 | error!({'message' => message, :code => status}, status) | 115 | error!({'message' => message, :code => status}, status) |
106 | end | 116 | end |
107 | 117 | ||
118 | + protected | ||
119 | + | ||
120 | + def detect_stuff_by_domain | ||
121 | + @domain = Domain.find_by_name(request.host) | ||
122 | + if @domain.nil? | ||
123 | + @environment = Environment.default | ||
124 | + if @environment.nil? && Rails.env.development? | ||
125 | + # This should only happen in development ... | ||
126 | + @environment = Environment.create!(:name => "Noosfero", :is_default => true) | ||
127 | + end | ||
128 | + else | ||
129 | + @environment = @domain.environment | ||
130 | + end | ||
131 | + end | ||
132 | + | ||
133 | + private | ||
134 | + | ||
135 | + def default_limit | ||
136 | + 20 | ||
137 | + end | ||
138 | + | ||
139 | + | ||
108 | end | 140 | end |
109 | end | 141 | end |
lib/api/session.rb
@@ -11,7 +11,6 @@ module API | @@ -11,7 +11,6 @@ module API | ||
11 | # Example Request: | 11 | # Example Request: |
12 | # POST /login?login=some&password=pass | 12 | # POST /login?login=some&password=pass |
13 | get "/login" do | 13 | get "/login" do |
14 | -environment = nil #FIXME load the correct environment create a method in helper | ||
15 | user ||= User.authenticate(params[:login], params[:password], environment) | 14 | user ||= User.authenticate(params[:login], params[:password], environment) |
16 | 15 | ||
17 | return unauthorized! unless user | 16 | return unauthorized! unless user |
lib/api/v1/articles.rb
@@ -2,44 +2,55 @@ module API | @@ -2,44 +2,55 @@ module API | ||
2 | module V1 | 2 | module V1 |
3 | class Articles < Grape::API | 3 | class Articles < Grape::API |
4 | 4 | ||
5 | + before { detect_stuff_by_domain } | ||
5 | before { authenticate! } | 6 | before { authenticate! } |
6 | 7 | ||
7 | resource :articles do | 8 | resource :articles do |
8 | 9 | ||
9 | - #FIXME See if it's possible to use pagination instead of DateTime control. see a way to use this pagination logic genericaly | 10 | + helpers do |
11 | + def default_from_date | ||
12 | + @article_created_at ||= Article.first.created_at | ||
13 | + @article_created_at | ||
14 | + end | ||
15 | + end | ||
16 | + | ||
17 | + # Collect comments from articles | ||
18 | + # | ||
19 | + # Parameters: | ||
20 | + # from - date where the search will begin. If nothing is passed the default date will be the date of the first article created | ||
21 | + # oldest - Collect the oldest comments from reference_id comment. If nothing is passed the newest comments are collected | ||
22 | + # limit - amount of comments returned. The default value is 20 | ||
23 | + # | ||
24 | + # Example Request: | ||
25 | + # GET /articles?from=2013-04-04-14:41:43&until=2014-04-04-14:41:43&limit=10&type=Blog | ||
10 | get do | 26 | get do |
11 | - first_update = DateTime.parse(params[:first_update]) if params[:first_update] | ||
12 | - last_update = DateTime.parse(params[:last_update]) if params[:last_update] | 27 | + from_date = DateTime.parse(params[:from]) if params[:from] |
28 | + until_date = DateTime.parse(params[:until]) if params[:until] | ||
13 | 29 | ||
14 | - if first_update.nil? | ||
15 | - begin_date = Article.first.created_at | ||
16 | - end_date = last_update.nil? ? DateTime.now : last_update | 30 | + if from_date.nil? |
31 | + begin_period = default_from_date | ||
32 | + end_period = until_date.nil? ? DateTime.now : until_date | ||
17 | else | 33 | else |
18 | - begin_date = first_update | ||
19 | - end_date = DateTime.now | 34 | + begin_period = from_date |
35 | + end_period = DateTime.now | ||
20 | end | 36 | end |
21 | 37 | ||
22 | - limit = params[:limit].to_i | ||
23 | - limit = 20 if limit == 0 | ||
24 | conditions = {} | 38 | conditions = {} |
25 | conditions[:type] = params[:content_type] if params[:content_type] #FIXME validate type | 39 | conditions[:type] = params[:content_type] if params[:content_type] #FIXME validate type |
26 | - conditions[:created_at] = begin_date...end_date | ||
27 | - present Article.find(:all, :conditions => conditions, :offset => (first_update.nil? ? 0 : 1), :limit => limit, :order => "created_at DESC"), :with => Entities::Article | 40 | + conditions[:created_at] = begin_period...end_period |
41 | + present environment.articles.find(:all, :conditions => conditions, :offset => (from_date.nil? ? 0 : 1), :limit => limit, :order => "created_at DESC"), :with => Entities::Article | ||
28 | end | 42 | end |
29 | 43 | ||
30 | - #FIXME load article with environment context | ||
31 | get ':id' do | 44 | get ':id' do |
32 | - present Article.find(params[:id]), :with => Entities::Article | 45 | + present environment.articles.find(params[:id]), :with => Entities::Article |
33 | end | 46 | end |
34 | 47 | ||
35 | - #FIXME load article with environment context | ||
36 | get ':id/children' do | 48 | get ':id/children' do |
37 | - present Article.find(params[:id]).children, :with => Entities::Article | 49 | + present environment.articles.find(params[:id]).children, :with => Entities::Article |
38 | end | 50 | end |
39 | 51 | ||
40 | - #FIXME load article with environment context | ||
41 | get ':id/children/:child_id' do | 52 | get ':id/children/:child_id' do |
42 | - present Article.find(params[:id]).children.find(params[:child_id]), :with => Entities::Article | 53 | + present environment.articles.find(params[:id]).children.find(params[:child_id]), :with => Entities::Article |
43 | end | 54 | end |
44 | 55 | ||
45 | 56 |
lib/api/v1/comments.rb
1 | module API | 1 | module API |
2 | module V1 | 2 | module V1 |
3 | - class Comments < Grape::API | ||
4 | - | ||
5 | - before { authenticate! } | ||
6 | - | ||
7 | - resource :articles do | ||
8 | - #FIXME make the pagination | ||
9 | - #FIXME put it on environment context | ||
10 | - get ":id/comments" do | ||
11 | - present Article.find(params[:id]).comments, :with => Entities::Comment | 3 | + class Comments < Grape::API |
4 | + | ||
5 | + before { detect_stuff_by_domain } | ||
6 | + before { authenticate! } | ||
7 | + | ||
8 | + resource :articles do | ||
9 | + # Collect comments from articles | ||
10 | + # | ||
11 | + # Parameters: | ||
12 | + # reference_id - comment id used as reference to collect comment | ||
13 | + # oldest - Collect the oldest comments from reference_id comment. If nothing is passed the newest comments are collected | ||
14 | + # limit - amount of comments returned. The default value is 20 | ||
15 | + # | ||
16 | + # Example Request: | ||
17 | + # GET /articles/12/comments?oldest&limit=10&reference_id=23 | ||
18 | + get ":id/comments" do | ||
19 | + conditions = {} | ||
20 | + conditions = ["id #{params.key?(:oldest) ? '<' : '>'} ?", params[:reference_id]] if params[:reference_id] | ||
21 | + present environment.articles.find(params[:id]).comments.find(:all, :conditions => conditions, :limit => limit), :with => Entities::Comment | ||
22 | + end | ||
23 | + | ||
24 | + get ":id/comments/:comment_id" do | ||
25 | + present environment.articles.find(params[:id]).comments.find(params[:comment_id]), :with => Entities::Comment | ||
26 | + end | ||
27 | + | ||
12 | end | 28 | end |
13 | - | ||
14 | - get ":id/comments/:comment_id" do | ||
15 | - present Article.find(params[:id]).comments.find(params[:comment_id]), :with => Entities::Comment | ||
16 | - end | ||
17 | - | 29 | + |
18 | end | 30 | end |
19 | - | ||
20 | - end | ||
21 | end | 31 | end |
22 | end | 32 | end |