ezframe 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/asset/css/materialize.min.css +13 -0
  4. data/asset/css/style.css +3 -0
  5. data/{app_template/asset/image/favicon.ico → asset/image/c_e.ico} +0 -0
  6. data/{app_template/asset → asset}/js/ezframe.js +29 -59
  7. data/asset/js/materialize.min.js +6 -0
  8. data/asset/js/mymaterialize.js +38 -0
  9. data/exe/console +2 -2
  10. data/exe/{create_table.rb → create_table} +0 -0
  11. data/exe/dbmigrate +67 -0
  12. data/ezframe.gemspec +3 -0
  13. data/lib/ezframe/auth.rb +7 -2
  14. data/lib/ezframe/column_set.rb +30 -14
  15. data/lib/ezframe/column_type.rb +207 -67
  16. data/lib/ezframe/config.rb +5 -1
  17. data/lib/ezframe/controller.rb +34 -34
  18. data/lib/ezframe/database.rb +2 -2
  19. data/lib/ezframe/editor.rb +41 -41
  20. data/lib/ezframe/email.rb +34 -0
  21. data/lib/ezframe/ht.rb +20 -0
  22. data/lib/ezframe/html.rb +22 -14
  23. data/lib/ezframe/japanese_utils.rb +5 -0
  24. data/lib/ezframe/loader.rb +2 -2
  25. data/lib/ezframe/materialize.rb +3 -4
  26. data/lib/ezframe/message.rb +46 -0
  27. data/lib/ezframe/model.rb +0 -1
  28. data/lib/ezframe/page_base.rb +53 -67
  29. data/lib/ezframe/route.rb +122 -0
  30. data/lib/ezframe/server.rb +1 -1
  31. data/lib/ezframe/template.rb +3 -2
  32. data/lib/ezframe/util.rb +36 -16
  33. data/lib/ezframe/version.rb +1 -1
  34. data/lib/ezframe.rb +2 -1
  35. metadata +57 -14
  36. data/.rubocop.yml +0 -44
  37. data/app_template/config/generic.yml +0 -3
  38. data/app_template/config/materialize.yml +0 -5
  39. data/app_template/config.ru +0 -10
  40. data/app_template/pages/basic.rb +0 -5
  41. data/exe/setup.rb +0 -15
  42. data/lib/ezframe/page_kit.rb +0 -63
@@ -12,7 +12,7 @@ module Ezframe
12
12
 
13
13
  def connect
14
14
  @dbfile ||= ENV["EZFRAME_DB"] || Config[:database] || "sqlite://db/devel.sqlite"
15
- puts "Database.connect: dbfile=#{@dbfile}"
15
+ # puts "Database.connect: dbfile=#{@dbfile}"
16
16
  @sequel = Sequel.connect(@dbfile, loggers: [Logger.new($stdout)])
17
17
  end
18
18
 
@@ -31,7 +31,7 @@ module Ezframe
31
31
  # puts "create_table: #{table_name}"
32
32
  if @dbfile.index("postgres")
33
33
  @sequel.create_table(table_name) do
34
- serial :id
34
+ primary_key :id, identity: true
35
35
  dbtype_h.each do |key, dbtype|
36
36
  column(key, dbtype)
37
37
  end
@@ -13,8 +13,8 @@ module Ezframe
13
13
  end
14
14
  @dataset = @column_set.dataset
15
15
  end
16
- if @json
17
- @event = @json[:event] || {}
16
+ if @parsed_body
17
+ @event = @parsed_body[:event] || {}
18
18
  @target_id = @event[@target]
19
19
  end
20
20
  @auth = false
@@ -34,53 +34,53 @@ module Ezframe
34
34
  return @target
35
35
  end
36
36
 
