extracare2of 0.2 → 0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d174fbafa72c46930ecc9a9b8bb6de7d1f31a935
4
- data.tar.gz: 07364580e6775bc782038da7cdcbbaacbd184354
3
+ metadata.gz: 2fab3c2c7a497c7b1b7778109a835070383e6d10
4
+ data.tar.gz: 0f6b388cf9ea330d863798b0a52904b6ff99da13
5
5
  SHA512:
6
- metadata.gz: 1f4dfd3c0818b0178869f2a6bb2d434d0750b2a5dff458817882d8092903e115b41c69f5793bc353c82c1645c3605e5a44e401c014b39523a894b1c3ec302665
7
- data.tar.gz: eb25c94b7957907b398d4ed0550b88eace0b4fffd4575940c2ccfeca0170362d67d04d187f29639405e369df887264a9fe5be06dc9931a4c99b3adc6cec13187
6
+ metadata.gz: 32bd39e2db40297bfe8837c1059aa46181e3cf8fef31ce0b3660c19f130db13ea82b83f7ae7a78c333c497089e52ea61a6c098deef5a72c08db22a3896382c6e
7
+ data.tar.gz: cda676df9026377c41d9ae158bdae7403c7a55bbc4b1def0aa0fd22626142566ce725a8bea796068c23e71258d4a6bad6db8dc95033d764bc68d583e97f27a3b
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  Gemfile.lock
2
+ .ruby-version
@@ -1 +1 @@
1
- 2.1.1
1
+ ruby-2.1.1
data/README.md CHANGED
@@ -12,23 +12,35 @@ This script performs the following actions:
12
12
  + Checks coupons against the database for previously imported coupons
13
13
  + Sends every new coupon to the task manager of your choice
14
14
 
15
- ## Code Example
15
+ ## Usage
16
16
 
17
- $ ruby bin/extracare2of username password
17
+ $ extracare2of
18
18
  $ Looking for coupons...
19
19
  $ ----
20
20
  $ Title: 10% off skincare products
21
21
  $ - Due Date: 8/10/2013
22
22
  $ - Start Date: 8/1/2013
23
23
  $ - Note: Reedemable in-store only
24
-
24
+
25
25
 
26
26
 
27
27
  ## Installation
28
28
 
29
- Bundle install
29
+ gem install extracare2of
30
+
31
+ ## Configuration
32
+
33
+ Config file is location at `~/.extracare2of/config/config.yml`.
34
+ Here you can change which todo manager you use.
35
+
36
+ ---
37
+ :services:
38
+ :use_omnifocus: true
39
+ :use_reminders: false
40
+ :use_things: false
41
+ :use_dueapp: false
30
42
 
31
- Edit `config/config.yml` to choose which reminder app you'd like to use.
43
+ The first time you run `extracare2of` you will be prompted for a username and password. The session will then be serialized and stored in `~/.extracare2of/config/session.yml`. Your password is not saved in plaintext. You will then be able to use this without having to log in again.
32
44
 
33
45
  ## Todo
34
46
 
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
- require_relative '../lib/extracare2of.rb'
4
- username = ARGV[0]
5
- password = ARGV[1]
6
- runner = ExtraCare2OF::Runner.new(username: username, password: password)
7
- runner.run
3
+ require 'extracare2of'
4
+ runner = Extracare2of::Runner.new
5
+
6
+ if ARGV[0] == "init"
7
+ runner.init
8
+ else
9
+ runner.run
10
+ end
Binary file
@@ -5,7 +5,7 @@ require 'extracare2of/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "extracare2of"
8
- spec.version = ExtraCare2OF::VERSION
8
+ spec.version = Extracare2of::VERSION
9
9
  spec.authors = ["Nick Prokesch"]
10
10
  spec.email = ["nick@prokes.ch"]
11
11
  spec.summary = %q{send CVS ExtraCare coupon reminders to OmniFocus}
@@ -1,23 +1,42 @@
1
- module ExtraCare2OF
1
+ require 'highline/import'
2
+
3
+ module Extracare2of
2
4
  class Authentication
3
5
  attr_reader :hash
4
6
 
5
- def initialize(args)
6
- @username = args[:username]
7
- @password = args[:password]
8
- @agent = Mechanize.new
7
+ def initialize(*)
8
+ load_session if session_exists?
9
+ authenticate unless session_exists?
9
10
  @hash = Hash.new
10
11
  end
11
12
 
13
+ def session_exists?
14
+ File.exist?("#{ENV['HOME']}/.extracare2of/session.yml")
15
+ end
16
+
17
+ def load_session
18
+ session_file = open("#{ENV['HOME']}/.extracare2of/session.yml")
19
+ @agent = Mechanize.new do |a|
20
+ a.cookie_jar = YAML.load(session_file)
21
+ end
22
+ end
23
+
24
+ def authenticate
25
+ @agent = Mechanize.new
26
+ login
27
+ open("#{ENV['HOME']}/.extracare2of/session.yml", 'w') { |f|
28
+ f.puts @agent.cookie_jar.to_yaml
29
+ }
30
+ end
31
+
12
32
  def login
