$30 off During Our Annual Pro Sale. View Details »

Awesome Inquiry Management System

Awesome Inquiry Management System

SHIBATA Hiroshi

March 16, 2013
Tweet

More Decks by SHIBATA Hiroshi

Other Decks in Technology

Transcript

  1. ࣲాതࢤ
    SHIBATA Hiroshi
    QBQFSCPZDP
    BTBLVTBSC
    paperboy&co., Inc.
    Awesome Inquiry Management System
    ൃද৔ॴେߐށ3VCZձٞ 2013-03-16(Sat)
    ΅͘ͷ͔Μ͕͑ͨ
    ͍͖͞ΐ͏ͷ໰͍߹
    Θͤ؅ཧγεςϜ

    View Slide

  2. TFMG

    View Slide

  3. SHIBATA Hiroshi(@hsbt)

    View Slide

  4. View Slide

  5. View Slide

  6. asakusa.rb

    View Slide

  7. View Slide

  8. View Slide

  9. 1.XXXSVCZMBOHPSH
    4.FCBOTIVHPۀ
    3.3VCZ"QQMJDBUJPO$*
    2.CVHTSVCZMBOHPSH

    View Slide

  10. ຊ୊

    View Slide

  11. View Slide

  12. ΍Γ͍ͨ
    ͜ͱ

    View Slide

  13. @cs
    ͓໰͍߹Θͤͷݕࡧ͕ੌ
    ͘஗ͯ͘෼ܦͬͯ΋Ԡ౴
    ແ͔ͬͨΓɺ෼ܦͬͯ
    ݟ͔ͭΒͳ͍ͱ͔
    NKE
    @hsbt

    View Slide

  14. ͦ͏͍΍TPMSͱ͔৮Β
    Μͱͳ͋ɺ͔ͤͬ͘ͷػձ
    ͩ͠࡞ͬͯݟΔ͔

    Կͱ͔͠·͢Α @hsbt
    @cs
    NKE

    View Slide

  15. ೔ޙ

    View Slide

  16. View Slide

  17. View Slide

  18. source 'https://rubygems.org'
    gem 'rails', '~> 4.0.0.beta1'
    gem 'activerecord-nulldb-adapter'
    gem 'mysql2'
    # gem 'pg'
    gem 'slim-rails'
    gem 'bootstrap-sass'
    gem 'jquery-rails'
    gem 'kaminari'
    gem 'omniauth-github'
    gem 'rails_config'
    gem 'sunspot_rails'
    gem 'progress_bar'
    gem 'system_timer' if RUBY_VERSION < '1.9'
    group :assets do
    gem 'sass-rails', '~> 4.0.0.beta1'
    gem 'coffee-rails', '~> 4.0.0.beta1'
    gem 'therubyracer'
    gem 'uglifier'
    end
    group :development, :test do
    gem 'sunspot_solr'
    gem 'spring'
    gem 'pry-rails'
    gem 'forgery'
    gem 'factory_girl_rails'
    end
    group :production do
    gem 'puma'
    end
    5.TVOTQPU
    1.3BJMT
    4.PNOJBVUI
    3.TMJN
    2.OVMMEC

    View Slide

  19. View Slide

  20. View Slide

  21. View Slide

  22. View Slide

  23. جຊํ਑

    View Slide

  24. 1.εΩʔϚϨε
    2.&OHJOF׆༻

    View Slide

  25. U@GPP@CBS

    View Slide

  26. DSFBUF@EBUF
    VQEBUF@EBUF
    ͨͩ͠จࣈྻ

    View Slide

  27. Settings.inquiries_tables.each do |table|
    class_name = table.name.singularize.classify
    self.class.const_set class_name, Class.new(ActiveRecord::Base)
    class_name.constantize.class_eval do |klass|
    klass.establish_connection table.database.to_hash
    klass.table_name = table.name
    def klass.text_columns
    columns.select{|c| [:string, :text].include?(c.type) && c.name !=
    settings.created_at }.map{|c| c.name.to_sym}
    end
    def klass.display_columns
    settings.display_columns.map(&:to_sym)
    end
    def klass.settings
    Settings.inquiries_tables.detect{|table| table.name == self.table_name}
    end
    def created_at
    Time.parse(send(self.class.settings.created_at.to_sym))
    rescue
    nil
    end if table.created_at && !respond_to?(:created_at)
    attr_accessible *text_columns if Rails.env.development?
    searchable do
    text *text_columns
    time :created_at if settings.created_at
    end
    end
    end if Settings.inquiries_tables.present?

    View Slide

  28. .Z42-ͷεΩʔϚఆ
    ٛΛݟͯɺͦͷத͔Β
    ςΩετͬΆ͍ΧϥϜ
    ͚ͩΛऔΓग़ͯ͠ɺͦ
    ͷΧϥϜ໊ͷγϯϘϧ
    Λ഑ྻͰฦ͢ͷͬͯͲ
    ͏΍ΔΜ͚ͩͬʁʁʁ

    View Slide

  29. def klass.text_columns
    columns.select do |c|
    [:string, :text].include? c.type
    end.map{|c| c.name.to_sym}
    end

    View Slide

  30. module DynamicModel
    def all
    Settings.inquiries_tables.map do |table|
    table.name.singularize.classify.constantize
    end
    end
    module_function :all
    end

    View Slide

  31. View Slide

  32. class InquiriesController < ApplicationController
    before_filter :login_required
    respond_to :html
    def index
    @inquiries = []
    DynamicModel.all.each do |klass|
    @inquiries << klass.all(:limit => 5)
    end
    @inquiries.flatten!
    end
    def search
    @inquiries = []
    DynamicModel.all.each do |klass|
    @inquiries << klass.search do
    fulltext params[:q]
    end.results
    end
    @inquiries.flatten!
    @inquiries =
    Kaminari.paginate_array(@inquiries).page(params[:page]).per(25)
    end
    def show
    @inquiry = params[:class_name].constantize.find(params[:id])
    end
    end

    View Slide

  33. - @inquiries.each do |inquiry|
    .row-fluid
    .span12
    .fieldset
    .legend = link_to inquiry.send(inquiry.class.primary_key.to_sym),
    inquiry_path(inquiry, :class_name => inquiry.class)
    table.table
    - inquiry.class.text_columns.each do |c|
    - next unless inquiry.class.display_columns.include? c
    tr
    td= c.to_s
    td= truncate(inquiry.send(c.to_sym), length: 140)
    - if inquiry.class.settings.created_at
    tr
    td= inquiry.class.settings.created_at.to_s
    td= inquiry.send(inquiry.class.settings.created_at.to_sym)

    View Slide

  34. View Slide

  35. View Slide

  36. 1.SCFOW
    4.OHJOY
    3.TVQFSWJTPSE
    2.TPMS

    View Slide

  37. View Slide

  38. ͍͍ͩͨͰ͖ͨ

    View Slide

  39. @cs
    Ίͬ͞ૣ ƅшƅ

    :"55"
    @hsbt

    View Slide

  40. https://github.com/hsbt/
    whispered
    https://github.com/hsbt/
    whispered-puppet

    View Slide