37
- def public_login_page
38
- flash_area = ""
39
- mylog "public_login_page: #{@request}"
40
- if @request
41
- mylog "flash=#{@request.env['x-rack.flash']}"
42
- flash_area = Ht.div(class: %w[teal], child: @request['env']['x-rack.flash'].error)
43
- end
44
- form = Ht.multi_div([ %w[container], %w[row]],
45
- Ht.form(class: "col s6 offset-s3", action: "/#{@target}/login", method: "post", child: [
46
- Materialize.input(type: "text", name: "account", label: "User ID"),
47
- Materialize.input(type: "password", name: "password", label: "Password"),
48
- Ht.button(type: "submit", class: %w[btn], child: "login")
49
- ]))
50
- common_page(title: "Login", body: Html.convert(Materialize.convert([flash_area, form])))
51
- end
52
-
53
- def public_login_post
54
- mylog "public_login_post: #{@params.inspect}, #{@json}"
55
- warden.authenticate
56
- public_index_page
57
- end
37
+ # def public_login_get
38
+ # flash_area = ""
39
+ # mylog "public_login_get: #{@request}"
40
+ # if @request
41
+ # mylog "flash=#{@request.env['x-rack.flash']}"
42
+ # flash_area = Ht.div(class: %w[teal], child: @request['env']['x-rack.flash'].error)
43
+ # end
44
+ # form = Ht.multi_div([ %w[container], %w[row]],
45
+ # Ht.form(class: "col s6 offset-s3", action: "/#{@target}/login", method: "post", child: [
46
+ # Materialize.input(type: "text", name: "account", label: "User ID"),
47
+ # Materialize.input(type: "password", name: "password", label: "Password"),
48
+ # Ht.button(type: "submit", class: %w[btn], child: "login")
49
+ # ]))
50
+ # show_base_template(title: "Login", body: Html.convert(Materialize.convert([flash_area, form])))
51
+ # end
52
+
53
+ # def public_login_post
54
+ # mylog "public_login_post: #{@params.inspect}, #{@parsed_body}"
55
+ # warden.authenticate
56
+ # public_index_get
57
+ # end
58
58
 
59
59
  #--------------------------------------------------------------------------------------------------------
60
60
  # add new parts
61
- def public_new_page
61
+ def public_create_get
62
62
  matrix = @column_set.map do |column|
63
63
  [column.label, column.form]
64
64
  end
65
- matrix.push([Ht.button(child: "送信", class: %w[btn], event: "on=click:branch=add_new:url=/#{@target}/new:with=form")])
65
+ matrix.push([Ht.button(child: Message[:create_finish_button_label], class: %w[btn], event: "on=click:url=/#{@target}/create:with=form")])
66
66
  tb = Ht::Table.new(matrix)
67
67
  layout = main_layout(left: sidenav, center: Ht.form(child: tb.to_h))
68
- common_page(title: "新規登録", body: Html.convert(Materialize.convert(layout)))
68
+ show_base_template(title: Message[:create_page_title], body: Html.convert(Materialize.convert(layout)))
69
69
  end
70
70
 
71
- def public_new_post
71
+ def public_create_post
72
72
  @column_set.values = @event[:form]
73
- @column_set[:id].value = @target_id = @column_set.save
73
+ @column_set[:id].value = @target_id = @column_set.create
74
74
  { redirect: "/#{@target}/detail?id=#{@target_id}" }
75
75
  end
76
76
 
77
77
  #--------------------------------------------------------------------------------------------------------
78
78
  # index parts
79
- def public_index_page
79
+ def public_index_get
80
80
  data_a = @dataset.all
81
81
  htb = make_index_table(data_a)
82
82
  layout = index_layout(left: sidenav, center: Ht.form(child: htb))
83
- common_page(title: "データ一覧", body: Html.convert(Materialize.convert(layout)))
83
+ show_base_template(title: Message[:index_page_title], body: Html.convert(Materialize.convert(layout)))
84
84
  end
85
85
 
86
86
  def make_index_table(data_a)
@@ -99,12 +99,12 @@ module Ezframe
99
99
  table.make_table(data_a)
100
100
  end
101
101
 
102
- alias_method :public_default_page, :public_index_page
102
+ alias_method :public_default_get, :public_index_get
103
103
 
104
104
  #--------------------------------------------------------------------------------------------------------
105
105
  # search parts
106
106
  def public_search_post
107
- mylog "public_search_post: #{@json.inspect}"
107
+ mylog "public_search_post: #{@parsed_body.inspect}"
108
108
  word = @event[:form][:word]
109
109
  pattern = "%#{word}%"
110
110
  data_a = @dataset.where(Sequel.|(Sequel.like(:name_kana, pattern), Sequel.like(:name, pattern))).all
@@ -113,25 +113,25 @@ module Ezframe
113
113
 
114
114
  #--------------------------------------------------------------------------------------------------------
115
115
  # detail parts
