pluto-models 1.5.6 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a0663eac6b904175fa19f44ef8e8cab03ace783
4
- data.tar.gz: 9808033aa822c1130b10c2ad0c08022c60010c7f
3
+ metadata.gz: 9ad742c8fd3f916716ace3acb90d1c1a7371b77e
4
+ data.tar.gz: fc7a5f6e1b85585b9efb2c34848b04274f80f528
5
5
  SHA512:
6
- metadata.gz: 904c17ecd34ca841c3f82b9943f976703225ff05e60bb77e2f189a0fc4c6bc4f8582cd639b48a70fad576057016643c373ffc0174a0815695b8b512320732083
7
- data.tar.gz: 248aff5771ae6f72fdd94c05b64ab4b209c493ae4fc24e0dc35c469520392f07377daab7fa1bb1edc08104faa031f1fcd0da114e8d00ec878718961de48b00df
6
+ metadata.gz: 17db570f9d9987f8aa6fdc5addeca4eebad1d4a9aeef59b244a2dd8c7e7c25f3bf13018290b300583ea50c08d069ea591894de8367ad441e3907a0c679cdf233
7
+ data.tar.gz: 870555443a637ee053c2eeb164998f35f8007cce25930c948bae3615f9d7948fcd6712a9b0a12459f369b97ba45a8ef2f1e93bc155586aa323586d78a949a8a3
data/Rakefile CHANGED
@@ -18,11 +18,12 @@ Hoe.spec 'pluto-models' do
18
18
  self.history_file = 'CHANGELOG.md'
19
19
 
