dailyrep 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/README.md +17 -0
- data/Rakefile +8 -0
- data/bin/dailyrep +42 -0
- data/config/.gitkeep +0 -0
- data/config/config_template.json +57 -0
- data/config/index_template.html +189 -0
- data/dailyrep.gemspec +27 -0
- data/lib/dailyrep/AppContainer.rb +25 -0
- data/lib/dailyrep/Changable.rb +20 -0
- data/lib/dailyrep/Dbops.rb +28 -0
- data/lib/dailyrep/IBrowser.rb +77 -0
- data/lib/dailyrep/IndexWriter.rb +55 -0
- data/lib/dailyrep/Loadconfig.rb +135 -0
- data/lib/dailyrep/Notificator.rb +23 -0
- data/lib/dailyrep/Trackable.rb +14 -0
- data/lib/dailyrep/entities/Doujob.rb +83 -0
- data/lib/dailyrep/entities/Kinozal.rb +87 -0
- data/lib/dailyrep/entities/Micex.rb +66 -0
- data/lib/dailyrep/entities/Minfin.rb +69 -0
- data/lib/dailyrep/entities/Yanoil.rb +67 -0
- data/lib/dailyrep/version.rb +3 -0
- data/test/dailyrep/Doujob_test.rb +22 -0
- data/test/dailyrep/IBrowser_test.rb +46 -0
- data/test/dailyrep/Kinozal_test.rb +23 -0
- data/test/dailyrep/Micex_test.rb +27 -0
- data/test/dailyrep/Minfin_test.rb +23 -0
- data/test/dailyrep/Yanoil_test.rb +21 -0
- data/test/test_helper.rb +37 -0
- metadata +176 -0
| @@ -0,0 +1,66 @@ | |
| 1 | 
            +
            require_relative '../Changable'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module DailyRep
         | 
| 4 | 
            +
              module Entities
         | 
| 5 | 
            +
                  class Micex < IBrowser
         | 
| 6 | 
            +
                    include Changable
         | 
| 7 | 
            +
                    attr_reader :values
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    def self.create
         | 
| 10 | 
            +
                      result = [(new)]
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    def initialize(delta=Configer.micex_delta, source=Configer.micex_source)
         | 
| 14 | 
            +
                      @source      = source
         | 
| 15 | 
            +
                      @notif_limit = delta
         | 
| 16 | 
            +
                      @values      = {last: "", open: "", delta: "" }
         | 
| 17 | 
            +
                      @push        = 0
         | 
| 18 | 
            +
                      super
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
             | 
| 22 | 
            +
                    def log_msg phase
         | 
| 23 | 
            +
                      super @entity, phase
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    def process
         | 
| 27 | 
            +
                      super do
         | 
| 28 | 
            +
                        result_json = get_source_json @source
         | 
| 29 | 
            +
                        result_json = result_json[1]
         | 
| 30 | 
            +
                        @last_val = result_json['LAST'].to_f
         | 
| 31 | 
            +
                        @open_val = result_json['OPEN'].to_f
         | 
| 32 | 
            +
                        @delta_prc_val = (((@last_val - @open_val)*100)/@open_val).round(2)
         | 
| 33 | 
            +
                    #evaluate push 0 or 1 via Chgable module
         | 
| 34 | 
            +
                    @push = track_change @delta_prc_val, @notif_limit
         | 
| 35 | 
            +
                    #store values to write to db
         | 
| 36 | 
            +
                    @values = { last: @last_val, open: @open_val, delta: @delta_prc_val }
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def notify
         | 
| 41 | 
            +
                      super do
         | 
| 42 | 
            +
                      if @push == 1 then
         | 
| 43 | 
            +
                          note = "Micex USD/RUB
         | 
| 44 | 
            +
                                          Last value: #{@last_val}
         | 
| 45 | 
            +
                                          Open value: #{@open_val}
         | 
| 46 | 
            +
                                          Delta percentage: #{@delta_prc_val}
         | 