116
- def public_detail_page
117
- mylog "pubilc_detail_page: #{@request.params.inspect}"
116
+ def public_detail_get
117
+ mylog "pubilc_detail_get: #{@request.params.inspect}"
118
118
  @target_id ||= @request.params["id"]
119
119
  data = @column_set.set_from_db(@target_id)
120
- return common_page(title: "no data", body: "no customer data: #{@target_id}") unless data
121
- common_page(title: "データ一覧", body: Html.convert(make_detail_page))
120
+ return show_base_template(title: "no data", body: "no customer data: #{@target_id}") unless data
121
+ show_base_template(title: Message[:index_page_title], body: Html.convert(make_detail_get))
122
122
  end
123
123
 
124
- def make_detail_page
124
+ def make_detail_get
125
125
  layout = main_layout( left: sidenav, center: detail_table )
126
126
  @request.env['rack.session'][@target] = @target_id
127
- layout[:event] = "on=load:branch=set_global@target=#{@target_id}"
127
+ layout[:event] = "on=load:command=set_global@target=#{@target_id}"
128
128
  Materialize.convert(layout)
129
129
  end
130
130
 
131
131
  def public_detail_post
132
- mylog "public_detail_post: #{@request.params.inspect}: #{@json}"
133
- if @json[:global]
134
- @target_id ||= @json[:global][@target]
132
+ mylog "public_detail_post: #{@request.params.inspect}: #{@parsed_body}"
133
+ if @parsed_body[:global]
134
+ @target_id ||= @parsed_body[:global][@target]
135
135
  end
136
136
  @column_set.set_from_db(@target_id)
137
137
  case @event[:branch]
@@ -0,0 +1,34 @@
1
+ require "mail"
2
+
3
+ module Ezframe
4
+ class Email
5
+ class << self
6
+ def receive
7
+
8
+ end
9
+
10
+ # options =
11
+ # :address => "smtp.server.host",
12
+ # :port => 1025,
13
+ # :user_name => login user,
14
+ # :password => login password,
15
+ # :authentication => 'plain',
16
+ # :ssl => true,
17
+ def setup_smtp(options)
18
+ Mail.defaults do
19
+ delivery_method :smtp, options
20
+ end
21
+ end
22
+
23
+ def send(data)
24
+ mail = Mail.new do
25
+ from data[:mail_from]
26
+ to data[:mail_to]
27
+ subject data[:subject]
28
+ body data[:body]
29
+ end
30
+ mail.deliver!
31
+ end
32
+ end
33
+ end
34
+ end
data/lib/ezframe/ht.rb CHANGED
@@ -57,6 +57,7 @@ module Ezframe
57
57
  alias_method :footer, :wrap_tag
58
58
 
59
59
  alias_method :small, :wrap_tag
60
+ alias_method :pre, :wrap_tag
60
61
 
61
62
  alias_method :checkbox, :wrap_tag
62
63
  alias_method :radio, :wrap_tag
@@ -88,6 +89,25 @@ module Ezframe
88
89
  end
89
90
  return child
90
91
  end
92
+
93
+ def small_text(text)
94
+ return small(class: %w[teal-text], child: text)
95
+ end
96
+
97
+ def search(ht_h, opts)
98
+ @found ||= []
99
+ if ht_h.is_a?(Hash)
100
+ if opts[:tag] && ht_h[:tag] && ht_h[:tag] == opts[:tag]
101
+ @found.push(ht_h)
102
+ end
103
+ if ht_h[:child]
104
+ search(ht_h[:child], opts)
105
+ end
106
+ elsif ht_h.is_a?(Array)
107
+ ht_h.map { |h| search(h, opts) }
108
+ end
109
+ return @found
110
+ end
91
111
  end
92
112
 
93
113
  # 配列を<UL><OL>要素に変換するためのクラス
data/lib/ezframe/html.rb CHANGED
@@ -4,6 +4,7 @@ module Ezframe
4
4
  class Html
5
5
  class << self
6
6
  def convert(ht_h = {})
7
+ ht_h = hook_for_convert(ht_h)
7
8
  return "" if ht_h.nil? || ht_h.to_s.empty?
8
9
  return ht_h.to_html if ht_h.respond_to?(:to_html)
9
10
  return ht_h.to_s if ht_h.is_a?(String) || ht_h.is_a?(Symbol) || ht_h.is_a?(Integer) || ht_h.is_a?(Time)
@@ -14,15 +15,16 @@ module Ezframe
14
15
  when "input"
