backframe 0.0.49 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +16 -0
  3. data/.gitignore +2 -2
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +1156 -0
  6. data/Gemfile +9 -13
  7. data/README.md +133 -4
  8. data/Rakefile +3 -7
  9. data/backframe.gemspec +10 -11
  10. data/circle.yml +5 -2
  11. data/lib/backframe.rb +21 -34
  12. data/lib/backframe/mime.rb +4 -0
  13. data/lib/backframe/query.rb +48 -0
  14. data/lib/backframe/query/sort.rb +29 -0
  15. data/lib/backframe/railtie.rb +1 -16
  16. data/lib/backframe/response.rb +60 -0
  17. data/lib/backframe/response/adapter/csv.rb +39 -0
  18. data/lib/backframe/response/adapter/json.rb +53 -0
  19. data/lib/backframe/response/adapter/xlsx.rb +41 -0
  20. data/lib/backframe/response/adapter/xml.rb +37 -0
  21. data/lib/backframe/response/collection.rb +43 -0
  22. data/lib/backframe/response/fields.rb +62 -0
  23. data/lib/backframe/response/record.rb +38 -0
  24. data/lib/backframe/service.rb +60 -0
  25. data/lib/backframe/service/result/base.rb +24 -0
  26. data/lib/backframe/service/result/failure.rb +21 -0
  27. data/lib/backframe/service/result/success.rb +21 -0
  28. data/lib/backframe/version.rb +1 -1
  29. data/spec/fixtures/active_record.rb +22 -0
  30. data/spec/fixtures/models.rb +25 -0
  31. data/spec/fixtures/queries.rb +28 -0
  32. data/spec/fixtures/seeds.rb +12 -0
  33. data/spec/fixtures/serializers.rb +23 -0
  34. data/spec/fixtures/services.rb +26 -0
  35. data/spec/query/sort_spec.rb +47 -0
  36. data/spec/query_spec.rb +63 -0
  37. data/spec/response/adapter/csv_spec.rb +47 -0
  38. data/spec/response/adapter/json_spec.rb +66 -0
  39. data/spec/response/adapter/xlsx_spec.rb +59 -0
  40. data/spec/response/adapter/xml_spec.rb +63 -0
  41. data/spec/response/fields_spec.rb +45 -0
  42. data/spec/response/record_spec.rb +45 -0
  43. data/spec/response_spec.rb +153 -0
  44. data/spec/service/result/failure_spec.rb +16 -0
  45. data/spec/service/result/sucess_spec.rb +17 -0
  46. data/spec/service_spec.rb +16 -0
  47. data/spec/spec_helper.rb +15 -52
  48. metadata +78 -81
  49. data/lib/backframe/actioncontroller/acts_as_activation.rb +0 -70
  50. data/lib/backframe/actioncontroller/acts_as_api.rb +0 -39
  51. data/lib/backframe/actioncontroller/acts_as_api/adapter.rb +0 -53
  52. data/lib/backframe/actioncontroller/acts_as_api/errors.rb +0 -48
  53. data/lib/backframe/actioncontroller/acts_as_api/headers.rb +0 -11
  54. data/lib/backframe/actioncontroller/acts_as_api/page.rb +0 -181
  55. data/lib/backframe/actioncontroller/acts_as_reset.rb +0 -86
  56. data/lib/backframe/actioncontroller/acts_as_resource.rb +0 -92
  57. data/lib/backframe/actioncontroller/acts_as_resource/actions.rb +0 -100
  58. data/lib/backframe/actioncontroller/acts_as_session.rb +0 -80
  59. data/lib/backframe/activerecord/acts_as_activable.rb +0 -50
  60. data/lib/backframe/activerecord/acts_as_distinct.rb +0 -49
  61. data/lib/backframe/activerecord/acts_as_enum.rb +0 -62
  62. data/lib/backframe/activerecord/acts_as_orderable.rb +0 -40
  63. data/lib/backframe/activerecord/acts_as_percent.rb +0 -46
  64. data/lib/backframe/activerecord/acts_as_phone.rb +0 -59
  65. data/lib/backframe/activerecord/acts_as_user.rb +0 -101
  66. data/lib/backframe/activerecord/default_values.rb +0 -32
  67. data/lib/backframe/activerecord/filter_sort.rb +0 -79
  68. data/lib/backframe/activerecord/migration.rb +0 -25
  69. data/lib/backframe/image_cache/image_cache.rb +0 -45
  70. data/lib/backframe/image_cache/lib/asset.rb +0 -109
  71. data/lib/backframe/image_cache/lib/cache.rb +0 -67
  72. data/lib/backframe/image_cache/lib/conversions.rb +0 -132
  73. data/lib/backframe/models/activation.rb +0 -60
  74. data/lib/backframe/models/activity.rb +0 -40
  75. data/lib/backframe/models/reset.rb +0 -59
  76. data/lib/backframe/models/story.rb +0 -9
  77. data/lib/backframe/serializers/activity_serializer.rb +0 -44
  78. data/spec/backframe/acts_as_api_spec.rb +0 -225
  79. data/spec/backframe/acts_as_resource_spec.rb +0 -178
  80. data/spec/support/example_factory.rb +0 -9
  81. data/spec/support/example_serializer.rb +0 -3
  82. data/spec/support/schema.rb +0 -8