20
20
  self.extra_deps = [
21
- ['props', '>= 1.2.0'],
22
- ['logutils', '>= 0.6.1'],
23
- ['feedparser', '>= 2.1.2'],
24
- ['feedfilter', '>= 1.1.1'],
25
- ['textutils', '>= 1.4.0'],
21
+ ['props', '>= 1.2.0'],
22
+ ['logutils', '>= 0.6.1'],
23
+ ['feedparser', '>= 2.1.2'],
24
+ ['feedfilter', '>= 1.1.1'],
25
+ ['date-formatter', '>= 0.1.1'],
26
+ ['textutils', '>= 1.4.0'],
26
27
  ['activerecord'],
27
28
  ['logutils-activerecord', '>= 0.2.1'],
28
29
  ['props-activerecord', '>= 0.2.0'],
@@ -8,6 +8,7 @@ require 'uri'
8
8
  require 'pp'
9
9
  require 'fileutils'
10
10
  require 'date'
11
+ require 'time'
11
12
  require 'digest/md5'
12
13
 
13
14
  require 'logger' # Note: use for ActiveRecord::Base.logger = Logger.new( STDOUT ) for now
@@ -22,6 +23,7 @@ require 'logutils'
22
23
  require 'textutils'
23
24
  require 'feedparser'
24
25
  require 'feedfilter'
26
+ require 'date/formatter'
25
27
 
26
28
 
27
29
  ## add more activerecords addons/utils
@@ -110,7 +112,7 @@ module Pluto
110
112
  #########################################
111
113
  ## let's put test configuration in its own namespace / module
112
114
  class Test ## todo/check: works with module too? use a module - why? why not?
113
-
115
+
114
116
  ####
115
117
  # todo/fix: find a better way to configure shared test datasets - why? why not?
116
118
  # note: use one-up (..) directory for now as default - why? why not?
@@ -41,7 +41,7 @@ class Feed < ActiveRecord::Base
41
41
  ##################################
42
42
  # attribute reader aliases
43
43
  #
44
- # note: CANNOT use alias_method :name, :title
44
+ # note: CANNOT use alias_method :name, :title
45
45
  # will NOT work for non-existing/on-demand-generated methods in activerecord
46
46
  #
47
47
  # use rails alias_attribute :new, :old (incl. reader/predicate/writer)
@@ -60,7 +60,7 @@ class Feed < ActiveRecord::Base
60
60
  alias_attr_reader :author_email, :email # alias for email
61
61
  alias_attr_reader :author_email, :email # alias(2) for email
62
62
 
63
-
63
+
64
64
  #################
65
65
  ## attributes with fallbacks or (auto-)backups - use feed.data.<attribute> for "raw" / "original" access
66
66
  def url() read_attribute_w_fallbacks( :url, :auto_url ); end
@@ -70,37 +70,58 @@ class Feed < ActiveRecord::Base
70
70
  def url?() url.present?; end
71
71
  def title?() title.present?; end
72
72
  def feed_url?() feed_url.present?; end
73
-
73
+
74
74
  ## note:
75
75
  ## only use fallback for updated, that is, updated (or published)
76
- ## do NOT use fallback for published / created -- why? why not?
76
+ ## ~~do NOT use fallback for published / created -- why? why not?~~
77
77
  ## add items_last_updated to updated as last fall back - why? why not?
78
- def updated() read_attribute_w_fallbacks( :updated, :published ); end
78
+ def updated() read_attribute_w_fallbacks( :updated, :published ); end
79
+ def published() read_attribute_w_fallbacks( :published, :updated, ); end
80
+
79
81
  def updated?() updated.present?; end
80
-
82
+ def published?() published.present?; end
83
+
84
+ #############
85
+ # add convenience date attribute helpers / readers
86
+ # - what to return if date is nil? - return nil or empty string or 'n/a' or '?' - why? why not?
87
+ #
88
+ # date
89
+ # date_iso | date_iso8601
90
+ # date_822 | date_rfc2822 | date_rfc822
91
+
92
+ def date() updated; end
93
+
94
+ def date_iso() date ? date.iso8601 : ''; end
95
+ alias_method :date_iso8601, :date_iso
96
+
97
+ def date_822() date ? date.rfc822 : ''; end
98
+ alias_method :date_rfc2822, :date_822
99
+ alias_method :date_rfc822, :date_822
100
+
101
+
81
102
  ## "raw" access via data "proxy" helper
82
103
  ## e.g. use feed.data.updated
83
104
  ## feed.data.updated? etc.
84
105
  class Data
85
106
  def initialize( feed ) @feed = feed; end
86
-
107
+
87
108
  def url() @feed.read_attribute( :url ); end # "regular" url incl. auto_url fallback / (auto-)backup
88
109
  def title() @feed.read_attribute( :title ); end
89
110
  def feed_url() @feed.read_attribute( :feed_url ); end
90
111
  def url?() url.present?; end
91
112
  def title?() title.present?; end
92
113
  def feed_url?() feed_url.present?; end
93
-
114
+
94
115
  def updated() @feed.read_attribute(:updated); end # "regular" updated incl. published fallback
95
- def published() @feed.read_attribute(:published); end
116
+ def published() @feed.read_attribute(:published); end # "regular" published incl. updated fallback
96
117
  def updated?() updated.present?; end
97
118
  def published?() published.present?; end
98
119
  end # class Data
99
120
  ## use a different name for data - why? why not?
100
121
  ## e.g. inner, internal, readonly or r, raw, table, direct, or ???
101
- def data() @data ||= Data.new( self ); end
102
-
103
-
122
+ def data() @data ||= Data.new( self ); end
123
+
124
+
104
125
  def deep_update_from_struct!( data )
105
126
 
106
127
  logger = LogUtils::Logger.root
@@ -207,8 +228,8 @@ class Feed < ActiveRecord::Base
207
228
  published: data.published,
208
229
  summary: data.summary,
209
230
  generator: data.generator.to_s, ## note: use single-line/string generator stringified -- might return null (if no data)
210
-
211
- ## note: always auto-update auto_* fields for now
231
+
232
+ ## note: always auto-update auto_* fields for now
212
233
  auto_title: data.title,
213
234
  auto_url: data.url,
214
235
  auto_feed_url: data.feed_url,
@@ -42,25 +42,47 @@ class Item < ActiveRecord::Base
42
42
 
43
43
  ## note:
44
44
  ## only use fallback for updated, that is, updated (or published)
45
- ## do NOT use fallback for published / created -- why? why not?
46
- def updated() read_attribute_w_fallbacks( :updated, :published ); end
47
- def updated?() updated.present?; end
45
+ ## ~~do NOT use fallback for published / created -- why? why not?~~
46
+ def updated() read_attribute_w_fallbacks( :updated, :published ); end
47
+ def published() read_attribute_w_fallbacks( :published, :updated ); end
48
+
49
+ def updated?() updated.present?; end
50
+ def published?() published.present?; end
51
+
52
+ #############
53
+ # add convenience date attribute helpers / readers
54
+ # - what to return if date is nil? - return nil or empty string or 'n/a' or '?' - why? why not?
55
+ #
56
+ # date
57
+ # date_iso | date_iso8601
58
+ # date_822 | date_rfc2822 | date_rfc822
59
+
60
+ def date() updated; end
61
+
62
+ def date_iso() date ? date.iso8601 : ''; end
63
+ alias_method :date_iso8601, :date_iso
64
+
65
+ def date_822() date ? date.rfc822 : ''; end
66
+ alias_method :date_rfc2822, :date_822
67
+ alias_method :date_rfc822, :date_822
68
+
48
69
 
49
70
  ## "raw" access via data "proxy" helper
50
71
  ## e.g. use item.data.updated
51
72
  ## item.data.updated? etc.
52
73
  class Data
53
74
  def initialize( feed ) @item = item; end
54
-
75
+
55
76
  def updated() @item.read_attribute(:updated); end # "regular" updated incl. published fallback
56
- def published() @item.read_attribute(:published); end
77
+ def published() @item.read_attribute(:published); end
78
+
57
79
  def updated?() updated.present?; end
58
80
  def published?() published.present?; end
59
81
  end # class Data
60
82
  ## use a different name for data - why? why not?
61
83
  ## e.g. inner, internal, readonly or r, raw, table, direct, or ???
62
- def data() @data ||= Data.new( self ); end
63
-
84
+ def data() @data ||= Data.new( self ); end
85
+
64
86
 
65
87
  def update_from_struct!( data )
66
88
 
@@ -3,8 +3,8 @@
3
3
  module Pluto
4
4
 
5
5
  MAJOR = 1
6
- MINOR = 5
7
- PATCH = 6
6
+ MINOR = 6
7
+ PATCH = 0
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
10
10
  def self.version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pluto-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.6
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-07 00:00:00.000000000 Z
11
+ date: 2020-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: props
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.1.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: date-formatter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.1.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.1.1
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: textutils
71
85
  requirement: !ruby/object:Gem::Requirement