15
16
  input(ht_h)
16
17
  when "select"
17
- return select(ht_h) if ht_h[:items]
18
+ return select(ht_h) if ht_h[:item]
18
19
  when "icon"
19
20
  tag = "i"
20
21
  end
22
+ tag = ht_h[:tag]
21
23
  opt_s, child_s = join_attributes(ht_h)
22
- if child_s.length >= 0
24
+ if !child_s.strip.empty? || %w[div span table tr td th textarea].include?(tag)
23
25
  return "<#{ht_h[:tag]} #{opt_s}>\n#{child_s}\n</#{ht_h[:tag]}>\n"
24
26
  end
25
- "<#{ht_h[:tag]} #{opt_s}/>"
27
+ "<#{ht_h[:tag]} #{opt_s} />"
26
28
  end
27
29
 
28
30
  def join_attributes(attrs)
@@ -56,53 +58,59 @@ module Ezframe
56
58
  if size && (size.index("x") || size.index("*"))
57
59
  if /(\d+)\s*[x\*]\s*(\d+)/ =~ size
58
60
  ht_h[:cols], ht_h[:rows] = $1, $2
61
+ ht_h.delete(:size)
59
62
  end
60
63
  ht_h[:tag] = "textarea"
61
64
  ht_h[:child] = ht_h[:value]
62
65
  ht_h.delete(:value)
63
- p ht_h
64
66
  end
65
67
  end
66
68
 
67
69
  def select(ht_h = {})
68
70
  attr = ht_h.clone
69
- items = attr[:items]
70
- # puts "Html.select: #{items}"
71
- if items.is_a?(Hash)
72
- option_a = ht_h[:items].map do |k, v|
71
+ item = attr[:item]
72
+ # puts "Html.select: #{item}"
73
+ if item.is_a?(Hash)
74
+ option_a = ht_h[:item].map do |k, v|
73
75
  h = { tag: "option", value: k }
74
76
  if v.is_a?(Array)
75
77
  v, selected = v
76
78
  h[:selected] = "selected" if selected
77
79
  end
78
80
  h[:child] = v
79
- if ht_h[:default] && ht_h[:default] == v
81
+ # mylog "select: hash: k=#{k}, v=#{v}, value=#{ht_h[:value]}"
82
+ if ht_h[:value] && ht_h[:value].to_s == k.to_s
80
83
  h[:selected] = "selected"
81
84
  end
82
85
  h
83
86
  end
84
- elsif items.is_a?(Array)
85
- option_a = items.map do |v|
87
+ elsif item.is_a?(Array)
88
+ option_a = item.map do |v|
86
89
  h = { tag: "option", value: v[0], child: v[1] }
87
90
  if %w[selected default].include?(v[2])
88
91
  h[:selected] = "selected"
89
92
  end
90
- if ht_h[:default] && ht_h[:default] == v
93
+ # mylog "select: array: v=#{v}, value=#{ht_h[:value]}"
94
+ if ht_h[:value] && ht_h[:value].to_s == v[0].to_s
91
95
  h[:selected] = "selected"
92
96
  end
93
97
  # puts h.inspect
94
98
  h
95
99
  end
96
100
  else
97
- warn "unknown items: #{ht_h.inspect}"
101
+ warn "unknown item: #{ht_h.inspect}"
98
102
  end
99
103
  attr[:tag] = "select"
100
104
  attr[:child] = option_a
101
105
  attr[:name] ||= attr[:key]
102
106
  attr[:final] = true
103
- attr.delete(:items)
107
+ attr.delete(:item)
104
108
  Html.convert(attr)
105
109
  end
110
+
111
+ def hook_for_convert(ht_h)
112
+ return ht_h
113
+ end
106
114
  end
107
115
  end
108
116
  end
@@ -36,5 +36,10 @@ class Japanese
36
36
  return nil if !str
37
37
  return str.tr("ぁ-ん\-ー―−", "ァ-ン\-ー―−")
38
38
  end
39
+
40
+ def to_wday(wday)
41
+ return nil unless wday
42
+ return %w(日 月 火 水 木 金 土)[wday]
43
+ end
39
44
  end
40
45
  end
@@ -3,9 +3,9 @@
3
3
  if File.exist?("pages/common.rb")
4
4
  require "#{Dir.pwd}/pages/common.rb"
5
5
  end