| 47 | 
            +
                                          www.googledrive.com/host/0Byb1mtPn4ZEAVm9zTUJQbHM2U0U"
         | 
| 48 | 
            +
                          push_note note
         | 
| 49 | 
            +
                      end
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  def write_to_db
         | 
| 54 | 
            +
                    super do
         | 
| 55 | 
            +
                      write_hist @entity, :delta.to_s, @delta_prc_val, @push
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  def web_reload
         | 
| 60 | 
            +
                    super do
         | 
| 61 | 
            +
                      set_html @entity, @values, @push
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
            end
         | 
| @@ -0,0 +1,69 @@ | |
| 1 | 
            +
            require_relative  '../Changable'
         | 
| 2 | 
            +
            module DailyRep
         | 
| 3 | 
            +
              module Entities
         | 
| 4 | 
            +
                class Minfin < IBrowser
         | 
| 5 | 
            +
                  include Changable
         | 
| 6 | 
            +
                  attr_reader :usd_uah_info
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def self.create
         | 
| 9 | 
            +
                      result = [(new)]
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def initialize( delta=Configer.minfin_delta, source=Configer.minfin_source)
         | 
| 13 | 
            +
                    super
         | 
| 14 | 
            +
                    @search_path   = source
         | 
| 15 | 
            +
                    @notif_limit   = delta
         | 
| 16 | 
            +
                    @usd_uah_info = {:buy_bank => -999, :sale_bank => -999}
         | 
| 17 | 
            +
                    @push = 0
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def log_msg phase
         | 
| 21 | 
            +
                    super @entity, phase
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def process
         | 
| 25 | 
            +
                    super do
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                      out_set_bank = get_source_http @search_path, '.mb-data .per'
         | 
| 28 | 
            +
                      @usd_uah_info[:buy_bank] = out_set_bank[0].text
         | 
| 29 | 
            +
                      @usd_uah_info[:sale_bank] = out_set_bank[3].text
         | 
| 30 | 
            +
             | 
| 31 | 
            +
             | 
| 32 | 
            +
                      @last_val = check_history_notif(@entity, :sale_bank.to_s, (Time.now - 1.week)).to_f
         | 
| 33 | 
            +
                      cur =@usd_uah_info[:sale_bank].to_f
         | 
| 34 | 
            +
                      @usd_uah_info[:delta] = (cur - @last_val)*100/cur
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                      @push = track_change @usd_uah_info[:delta], @notif_limit
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def notify
         | 
| 43 | 
            +
                    super do
         | 
| 44 | 
            +
                      if @push == 1 then
         | 
| 45 | 
            +
                        note = "Minfin
         | 
| 46 | 
            +
                    Current market: #{@usd_uah_info[:sale_bank]}
         | 
| 47 | 
            +
                    Last value: #{@last_val}
         | 
| 48 | 
            +
                    Delta percentage: #{@usd_uah_info[:delta]}"
         | 
| 49 | 
            +
                        push_note note
         | 
| 50 | 
            +
                      end
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
             | 
| 55 | 
            +
                  def write_to_db
         | 
| 56 | 
            +
                    super do
         | 
| 57 | 
            +
                      write_hist @entity, :sale_bank.to_s, @usd_uah_info[:sale_bank], @push
         | 
| 58 | 
            +
                      write_hist @entity, :delta.to_s, @usd_uah_info[:delta], @push
         | 
| 59 | 
            +
                    end
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  def web_reload
         | 
| 63 | 
            +
                    super do
         | 
| 64 | 
            +
                      set_html @entity, {current: @usd_uah_info[:sale_bank], delta: @usd_uah_info[:delta]}
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
            end
         | 
| @@ -0,0 +1,67 @@ | |
| 1 | 
            +
            require_relative  '../Changable'
         | 
| 2 | 
            +
            module DailyRep
         | 
| 3 | 
            +
              module Entities
         | 
| 4 | 
            +
                class Yanoil < IBrowser
         | 
