Module: ADSL::Extract::Rails::RailsSpecialGemInstrumentation

Included in:
RailsExtractor
Defined in:
lib/adsl/extract/rails/rails_special_gem_instrumentation.rb

Instance Method Summary collapse

Instance Method Details

#instrument_gem_authlogic(controller_class, action) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/adsl/extract/rails/rails_special_gem_instrumentation.rb', line 79

def instrument_gem_authlogic(controller_class, action)
  return unless Object.lookup_const('Authlogic')

  # only instrument this if there is a class called User; assume that a user is the logged in entity
  return unless Object.lookup_const('User')

  Object.lookup_const('Authlogic::Session::Base').class_exec do
    def self.find(*args)
      ADSL::Extract::Rails::PartiallyUnknownHash.new(
        :record => User.find
      )
    end
  end
end

#instrument_gem_cancan(controller_class, action) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/adsl/extract/rails/rails_special_gem_instrumentation.rb', line 8

def instrument_gem_cancan(controller_class, action)
  return unless klass = Object.lookup_const('CanCan::ControllerResource')

  model_class_name = controller_class.controller_name.singularize.camelize
  klass.class_eval "    def name_from_controller\n      \"\#{ model_class_name.underscore.singularize }\"\n    end\n\n    def namespace\n      [\#{ model_class_name.split('::')[0..-2].map{ |a| \"'\#{a}'\" }.join(', ') }]\n    end\n\n    def authorize_resource; end\n\n    def find_resource\n      \#{ model_class_name }.find\n    end\n\n    def build_resource\n      \#{ model_class_name }.new\n    end\n\n    def load_collection\n      \#{ model_class_name }.where\n    end\n\n    def load_resource\n      unless skip?(:load)\n        var_name, objset = if load_instance?\n          [instance_name.to_s, load_resource_instance]\n        else\n          [instance_name.to_s.pluralize, load_collection]\n        end\n        ins_explore_all 'load_resource' do\n          ins_stmt(ADSL::Parser::ASTAssignment.new(\n            :var_name => ADSL::Parser::ASTIdent.new(:text => \"at__\\\#{var_name}\"),\n            :objset => objset.adsl_ast\n          ))\n          nil\n        end\n        @controller.instance_variable_set(\n          \"@\\\#{ var_name }\",\n          \#{ model_class_name }.new(:adsl_ast => ADSL::Parser::ASTVariable.new(\n            :var_name => ADSL::Parser::ASTIdent.new(:text => \"at__\\\#{var_name}\")\n          ))\n        )\n      end\n    end\n  ruby\n\n  controller_class.class_exec do\n    def authorize!(*args); end\n  end\n\nend\n", __FILE__, __LINE__

#instrument_gem_devise(controller_class, action) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/adsl/extract/rails/rails_special_gem_instrumentation.rb', line 94

def instrument_gem_devise(controller_class, action)
  return unless Object.lookup_const('Devise')
  
  Devise.mappings.values.each do |mapping|
    role = mapping.singular
    role_class = mapping.class_name
    controller_class.class_eval "      def authenticate_\#{role}!(*args); end\n      def \#{role}_signed_in?(*args); true; end\n      def current_\#{role}(*args); \#{role_class}.find(-1); end\n      def \#{role}_session(*args); ::ADSL::Extract::MetaUnknown.new; end\n      def only_render_implemented_actions(*args); end\n    ruby\n  end\nend\n"

#instrument_gem_ransack(controller_class, action) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/adsl/extract/rails/rails_special_gem_instrumentation.rb', line 65

def instrument_gem_ransack(controller_class, action)
  if Object.lookup_const('RansackUI')
    Object.lookup_const('RansackUI::ControllerHelpers').class_exec do
      def load_ransack_search(*args); end
    end
  end

  if Object.lookup_const('Ransack')
    ActiveRecord::Base.class_exec do
      def search(*args); where; end
    end
  end
end

#instrument_gems(controller_class, action) ⇒ Object



110
111
112
113
114
115
# File 'lib/adsl/extract/rails/rails_special_gem_instrumentation.rb', line 110

def instrument_gems(controller_class, action)
  instrument_gem_cancan controller_class, action
  instrument_gem_ransack controller_class, action
  instrument_gem_authlogic controller_class, action
  instrument_gem_devise controller_class, action
end