6
- Dir["models/*.rb"].each do |file|
6
+ Dir["models/*.rb"].sort.each do |file|
7
7
  require "#{Dir.pwd}/#{file}"
8
8
  end
9
- Dir["pages/*.rb"].each do |file|
9
+ Dir["pages/*.rb"].sort.each do |file|
10
10
  require "#{Dir.pwd}/#{file}"
11
11
  end
@@ -4,7 +4,6 @@ module Ezframe
4
4
  class Materialize
5
5
  class << self
6
6
  def into_html_header
7
-
8
7
  css_a = Config[:extra_css_list].map {|file| "<link href=\"#{file}\" rel=\"stylesheet\">\n" }
9
8
  js_a = Config[:extra_js_list].map {|file| "<script src=\"#{file}\"></script>\n" }
10
9
 
@@ -27,11 +26,11 @@ module Ezframe
27
26
 
28
27
  def convert(ht_h)
29
28
  return nil unless ht_h
30
- return ht_h if (ht_h.kind_of?(Hash) && ht_h[:final])
29
+ return ht_h if (ht_h.is_a?(Hash) && ht_h[:final])
31
30
  new_h = ht_h.clone
32
- if ht_h.kind_of?(Array)
31
+ if ht_h.is_a?(Array)
33
32
  new_h = ht_h.map { |v| convert(v) }
34
- elsif ht_h.kind_of?(Hash)
33
+ elsif ht_h.is_a?(Hash)
35
34
  unless ht_h[:tag]
36
35
  mylog("convert: no tag: #{ht_h.inspect}")
37
36
  return nil
@@ -0,0 +1,46 @@
1
+ module Ezframe
2
+ class Message
3
+ class << self
4
+ def init
5
+ load_yaml_files
6
+ end
7
+
8
+ def load_yaml_files(dir = "./message")
9
+ unless @catalog
10
+ @catalog = {}
11
+ Dir["#{dir}/*.yml"].each do |file|
12
+ load_one_file(file)
13
+ end
14
+ end
15
+ end
16
+
17
+ def load_one_file(file)
18
+ begin
19
+ yaml = YAML.load_file(file)
20
+ rescue
21
+ mylog("YAML load error: #{file}")
22
+ return
23
+ end
24
+ if /([a-z]{2})\.yml$/ =~ file
25
+ lang = $1
26
+ @catalog[lang.to_sym] = yaml.recursively_symbolize_keys
27
+ end
28
+ end
29
+
30
+ def languages
31
+ return @catalog.keys
32
+ end
33
+
34
+ def get(key, lang = nil)
35
+ lang = languages[0] unless lang
36
+ messages = @catalog[lang]
37
+ return messages[key.to_sym] if messages
38
+ return nil
39
+ end
40
+
41
+ def [](key)
42
+ return get(key)
43
+ end
44
+ end
45
+ end
46
+ end
data/lib/ezframe/model.rb CHANGED
@@ -30,7 +30,6 @@ module Ezframe
30
30
  def initialize(column_sets, db)
31
31
  @column_sets, @db = column_sets, db
32
32
  @column_sets.model = self
33
- # @column_sets.each {|name, colset| colset.model = self }
34
33
  end
35
34
 
36
35
  def create_tables
@@ -2,82 +2,69 @@
2
2
 
3
3
  require "json"
4
4
  require "uri"
5
-
6
5
  require_relative "util"
7
6
 
8
7
  module Ezframe
9
8
  class PageBase
10
- class << self
11
- def decide_route(path_info)
12
- default_class = Config[:default_page_class]||"App"
13
- default_method = Config[:default_page_method]||"default"
14
- path_parts = path_info.split('/').drop(1)
15
- case path_parts.length
16
- when 0
17
- [get_class(default_class), default_method]
18
- when 1
19
- filename = path_parts[0]
20
- if filename.index(".")
21
- return nil
22
- end
23
- klass = get_class(path_parts)
24
- if klass
25
- return [klass, default_method]
26
- else
27
- return [get_class(default_class), path_parts[0]]
28
- end
29
- else
30
- klass = get_class(path_parts)
31
- if klass
32
- [klass, default_method]
33
- else
34
- method = path_parts.pop
35
- klass = get_class(path_parts)
36
- [klass, method]
37
- end
38
- end
39
- end
9
+ attr_accessor :auth, :request
40
10
 