| 5 | 
            +
                  include Changable
         | 
| 6 | 
            +
                  attr_reader :change
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def self.create
         | 
| 9 | 
            +
                      result = [(new )]
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def initialize( delta=Configer.yanoil_delta, source=Configer.yanoil_source)
         | 
| 13 | 
            +
                    super
         | 
| 14 | 
            +
                    @search_path   = source
         | 
| 15 | 
            +
                    @notif_limit   = delta
         | 
| 16 | 
            +
                    @scope         = '.b-quote__last-day'
         | 
| 17 | 
            +
                    @is_current_date = false
         | 
| 18 | 
            +
                    @push = 0
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def log_msg phase
         | 
| 22 | 
            +
                    super @entity, phase
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def process
         | 
| 26 | 
            +
                    super do
         | 
| 27 | 
            +
                      out_set        = get_source_http @search_path, @scope
         | 
| 28 | 
            +
                      @last         = out_set.css('.b-quote__value').text.gsub(',','.').to_f
         | 
| 29 | 
            +
                      v_date         = out_set.css('.b-quote__date').text
         | 
| 30 | 
            +
                      change         = out_set.css('.b-quote__change').text.gsub(',','.')
         | 
| 31 | 
            +
                      change_sign    = out_set.css('.b-quote__change .b-quote__sgn').text
         | 
| 32 | 
            +
                      @change        = (change + change_sign).to_f
         | 
| 33 | 
            +
                      @is_current_date = (Time.now.day.to_i == v_date[0..2].to_i)
         | 
| 34 | 
            +
                      if @is_current_date then
         | 
| 35 | 
            +
                        @push = track_change @change, @notif_limit
         | 
| 36 | 
            +
                      end
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
             | 
| 41 | 
            +
                  def notify
         | 
| 42 | 
            +
                    super do
         | 
| 43 | 
            +
                      if @push == 1 then
         | 
| 44 | 
            +
                        note = "Yandex Brent Oil
         | 
| 45 | 
            +
                    Last value: #{@last}
         | 
| 46 | 
            +
                    Delta percentage: #{@change}"
         | 
| 47 | 
            +
                        push_note note
         | 
| 48 | 
            +
                      end
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
             | 
| 53 | 
            +
                  def write_to_db
         | 
| 54 | 
            +
                    super do
         | 
| 55 | 
            +
                      write_hist @entity, :delta.to_s, @change, @push
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  def web_reload
         | 
| 60 | 
            +
                    super do
         | 
| 61 | 
            +
                      set_html @entity, { delta: @change, current: @last }
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
            require "dailyrep/entities/Doujob"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module DailyRep
         | 
| 5 | 
            +
              describe "Doujob unit test" do
         | 
| 6 | 
            +
                before do
         | 
| 7 | 
            +
                  @doujob1 = Entities::Doujob.new("Ruby")
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                it 'should test process method and write_to_hist' do
         | 
| 11 | 
            +
                  @doujob1.process
         | 
| 12 | 
            +
                  assert @doujob1.diff, 'process method returns empty json responce'
         | 
| 13 | 
            +
                  assert_not @doujob1.diff.count == 0, 'response count = 0'
         | 
| 14 | 
            +
                  assert_difference('History.count', @doujob1.diff.count) do
         | 
| 15 | 
            +
                    @doujob1.write_to_db
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
             | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module DailyRep
         | 
| 4 | 
            +
              ############################
         | 
| 5 | 
            +
              describe "Dailyrep testing" do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                before do
         | 
| 8 | 
            +
                  @browser = IBrowser.new
         | 
| 9 | 
            +
                  @browser.write_hist('test_entity_1', 'test_parameter', 'test_val')
         | 
| 10 | 
            +
                  @browser.write_hist('test_entity_2', 'test_parameter', 'test_val', 1)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                it 'should check database via check_ro_exists' do
         | 
| 14 | 
            +
                  assert @browser.check_row_exists('test_entity_1', 'test_parameter', 'test_val')
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
                it 'should perform http request to Dou.ua website' do
         | 