13
33
  page = @agent.get("https://m.cvs.com/mt/www.cvs.com/account/login.jsp")
14
34
  form = page.forms.first
15
- form['/atg/userprofiling/ProfileFormHandler.value.login'] = @username
16
- form['/atg/userprofiling/ProfileFormHandler.value.password'] = @password
35
+ form['/atg/userprofiling/ProfileFormHandler.value.login'] = ask("username: ")
36
+ form['/atg/userprofiling/ProfileFormHandler.value.password'] = ask("password: ")
17
37
  page = form.submit
18
38
  @page = page
19
39
  sleep 3
20
- # puts page.parser.xpath("//body").to_html
21
40
  end
22
41
 
23
42
  def request(link, request_id)
@@ -1,42 +1,28 @@
1
1
  require 'sqlite3'
2
2
 
3
- module ExtraCare2OF
3
+ module Extracare2of
4
4
  class Database
5
5
  attr_accessor :add_user
6
6
  attr_reader :add_user
7
7
 
8
- def initialize(args)
9
- @handle = args[ :username]
10
- open
11
- create_tables
12
- tasks
8
+ def initialize
9
+ @handle = `whoami`
10
+ db_path = "#{ENV['HOME']}/.extracare2of/db/coupons.db"
11
+ create_db unless File.exist?(db_path)
12
+ @db = SQLite3::Database.new( db_path )
13
13
  end
14
14
 
15
- def tasks
16
- begin
17
- # @db.execute("alter table matches add column emailed integer")
18
- rescue
19
- end
20
- end
21
-
22
- def create_tables
23
- begin
24
- @db.execute("CREATE TABLE coupons(
15
+ def create_db
16
+ `mkdir -p ~/.extracare2of/db`
17
+ `mkdir -p ~/.extracare2of/config`
18
+ `touch ~/.extracare2of/db/coupons.db`
19
+ @db.execute("CREATE TABLE coupons(
25
20
  id integer,
26
21
  name text,
27
22
  due_date integer,
28
23
  start_date text,
29
24
  handle text,
30
- PRIMARY KEY(id)
31
- )
32
- ")
33
- rescue
34
- end
35
- end
36
-
37
-
38
- def open
39
- @db = SQLite3::Database.new( "./db/coupons.db" )
25
+ PRIMARY KEY(id))")
40
26
  end
41
27
 
42
28
  def close
@@ -44,18 +30,20 @@ module ExtraCare2OF
44
30
  end
45
31
 
46
32
  def add_coupon(args)
47
-
48
33
  name = args[:name].to_s
49
34
  due_date = args[:due_date].to_s
50
35
  start_date = args[:start_date].to_s
51
- unless coupon_exists?(name)
52
- # begin
53
- @db.execute("insert into coupons(name, due_date, start_date, handle) values (?,?,?,?)", name, due_date, start_date, @handle)
54
- end
36
+ return false if coupon_exists?(name)
37
+ @db.execute(
38
+ "insert into coupons(
39
+ name, due_date, start_date, handle
40
+ ) values (?,?,?,?)",
41
+ name, due_date, start_date, @handle
42
+ )
55
43
  end
56
44
 
57
45
  def coupon_exists?(name)