41
- def get_class(keys)
42
- keys = [keys] if keys.is_a?(String)
43
- klass = (%w[Ezframe] + keys.map { |k| k.to_camel }).join("::")
44
- mylog "get_class: #{klass}"
45
- if Object.const_defined?(klass)
46
- return Object.const_get(klass)
47
- end
48
- return nil
49
- end
11
+ def initialize(request = nil)
12
+ @class_snake = class_to_snake(self.class)
13
+ # puts "class_snake = #{@class_snake}"
14
+ set_request(request) if request
15
+ init_vars
50
16
  end
51
17
 
52
- attr_accessor :auth
18
+ def init_vars
19
+ end
53
20
 
54
- def initialize(request = nil, model = nil)
55
- @model = model if model
56
- if request
57
- @request = request
58
- @params = parse_query_string(request.env["QUERY_STRING"])
59
- @params.update(request.params)
60
- mylog "params=#{@params.inspect}" if @params.length > 0
61
- @id, @key = @params[:id], @params[:key]
62
- @env = @request.env
63
- @session = @env["rack.session"]
64
- mylog "session = #{@session.inspect}"
65
- if request.post?
66
- parse_json_body
67
- mylog "json=#{@json.inspect}"
21
+ # Rackのrequestを代入し、関連するインスタンス変数を定義
22
+ def set_request(request)
23
+ @request = request
24
+ @model = request.env["model"]
25
+ mylog "[WARN] model is not defined" unless @model
26
+ @column_set = @model.column_sets[@class_snake.to_sym]
27
+ # mylog "[WARN] column_set is not defined: #{@class_snake}" unless @column_set
28
+ if @column_set
29
+ @dataset = @column_set.dataset
30
+ end
31
+ @params = parse_query_string(request.env["QUERY_STRING"])
32
+ @params.update(request.params)
33
+ mylog "params=#{@params.inspect}" if @params.length > 0
34
+ # @id, @key = @params[:id], @params[:key]
35
+ @env = @request.env
36
+ @session = @env["rack.session"]
37
+ # mylog "session = #{@session.inspect}"
38
+ if %w[POST PUT].include?(request.request_method)
39
+ body = @request.body.read
40
+ if request.content_type.index("json")
41
+ @parsed_body = parse_json_body(body)
42
+ else
43
+ @parsed_body = parse_query_string(body)
68
44
  end
45
+ # mylog "parsed_body=#{@parsed_body.inspect}"
46
+ @event = @parsed_body[:event] || {}
69
47
  end
70
- @auth = nil
71
48
  end
72
49
 
73
- def parse_query_string(str)
74
- query_a = URI::decode_www_form(str)
75
- res_h = {}
76
- query_a.map { |a| res_h[a[0].to_sym] = a[1] }
77
- res_h
50
+ # routeから基本URLを生成
51
+ def make_base_url(id = nil)
52
+ path = Route::get_path(@class_snake)
53
+ params = @request.env["url_params"]
54
+ # params[@class_snake.to_sym] = id
55
+ path_s = path.map do |pa|
56
+ if pa == @class_snake.to_sym && id
57
+ "#{pa}/#{id}"
58
+ elsif params[p]
59
+ "#{pa}/#{params[p]}"
60
+ else
61
+ pa
62
+ end
63
+ end.join("/")
64
+ return "/#{path_s}"
78
65
  end
79
66
 
80
- def common_page(opts = {})
67
+ def show_base_template(opts = {})
81
68
  args = {
82
69
  title: opts[:title],
83
70
  body: opts[:body],
@@ -87,17 +74,16 @@ module Ezframe
87
74
  Template.fill("template/base.html", args)
88
75
  end
89
76
 
90
- def parse_json_body
91
- body = @request.body.read
77
+ def parse_json_body(body)
92
78
  return {} if !body || body.length==0
93
79
  begin
94
- @json = JSON.parse(body)
80
+ json = JSON.parse(body)
95
81
  rescue => e
96
82
  mylog "ERROR: #{e.class}:#{e.message}\n#{e.backtrace}"
97
83
  return nil
98
84
  end
99
- @json = @json.recursively_symbolize_keys if @json.is_a?(Hash) || @json.is_a?(Array)
100
- return @json
85
+ json = json.recursively_symbolize_keys if json.is_a?(Hash) || json.is_a?(Array)
86
+ return json
101
87
  end
102
88
 
103
89
  def warden