| 17 | 
            +
                  assert @browser.get_source_http('http://jobs.dou.ua/vacancies/?search=Ruby', 'div#vacancyListId li')
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                it 'should perform json request to micex website' do
         | 
| 21 | 
            +
                  assert @browser.get_source_json('http://www.micex.ru/issrpc/marketdata/currency/selt/daily/short/result.json?boardid=CETS&secid=USD000UTSTOM')
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                it 'should write history data to the database' do
         | 
| 25 | 
            +
                  hist_1 = History.where(entity: 'test_entity_1').first
         | 
| 26 | 
            +
                  hist_2 = History.where(entity: 'test_entity_2').first
         | 
| 27 | 
            +
                  assert_equal 'N', hist_1.notified
         | 
| 28 | 
            +
                  assert_equal 'Y', hist_2.notified
         | 
| 29 | 
            +
                  assert_not hist_1.entity.empty?, 'entity column is empty'
         | 
| 30 | 
            +
                  assert_not hist_1.parameter.empty?
         | 
| 31 | 
            +
                  assert_not hist_1.val.empty?
         | 
| 32 | 
            +
                  assert_not hist_1.created_at.empty?
         | 
| 33 | 
            +
                  assert_not hist_1.id.nil?, 'Id has not been set'
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                it 'should check if notification exists in' do
         | 
| 37 | 
            +
                  assert_nil @browser.check_history_notif('test_entity_1', 'test_parameter'), 'there should be no notifications'
         | 
| 38 | 
            +
                  assert @browser.check_history_notif('test_entity_2', 'test_parameter')
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                it 'should check pushbullet connection' do
         | 
| 42 | 
            +
                  client = Washbullet::Client.new(Configer.get_client_tokens.first)
         | 
| 43 | 
            +
                  assert_not client.me.body["email"].empty?
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
            require "dailyrep/entities/Kinozal"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module DailyRep
         | 
| 5 | 
            +
              describe "Kinozal unit test" do
         | 
| 6 | 
            +
                before do
         | 
| 7 | 
            +
                  @kinozal = Entities::Kinozal.new("Avatar")
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                it 'should test process method and write_to_hist' do
         | 
| 11 | 
            +
                  @kinozal.process
         | 
| 12 | 
            +
                  assert @kinozal.out_hash_clean, 'process method returns empty json responce'
         | 
| 13 | 
            +
                  assert_not @kinozal.out_hash_clean.count == 0, 'response count = 0'
         | 
| 14 | 
            +
                  assert_difference('History.count', @kinozal.out_hash_clean.count) do
         | 
| 15 | 
            +
                    @kinozal.write_to_db
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                  assert @kinozal.to_notification.count == @kinozal.out_hash_clean.count
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
             | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
            require "dailyrep/entities/Micex"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module DailyRep
         | 
| 5 | 
            +
              class Micex
         | 
| 6 | 
            +
                def log_msg phase
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              describe "Micex unit test" do
         | 
| 11 | 
            +
                before do
         | 
| 12 | 
            +
                  @micex = Entities::Micex.new()
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                it 'should test process method' do
         | 
| 16 | 
            +
                  @micex.process
         | 
| 17 | 
            +
                  assert @micex.values[:last] > 0, 'process method returns empty json responce'
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                it 'should test write_to_hist' do
         | 
| 21 | 
            +
                  assert_difference('History.count') do
         | 
| 22 | 
            +
                    @micex.write_to_db
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
            require "dailyrep/entities/Minfin"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module DailyRep
         | 
| 5 | 
            +
              describe "Minfin unit test" do
         | 
| 6 | 
            +
                before do
         | 
| 7 | 
            +
                  @minfin = Entities::Minfin.new()
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                it 'should test process method and write_to_hist' do
         | 
| 11 | 
            +
                  @minfin.process
         | 