58
- temp = @db.execute( "select 1 where exists(
46
+ @db.execute( "select 1 where exists(
59
47
  select 1
60
48
  from coupons
61
49
  where name = ?
@@ -1,18 +1,19 @@
1
1
 
2
- module ExtraCare2OF
2
+ module Extracare2of
3
3
  class Runner
4
4
 
5
- def initialize(args)
6
- @username = args[:username]
7
- @password = args[:password]
8
- @db = ExtraCare2OF::Database.new(username: @username)
9
- @browser = ExtraCare2OF::Authentication.new(username: @username, password: @password)
5
+ def initialize(*)
6
+ @db = Extracare2of::Database.new
7
+ @browser = Extracare2of::Authentication.new
10
8
  @settings = Settings.new
11
- @browser.login
12
9
  @count = 0
13
10
  # p @rewards_source
14
11
  end
15
12
 
13
+ def init
14
+ @browser.authenticate
15
+ end
16
+
16
17
  def async_response(url)
17
18
  request_id = Time.now.to_i
18
19
  @browser.request(url, request_id)
@@ -37,7 +38,7 @@ module ExtraCare2OF
37
38
  due_date = deal[1]
38
39
  note = deal[2]
39
40
  # defer_date = deal[3]
40
- @deals_array.push({:name => name,:due_date => parse_date(due_date), :defer_date => Time.now, :note => note})
41
+ @deals_array.push({name: name,due_date: parse_date(due_date), defer_date: Time.now, note: note})
41
42
  end
42
43
  @deals_array
43
44
  end
@@ -63,7 +64,7 @@ module ExtraCare2OF
63
64
  days = (60 * 60 * 24 * $1.to_i)
64
65
  newdate = Time.now + days
65
66
  else
66
- newdate = Chronic.parse(datestring, {:context => :future, :ambiguous_time_range => 8})
67
+ newdate = Chronic.parse(datestring, {context: :future, ambiguous_time_range: 8})
67
68
  end
68
69
  # parsed = newdate.strftime('%D %l:%M%p').gsub(/\s+/,' ');
69
70
  # return parsed =~ /1969/ ? false : parsed
@@ -72,19 +73,18 @@ module ExtraCare2OF
72
73
 
73
74
  def process_coupon(coupon)
74
75
  # puts " - Sending #{get_coupons.size} tasks to OF"
75
- unless @db.coupon_exists?(coupon[:name])
76
- @db.add_coupon(name: coupon[:name], due_date: coupon[:due_date], defer_date: coupon[:defer_date])
77
- puts "----"
78
- puts " Title: #{coupon[:name]}"
79
- puts " - Due Date: #{coupon[:due_date]}"
80
- puts " - Start Date: #{coupon[:defer_date]}"
81
- puts " - Note: #{coupon[:note]}"
82
- CreateTask::OmniFocus.new(coupon.to_hash) if @settings.use_omnifocus
83
- CreateTask::Reminders.new(coupon.to_hash) if @settings.use_reminders
84
- CreateTask::Things.new(coupon.to_hash) if @settings.use_things
85
- CreateTask::DueApp.new(coupon.to_hash) if @settings.use_dueapp
86
- # Services::Reminders.new(coupon.to_hash)
87
- end
76
+ return false if @db.coupon_exists?(coupon[:name])
77
+ @db.add_coupon(name: coupon[:name], due_date: coupon[:due_date], defer_date: coupon[:defer_date])
78
+ puts "----"
79
+ puts " Title: #{coupon[:name]}"
80
+ puts " - Due Date: #{coupon[:due_date]}"
81
+ puts " - Start Date: #{coupon[:defer_date]}"
82
+ puts " - Note: #{coupon[:note]}"
83
+ CreateTask::OmniFocus.new(coupon.to_hash) if @settings.use_omnifocus
84
+ CreateTask::Reminders.new(coupon.to_hash) if @settings.use_reminders
85
+ CreateTask::Things.new(coupon.to_hash) if @settings.use_things
86
+ CreateTask::DueApp.new(coupon.to_hash) if @settings.use_dueapp
87
+ # Services::Reminders.new(coupon.to_hash)
88
88
  end
89
89
 
90
90
 
@@ -97,10 +97,6 @@ module ExtraCare2OF
97
97
  else
98
98
  puts "No new coupons found."
99
99
  end
100
- # puts "Sending extra bucks to card"
101
- # send_bucks_to_card
102
- # puts "Done"
103
- # exit
104
100
  end
105
101
 
106
102
  end
@@ -1,9 +1,9 @@
1
- module ExtraCare2OF
1
+ module Extracare2of
2
2
  class Settings
3
3
  attr_reader :debug, :use_omnifocus, :use_reminders, :use_things, :use_dueapp
4
4
 
5
5
  def initialize
6
- @filename = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "config.yml"))
6
+ @filename = "#{ENV['HOME']}/.extracare2of/config/config.yml"
7
7
  unless File.exists?(@filename)
8
8
  config = {services: {
9
9
  :use_omnifocus => true,
@@ -1,3 +1,3 @@
1
- module ExtraCare2OF
2
- ExtraCare2OF::VERSION = 0.2
1
+ module Extracare2of
2
+ VERSION = "0.3"
3
3
  end
@@ -6,8 +6,8 @@ require 'chronic'
6
6
  require 'mechanize'
7
7
  require 'open-uri'
8
8
 
9
- module ExtraCare2OF
10
- Dir[File.dirname(__FILE__) + '/extracare2of/*.rb'].each do |file|
9
+ module Extracare2of
10
+ Dir[File.dirname(__FILE__) + '/extracare2of/*.rb'].each do |file|
11
11
  require file
12
12
  end
13
- end
13
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extracare2of
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Prokesch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-19 00:00:00.000000000 Z
11
+ date: 2015-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize
@@ -108,8 +108,8 @@ files:
108
108
  - Gemfile
109
109
  - README.md
110
110
  - bin/extracare2of
111
- - config/config.yml
112
111
  - db/coupons.db
112
+ - extracare2of-0.2.gem
113
113
  - extracare2of.gemspec
114
114
  - lib/ExtraCare2OF/authentication.rb
115
115
  - lib/ExtraCare2OF/database.rb
@@ -1,6 +0,0 @@
1
- ---
2
- :services:
3
- :use_omnifocus: true
4
- :use_reminders: false
5
- :use_things: false
6
- :use_dueapp: false