@@ -1,92 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'active_support'
4
-
5
- require 'backframe/actioncontroller/acts_as_resource/actions'
6
-
7
- module Backframe
8
- module ActsAsResource
9
- extend ActiveSupport::Concern
10
-
11
- class_methods do
12
- def acts_as_resource(resource, *args)
13
- arguments = args[0] || {}
14
-
15
- @resource = resource
16
- @resource_opts = arguments
17
-
18
- include Helpers
19
-
20
- member_methods = [:show,:edit,:update,:destroy]
21
- if arguments.key?(:has_many)
22
- member_methods.concat(arguments[:has_many])
23
- end
24
-
25
- if arguments.key?(:only)
26
- member_methods = (member_methods.to_set & arguments[:only].to_set).to_a
27
- end
28
-
29
- if arguments.key?(:except)
30
- member_methods = (member_methods.to_set - arguments[:except].to_set).to_a
31
- end
32
-
33
- before_action :load_item, only: member_methods
34
-
35
- include Actions::Index if include_method?(arguments, :index)
36
- include Actions::Create if include_method?(arguments, :create)
37
- include Actions::Show if include_method?(arguments, :show)
38
- include Actions::Edit if include_method?(arguments, :edit)
39
- include Actions::Update if include_method?(arguments, :update)
40
- include Actions::UpdateAll if include_method?(arguments, :update)
41
- include Actions::Destroy if include_method?(arguments, :destroy)
42
-
43
- if arguments.key?(:has_many)
44
- arguments[:has_many].each do |association|
45
- class_eval <<-EOV
46
- def #{association}
47
- page(@item.#{association})
48
- end
49
- EOV
50
- end
51
- end
52
- end
53
-
54
- def resource; @resource; end
55
- def resource_opts; @resource_opts; end
56
-
57
- private
58
-
59
- def include_method?(arguments, method)
60
- (arguments[:only].present? && arguments[:only].include?(method)) ||
61
- (arguments[:except].present? && !arguments[:except].include?(method)) ||
62
- (arguments[:only].nil? && arguments[:except].nil?)
63
- end
64
- end
65
- end
66
-
67
- module Helpers
68
- def resource
69
- self.class.resource.constantize
70
- rescue NameError
71
- instance_eval self.class.resource
72
- end
73
-
74
- def load_item
75
- @item = resource.find(params[:id])
76
- end
77
-
78
- def allowed_params
79
- allowed = params.permit(self.class.resource_opts[:allowed])
80
- self.class.resource_opts[:allowed].each do |attribute|
81
- if attribute.is_a?(Hash)
82
- attribute.each do |key,value|
83
- if value.is_a?(Array) && !allowed.key?(key)
84
- allowed[key] = []
85
- end
86
- end
87
- end
88
- end
89
- allowed
90
- end
91
- end
92
- end
@@ -1,100 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Backframe
4
- module ActsAsResource
5
- module Actions
6
- module Index
7
- def index
8
- page(resource.includes(self.class.resource_opts[:include]), nil)
9
- end
10
- end
11
-
12
- module Create
13
- def create
14
- @item = resource.new(allowed_params)
15
- if @item.save
16
- if @item.respond_to?(:activities)
17
- Activity.create!(subject: current_user, text: 'created {object1}', object1: @item)
18
- end
19
-
20
- render json: @item, status: 201, adapter: Backframe::ActsAsAPI::Adapter
21
- else
22
- resource_error_response(@item, 422)
23
- end
24
- end
25
- end
26
-
27
- module Show
28
- def show
29
- render json: @item, adapter: Backframe::ActsAsAPI::Adapter
30
- end
31
- end
32
-
33
- module Edit
34
- def edit
35
- json = {}
36
- self.class.resource_opts[:allowed].each do |attribute|
37
- if(attribute.is_a?(Hash))
38
- attribute.each do |key,val|
39
- json[key] = @item.send(key)
40
- end
41
- else
42
- json[attribute] = @item.send(attribute)
43
- end
44
- end
45
- render json: json
46
- end
47
- end
48
-
49
- module Update
50
- def update
51
- if @item.update_attributes(allowed_params)
52
- if @item.respond_to?(:activities)
53
- Activity.create!(subject: current_user, text: 'updated {object1}', object1: @item)
54
- end
55
- render json: @item
56
- else
57
- resource_error_response(@item, 422)
58
- end
59
- end
60
- end
61
-
62
- module UpdateAll
63
- def update_all
64
- records = []
65
-
66
- ActiveRecord::Base.transaction do
67
- records = update_all_params.map(&method(:update_record))
68
- end
69
-
70
- render json: records, adapter: Backframe::ActsAsAPI::Adapter
71
- end
72
-
73
- private
74
-
75
- def update_record(attrs)
76
- attrs = attrs.with_indifferent_access
77
- record = resource.find(attrs[:id])
78
- record.attributes = attrs
79
- record.save!
80
- record
81
- end
82
-
83
- def update_all_params
84
- permitted = self.class.resource_opts[:allowed] << :id
85
- params.permit(records: permitted)[:records] || []
86
- end
87
- end
88
-
89
- module Destroy
90
- def destroy
91
- if @item.destroy
92
- render nothing: true, status: 204
93
- else
94
- resource_error_response(@item, 422)
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end
@@ -1,80 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'active_support'
4
- require 'active_support/inflector'
5
-
6
- module Backframe
7
- module ActsAsSession
8
- extend ActiveSupport::Concern
9
-
10
- class_methods do
11
- def acts_as_session(model, *args)
12
-
13
- arguments = args[0] || {}
14
-
15
- class_eval <<-EOV
16
-
17
- layout 'signin'
18
- before_action :redirect_if_signed_in, :except => [:application,:destroy]
19
- before_action :authenticate_#{model.underscore}, :only => :application
20
-
21
- def application
22
- render :layout => false
23
- end
24
-
25
- def new
26
- @user = #{model}.new
27
- end
28
-
29
- def create
30
- if @user = #{model}.where('LOWER(email) = ?', params[:#{model.underscore}][:email].downcase).first
31
- if @user.locked_out?
32
- flash[:error] = I18n.t(:session_locked)
33
- session[:signin_locked] = true
34
- redirect_to '#{arguments[:prefix]}/signin'
35
- elsif @user.authenticate(params[:#{model.underscore}][:password])
36
- @user.signin(:success)
37
- session.delete(:signin_locked)
38
- session[:#{model.underscore}_id] = @user.id
39
- url = session[:redirect_to] || '#{arguments[:redirect]}'
40
- redirect_to url
41
- else
42
- @user.signin(:failed)
43
- if @user.locked_out?
44
- session[:signin_locked] = true
45
- flash[:error] = I18n.t(:session_locking)
46
- else
47
- flash[:error] = I18n.t(:session_invalid)
48
- end
49
- redirect_to '#{arguments[:prefix]}/signin'
50
- end
51
- else
52
- flash[:error] = I18n.t(:session_not_found)
53
- redirect_to '#{arguments[:prefix]}/signin'
54
- end
55
- end
56
-
57
- def destroy
58
- flash[:success] = I18n.t(:session_signout)
59
- session.delete(:redirect_to)
60
- session.delete(:#{model.underscore}_id)
61
- redirect_to '#{arguments[:prefix]}/signin'
62
- end
63
-
64
- private
65
-
66
- def authenticate_#{model.underscore}
67
- if !signed_in?
68
- flash[:warning] = I18n.t(:session_interception)
69
- session[:redirect_to] = request.path
70
- redirect_to '#{arguments[:prefix]}/signin'
71
- end
72
- end
73
-
74
- EOV
75
-
76
- end
77
- end
78
-
79
- end
80
- end
@@ -1,50 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Backframe
4
- module ActsAsActivable
5
-
6
- extend ActiveSupport::Concern
7
-
8
- def self.included(base)
9
- base.send :extend, ClassMethods
10
- end
11
-
12
- module ClassMethods
13
-
14
- def acts_as_activable(entity, text, link)
15
-
16
- class_eval <<-EOV
17
-
18
- def activities
19
- conditions = []
20
- conditions << '("activities"."object1_type"=? AND "activities"."object1_id"=?)'
21
- conditions << '("activities"."object2_type"=? AND "activities"."object2_id"=?)'
22
- conditions << '"activities"."subject_type"=? && "activities"."subject_id"=?' if self.is_a?(Admin) || self.is_a?(Customer)
23
- fragment = [conditions.join(' OR '), self.class.name, self.id, self.class.name, self.id]
24
- fragment.concat([self.class.name, self.id]) if self.is_a?(Admin) || self.is_a?(Customer)
25
- Activity.where(fragment)
26
- end
27
-
28
- def activity_entity
29
- "#{entity}"
30
- end
31
-
32
- def activity_text
33
- self.#{text}
34
- end
35
-
36
- def activity_link
37
- link = "#{link}"
38
- "#{link}".scan(/\\\[([\\\w\\\_]*)\\\]/).each do |token|
39
- link = link.gsub('['+token.first+']', self.send(token.first).to_s)
40
- end
41
- link
42
- end
43
- EOV
44
-
45
- end
46
-
47
- end
48
-
49
- end
50
- end
@@ -1,49 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Backframe
4
- module ActsAsDistinct
5
-
6
- extend ActiveSupport::Concern
7
-
8
- def self.included(base)
9
- base.send :extend, ClassMethods
10
- end
11
-
12
- module ClassMethods
13
-
14
- def acts_as_distinct(*args)
15
-
16
- field = args[0]
17
- arguments = args[1]
18
-
19
- class_eval <<-EOV
20
-
21
- after_initialize :set_default_#{field}, :if => Proc.new { |m| m.new_record? && m.#{arguments[:parent]}.present? }
22
- after_save :toggle_#{field}_distinction, :if => Proc.new { |m| m.#{arguments[:parent]}.present? && m.#{field} && (m.new_record? || m.#{field}_changed?) }
23
-
24
- scope :#{field.to_s.gsub('is_', '')}, -> { where(:#{field} => true) }
25
-
26
- def #{field.to_s.gsub('is_', '')}?
27
- return self.#{field}
28
- end
29
-
30
- private
31
-
32
- def set_default_#{field}
33
- self.#{field} = self.#{arguments[:parent]}.#{arguments[:association]}.empty?
34
- end
35
-
36
- def toggle_#{field}_distinction
37
- self.#{arguments[:parent]}.#{arguments[:association]}.where('id != ?', self.id).each do |item|
38
- item.update_attributes(:#{field} => false)
39
- end
40
- end
41
-
42
- EOV
43
-
44
- end
45
-
46
- end
47
-
48
- end
49
- end
@@ -1,62 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Backframe
4
- module ActsAsEnum
5
- extend ActiveSupport::Concern
6
-
7
- def self.included(base)
8
- base.send :extend, ClassMethods
9
- end
10
-
11
- module ClassMethods
12
-
13
- def acts_as_enum(*args)
14
-
15
- field = args[0]
16
- arguments = args[1]
17
-
18
- if arguments.key?(:required)
19
-
20
- validates_presence_of field
21
-
22
- end
23
-
24
- if arguments.key?(:default)
25
-
26
- after_initialize "init_#{field}".to_sym, :if => Proc.new { |d| d.new_record? }
27
-
28
- class_eval <<-EOV
29
- def init_#{field}
30
- self.#{field} ||= '#{arguments[:default]}'
31
- end
32
- EOV
33
-
34
- end
35
-
36
- if arguments.key?(:in)
37
-
38
- validates_inclusion_of field, :in => arguments[:in]
39
-
40
- class_eval <<-EOV
41
- scope :#{field}_is, -> (*options) { where('"#{self.table_name}"."#{field}" IN (?)', (options.is_a?(Array) ? options : [options])) }
42
-
43
- def #{field}_is?(*options)
44
- (options.is_a?(Array) ? options : [options]).map(&:to_s).include?(self.#{field})
45
- end
46
- EOV
47
-
48
- class_eval <<-EOV
49
- scope :#{field}_not, -> (*options) { where('"#{self.table_name}"."#{field}" NOT IN (?)', (options.is_a?(Array) ? options : [options])) }
50
-
51
- def #{field}_not?(*options)
52
- !(options.is_a?(Array) ? options : [options]).map(&:to_s).include?(self.#{field})
53
- end
54
- EOV
55
-
56
- end
57
-
58
- end
59
-
60
- end
61
- end
62
- end
@@ -1,40 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Backframe
4
- module ActsAsOrderable
5
- extend ActiveSupport::Concern
6
-
7
- def self.included(base)
8
- base.send :extend, ClassMethods
9
- end
10
-
11
- module ClassMethods
12
-
13
- def acts_as_orderable(field, args = {})
14
-
15
- class_eval <<-EOV
16
- validates_presence_of :#{field}
17
-
18
- before_validation :set_#{field}, :on => :create
19
- after_destroy :reorder_#{field}
20
-
21
- default_scope -> { order(:#{field} => :asc) }
22
-
23
- def set_#{field}
24
- self.#{field} ||= (self.#{args[:on]}.#{self.name.tableize}.any?) ? self.#{args[:on]}.#{self.name.tableize}.maximum(:#{field}) + 1 : 0
25
- end
26
-
27
- def reorder_#{field}
28
- self.#{args[:on]}.#{self.name.tableize}.order(:#{field} => :asc).each_with_index do |item, index|
29
- item.update_column(:#{field}, index)
30
- end
31
- end
32
-
33
- EOV
34
-
35
- end
36
-
37
- end
38
-
39
- end
40
- end