| 12 | 
            +
                  @minfin.usd_uah_info.each { |key, val|
         | 
| 13 | 
            +
                    assert_not val == -999, "#{key} is not set in responce "
         | 
| 14 | 
            +
                  }
         | 
| 15 | 
            +
                  assert_difference('History.count', 2) do
         | 
| 16 | 
            +
                    @minfin.write_to_db
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
             | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
            require "dailyrep/entities/Yanoil"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module DailyRep
         | 
| 5 | 
            +
              describe "Yanoil unit test" do
         | 
| 6 | 
            +
                before do
         | 
| 7 | 
            +
                  @yanoil = Entities::Yanoil.new()
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                it 'should test process method and write_to_hist' do
         | 
| 11 | 
            +
                  @yanoil.process
         | 
| 12 | 
            +
                  assert @yanoil.change, 'process method returns empty json responce'
         | 
| 13 | 
            +
                  assert_difference('History.count') do
         | 
| 14 | 
            +
                    @yanoil.write_to_db
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            end
         | 
    
        data/test/test_helper.rb
    ADDED
    
    | @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            require "minitest/autorun"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'active_record'
         | 
| 4 | 
            +
            require 'json'
         | 
| 5 | 
            +
            require 'hashdiff'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            DATABASE = 'db/db_test.sql3' #sets test database
         | 
| 8 | 
            +
            CONFIG_FILE = 'config/config.json'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            #config file loading
         | 
| 11 | 
            +
            require 'dailyrep/Loadconfig'
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            DailyRep::Configer.set_index_file  'config/index.html'
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            require 'active_support/testing/assertions'
         | 
| 16 | 
            +
            include ActiveSupport::Testing::Assertions
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            #clears test database
         | 
| 19 | 
            +
            History.delete_all
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            require 'dailyrep/IBrowser'
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
            module DailyRep
         | 
| 25 | 
            +
              class IBrowser
         | 
| 26 | 
            +
                def self.get_html entity, key
         | 
| 27 | 
            +
                  @@out_html.css("##{entity}_#{key}")[0].content
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              module Trackable
         | 
| 32 | 
            +
                def log_msg entity, add_param='', phase
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
                def log_error e
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,176 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: dailyrep
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Yurii Kurylenko
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2015-02-16 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: hashdiff
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - '>='
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 0.0.2
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - '>='
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 0.0.2
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: activerecord
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - '>='
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - '>='
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: sqlite3
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - '>='
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - '>='
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: rake
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - '>='
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :runtime
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - '>='
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: nokogiri
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - '>='
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :runtime
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - '>='
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: washbullet
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - '>='
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :runtime
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - '>='
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: '0'
         | 
| 97 | 
            +
            description: |-
         | 
| 98 | 
            +
              This is Ruby App collects the information you need (currency, new torrents, etc) from various web sites.
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                Main features:
         | 
| 101 | 
            +
                  - local SQlite3 database to store history info
         | 
| 102 | 
            +
                  - devices notification over PushBullet service
         | 
| 103 | 
            +
                  - recent information visualization via html
         | 
| 104 | 
            +
                  - flexible configuration using json file
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                Currently available web site notificattions:
         | 
| 107 | 
            +
                  - http://minfin.com.ua -  UAH/USD currency
         | 
| 108 | 
            +
                  - http://micex.ru/  - RUB/USD currency
         | 
| 109 | 
            +
                  - http://dou.ua/ - new IT job opportunities
         | 
| 110 | 
            +
                  - http://kinozal.tv/ - new movies available on torrent
         | 
| 111 | 
            +
                  - http://news.yandex.ru/ - Breny Oil rate
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              As the example (app reloads index.html file that is shared thought Google Drive):
         | 
| 114 | 
            +
                www.googledrive.com/host/0Byb1mtPn4ZEAVm9zTUJQbHM2U0U
         | 
| 115 | 
            +
            email: yuriy.kurilenko7@gmail.com
         | 
| 116 | 
            +
            executables:
         | 
| 117 | 
            +
            - dailyrep
         | 
| 118 | 
            +
            extensions: []
         | 
| 119 | 
            +
            extra_rdoc_files: []
         | 
| 120 | 
            +
            files:
         | 
| 121 | 
            +
            - .gitignore
         | 
| 122 | 
            +
            - README.md
         | 
| 123 | 
            +
            - Rakefile
         | 
| 124 | 
            +
            - bin/dailyrep
         | 
| 125 | 
            +
            - config/.gitkeep
         | 
| 126 | 
            +
            - config/config_template.json
         | 
| 127 | 
            +
            - config/index_template.html
         | 
| 128 | 
            +
            - dailyrep.gemspec
         | 
| 129 | 
            +
            - db/.gitkeep
         | 
| 130 | 
            +
            - lib/dailyrep/AppContainer.rb
         | 
| 131 | 
            +
            - lib/dailyrep/Changable.rb
         | 
| 132 | 
            +
            - lib/dailyrep/Dbops.rb
         | 
| 133 | 
            +
            - lib/dailyrep/IBrowser.rb
         | 
| 134 | 
            +
            - lib/dailyrep/IndexWriter.rb
         | 
| 135 | 
            +
            - lib/dailyrep/Loadconfig.rb
         | 
| 136 | 
            +
            - lib/dailyrep/Notificator.rb
         | 
| 137 | 
            +
            - lib/dailyrep/Trackable.rb
         | 
| 138 | 
            +
            - lib/dailyrep/entities/Doujob.rb
         | 
| 139 | 
            +
            - lib/dailyrep/entities/Kinozal.rb
         | 
| 140 | 
            +
            - lib/dailyrep/entities/Micex.rb
         | 
| 141 | 
            +
            - lib/dailyrep/entities/Minfin.rb
         | 
| 142 | 
            +
            - lib/dailyrep/entities/Yanoil.rb
         | 
| 143 | 
            +
            - lib/dailyrep/version.rb
         | 
| 144 | 
            +
            - test/dailyrep/Doujob_test.rb
         | 
| 145 | 
            +
            - test/dailyrep/IBrowser_test.rb
         | 
| 146 | 
            +
            - test/dailyrep/Kinozal_test.rb
         | 
| 147 | 
            +
            - test/dailyrep/Micex_test.rb
         | 
| 148 | 
            +
            - test/dailyrep/Minfin_test.rb
         | 
| 149 | 
            +
            - test/dailyrep/Yanoil_test.rb
         | 
| 150 | 
            +
            - test/test_helper.rb
         | 
| 151 | 
            +
            homepage: 
         | 
| 152 | 
            +
            licenses:
         | 
| 153 | 
            +
            - MIT
         | 
| 154 | 
            +
            metadata: {}
         | 
| 155 | 
            +
            post_install_message: 
         | 
| 156 | 
            +
            rdoc_options: []
         | 
| 157 | 
            +
            require_paths:
         | 
| 158 | 
            +
            - lib
         | 
| 159 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 160 | 
            +
              requirements:
         | 
| 161 | 
            +
              - - '>='
         | 
| 162 | 
            +
                - !ruby/object:Gem::Version
         | 
| 163 | 
            +
                  version: '2.0'
         | 
| 164 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 165 | 
            +
              requirements:
         | 
| 166 | 
            +
              - - '>='
         | 
| 167 | 
            +
                - !ruby/object:Gem::Version
         | 
| 168 | 
            +
                  version: '0'
         | 
| 169 | 
            +
            requirements: []
         | 
| 170 | 
            +
            rubyforge_project: 
         | 
| 171 | 
            +
            rubygems_version: 2.4.5
         | 
| 172 | 
            +
            signing_key: 
         | 
| 173 | 
            +
            specification_version: 4
         | 
| 174 | 
            +
            summary: Ruby app that provides values checking on particular websites and performs
         | 
| 175 | 
            +
              notification
         | 
| 176 | 
            +
            test_files: []
         |